|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2008
Messaggi: 41
|
[C++] Lista Finestre aperte
Ciao raga stò cercando una funzione in C++ che mi restituisca un array con tutti i nomi delle finestre aperte.
ho cercato su msdn ma non trovo quello che fa per me... *Per finestre aperte intendo anche quelle minimizzate, tutte Grazie |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
te la scrivi da solo: l'enumerazione delle finestre sul desktop corrente non avviene con la restituzione di un array, ma per ogni finestra restituita ti viene chiamata una funzione di callback dalla quale tu puoi ad esempio aggiungere la finestra enumerata ad un tuo array di HWND; tale array lo puoi realizzare con std::vector<HWND> in modo tale da non avere troppi grattacapi.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jan 2008
Messaggi: 41
|
Ho già provato con EnumWindows ma ho qualche problema...
Ho provato il codice: Codice:
BOOL EnumWindowsProc(HWND hWnd, long lParam)
{
char Buff[255], NameOfClass[255];
GetWindowText(hWnd, Buff, 254);
GetClassName(hWnd, NameOfClass, 254);
cout << "Window Text: " << Buff << "\t" << "Class Name: "
<< NameOfClass << endl;
return TRUE;
}
#pragma argsused
int main(int argc, char* argv[])
{
EnumWindows((WNDENUMPROC)EnumWindowsProc, 0);
cin.ignore();
return 0;
}
Non capisco il funzionamento di queste funzioni "callback"... sono nooooob
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 181
|
Noob anch'io, comunque dai un'occhiata a IsWindowVisible
Potresti applicarla come una sorta di filtro nella funzione callback Ultima modifica di eVuGEGA : 30-06-2008 alle 23:14. |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jan 2008
Messaggi: 41
|
Altro che noob! SEI UN GENIO!!!
Adesso vedo solo quelli che mi interessano fantastico! Ho quasi risolto il problema! L'unico intoppo è che dopo aver girato e trovato le finestre mi dà errore: "Run-Time Chek Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of a calling function pointer declared with a different calling convention." (avete presente la finestrella di errore del debug e i tastini "interrompi" "riprova" e "ingora"? quella!) Il codice è come quello sopra... non capisco cosa sbaglio.... Codice:
BOOL EnumWindowsProc(HWND hWnd, long lParam)
{
char Buff[255], NameOfClass[255];
GetWindowText(hWnd, Buff, 254);
GetClassName(hWnd, NameOfClass, 254);
cout << "Window Text: " << Buff << "\t" << "Class Name: "
<< NameOfClass << endl;
return TRUE;
}
#pragma argsused
int main(int argc, char* argv[])
{
EnumWindows((WNDENUMPROC)EnumWindowsProc, 0);
cin.ignore();
return 0;
}
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
La documentazione di GetWindowText dice:
Quote:
A vedere dal messaggio di errore, invece, c'è qualcosa che modifica lo stack, ma non vedo dove (sicuro che sia colpa di quella funzione?)... cioè, se è lì, è un buffer overflow su NameOfClass, ma la cosa mi pare strana.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
l'aiuto che ti da il compilatore è corretto: hai usato una calling convention sbagliata, tant'è vero che per passare la funzione di callback alla EnumWindows hai dovuto fare un cast.
edit - pardon, un'imperdonabile svista l'aiuto te lo da il runtime di Visual C++, non il compilatore Ultima modifica di 71104 : 01-07-2008 alle 13:31. |
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
@DanieleC88: AUGURIIIIIHH!!!!
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]() Grazie!
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
lol, non mi ero mai accorto che su Hardware Upgrade la faccina della torta avesse gli occhi!
|
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Jan 2008
Messaggi: 41
|
Quote:
anzi se mi correggi in un sec il codice sarebbe ancora meglio.... Grazie |
|
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
così insomma:
Codice:
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam)
{
char Buff[255], NameOfClass[255];
GetWindowText(hWnd, Buff, 254);
GetClassName(hWnd, NameOfClass, 254);
cout << "Window Text: " << Buff << "\t" << "Class Name: "
<< NameOfClass << endl;
return TRUE;
}
#pragma argsused
int main(int argc, char* argv[])
{
EnumWindows(EnumWindowsProc, 0);
cin.ignore();
return 0;
}
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Jan 2008
Messaggi: 41
|
Grazie mille per la pazienza!
Problema risolto e tutto funzionante! thanks!!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:04.




















