我一直在从事 Windows 自动化和监控的工作。
当我锁定 Windows 机器的屏幕时,实际上会发生什么?
目前我正在使用 Windows 7,如果我切换到 Vista 或服务器版本,行为上是否有很大差异?是否仍然存在可以通过 API 访问的桌面? 我知道我仍然可以向特定窗口发送键盘击键和鼠标点击(通过 ControlSend 和 ControlClick),但似乎没有 "桌面" 本身。
能否有人解释一下这整个问题,或者指点我一个可读性强的来源,在那里我可以获得关于该主题的概述?
我一直在从事 Windows 自动化和监控的工作。
当我锁定 Windows 机器的屏幕时,实际上会发生什么?
目前我正在使用 Windows 7,如果我切换到 Vista 或服务器版本,行为上是否有很大差异?是否仍然存在可以通过 API 访问的桌面? 我知道我仍然可以向特定窗口发送键盘击键和鼠标点击(通过 ControlSend 和 ControlClick),但似乎没有 "桌面" 本身。
能否有人解释一下这整个问题,或者指点我一个可读性强的来源,在那里我可以获得关于该主题的概述?
我不知道具体细节,但我相信锁屏界面构成了一个单独的“桌面”,也可能是一个单独的“窗口工作站”(据我所知,窗口工作站仅是桌面的容器)。关于窗口工作站的MSDN部分应该会有用:http://msdn.microsoft.com/en-us/library/windows/desktop/ms687098%28v=vs.85%29.aspx
为了访问一个桌面,你需要使用来自在那个桌面上的线程的常规Windows API。在C语言中,SetThreadDesktop可能是最简单的方法,只要桌面不在另一个窗口工作站上。
不幸的是,这对于普通特权应用程序已经很困难,而使用AutoHotkey则更加复杂。由于您无法控制线程或进程初始化,您可能需要在另一个桌面上创建一个新进程(您可以使用CreateProcess API来实现此操作,它似乎有一个可用于AHK的包装器,您可以向其提供桌面名称:http://www.autohotkey.com/forum/topic1952.html)。您的进程将需要特殊权限才能执行此操作;我不确定即使以管理员身份运行也足够。