写这篇博客的目的,就是防止忘记找不到。
实际项目中使用,测试有效。
调用:
IntPtr CurrentAppHandle = GetForegroundWindow();
HandleRef ParentHandle = new HandleRef(this, CurrentAppHandle);
// 初始化窗口风格
IntPtr Style = GetWindowLongPtr(CurrentAppHandle, GWL_STYLE);
uint tempStyle = (uint)Style.ToInt32() & ~WS_CAPTION & ~WS_SYSMENU & ~WS_SIZEBOX;
WinAPI.SetWindowLongPtr(ParentHandle, GWL_STYLE, new IntPtr(tempStyle));
WindowsAPI:
/// <summary>
/// 检索有关指定窗口的信息。该函数还将以指定的偏移量将值检索到额外的窗口内存中。
/// </summary>
/// <param name="hWnd"></param>
/// <param name="nIndex"></param>
/// <returns></returns>
public static IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex)
{
if (IntPtr.Size == 8)
return GetWindowLongPtr64(hWnd, nIndex);
else
return GetWindowLongPtr32(hWnd, nIndex);
}
[DllImport("user32.dll", EntryPoint = "GetWindowLong")]
private static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, int nIndex);
[DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")]
private static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex);
/// <summary>
/// 这种静态方法是必需的,因为早期操作系统不支持
/// </summary>
/// <param name="hWnd"></param>
/// <param name="nIndex"></param>
/// <param name="dwNewLong"></param>
/// <returns></returns>
public static IntPtr SetWindowLongPtr(HandleRef hWnd, int nIndex, IntPtr dwNewLong)
{
if (IntPtr.Size == 8)
return SetWindowLongPtr64(hWnd, nIndex, dwNewLong);
else
return new IntPtr(SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32()));
}
[DllImport("user32.dll", EntryPoint = "SetWindowLong")]
private static extern int SetWindowLong32(HandleRef hWnd, int nIndex, int dwNewLong);
[DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")]
private static extern IntPtr SetWindowLongPtr64(HandleRef hWnd, int nIndex, IntPtr dwNewLong);
/// <summary>
/// 获取置顶窗口
/// </summary>
/// <returns></returns>
[DllImport("user32", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetForegroundWindow();
参数:
/// <summary>
/// 设置一个新的窗口样式
/// </summary>
public const int GWL_STYLE = -16;
/// <summary>
/// 标题
/// </summary>
public const uint WS_CAPTION = 0x00C00000; /* WS_BORDER | WS_DLGFRAME */
/// <summary>
/// 系统菜单
/// </summary>
public const uint WS_SYSMENU = 0x00080000;
/// <summary>
/// 设置调整窗口大小的厚的结构的窗口。
/// </summary>
public const uint WS_THICKFRAME = 0x00040000;
/// <summary>
/// 创建一个可调边框的窗口,与 WS_THICKFRAME 风格相同
/// </summary>
public const uint WS_SIZEBOX = WS_THICKFRAME;