在Windows8中从开始菜单切换到桌面
Switch from start menu to desktop in Windows 8
有没有一种方法可以通过编程从开始菜单切换到桌面。例如,如果您有一个在用户登录后运行的服务,并且您希望该服务在用户登录时切换到桌面视图?我似乎找不到解决办法。我试着用虚拟键按下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
来检查是否显示了开始菜单。
- 试图在visual studio上用C++创建一个桌面应用程序
- 无法获取菜单选择以运行函数.C++
- 如何在桌面C++上使用 WinApi 画线
- 桌面中的Qt QMessageBox中心'critical'
- C++ 中的图形菜单
- C++ 程序菜单使用做同时和切换
- Qt QML桌面应用程序自动化测试
- 我正在尝试创建一个菜单,但我的代码一直在循环
- 触发另一个窗口的菜单按钮
- 从子菜单返回后,正确的输入至少进入验证循环一次
- Windows 10 上的 Linphone 桌面
- C++ 我的开关格式中的循环不允许我显示菜单选项或接受输入?
- 如何为我的游戏设置主菜单场景?QT C++
- C++循环菜单时做
- 如何使用opencv和Qt拍摄部分桌面的照片
- 难以从 CImageList 设置菜单项位图
- 如何将我的程序添加到文件和文件夹的macOS右键单击菜单?
- 将项目插入桌面右键单击菜单从外壳扩展
- 在Windows8中从开始菜单切换到桌面
- 点击QSystemTrayIcon会在Mate桌面上弹出一个空的上下文菜单