Вы можете получить текущее активное окно через GetForegroundWindow () . Затем вы можете сделать GetWindowThreadProcessId () , чтобы получить PID, который затем можно преобразовать в дескриптор процесса с помощью OpenProcess () (вам потребуются права доступа PROCESS_QUERY_INFORMATION и PROCESS_VM_READ), а затем вы можете проверьте имя процесса с помощью GetModuleFileNameEx () . Не забудьте потом закрыть дескриптор процесса с помощью CloseHandle () .
Вот код, который я только что написал в блокноте. Вы, вероятно, сделали бы что-то подобное.
DWORD lpFileName[MAX_PATH] = {0};
DWORD dwPID;
HANDLE hProcess;
HWND hwnd = GetForegroundWindow();
GetWindowThreadProcessId( hwnd, &dwPID );
hProcess = OpenProcess( PROCESS_QUERY_INFOMRATION | PROCESS_VM_READ, false, dwPID );
GetModuleFileNameEx( hProcess, NULL, lpFileName, _countof( lpFileName ) );
PathStripPath( lpFileName );
if( _tcscmp( _T("explorer.exe"), lpFileName ) == 0 ) {
_tprintf( _T("explorer window found") );
} else {
_tprintf( _T("foreground window was not explorer window") );
}
CloseHandle( hProcess );
Чтобы получить все открытые окна проводника, вы можете использовать EnumWindows () , для которого вы предоставляете обратный вызов, который получает все окна верхнего уровня. Затем вы можете отфильтровать все, что захотите, возможно, по имени процесса (см. Выше), может быть по имени класса ( GetClassName () ).