.net 如何在Windows Secure Desktop中读取大写锁定状态?

jjjwad0x  于 2023-03-04  发布在  .NET
关注(0)|答案(1)|浏览(86)

我编写了一个需要在安全桌面模式下读取Caps锁定状态的程序。但是,Control.IsKeyLocked和Win32 API GetKeyState()都无法获取当前Caps锁定状态。
我认为这样做不需要管理员权限,因为我的TextBox被设置为密码输入模式,并且它显示Caps锁定状态的警告。
安全桌面由四个步骤组成:创建桌面()、切换桌面()、任务、工厂、新建和设置线程桌面()。
在我的代码中是CreateDesktop():

Dim New_hDesktop As IntPtr = CreateDesktop("GeekDesk1", IntPtr.Zero, IntPtr.Zero, 0, DESKTOP_ACCESS.GENERIC_ALL, IntPtr.Zero)

(It的VB.NET,但使用C#和VB都可以)
使用C++来解决这个问题也是可以接受的,我可以试着把它转换成C#,但请不要建议需要提升权限/或类似驱动程序的解决方案,环0工作...。
有没有人能解决这个问题?谢谢。
我尝试过Control.IsKeyLocked和Win32 API GetKeyState()来获取安全桌面模式下的实时大写锁定状态。

q3aa0525

q3aa05251#

我已经解决了这个问题:我发现用于检查Caps Lock状态的默认计时器在Secure Desktop中不起作用,由于Secure Desktop的性质,我无法使用开发环境的调试功能对此进行验证,导致我误以为API被Secure Desktop屏蔽。
为什么计时器不工作了?是因为它在一个单独的线程中运行吗?不管怎样,问题已经解决了。谢谢大家。

相关问题