Как однозначно идентифицировать другую работающую программу? - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу, чтобы моя программа запускала действие, только когда в данный момент используются некоторые другие программы.Я получаю текущий передний план HWND с GetForegroundWindow().Но HWND меняются со временем, так что это не способ идентифицировать эти программы.То же самое касается идентификаторов процессов и дескрипторов.Как определить программу переднего плана по перезагрузкам?

Сначала я подумал, что 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 голосов
/ 23 ноября 2018

Вам нужно использовать GetWindowThreadProcessId.Это лучше объясняется в ответах на этот вопрос: Найти идентификатор процесса по дескриптору окна .

После этого вы сможете использовать System.Diagnostics.Process.GetProcesses() для сопоставления pidк процессу и его модулям.Вы можете обнаружить, что не можете получить доступ к сведениям о 64-битных процессах из 32-битного процесса или что защита блокирует доступ к некоторой информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...