如何使用选项集

时间:2015-12-23 16:59:15

标签: c++ batch-file windows-8

我需要一个按钮,我可以放在Windows 8中的用户桌面/进程栏上(任何子菜单都是不可接受的),这将启动用户屏幕保护程序(具有密码保护,自定义参数等)。例如,这可以是批处理脚本的快捷方式。

我找到的解决方案的一些建议:

从/ system32启动屏幕保护程序:不起作用

  1. 启动您选择的特定屏幕保护程序,而不是用户屏幕保护程序。
  2. 不接受参数(即错误的文字/图片和无密码保护)。
  3. WIN + L :不起作用。

    1. 它不是用户桌面上的按钮,并且SendKeys似乎无法执行WIN键,因此无法使用批处理脚本。
    2. 它会进入登录屏幕,而不是屏幕保护程序。
    3. rundll32.exe user32.dll,LockWorkStation :不起作用。

      1. 它会破坏堆栈 - https://blogs.msdn.microsoft.com/oldnewthing/20040115-00/?p=41043/
      2. 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的东西,可以避免控制台弹出,有些人发现这一点令人震惊。

1 个答案:

答案 0 :(得分:0)

没有用于运行用户屏幕保护程序的内置批处理命令(不使用第三方解决方案来促进它)。您提出的代码是启动用户屏幕保护程序的正确解决方案。但是,不要像你所示的那样使用魔法数字文字。这些值有可用的定义,请使用它们:

#include <windows.h>

int main(void)
{
    SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
    return 0;
}

将您的代码编译成.exe文件,将其安装在用户的PC上,并在用户桌面上创建快捷方式。