在我的 C# 控制台应用程序中,我使用SendMessage()
最小化所有窗口,有效地显示 Windows 8 旧版桌面。这很好用,但Thread.Sleep(1000)
在我尝试做其他事情之前,我必须使用 a 来等待 Legacy Desktop 实际显示。
IntPtr lHwnd = FindWindow("Shell_TrayWnd", null);
SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero);
Thread.Sleep(1000);
我真的很想换Thread.Sleep()
用一种更有效的方法来替换,以在继续之前检测到 Legacy Desktop 正在显示。
有任何想法吗?
编辑:这是互操作包装器和常量。以防万一它有帮助..
[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;