8

私の C# コンソール アプリケーションでは、SendMessage()すべてのウィンドウを最小化して、効果的に Windows 8 レガシー デスクトップを表示しています。これはうまく機能しますがThread.Sleep(1000)、レガシーデスクトップが実際に表示されるのを待ってから、他のことをする必要があります。

IntPtr lHwnd = FindWindow("Shell_TrayWnd", null);
SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero);
Thread.Sleep(1000);

Thread.Sleep()続行する前に、従来のデスクトップが表示されていることを検出するより効率的な方法に置き換えたいと思っています。

何か案は?

編集: Interop ラッパーと定数は次のとおりです。それが役立つ場合に備えて..

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true)]
static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);

const int WM_COMMAND = 0x111;
const int MIN_ALL = 419;
const int MIN_ALL_UNDO = 416;
4

1 に答える 1