Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Convertir un HANDLE en HWND

4 réponses
Avatar
Polo497
salut,

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

Pour =EAtre un peu plus pr=E9cis, ce que j'essaye de faire c'est de
r=E9cup=E9rer le PID du lecteur audio vlc(apr=E8s l'avoir lanc=E9), puis vi=
a
son PID r=E9cup=E9rer 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.

4 réponses

Avatar
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é), 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;
Avatar
Polo497
On 14 oct, 22:36, ByB wrote:
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.
Avatar
Christian ASTOR
On 15 oct, 06:58, Polo497 wrote:

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...)
Avatar
Polo497
On 15 oct, 08:10, Christian ASTOR wrote:
On 15 oct, 06:58, Polo497 wrote:

> 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.

@+++