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

convertir HIWORD & LOWORD en un lparam

3 réponses
Avatar
pipo
Bonjour,
Je sais qu'il existe une fonction pour obtenir le HIWORD et LOWORD d'un
lparm.
Mais à l'inverse existe t il une fonction pour construire un lparam à partir
d'un HIWORD et LOWORD.
Je me demande cela afin d'envoyer un message WM_LBUTTONDOWN à ma fenêtre
avec en lparam les abscisses et ordonnées que me donne Winspector.
Est ce qu'une telle manipulation marchera?
Il faut mettre 0 au wparam?

Merci pour vos réponses

PS: je suis très nul en api win32, si vous connaissez un tutorial qui
conseil pour l'envoi de message et la reconnaissance de fenêtre (je fouine
sur msdn mais il faut que je tombe par hazard sur les bonens fonctions).

3 réponses

Avatar
Christian ASTOR
pipo wrote:

Je sais qu'il existe une fonction pour obtenir le HIWORD et LOWORD d'un
lparm.
Mais à l'inverse existe t il une fonction pour construire un lparam à partir
d'un HIWORD et LOWORD.



MAKELPARAM()

Je me demande cela afin d'envoyer un message WM_LBUTTONDOWN à ma fenêtre
avec en lparam les abscisses et ordonnées que me donne Winspector.
Est ce qu'une telle manipulation marchera?
Il faut mettre 0 au wparam?



WM_LBUTTONDOWN + WM_LBUTTONUP et wParam = MK_LBUTTON marche, mais la
façon standard est mouse_event() ou SendInput()
Avatar
pipo
>> Je me demande cela afin d'envoyer un message WM_LBUTTONDOWN à ma fenêtre
avec en lparam les abscisses et ordonnées que me donne Winspector.
Est ce qu'une telle manipulation marchera?
Il faut mettre 0 au wparam?



WM_LBUTTONDOWN + WM_LBUTTONUP et wParam = MK_LBUTTON marche, mais la
façon standard est mouse_event() ou SendInput()




Quelque chose m'échappe, j'ai écri ce code pour appuyer sur la tête jaune de
bonhomme du démineur (afin de m'entrainer...) :



#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

int main()
{
HWND demineur;
LPARAM lpara;
demineur=FindWindow("Démineur",NULL);
printf("%d",demineur);
lpara=MAKELPARAM(95,28);
printf("n 0x%X",lpara);
SetForegroundWindow(demineur);
PostMessage(demineur,WM_LBUTTONDOWN,MK_LBUTTON,lpara);
PostMessage(demineur,WM_LBUTTONUP,0,lpara);
Sleep(10000);
}


Mes paramètres utilisés sont ceux obtenus grâce à Winspector et lorsque
j'éxécute ce code j'obtiens EXACTEMENT les mêmes messages
(WM_LBUTTONDOWN/UP) que ceux obtenus lorsque je le fais manuellement... et
pourtant le clique n'est pas bien fait : le bouton à la fin de mon programme
(durant le sleep) reste dans la position enfoncée et ne semble pas être
relaché!!!Par conséquent le clique n'est pas valide ce qui ne m'arrange pas
trop .

D'ou provient la faute? (je compile avec dev c++, j'ai testé de mettre
plusieurs fois mes messages sans succés...)

Merci pour votre patience
Avatar
Christian ASTOR
pipo wrote:

Quelque chose m'échappe, j'ai écri ce code pour appuyer sur la tête jaune de
bonhomme du démineur (afin de m'entrainer...) :



Le démineur teste également WM_MOUSEMOVE pour savoir si le curseur est
sur le bonhomme, donc dans ce cas, pas possible => mouse_event()