【发布时间】:2011-12-09 09:33:25
【问题描述】:
如何从我的 C# 程序中更改另一个程序(比如 Skype 的)窗口的大小?
【问题讨论】:
-
如果你把这个问题分成两个(1.如何影响另一个进程的窗口;2.如何改变任何窗口的大小)你应该能够在 Stack Overflow 上找到答案。 PS:如果国外的应用程序打开了几个窗口怎么办?你想操纵哪一个?
如何从我的 C# 程序中更改另一个程序(比如 Skype 的)窗口的大小?
【问题讨论】:
你可以使用MoveWindow(其中hWnd是你要移动的窗口):
[DllImport("user32.dll", SetLastError = true)]
internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
MoveWindow(ApplicationHandle, 600, 600, 600, 600, true);
如果您不知道窗口指针,可以使用FindWindow 功能。
MSDN SetWindowPos(与 MoveWindow 非常相似)也值得一读。
【讨论】:
ApplicationHandle 是什么?这个是哪里来的?
需要获取其他程序的窗口句柄,使用Process.MainWindowHandle或者FindWindow。
有了这个,您可以PInvokeSetWindowPos() 移动、调整大小、更改 Z 顺序或窗口的最小/最大/恢复状态。
【讨论】:
我会使用 Windows Api SetWindowPos
看看这个:Using SetWindowPos in C# to move windows around
当然,首先您应该知道要调整大小的窗口的句柄,这可以通过多种方式完成,例如通过名称获取进程然后获取该进程的 MainWindow 或使用 EnumWindow 或 FindWindow APIs
【讨论】: