如何设置其他程序的任何可见窗口?

时间:2012-06-16 01:15:52

标签: c# windows

抓住可见窗口的手柄并将其设置为保持在顶部需要什么?

例如,能够将某些其他应用程序的onTop属性(比如记事本)设置在最顶层。

Win 7或8有一个简单的方法吗?如果可能的话,不要用Windows API来寻找低级技巧。

谢谢

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式为窗口处理设置一个窗口:

[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
const UInt32 SWP_SHOWWINDOW = 0x0040;

// Call this way:
SetWindowPos(theWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);

获取适当窗口句柄的方法因应用程序而异。您可以通过Process.MainWindowHandle获取,但有时需要在Windows API中使用EnumWindows,如果它不是"主窗口"。

使用上述内容,例如,对于记事本,您可以执行以下操作:

var processes = Process.GetProcessesByName("notepad");
SetWindowPos(processes.First().MainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);

答案 1 :(得分:0)

HWND_TOPMOST会永久地打开窗口(直到某个其他窗口被标记为最顶层),但是如果您希望窗口只是弹出到前面,请尝试:

static readonly IntPtr HWND_TOP = new IntPtr(0);

相关问题