繁体   English   中英

使用SendMessage()最小化所有窗口,但需要比Thread.Sleep()更有效的方法来等待,直到显示旧桌面为止

[英]Using SendMessage() to minimize all windows, but need a more efficient way than Thread.Sleep() to wait until the legacy desktop is showing

在我的C#控制台应用程序中,我使用SendMessage()来最小化所有窗口,从而有效地显示Windows 8 Legacy Desktop。 这很好用,但是我必须先使用Thread.Sleep(1000)才能等待Legacy Desktop实际显示,然后再尝试执行其他操作。

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;

我不确定这对您是否会更好,但是也许值得一试...

(1)将对“ Shell32”的引用添加到您的项目中(通过添加引用-> COM-> Microsoft Shell控件和自动化)。

(2)将引用的“嵌入式互操作类型”设置为false

(3)使用以下代码最小化所有窗口:

dynamic shell = new Shell32.ShellClass();
shell.MinimizeAll();

但是,我怀疑这只是执行SendMessage()的另一种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM