Проблема в том что через EnumWindows его не удается засечь, пробывал так ( с учетом разных оконных станций/рабочих столов) Код сохраняет в файл все новые окна под курсором. Spy++ видет окно, но так как если нажать/отпустить хоть одну клавишу кроме тав окно пропадает, в Spy++ удаеться просмотреть только HWND и класс окна ( он стандартный ( ) Пробывал настраивать это Код (Text): http://qwers.com/Poleznie-soveti-dlja-Windows7/Reestr/reenasint5.htm для задержки пропадания окна, ни какой реакции. Код (Text): #include <map> #include <vector> std::map<HWND,DWORD> Process; VOID DWORDToHex(DWORD hex, PCHAR str) { char mh[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; for (int i =8; i; --i) { int a = (0x0F << (i-1)*4) & hex; a = a >> (i-1)*4; str[8-i] = mh[a & 0x0F]; }; str[8] = 0; }; BOOL CALLBACK WndEnumChild(HWND hwnd, LPARAM lParam) { std::vector<PCHAR> *vstr = (std::vector<PCHAR> *)lParam; DWORD IdProcess; BOOLEAN IsExist = TRUE; RECT Window; POINT cur; GetWindowRect(hwnd,&Window); GetCursorPos(&cur); if ( (Window.left <= cur.x) && (Window.right > cur.x) ) if ( (Window.top <= cur.y) && (Window.bottom > cur.y) ) { if ( (IdProcess = Process[hwnd]) == 0 ) { IsExist = FALSE; } GetWindowThreadProcessId(hwnd,&IdProcess); Process[hwnd] = IdProcess; if ( IsExist == FALSE ) { char hex_hwnd[16]; DWORDToHex((DWORD)hwnd,hex_hwnd); vstr->push_back(STR::New(2,"\t\t 0x",hex_hwnd)); } } EnumChildWindows(hwnd,WndEnumChild,lParam); return TRUE; } BOOL CALLBACK WndEnumProc(HWND hwnd, LPARAM lParam) { EnumChildWindows(hwnd,WndEnumChild,lParam); return TRUE; } BOOL CALLBACK EnumDesktop(PCHAR astr, LPARAM lParam) { std::vector<PCHAR> *vstr = (std::vector<PCHAR> *)lParam; HDESK hDesk; vstr->push_back(STR::New(2,"\t",astr)); hDesk = OpenDesktopA(astr,0,FALSE,DESKTOP_ENUMERATE); if ( hDesk ) { EnumDesktopWindows(hDesk,WndEnumProc,lParam); CloseDesktop(hDesk); } return TRUE; } BOOL CALLBACK EnumStation(PCHAR str, LPARAM lParam) { std::vector<PCHAR> *vstr = (std::vector<PCHAR> *)lParam; HWINSTA hWin; vstr->push_back(STR::New(str)); hWin = OpenWindowStationA(str,FALSE,GENERIC_READ ); if ( hWin ) { EnumDesktopsA(hWin,EnumDesktop,lParam); CloseWindowStation(hWin); } return TRUE; } BOOLEAN FileWrite(PCHAR FileName,PVOID Data,DWORD Size) { HANDLE hFile; DWORD s; hFile = CreateFileA(FileName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); if ( hFile == INVALID_HANDLE_VALUE) return FALSE; SetFilePointer(hFile,0,NULL,FILE_END); WriteFile(hFile,Data,Size,&s,NULL); CloseHandle(hFile); return s == Size; } DWORD WINAPI Start() { std::vector<PCHAR> vstr; while(1) { EnumWindowStationsA(EnumStation,(LPARAM)&vstr); for (int i=0; i < vstr.size(); ++ i) { PCHAR str = STR::New(2,vstr[i],"\r\n"); FileWrite("C:\\winlogon_window.txt",str,m_lstrlen(str)); STR::Free(str); STR::Free(vstr[i]); } vstr.clear(); Sleep(100); } return 10; } void main () { Start(); }
2 XshStasX #32771 csrss Spy++ тут не годится, поэтому у меня полно других, которые могут к примеру, тут в Проектах есть HTSpy, чтобы показал - запускаешь и на окно по alt+tab наводишь курсор ------ > если нажать/отпустить хоть одну клавишу кроме тав окно пропадает LShift, RShift