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

时间:2018-11-23 14:50:30

标签: c# uwp

我希望我的程序仅在当前正在使用某些其他程序时才触发动作。我用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
);

1 个答案:

答案 0 :(得分:0)

您需要使用t(sapply(1:10, function(x) sample(1:42, 6, replace = FALSE))) 。可以在以下问题的答案中更好地解释这一点:Find process id by window's handle

然后,您应该可以使用System.Diagnostics.Process.GetProcesses()将pid与流程及其模块进行匹配。您可能会发现无法从32位进程访问64位进程的详细信息,或者安全性阻止了对某些信息的访问。