Ciao.
Ho utilizzato le funzioni Process32First e Process32Next per enumerare i processi.
Ora vorrei scoprire se un processo è in hidemode, ovvero la sua gui è invisibile.
Grazie
Ciao.
Ho utilizzato le funzioni Process32First e Process32Next per enumerare i processi.
Ora vorrei scoprire se un processo è in hidemode, ovvero la sua gui è invisibile.
Grazie
Devi enumerare tutte le finestre di primo livello aperte nel sistema con la EnumWindows, ottenerne il PID con GetWindowProcessID per associarle con ciascun processo e verificare se sono visibili con la IsWindowVisible.
Amaro C++, il gusto pieno dell'undefined behavior.
Ho dei problemi a utilizzare la enumwindows:
ho provato questo:
questo è l'errorecodice:void CprocessDlg::OnBnClickedOk() { EnumWindows(((WNDENUMPROC)MyEnumProc),NULL); } BOOL CALLBACK CprocessDlg::MyEnumProc(HWND hWnd, LPARAM lParam) { char title[500]; ::GetWindowText(hWnd, title, sizeof(title)); return TRUE; }
c:\Documents and Settings\frg\Documenti\Visual Studio Projects\process\process\processDlg.cpp(163): error C2664: 'EnumWindows' : cannot convert parameter 1 from 'BOOL (HWND,LPARAM)' to 'WNDENUMPROC'
grazie.
Le procedure callback delle API di Windows non possono essere metodi d'istanza di una classe; in molti compilatori possono essere metodi statici, ma lo standard non ti garantisce niente in questo senso. L'unico modo sicuro è usare una normale funzione fuori da classi.
Amaro C++, il gusto pieno dell'undefined behavior.
Ho provato cosi:
dove CprocessDlg è una classe cdialog .codice:void CprocessDlg::OnBnClickedOk() { EnumWindows(::MyEnumProc,NULL); } BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam) { int i=33; i=44; char title[500]; HWND hWnd1; ::GetWindowText(hWnd1, title, sizeof(title)); return TRUE; }
Al premere del pulsante vorrei enumerare i processi ...ma, cosi ' mi da questi errori:
c:\Documents and Settings\frg\Documenti\Visual Studio Projects\process\process\processDlg.cpp(163): error C2039: 'MyEnumProc' : is not a member of 'operator``global namespace'''
c:\Documents and Settings\frg\Documenti\Visual Studio Projects\process\process\processDlg.cpp(163): error C2065: 'MyEnumProc' : undeclared identifier
Hai dichiarato MyEnumProc prima di OnBnClickedOk?
Amaro C++, il gusto pieno dell'undefined behavior.
grazie , tutto ok , solo non trovo GetWindowProcessID cosa posso usare al suo posto?
Grazie.
La ufnzione si trova in windows.h
E' incluso nel progetto?
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Forse e' la
GetWindowThreadProcessId
...
No MP tecnici (non rispondo nemmeno!), usa il forum.
grazie.
[code]
BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam) {
char* title = NULL;
DWORD dwId;
::GetWindowThreadProcessId(hWnd,&dwId);
CString str;
if(oldH != hWnd)
if(dwId==(DWORD)lParam && dwId!=0)
{ if(::IsWindowVisible(hWnd) )
{
int n = GetWindowText(hWnd,title,1000);
AfxMessageBox(title);
AfxMessageBox("Istanza trovata , visibile ");
}
else
{
AfxMessageBox("Istanza trovata , non visibile ");
}
dwId=0;
oldH= hWnd;
}
return TRUE;
}
[code]
codice:EnumWindows(::MyEnumProc,(LPARAM)DWProcessID);//dove dwprocessid è l'id del mio provesso
il problema è che si verifica piu di un occorrenza di MyEnumProc con lo stesso id di processo,come se ci fossero molteplici finestre aperte per il mio processo.
grazie.