CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C/win32] Déplacements de la souris

[exit]
[exit]
Niveau 5
12 novembre 2006 à 10:59:31

Bonjour, j´aimerais savoir si quelqu´un peut m´éclairer quand au fonctionnement de WM_MOUSEMOVE dans l´api win32 et comment l´utiliser avec PostMessage.

La doc et l´api sont claires concernant les pressions de touches clavier : on envoie un message WM_KEYDOWN avec le VK_... correspondant, puis un WM_KEYUP avec le VK_...

Par contre, je vois mal comment simuler un clic souris à un certain endroit de la partie cliente d´une application (qui dans mon cas est minimisée en plus).

Certains me répondront d´utiliser "SetCursorPos" et "mouse_event", mais ces fonctions déplacent effectivement la souris, hors je voudrais simplement envoyer un message à une certaine fenêtre tout en gardant le contrôle de ma souris pour faire autre chose.

J´avais essayé :

PostMessage(wowWindow, WM_LBUTTONDOWN, 0, MAKELONG(x,y));
PostMessage(wowWindow, WM_LBUTTONUP, 0, MAKELONG(x,y));

Mais ca ne fonctionne pas...

godrik
godrik
Niveau 30
12 novembre 2006 à 12:48:06

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_lbuttondown.asp

Je penses que tu as mal reglé le wParam.

dnob700
dnob700
Niveau 10
12 novembre 2006 à 22:21:26

en fait ce message (WM_LBUTTONDOWN) dit que le bouton "gauche" est pressé, mais ça pourrait-être le bouton droit physique si l´utilisateur est gaucher.

En l´occurence, je ne pense pas que le wParam soit lu par un programme, mais ça ne peut pas faire de mal de le spécifier quand même.

essaye un sleep(0) //ou un peu plus
entre les deux PostMessage. Car certains message i
nvalide dans la pile les autres messages du même type s´il n´ont pas été lue avant quele suivant arive.

...

après vérification sur la msdn (page
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/aboutmouseinput.asp? rubrique MouseMessage) c´est bien le cas.

Tu devrais donc utiliser SendMessage pour envoyer ton message (au moins pour le premier des deux) ou SendMessageTimeout qui va attendre que la fenêtre ait lu le message avant de rendre la main.

Mais je ne sais pas si ça va fonctionner, car je ne sais pas si tu as le droit d´envoyer ce genre de message (sans compter que si le système génère d´autre message de la souris, ça va invalider les tiens), qui sont pas mal traité pour diverse raison (génération des messages de double clique par exemple).

D´autre part, si la fenêtre lit la position de la souris avec autre chose que win32 (directX au hasard vu le nom de la fenêtre ...) il n´est pas dit qu´elle recoive l´événement.

Sans compter que si ta fenêtre est minimisé, je ne suis même pas sur qu´elle possède une surface client à ce moment là (c´est-à-dire que la surface n´est pas jsute caché), et dans tout les cas, je ne suis pas sûr qu´elle traite ce genre de message en étant minimisé.
Tu ferais mieux de mettre un petit compte à rebours dans ton application pour avoir le temps de réouvrir l´autre appli (qui je suppose est pleine écran, ce qui t´oblige à la minimiser).

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment