您的位置:首页 > 其它

WPF窗口如何获得一个句柄?

2012-12-15 22:38 405 查看
1) 在窗体事件内获得句柄

private
void
Window_Loaded(object sender,
RoutedEventArgs e)

{

WindowInteropHelper wndHelper
= new
WindowInteropHelper(this);

IntPtr wpfHwnd=wndHelper.Handle;

}

2.修改窗体属性:窗体风格

private
void
Window_Loaded(object sender,
RoutedEventArgs e)

{

WindowInteropHelper wndHelper
= new
WindowInteropHelper(this);

int exStyle
= (int)GetWindowLong(wndHelper.Handle,
(int)GetWindowLongFields.GWL_EXSTYLE);

exStyle |=
(int)ExtendedWindowStyles.WS_EX_TOOLWINDOW;

SetWindowLong(wndHelper.Handle,
(int)GetWindowLongFields.GWL_EXSTYLE,
(IntPtr)exStyle);

}

函数定义:

#region Window styles

[Flags]

public
enum
ExtendedWindowStyles

{

// ...

WS_EX_TOOLWINDOW =
0x00000080,

// ...

}

public
enum
GetWindowLongFields

{

// ...

GWL_EXSTYLE = (-20),

// ...

}

[DllImport("user32.dll")]

public
static
extern
IntPtr
GetWindowLong(IntPtr hWnd,
int nIndex);

public
static
IntPtr
SetWindowLong(IntPtr hWnd,
int nIndex,
IntPtr dwNewLong)

{

int error
= 0;

IntPtr result
= IntPtr.Zero;

// Win32 SetWindowLong doesn't clear error on success

SetLastError(0);

if
(IntPtr.Size
== 4)

{

// use SetWindowLong

Int32 tempResult
= IntSetWindowLong(hWnd, nIndex,
IntPtrToInt32(dwNewLong));

error = Marshal.GetLastWin32Error();

result = new
IntPtr(tempResult);

}

else

{

// use SetWindowLongPtr

result = IntSetWindowLongPtr(hWnd,
nIndex, dwNewLong);

error = Marshal.GetLastWin32Error();

}

if
((result ==
IntPtr.Zero)
&& (error
!= 0))

{

throw
new
System.ComponentModel.Win32Exception(error);

}

return result;

}

[DllImport("user32.dll",
EntryPoint
= "SetWindowLongPtr",
SetLastError
= true)]

private
static
extern
IntPtr
IntSetWindowLongPtr(IntPtr hWnd,
int nIndex,
IntPtr dwNewLong);

[DllImport("user32.dll",
EntryPoint
= "SetWindowLong",
SetLastError
= true)]

private
static
extern
Int32
IntSetWindowLong(IntPtr hWnd,
int nIndex,
Int32 dwNewLong);

private
static
int
IntPtrToInt32(IntPtr intPtr)

{

return
unchecked((int)intPtr.ToInt64());

}

[DllImport("kernel32.dll",
EntryPoint
= "SetLastError")]

public
static
extern
void
SetLastError(int dwErrorCode);

#endregion

转载网址:http://stackoverflow.com/questions/357076/best-way-to-hide-a-window-from-the-alt-tab-program-switcher
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: