【问题标题】:Simulate Control-Alt-Delete key sequence in Vista and XP在 Vista 和 XP 中模拟 Control-Alt-Delete 键序列
【发布时间】:2008-09-23 17:12:07
【问题描述】:

我可以在 Vista 中模拟 C#/C++ 代码 Control+Alt+Delete 序列吗? 何时启用/禁用 UAC? 在 XP 中是如何实现的?

您能否提供一个适用于 Vista 的代码示例?

【问题讨论】:

    标签: windows winapi windows-vista


    【解决方案1】:

    用于模拟安全注意序列 (SAS) 的现有代码(大多数人将其称为 control alt delete 或 ctrl-alt-del)在 Windows Vista 中不再有效。微软似乎提供了一个库来导出一个名为 SimulateSAS() 的函数。它不是公开的,应该通过向 saslib@microsoft.com 发送邮件来请求它。

    similar library 具有以下功能:

    • 无论有无均可使用 用户帐户控制 (UAC)
    • 支持电流、控制台和 任何终端服务器会话
    • 不需要驱动程序
    • 调用应用程序不需要 签署或有特殊的 清单
    • 支持多重编程 语言

    请注意,这个库不是免费的。同时有兴趣的可以联系info@simulatesas.com

    【讨论】:

    • 感谢您链接到我的 SasLibEx,它确实支持模拟 SAS 等等!
    【解决方案2】:

    请使用以下信息,“saslib@microsoft.com”已被弃用,不太可能得到任何回复。以下信息就足够了。

    从 Windows 7 操作系统和随附的软件开发工具包 (SDK) 的公开可用性开始,Vista 应用程序的 SAS 功能将只能通过 Windows SDK 提供。 SASLIB包的email发布支持,saslib将停止使用。

    有关如何下载平台 SDK 的信息,请访问 Microsoft 下载中心页面上的“Windows SDK for Windows 7 and .Net Framework 3.5 SP1”,链接如下: http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&displaylang=en.

    安装此 SDK 后,您会在 redist 目录中找到可再发行的 sas.dll:

    \Program Files\Microsoft SDKs\Windows\v7.0\redist\x86\sas.dll

    \Program Files\Microsoft SDKs\Windows\v7.0\redist\amd64\sas.dll

    \Program Files\Microsoft SDKs\Windows\v7.0\redist\ia64\sas.dll

    【讨论】:

    • 注意:在 Windows 7 和 Windows Server 2008 R2 上,SASLIB 包不是必需的,不应使用。 Windows 7 和 Windows Server 2008 R2 具有可通过 SendSAS 函数调用的内置 SAS 功能。 SendSAS 记录在 MSDN 上的以下位置:msdn.microsoft.com/en-us/library/dd979761(VS.85).aspx。您可能还需要查看以下文档,因为它可能提供您想要的功能来代替 SASLIB: • 使用 Windows Vista 的凭据提供程序创建自定义登录体验:msdn.microsoft.com/en-us/magazine/cc163489.aspx
    【解决方案3】:

    我已将此网址添加为书签,希望对您有所帮助。 http://softltd.wordpress.com/simulate-ctrl-alt-del-in-windows-vista-7-and-server-2008/

    【讨论】:

      【解决方案4】:

      PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG(MOD_ALT | MOD_CONTROL, VK_DELETE));

      你从 user32 dll 获得 PostMessage

      编辑:CodeProject article that has code for it

      编辑:有一些 discussion from VNC 说明为什么这在 Vista 中不起作用以及如何设置 UAC 以允许它。

      【讨论】:

      • 在我修改你之前 :),这篇文章没有提到 vista。它适用于 vista 吗?
      • 否 -- 查看有关 VNC 的文章,了解在启用 UAC 的情况下将 CTRL-ALT-DEL 发送到 Vista 的注意事项。你不能那样做,看来。如果您打算这样做,有多种方法可以调出任务管理器。
      【解决方案5】:

      你只需要从服务进程调用下一个代码

      HDESK desktop = OpenDesktopW(L"Winlogon", 0, TRUE,
          DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | DESKTOP_ENUMERATE | 
          DESKTOP_HOOKCONTROL | DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS |
          DESKTOP_SWITCHDESKTOP | GENERIC_WRITE);
      int result = SetThreadDesktop(desktop);
      if (result)
      {
          HMODULE sasdll = LoadLibraryA("sas.dll");
          if (sasdll)
          {
              typedef void(__stdcall * SendSAS_t)(BOOL);
              SendSAS_t sendSAS = (SendSAS_t)GetProcAddress(sasdll, "SendSAS");
              if (sendSAS)
                  sendSAS(FALSE);
          }
      }
      CloseDesktop(desktop);
      

      【讨论】:

      • 您还必须将注册表项 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\SoftwareSASGeneration 设置为 1 或 3。You can see information here
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多