繁体   English   中英

如何唯一标识另一个正在运行的程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM