Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET模拟Ctrl+;Alt+;德尔森基斯酒店_C#_.net_Windows_Vb.net_Keyboard - Fatal编程技术网

C# .NET模拟Ctrl+;Alt+;德尔森基斯酒店

C# .NET模拟Ctrl+;Alt+;德尔森基斯酒店,c#,.net,windows,vb.net,keyboard,C#,.net,Windows,Vb.net,Keyboard,标题中说了这么多,我如何模拟Ctrl+Alt+DEL的组合 我试过这个: SendKeys.Send("^(%({DEL}))") SendKeys.Send("^(%{DEL})") SendKeys.Send("^%{DEL}") 但都不管用。我正在使用VB.NET和Windows XP SP3,你不能。这是在设备驱动程序级别完成的,您不能为键盘驱动程序伪造输入。这也是您无法禁用它的原因。允许它被伪造当然是一个非常严重的安全漏洞。从Windows Vista开始,您可以使用该功能 原来

标题中说了这么多,我如何模拟Ctrl+Alt+DEL的组合

我试过这个:

SendKeys.Send("^(%({DEL}))")
SendKeys.Send("^(%{DEL})") 
SendKeys.Send("^%{DEL}")

但都不管用。我正在使用VB.NET和Windows XP SP3,你不能。这是在设备驱动程序级别完成的,您不能为键盘驱动程序伪造输入。这也是您无法禁用它的原因。允许它被伪造当然是一个非常严重的安全漏洞。

从Windows Vista开始,您可以使用该功能


原来的答案,现在被上面的取代

<DllImport("AltCtrlDelCpp.dll")> _
Private Function SimulateAltControlDel() As Boolean
您需要的函数称为
simulaseas
。你需要发电子邮件saslib@microsoft.com并要求它。微软似乎没有记录这一点,但只要做一个网络搜索,你就会明白我的意思


其他人解释了为什么允许应用程序触发CTRL+ALT+DEL实际上不是一个安全问题,但您肯定不能使用
SendKeys

查看此线程以获取一些有用的信息:

基本上:

  • 你的计划必须签字
  • 您的程序必须具有指定所需特权的清单
  • 您的程序必须位于受保护的文件夹中(需要UAC写入的文件夹,如program Files文件夹)
  • 然后,您的程序可以使用以下未记录的API来调用它:

    DWORD dwRet = lpfnWmsgSendMessage(dwSessionId,0x208, 0, (LPARAM)&lParam); //Undocument API.
    

注意,我只提取了我链接到的网页,我不知道它是否有效,或者是否有更多的陷阱。

你最好的办法可能是下载,看看他们是如何做到的。

我终于在CodeProject上找到了它,它在作为系统用户启动时运行良好。因此,我将代码转换为dll,并从代码中调用该函数

这里是C++代码(可以使用Error Exchange示例函数,如果出现问题,从MSDN使用代码> GETLASTOrror错误/代码>):

然后,在.NET解决方案中,将dll添加到项目中,对其进行配置,使其始终复制到输出目录中,然后使用DllImport导入函数:

C#代码

[DllImport(@"AltCtrlDelCpp.dll")]
static extern bool SimulateAltControlDel();
VB.NET代码

<DllImport("AltCtrlDelCpp.dll")> _
Private Function SimulateAltControlDel() As Boolean
_
私有函数SimulateAltControlDel()作为布尔值
在VB.NET中,还需要将属性添加到Sub Main:

<MTAThread()> _
Sub Main()
_
副标题()


然后您只需调用
SimulateAltControlDel
函数就可以了。请注意,我的这项工作仅适用于控制台应用程序,在winform应用程序中不起作用。

从Windows Vista开始,该功能可用。

logmein或gotomypc是如何实现的?@David:他们是这样做的。这是一个菜单选项。@Robert,这和你的答案不矛盾吗?我要吃掉我的键盘吗@大卫:是的。这相当复杂。击键被转换为远程命令,然后连接到远程计算机的键盘、鼠标和显示驱动程序中。但当然,用户必须授予在其计算机上安装GotoMyPC的权限,并且该公司是受信任的。@Robert如果另一个应用程序捕获了它,那么他们可能会显示一个虚假的登录对话框并窃取您的凭据。我想,这就是安全注意键的全部意义。@mdmullinax:从技术上讲,不是。他问的是如何模拟这些键,而不是陷阱。你想实际模拟这些键,还是只想调用标准的安全对话框?如果是后者,那么您可以调用shell分派对象。不,我想模拟键。但我已经发布了解决方案,thanks@GianT971如果它们最终都在同一个地方(一个有文档记录,另一个没有文档记录),有什么区别?区别在于我想在登录屏幕的服务中使用它,以便我可以自动登录某个用户(我知道安全问题,但这不是我关心的问题)你很绝望,不是吗?!!-)大卫:嗯,我不知道怎么做。我不是以编写设备驱动程序为生的。再给我几次,该死的!好了,如果汉斯正在吃,那你为什么不能呢?!!VNC是通过
SendSAS
实现的。上面的代码对Ctrl+Alt+Del热键的注册方式进行了未记录的假设。(它还假设安全桌面上只有一个窗口可以注册ID为零的热键。)实际上,它只在作为系统运行时工作;如果您将其用作管理员,则不会成功。请注意,这个代码不是我的(我把链接放到了CODESTORT的页面上),我不是C++开发人员,所以我不能告诉你是不是正确的:)我只是说,上面的方法不能保证在Windows的未来版本中工作。只是警告任何想在其产品中使用此功能的人——他们需要让客户知道,该产品正在对可能在未来版本的Windows中停止工作的系统进行未经记录的假设。好吧,事实上,在Windows XP之前,此功能都有效,我真的认为它在Vista和Seven上不起作用;例如,对于这些操作系统,您应该看看SasLibEX,但它不会是freeUpdate:而且现在从Windows7SDK开始就可以使用,即使是Vista。
<MTAThread()> _
Sub Main()