MoveWindow API在Vista上运行不正常

时间:2010-05-09 21:14:33

标签: c# windows-vista

我在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吗?我应该选择哪种替代方案?

1 个答案:

答案 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