Obtenir un HWND

youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010 - 12 juil. 2004 à 22:50
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010 - 14 juil. 2004 à 14:40
j'aurai besoin de récupérer un hwnd
j'ai coder ca

HANDLE hSnapShot;
PROCESSENTRY32 uProcess;
bool r;
short PID = 0; //variable qui va stocker l'ID du processus de l'application que l'on désire fermer.

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);

r = Process32First(hSnapShot, &uProcess);
do // Cette boucle énnumère tout les processus
{
if ( strstr(uProcess.szExeFile, ExeName) )//on cherche le nom de notre application dans le chemin d'accès de l'éxécutable du processus.
PID = (short) uProcess.th32ProcessID;
//MessageBox(0,uProcess.szExeFile,0,0);
r = Process32Next(hSnapShot, &uProcess);
} while ( r );

return hSnapShot;
ce code récupere tous les process qui sont entrain de tourner, ne faite pas attention au return hSnapShot, a la base c t return PID.

Bon voila il me fodrai un HWND par rapport au ExeName, alors a mon avis par le HANDLE, peut etre ou par le pid de la fonction

merci de votre solution

8 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
12 juil. 2004 à 23:05
Tu peux obtenir un hwnd simplement par son titre, ou encore sa classe, si cette maniere t'interesse, http://www.cppfrance.com/code.aspx?ID=18911

Voila ++

ALhexman
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
12 juil. 2004 à 23:08
merci je vais regarder le code
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 juil. 2004 à 23:17
Pas besoin d'une source pour ca, une seule fonction: FindWindow
Par contre tu trouvera pas un HWND à partir du nom de l'exe car le nombre de HWND peut être 0, 1, 2... pour un programme donné
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
13 juil. 2004 à 00:02
Salut,
Pourquoi ne ferais tu pas le contraire: a partir d'un HWND tu peux trouver le PID, donc en enumerant les fenetres tu peux te faire la liste des HWND de chaque processus.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_imanewin32 Messages postés 70 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 12 août 2004
14 juil. 2004 à 11:54
j'ai pas bien compris ce code est ce que tu essaye de tuer un processus connu par son pid.
car j'en ai besoin pour une application.
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
14 juil. 2004 à 14:30
exactement c t un code ki avait pour but de tuer un processus

c un code ke j'avais codé il y a un bout largement inspirer de msdn....

je te donne tout le code pour ke tu puisse tuer le proccessus en fonction de son titre... destiné a imanewin32

short CALLBACK CClose(char* ExeName)
{
HANDLE hSnapShot;
PROCESSENTRY32 uProcess;
bool r;
short PID = 0; //variable qui va stocker l'ID du processus de l'application que l'on désire fermer.

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);

r = Process32First(hSnapShot, &uProcess);
do // Cette boucle énnumère tout les processus
{
if ( strstr(uProcess.szExeFile, ExeName) )//on cherche le nom de notre application dans le chemin d'accès de l'éxécutable du processus.
PID = (short) uProcess.th32ProcessID;

r = Process32Next(hSnapShot, &uProcess);
} while ( r );

CloseHandle(hSnapShot);
return PID;

}

/////////////////

DWORD WINAPI /*CBPManagerserverDlg::*/ CALLBACK TerminateApp( DWORD dwPID, DWORD dwTimeout )
{
HANDLE hProc ;
DWORD dwRet ;

// If we can't open the process with PROCESS_TERMINATE rights,
// then we give up immediately.
hProc = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE,
dwPID);

if(hProc == NULL)
{
return TA_FAILED ;
}

// TerminateAppEnum() posts WM_CLOSE to all windows whose PID
// matches your process's.
EnumWindows((WNDENUMPROC)TerminateAppEnum, (LPARAM) dwPID) ;

// Wait on the handle. If it signals, great. If it times out,
// then you kill it.
if(WaitForSingleObject(hProc, dwTimeout)!=WAIT_OBJECT_0)
dwRet=(TerminateProcess(hProc,0)?TA_SUCCESS_KILL:TA_FAILED);
else
dwRet = TA_SUCCESS_CLEAN ;

CloseHandle(hProc) ;

return dwRet ;
}
//////////////////////////
BOOL CALLBACK TerminateAppEnum( HWND hwnd, LPARAM lParam )
{
DWORD dwID ;

GetWindowThreadProcessId(hwnd, &dwID) ;

if(dwID == (DWORD)lParam)
{
PostMessage(hwnd, WM_CLOSE, 0, 0) ;
}

return TRUE ;
}

tu auras juste a faire ca

short PID=CClose("NOM de TON APPLICATION, genre Outlook,...., c'est le titre de l'application");
TerminateApp(PID,5000);
running= false;
WaitForSingleObject(hThread,1000);
CloseHandle(hThread);

cette manière et fortement conseiller par microsoft pour terminer une application apres c a chacun de voir...

pour revenir a AlexMAN m'a proposé comme source je l'a trouve tres interessante et je vais faire un peux de ta sauce plus ce ke je connais si cela t'interesse...
a aussi un truc je sais po pourkoi fodrai ke je regarde de facon plus appronfondi, mais pendant ton SetWindowText, il y a une couille, a la fin il me met un caractere bizard...., et chez moi pour ke le prog ne merde po j'ai du initialiser tout tes char a NULL
c'est-à-dire par ex char cChoice="";, et ainsi de suite, car ca compil mais lors de l'execution il me di ke la variable n'a po ete initialisé donc... (c'est des détails, ne t'en fais po c po une critike)

voila c tout merci a tous
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
14 juil. 2004 à 14:39
C'est vrai pour l'histoire du SetWindowText, mais ca ma pas semblé tres important donc j'ai pas cherché a comprendre...

++
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
14 juil. 2004 à 14:40
si je trouve je t'informe
0
Rejoignez-nous