[VC++] passer d'un PID a un HWND ??

passer d'un PID a un HWND ?? [VC++] - Programmation

Marsh Posté le 29-10-2001 à 11:52:45    

voila .. j'ai fait un prog qui scan tous les process actifs .. et j'aimerai leur envoyer un WM_message (pour fermer un programme).
pour envoyer un WM_ j'ai besoin d'un HND vers la fenetre en question.. comment faire pour passer de mon PID a mon HWNM (ou celui des fenetres qui viennet de ce process)
je suis perdu .. j'ai cherché sur CodeGurru et dans la MSDN et je trouve pas  :cry:  
 
merci de me dire ce que vous en pensez.
 
ps: cela fait pas longtemps que je fais du VC++.

Reply

Marsh Posté le 29-10-2001 à 11:52:45   

Reply

Marsh Posté le 29-10-2001 à 12:15:31    

En tout cas, niveau sur le plan de l'incompréensibilité, c nickel... si tu veux parler façon expert, soit précis dans tes mots, et fais gaffe ... à mon avis, tu devrais te relire !

Reply

Marsh Posté le 29-10-2001 à 12:18:15    

Et puis sinon, si g compris ce que tu veux, essaye avec OpenProcess, en mettant le flag d'accès à PROCESS_DUP_HANDLE. Ou une autre flag d'ailleur, peut être PROCESS_ALL_ACCESS, regardes.

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Reply

Marsh Posté le 29-10-2001 à 13:12:35    

bon je réexplike e nun peu plus clairement ce que je veux faire :
 
je cherche paris tous les process celui done l'exe correspontra a tel programme :
par exmeple je cherche a fermer icq le nom de l'exe est Icq.exe .. et je cherche le process qui correspond, là j erécupère le PID.. et j'aimerai terminer ce process.
pour cela j'ai la fonction POSTMESSAGE qui nécéssite un HWND et un MSG WM_CLOSE.
mais je n'arrive pas a trouver le HWND d'un process ou Le HWND des fenetre enfant de ce process (si je m'embrouille pas avec les noms).
 
voila :)

Reply

Marsh Posté le 29-10-2001 à 14:08:18    

Alors...
déja, tu peux pas faire un send message à un thread, parce que sendmessage (ou postmessage) c pour envoyer des messages à une fenêtre. D'ailleur ça prend un HWND (qui est une abréviation de Handle Window je pense). En fait ce dont tu as besoin, c de récupérer le Handle du process. ça, tu dois pouvoir le faire avec la fonction que je t'ai donnée au dessus. Avec ce Handle, t'utilises la fonction TerminateProcess.
 
Voila... et encore un truc : tu peux trouver plein de choses avec la msdn, en allant dans l'onglet Sommaire, puis SDL platform-->Reference :D.

Reply

Marsh Posté le 29-10-2001 à 14:34:36    

lol merci je vais réessayer comme ça alors :)
 
sinon j'ai trouvé une calsse EnumWinModules qui me permet de récupérer tout ce que je veux :))
 
merci :)

Reply

Marsh Posté le 29-10-2001 à 14:55:18    

...même que, si j'me permettais, j'te conseillerai d'utiliser plutot EnumWindowProc

Reply

Marsh Posté le 29-10-2001 à 20:02:44    

Décidément j'ai bcp de mal :(
 
j'appelle ceci :
EnumThreadWindows( pEntry.th32ProcessID , EnumThreadWndProc, NULL);
 
sachant que j'ai déclaré dans mon .h :
BOOL CALLBACK EnumThreadWndProc(HWND hwnd, LPARAM lParam)
mais je capte pas .. il me dit :
'EnumThreadWindows' : cannot convert parameter 2 from 'int (struct HWND__ *,long)' to 'int (__stdcall *)(struct HWND__ *,long)'

Reply

Marsh Posté le 29-10-2001 à 20:41:54    

MAJ
 
oué j'ai trouvé :)
 
en fait dans mon .h je devais déclarer ma fonction :
protected:
static BOOL CALLBACK EnumThreadWndProc(HWND hwnd, LPARAM lParam)

Reply

Marsh Posté le 30-10-2001 à 09:07:57    

ouais, ou, si t en C++, tu déclares simplement ce truc en dehors de la définition de ta classe... c comme ça ! Le compilateur l'a décidé ainsi. Et, c admis pour tous, au pays de la programmation, le compilateur est roi (celui qui est pas d'accord lève le doigt)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed