我希望我的程序仅在当前正在使用某些其他程序时才触发动作。我用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
);
答案 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位进程的详细信息,或者安全性阻止了对某些信息的访问。