表示されているウィンドウのハンドルをつかんで、上にとどまるように設定するには何が必要ですか?
たとえば、他のアプリケーション(メモ帳など)のonTopプロパティをtopに設定できるようにします。
Win 7または8でこれを行う簡単な方法はありますか?可能であれば、WindowsAPIを使用した低レベルのトリックを実際に探しているわけではありません。
ありがとうございました
次の方法で、ウィンドウハンドルを指定してウィンドウを最上位にすることができます。
[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を介して取得できる可能性がありEnumWindows
ますが、「メインウィンドウ」でない場合は、 WindowsAPIで使用する必要がある場合があります。
上記を使用して、たとえばメモ帳の場合、次のことができます。
var processes = Process.GetProcessesByName("notepad");
SetWindowPos(processes.First().MainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
HWND_TOPMOST は、ウィンドウを永続的に (他のウィンドウが最上位としてタグ付けされるまで) 配置しますが、ウィンドウを単純に最前面にポップしたい場合は、次を試してください。
static readonly IntPtr HWND_TOP = new IntPtr(0);