Convertir un HANDLE en HWND

Le
Polo497
salut,

tout est dans le titre, je cherche a convertir un HANDLE en HWND.

Pour être un peu plus précis, ce que j'essaye de faire c'est de
récupérer le PID du lecteur audio vlc(après l'avoir lancé), puis vi=
a
son PID récupérer son Handle, et enfin envoyer un message via
PostMessage(), qui lancera la lecture de la musique(via la touche
espace) .

Le PID c'est bon, avoir le handle c'est bon aussi.Mais pour pouvoir
utiliser PostMessage(), j'ai besoin de convertir le HANDLE en HWND.Et
c'est a ce niveau que je bloque.

Comment je pourrait faire ?

Merci.

Bye.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
ByB
Le #20352301
Polo497 avait écrit le 14/10/2009 :
salut,

tout est dans le titre, je cherche a convertir un HANDLE en HWND.

Pour être un peu plus précis, ce que j'essaye de faire c'est de
récupérer le PID du lecteur audio vlc(après l'avoir lancé), puis via
son PID récupérer son Handle, et enfin envoyer un message via
PostMessage(), qui lancera la lecture de la musique(via la touche
espace) .

Le PID c'est bon, avoir le handle c'est bon aussi.Mais pour pouvoir
utiliser PostMessage(), j'ai besoin de convertir le HANDLE en HWND.Et
c'est a ce niveau que je bloque.

Comment je pourrait faire ?

Merci.

Bye.



Un cast ne suffit pas ?
monHWND =(HWND)MonHandle;
Polo497
Le #20352801
On 14 oct, 22:36, ByB
Polo497 avait écrit le 14/10/2009 :





> salut,

> tout est dans le titre, je cherche a convertir un HANDLE en HWND.

> Pour être un peu plus précis, ce que j'essaye de faire c'est de
> récupérer le PID du lecteur audio vlc(après l'avoir lancé), pui s via
> son PID récupérer son Handle, et enfin envoyer un message via
> PostMessage(), qui lancera la lecture de la musique(via la touche
> espace) .

> Le PID c'est bon, avoir le handle c'est bon aussi.Mais pour pouvoir
> utiliser PostMessage(), j'ai besoin de convertir le HANDLE en HWND.Et
> c'est a ce niveau que je bloque.

> Comment je pourrait faire ?

> Merci.

> Bye.

Un cast ne suffit pas ?
monHWND =(HWND)MonHandle;- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Ben j'ai fait le cast, mais sa ne marhce pas.VLC ne se met pas au 1er
plan et l'appuit sur espace ne lance/stop pas la music.
Voici le code (je debute avec winapi, donc il doit y avoir des
erreurs) :

int main(void)
{
HANDLE hVLC;
HWND hVLCWnd;

printf("PID de vlc.exe = %ldn", GetPIDByName("vlc.exe"));

/** Recup du handle de VLC via son PID **/
hVLC = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0,
GetPIDByName("vlc.exe"));
if(hVLC == NULL)
{
perror("OpenProcess() failed");
exit(1);
}
else
printf("handle de vlc = 0x%Xnn", hVLC);

/** convertion du handle en HWND **/
hVLCWnd= (HWND)hVLC;

/** mise au premier plan de vlc **/
SetForegroundWindow(hVLCWnd);
printf("Focus VLC...n");
Sleep(100);

/** start music */
PostMessage(hVLCWnd, WM_KEYDOWN, VK_ESCAPE, 0);
printf("lecture...n");
Sleep(5000);

/** stop music **/
PostMessage(hVLCWnd, WM_KEYDOWN, VK_ESCAPE, 0);
printf("Stop music...n");

return 0;
}

Sur le tuto que je regarde, l'auteur utilise FindWindow() pour
récupérer le handle, mais moi je ne connais pas le class name de
vlc.Et je souhaiterais trouver la solution au code ci dessus.
Christian ASTOR
Le #20353171
On 15 oct, 06:58, Polo497
Ben j'ai fait le cast, mais sa ne marhce pas.VLC ne se met pas au 1er
plan et l'appuit sur espace ne lance/stop pas la music.



Tu as mélangé Process handle et Window handle.
La classe étant générique (un "QWidget"), tu peux utiliser EnumWindow s
()-GetWindowThreadProcessId() sur les fenêtres visibles
(et je ne comprends pas pourquoi tu envoies un VK_ESCAPE ensuite...)
Polo497
Le #20354091
On 15 oct, 08:10, Christian ASTOR
On 15 oct, 06:58, Polo497
> Ben j'ai fait le cast, mais sa ne marhce pas.VLC ne se met pas au 1er
> plan et l'appuit sur espace ne lance/stop pas la music.

Tu as mélangé Process handle et Window handle.
La classe étant générique (un "QWidget"), tu peux utiliser EnumWind ows
()-GetWindowThreadProcessId() sur les fenêtres visibles
(et je ne comprends pas pourquoi tu envoies un VK_ESCAPE ensuite...)



Bon j'ai passé pas mal de temps a éssayer de capter EnumWindows(),
j'arrive pas.Je saurais même pas expliquer ce que je compend pas.Je
suis trop débutant en Winapi (depuis le debut de la semaine) pour
vraiment comprendre.
QWidget j'ai regardé aussi, je ne connais absolument pas Qt, donc
c'est chaud.

Sinon j'ai fait comme cela, sa fonctionne :

int main(void)
{
HWND hFore;
DWORD VLCId = 0;

Sleep(2000);

/* Recup du Handle de fenetre, de la fenetre qui a le focus */
hFore = GetForegroundWindow();

/* Juste pour tester */
VLCId = GetWindowThreadProcessId(hFore, NULL);
printf("id vlc = %ldn", VLCId);

Sleep(500);

/* appuit sur espace */
if(PostMessage(hFore, WM_KEYDOWN, VK_SPACE, 0) == 0)
{
printf("PostThreadMessage() failed");
exit(1);
}

Sleep(5000);

PostMessage(hFore, WM_KEYDOWN, VK_SPACE, 0);

return 0;
}

En tout cas j'ai apprit pas mal de truc, même si je ne sait pas encore
bien les utiliser.

@+++
Publicité
Poster une réponse
Anonyme