C# .NET模拟Ctrl+;Alt+;德尔森基斯酒店
标题中说了这么多,我如何模拟Ctrl+Alt+DEL的组合 我试过这个: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开始,您可以使用该功能 原来
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()