在Windows8中从开始菜单切换到桌面

Switch from start menu to desktop in Windows 8

本文关键字:桌面 菜单 开始 Windows8      更新时间:2023-10-16

有没有一种方法可以通过编程从开始菜单切换到桌面。例如,如果您有一个在用户登录后运行的服务,并且您希望该服务在用户登录时切换到桌面视图?我似乎找不到解决办法。我试着用虚拟键按下windows键,但没用?

我真的不确定你面临的问题到底是什么。"从开始菜单以编程方式切换到桌面"可以用几种不同的方式来解释。

然而,由于你说"你希望该服务切换到桌面"我尝试了虚拟按键按下windows键",我认为你试图通过服务与桌面上的windows进行通信,但这是不可能的。这是一种安全功能。如果打开任务管理器并查看->选择列->会话ID,您会注意到服务在会话0中运行,而"桌面"应用程序在登录用户的会话中运行。应用程序无法在会话之间通过Windows消息进行通信。

有一种解决方法,尽管需要比简单地发送虚拟按键更多的努力。解决方法是让您的服务在用户会话中创建一个进程,然后为您执行任务(例如,您的虚拟按键方法在该应用程序中可以工作)。

您需要使用的API调用是:

CreateProcessAsUser

WTSGetActiveConsoleSessionId

WTSQueryUserToken

DuplicateTokenEx

编辑

如果你想控制开始菜单,也没有简单的方法。如果你必须这样做,我建议你使用一个名为Spy++的工具(附带visual studio-请参阅Microsoft visual studio x.x\Common7\Tools,或者可以下载)。使用"查找窗口"功能可以在按下"Windows开始"按钮时查看发送到该按钮的消息,然后您可以查看要向该按钮发送的消息,以便以您需要的方式控制它。

例如,您可能会看到发送到启动按钮的WM_LBUTTONDOWN消息。切换开始菜单。然后,您可以使用FindWindow,也许与GetDesktopWindow一起使用来获得启动按钮的句柄,然后发送您想要用SendMessage控制它的消息。您可能还想通过使用相同的过程获取开始菜单的句柄并使用IsWindowVisible来检查是否显示了开始菜单。