如何创建桌面图标/按钮以启动用户 Windows 设置了选项的屏幕保护程序
How to create desktop icon / button to start users Windows screensaver with options set
我需要一个可以放在 Windows 8 中的用户 desktop/process 栏上的按钮(任何子菜单都是不可接受的),它将启动用户屏幕保护程序(具有密码保护、自定义参数等) ).例如,这可以是批处理脚本的快捷方式。
我找到的解决方案的一些建议:
从 /system32 启动屏幕保护程序:不起作用
- 启动您选择的特定屏幕保护程序,而不是用户屏幕保护程序。
- 不带参数(即错误text/pic且无密码保护)。
WIN + L: 不起作用。
- 它不是用户桌面上的按钮,而且 SendKeys 似乎无法执行 WIN 键,因此无法使用批处理脚本。
- 它转到登录屏幕,而不是屏幕保护程序。
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 感到恐惧的用户。如果你建议记住热键组合,或通过多个菜单(如开始 -> 用户名 -> 锁定),他们会嘲笑你,后者也是一个时间问题,因为他们可能不得不快速离开计算机(因此需要密码)保护)。
编辑** C++ 代码已修改以反映反馈。 Sendmessage 更改为 Postmessage,不希望像这样在 codesnip 中进行阻塞调用(但不明白为什么它应该在 window 已知时在 DefWindowProc 处抛出)。找到符号名称(http://wiki.winehq.org/List_Of_Windows_Messages,不能post更多链接,MSDN在WM_SYSCOMMAND下有第二个参数),WinMain是避免控制台弹出的Visual Studio东西,有些人对此感到担忧。
运行 用户的屏幕保护程序没有内置批处理命令(没有使用第 3 方解决方案来促进它)。您提供的代码是启动用户屏幕保护程序的正确解决方案。但是,不要像您展示的那样使用幻数文字。这些值有可用的定义,使用它们:
#include <windows.h>
int main(void)
{
SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
return 0;
}
将您的代码编译成 .exe
文件,将其安装在用户 PC 的某处,并在用户的桌面上创建指向它的快捷方式。
我需要一个可以放在 Windows 8 中的用户 desktop/process 栏上的按钮(任何子菜单都是不可接受的),它将启动用户屏幕保护程序(具有密码保护、自定义参数等) ).例如,这可以是批处理脚本的快捷方式。
我找到的解决方案的一些建议:
从 /system32 启动屏幕保护程序:不起作用
- 启动您选择的特定屏幕保护程序,而不是用户屏幕保护程序。
- 不带参数(即错误text/pic且无密码保护)。
WIN + L: 不起作用。
- 它不是用户桌面上的按钮,而且 SendKeys 似乎无法执行 WIN 键,因此无法使用批处理脚本。
- 它转到登录屏幕,而不是屏幕保护程序。
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 感到恐惧的用户。如果你建议记住热键组合,或通过多个菜单(如开始 -> 用户名 -> 锁定),他们会嘲笑你,后者也是一个时间问题,因为他们可能不得不快速离开计算机(因此需要密码)保护)。
编辑** C++ 代码已修改以反映反馈。 Sendmessage 更改为 Postmessage,不希望像这样在 codesnip 中进行阻塞调用(但不明白为什么它应该在 window 已知时在 DefWindowProc 处抛出)。找到符号名称(http://wiki.winehq.org/List_Of_Windows_Messages,不能post更多链接,MSDN在WM_SYSCOMMAND下有第二个参数),WinMain是避免控制台弹出的Visual Studio东西,有些人对此感到担忧。
运行 用户的屏幕保护程序没有内置批处理命令(没有使用第 3 方解决方案来促进它)。您提供的代码是启动用户屏幕保护程序的正确解决方案。但是,不要像您展示的那样使用幻数文字。这些值有可用的定义,使用它们:
#include <windows.h>
int main(void)
{
SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
return 0;
}
将您的代码编译成 .exe
文件,将其安装在用户 PC 的某处,并在用户的桌面上创建指向它的快捷方式。