我在Vista上有一个应用程序,它循环遍历所有进程并找到相关的主窗口,以便移动和调整它们的大小。
问题在于某些窗口会被移动并调整大小,而有些则不会。此外,甚至看起来移动和调整大小的窗口不会根据MoveWindow函数调用移动和调整大小,因为它们被调整为标题栏并且所有窗口都在同一条线上(相同的y坐标)。
以下是示例代码:
IntPtr handle;
Process[] processList = Process.GetProcesses();
int i = 0;
foreach (Process process in processList)
{
handle = process.MainWindowHandle;
if (handle != IntPtr.Zero) //If the process has window then move and resize it.
{
bool moveResult = MoveWindow(handle, i * 50, i * 50, 500, 500, true);
i++;
}
}
这是因为Vista吗?我应该选择哪种替代方案?
答案 0 :(得分:1)
似乎MoveWindow函数对最小化窗口没有任何影响。所以,在MoveWindow之前我使用了ShowWindow:
ShowWindow(handle,3); // ShowMaximized = 3
这有帮助!
我使用了SetWindowPos函数,但有关此函数的MSDN文档说在Vista中“hwnd和窗口管理器操作仅在会话内有效且跨会话尝试操作hwnd将失败”并且该语句表明问题是由于Vista中。
http://msdn.microsoft.com/en-us/library/ms633545%28v=VS.85%29.aspx