前提・実現したいこと
現在このようなアプリケーションを開発中です。
Windowを任意のキーボードショートカットで最前面に固定をする。
逆にWindowが最前面に固定されていた場合は最前面で固定を解除する。
発生している問題
そのなかで、Windowが最前面に固定されているのかの情報を取得する方法がわかりません。
Windows APIのどの関数を叩けば、調べられるのかを教えて欲しいです。
現在、SetWindowPos関数を叩けば最前面に固定と解除が出来る事と、自分が最前面に固定したいWindowのハンドルの取得方法が、わかっています。
該当のソースコード
WIndowAPIにアクセスするクラス
csharp
1 public static class WindowManager 2 { 3 private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); 4 private static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2); 5 private const int SWP_SHOWWINDOW = 0x0040; 6 private const uint SWP_NOSIZE = 0x0001; 7 private const uint SWP_NOMOVE = 0x0002; 8 9 // (x, y), (cx, cy)を無視するようにする. 10 private const uint TOPMOST_FLAGS = (SWP_NOSIZE | SWP_NOMOVE); 11 private const uint NOTOPMOST_FLAGS = (SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); 12 13 public static bool SetAtTheFront(IntPtr handle) 14 => NativeMethods.SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); 15 16 public static bool UnSetAtTheFront(IntPtr handle) 17 => NativeMethods.SetWindowPos(handle, HWND_NOTOPMOST, 0, 0, 0, 0, NOTOPMOST_FLAGS); 18 19 public static IntPtr GetForegroundWindow() => NativeMethods.GetForegroundWindow(); 20 21 private static class NativeMethods 22 { 23 [DllImport("user32.dll")] 24 public static extern IntPtr GetForegroundWindow(); 25 26 [DllImport("user32.dll")] 27 [return: MarshalAs(UnmanagedType.Bool)] 28 public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint flags); 29 } 30 } 31
最終的に書きたいコード
csharp
1 IntPtr handle = WindowManager.GetForegroundWindow(); 2 var isAtTheTop = Windowが最前面に固定されているかを調べる関数(handle) 3 if (isAtTheTop) 4 { 5 WindowManager.UnSetAtTheFront(handle); 6 } 7 else 8 { 9 WindowManager.SetAtTheFront(handle); 10 }
試したこと
GetWindowInfo関数のリファレンスを読む - 関係しそうなものは見つけられず
GetWindowRect関数のリファレンスを読む - 関係しそうなものは見つけられず
GetWindowPlacement関数のリファレンスを読む - 関係しそうなものは見つけられず
自分が見逃しているだけかもしれませんが、全然わかりません。
助けて頂けないでしょうか?
補足情報(FW/ツールのバージョンなど)
- Visual Studio 2019
- C# 9
- .NET 5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。