我正在尝试向在不同用户帐户下运行的应用程序发送消息(用户也在计算机上使用其他帐户登录,在XP及更高版本上使用快速用户切换,并执行应用程序).
背景是我的应用程序可以自行更新,但为了做到这一点,必须首先关闭所有正在运行的实例.
需要关闭实例(而不是仅仅杀死进程),因此更新程序通过向它们发送自定义消息来执行此操作(使用SendMessage).为了发送消息,我需要一个进程主窗口的句柄.
这样可以正常使用EnumWindows- 只要实例在同一个用户帐户下运行,因为EnumWindows不会列出属于不同用户的窗口.
所以我尝试了不同的方法.我曾经CreateToolhelp32Snapshot首先列出系统上所有正在运行的进程,然后CreateToolhelp32Snapshot再次遍历调用的线程.通过这些线程ID,我可以使用它列出他们的窗口EnumThreadWindows.
再一次,这工作正常,但..再次只对当前登录用户.这里的问题是,即使CreateToolhelp32Snapshot列出属于不同用户的进程ID,它也不会列出属于它们的线程ID.这段代码有点冗长,但如果需要我可以编辑它 - 请留言.
那么,我怎样才能让我的应用程序的主窗口句柄在不同的登录用户帐户上运行?
Cos*_*und 10
使用已知可以跨会话工作的东西; 这种东西通常用于桌面服务通信,所以如果你想google,那就找.这是我的建议:
Global\以便它在会话中有效.CreateEvent功能,密切注意ERROR_ALREADY_EXISTS非错误).该线程应该只是等待事件.触发事件后,将所需消息发送到主窗口.该线程可以轻松安全地执行此操作,因为它在您的进程内运行.线程将主要处于空闲状态,等待事件被触发,因此不必担心CPU损失.这只是一个想法,我相信还有其他想法.
管道有点矫枉过正.导致应用程序实例自杀的全局手动重置事件(例如"Global\MyApplicationShutdownEvent")就足够了.
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |