Come posso ottenere l'HWND dell'applicazione, se conosco l'ID del processo? Qualcuno potrebbe pubblicare un campione per favore? Sto usando MSV C++ 2010. Ho trovato Process :: MainWindowHandle ma non so come usarlo.Ottieni hwnd per id processo C++
risposta
HWND g_HWND=NULL;
BOOL CALLBACK EnumWindowsProcMy(HWND hwnd,LPARAM lParam)
{
DWORD lpdwProcessId;
GetWindowThreadProcessId(hwnd,&lpdwProcessId);
if(lpdwProcessId==lParam)
{
g_HWND=hwnd;
return FALSE;
}
return TRUE;
}
EnumWindows(EnumWindowsProcMy,m_ProcessId);
Questo funziona per me come il formaggio .. – Nadun
Uno deve indicare che 'PID' deve appartenere allo stesso desktop (o utente interattivo/sessione di accesso) come il processo da cui viene chiamato questo metodo. Altrimenti 'EnumWindows' non enumera l'handle della finestra. Ad esempio, non è possibile utilizzare questo metodo da un servizio o se il processo in questione viene eseguito con un account utente connesso diverso oppure recuperare HWND per uno screensaver se la workstation è bloccata, ecc. – c00000fd
Basta convertire questo codice in libero pascal e funziona come formaggio anche per me :) – Jako
È possibile utilizzare le funzioni EnumWindows e GetWindowThreadProcessId() come indicato in questo MSDN article.
Un singolo PID (ID processo) può essere associato a più finestre (HWND). Ad esempio se l'applicazione utilizza più finestre.
Il seguente codice individua i punti di manipolazione di tutte le finestre per un dato PID.
void GetAllWindowsFromProcessID(DWORD dwProcessID, std::vector <HWND> &vhWnds)
{
// find all hWnds (vhWnds) associated with a process id (dwProcessID)
HWND hCurWnd = NULL;
do
{
hCurWnd = FindWindowEx(NULL, hCurWnd, NULL, NULL);
DWORD dwProcessID = 0;
GetWindowThreadProcessId(hCurWnd, &dwProcessID);
if (dwProcessID == dwProcessID)
{
vhWnds.push_back(hCurWnd); // add the found hCurWnd to the vector
wprintf(L"Found hWnd %d\n", hCurWnd);
}
}
while (hCurWnd != NULL);
}
- 1. Ottieni oggetto Excel.Application da Process o hwnd in .NET
- 2. Ottieni un ID lavoratore/thread/processo/richiesta univoco in PHP
- 3. per ID processo anziché nome?
- 4. Ottieni foglio Google per ID?
- 5. AngularJS - Ottieni dati per ID
- 6. Richfaces - Ottieni elemento per ID
- 7. Ottieni istanza per istanza-id
- 8. WP8/C#/SQLite: ottieni l'ultimo ID inserito?
- 9. Ottieni ID sessione per un Selecion RemoteWebDriver in C#
- 10. Umbraco - Ottieni Node per ID programmaticamente
- 11. Trovare un processo ID per nome
- 12. Trova ID processo per handle della finestra
- 13. Relazione tra ID thread e ID processo
- 14. Ottieni ID lavoratore in Celery
- 15. Ottieni ID connessione PDO
- 16. Ottieni l'URL corrente in Chrome, Firefox e IE usando C# dato hwnd
- 17. Ottieni tutte le DLL per un processo
- 18. Ottieni articoli per ID in Sitecore 6.5
- 19. Ottieni ruolo utente per ID Wordpress
- 20. Ottieni oggetto con id()?
- 21. Set Window.Owner utilizzando hWnd
- 22. Trova tutti i thread di un processo definito ID processo
- 23. Come nascondere/mostrare un processo in C#?
- 24. PostMessage (hwnd, WM_SETTEXT, ..) non funziona mentre PostMessage (hwnd, WM_QUIT, ..) fa
- 25. C# Ottieni la directory di lavoro di un altro processo
- 26. In Win32 programmazione C++ per chiudere una finestra, dovrei chiamare DestroyWindow (hWnd) me stesso o SendMessage (WM_CLOSE, hWnd, 0, 0)?
- 27. Gli ID filo sono univoci per processo o per computer?
- 28. Ottieni l'ultimo ID inserito Sequenza
- 29. - Ottieni tweet con ID specifico
- 30. QT5 QPlatformNativeInterface e HWND
Un processo non è limitato a 1 finestra. – chris
Un processo può avere diverse finestre e questo ha diversi hwnds. –
quindi, maby è possibile ottenere tutti gli HWND e selezionarli, con questo ID di processo? – Luke