[英]How to uniquely identify another running program?
我希望我的程序仅在当前正在使用某些其他程序时才触发操作。 我通过GetForegroundWindow()
获得当前前景HWND。 但是HWND会随着时间而变化,因此这不是识别那些程序的方法。 进程ID和句柄也是如此。 通过重新启动识别前台程序的方法是什么?
我首先以为GetModuleFileNameExA
应该可以工作,但是我的代码崩溃了,因为找不到它:
Handle handle = GetProcessHandleFromHwnd(hWID);
String Name = null;
GetModuleFileNameExA(
handle,
null,
Name,
2147483647
);
[DllImport("Kernel32.dll", CharSet = CharSet.Ansi)]
private static extern IntPtr GetModuleFileNameExA(
Handle hProcess,
Object hModule,
String lpFilename,
Int32 nSize
);
您需要使用GetWindowThreadProcessId
。 对此问题的答案进行了更好的解释: 通过window的handle查找进程ID 。
然后,您应该能够使用System.Diagnostics.Process.GetProcesses()
将pid与进程及其模块进行匹配。 您可能会发现您无法从32位进程访问64位进程的详细信息,或者安全性阻止了对某些信息的访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.