C#使用win32api设置命令窗体位置时失效
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
调用方式
//Win32ApiTool.MoveWindow(intPtr, 0, 0, 1920, 1080, true);
Win32ApiTool.SetWindowPos(intPtr, (IntPtr)Win32ApiTool.HWND_TOP, 0, 0, s.Width, s.Height, Win32ApiTool.SWP_SHOWWINDOW );
命令窗体的大小生效了 但是位置无效
尝试过
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);
也是这样的
使用下面代码获取位置 确实是离顶部和左边有距离
// 获取置顶窗口位置
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
目前来说资源管理器 浏览器、自己的窗体等等都可以正常使用 就唯独命令窗体无法修改显示位置
已解决 换了下思路
既然可以改变大小说明句柄拿到了
故采取
//先让其忽略大小改变位置 在让其忽略位置改变大小 便可实现位置和大小的改变
Win32ApiTool.SetWindowPos(intPtr, (IntPtr)Win32ApiTool.HWND_TOP, s.X, s.Y, s.Width, s.Height, Win32ApiTool.SWP_SHOWWINDOW | Win32ApiTool.SWP_NOSIZE);
Win32ApiTool.SetWindowPos(intPtr, (IntPtr)Win32ApiTool.HWND_TOP, s.X, s.Y, s.Width, s.Height, Win32ApiTool.SWP_SHOWWINDOW | Win32ApiTool.SWP_NOMOVE);
控制台窗口??
这个比较特殊了,控制台本身没有MainWindowHandle
所以想控制控制台类的,必须先拿到正确的控制台句柄