我需要一个按钮,我可以放在Windows 8中的用户桌面/进程栏上(任何子菜单都是不可接受的),这将启动用户屏幕保护程序(具有密码保护,自定义参数等)。例如,这可以是批处理脚本的快捷方式。
我找到的解决方案的一些建议:
从/ system32启动屏幕保护程序:不起作用
WIN + L :不起作用。
rundll32.exe user32.dll,LockWorkStation :不起作用。
C ++程序:到目前为止,这是我的工作原理。
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int cmdShow)
{
HWND DeskWin = GetDesktopWindow();
Sleep(750);
PostMessage(DeskWin, WM_SYSCOMMAND, SC_SCREENSAVE, NULL);
return 0;
}
我之前从未使用过Windows系统消息,因此对于是否一直有效的任何意见/想法都表示赞赏。
或者,如果某人有一种他们认为更好的方式。
- 需求的原因:IT用户害怕。如果你建议记住一个热键组合,或者通过多个菜单(比如Start - &gt; userName - &gt; Lock),他们会嘲笑你,后者也是一个时间问题,因为他们可能不得不快速离开计算机(因此需要用于密码保护)。
编辑** C ++代码已被修改以反映反馈。 Sendmessage改为Postmessage,不希望在这样的代码区中进行阻塞调用(但是不知道为什么在知道窗口时应该在DefWindowProc上抛出它)。找到符号名称(http://wiki.winehq.org/List_Of_Windows_Messages,不能发布更多链接,MSDN在WM_SYSCOMMAND下有第二个参数),WinMain是一个Visual Studio的东西,可以避免控制台弹出,有些人发现这一点令人震惊。
答案 0 :(得分:0)
没有用于运行用户屏幕保护程序的内置批处理命令(不使用第三方解决方案来促进它)。您提出的代码是启动用户屏幕保护程序的正确解决方案。但是,不要像你所示的那样使用魔法数字文字。这些值有可用的定义,请使用它们:
#include <windows.h>
int main(void)
{
SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
return 0;
}
将您的代码编译成.exe
文件,将其安装在用户的PC上,并在用户桌面上创建快捷方式。