Comment Marche un sendmessage ? [Résolu]

Cpcdos 428 Messages postés samedi 11 juillet 2009Date d'inscription 28 octobre 2016 Dernière intervention - 27 août 2010 à 21:25 - Dernière réponse : Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention
- 28 août 2010 à 23:25
Je voudrais savoir comment fonctionne le 'sendmessage'

ex: pour réduire / restaurer / et fermer paint.exe

j'ai vu sur les site mé je comprend rien
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Chouchensb 64 Messages postés jeudi 3 mars 2005Date d'inscription 2 septembre 2010 Dernière intervention - 28 août 2010 à 00:35
3
Merci
Bonjour,

Je découvre moi aussi depuis un mois la fonction qu'est SendMessage, et je galère encore. Je comprend donc ton désarroi, et je vais essayer de te donner quelques pistes (du moins sur ce que j'ai réussi ou croit avoir réussi à comprendre)

* SendMessage est une API WIN32 *

Alors SendMessage est une API WIN32 fournie par Windows.
Mais Une API, c'est quoi ? Eh bien ca veut dire "Application Programming Interface": c'est la boite à outils fournie par Microsoft pour programmer Windows, et ça désigne tout un tas de fonctions contenus dans divers dll (user32.dll, kernell32.dll, etc. ? une dll, c'est juste un fichier qui contient des fonctions ou des routines et qui est partagé et accessible à tous les programmes). SendMessage, c'est dans user32.dll.

Pour plus d'infos sur les différentes dll, tu peux aller voir:
http://en.wikipedia.org/wiki/Api

Pour utiliser une API, il faut d'abord commencer par la déclarer, tout comme on déclare une variable: il faut dire au programme d'où elle vient (user32.dll) et quels sont les paramètres à passer. Donc il faut insérer une ligne du style:

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long

Pour savoir comment déclarer les API, va voir le site:
http://allapi.mentalis.org/apilist/s.shtml

* SendMessage sert à envoyer des messages ! *

SendMessage sert à envoyer des messages Windows. Mais un message Windows, c'est quoi ? Et bien (de ce que j'ai vaguement compris), quand tu cliques avec la souris sur un bouton d'une interface, Windows envoie un message à l'interface lui disant "Eh! La souris vient de cliquer sur ton bouton!". Puis l'interface envoie à son tour un message au programme lui disant "Eh! On vient de cliquer sur mon bouton, il faudrait activer le code correspondant !" etc. etc.
Bref, entre la souris, le clavier, les interfaces graphiques et le code pur, tout est géré par l'envoi de messages, et tous ces messages sont gérés par Windows. Donc à l'aide de la super boite à outil fournie par windows (les API), on peut intercepter ces messages (c'est la technique de hooking/subclassing : http://en.wikipedia.org/wiki/Hooking) ou générer des messages « artificiels » pour envoyer des instructions à des programmes tiers (c'est ce que tu veux faire en réduisant/restaurant et fermant paint).

* Et où est ce que je trouve de l'aide ? *

A ce sujet, il y a un très bon tutoriel d'introduction sur vbFrance ici (c'est celui avec lequel j'ai commencé):
http://www.vbfrance.com/codes/COURS-PILOTAGE-APPLICATIONS_51165.aspx

Après, il faut s'aider de l'aide de Microsoft sur la MSDN. Parmi les plus utiles, il y a :
* Sendmessage
http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx
* SendDlgItemMessage
http://msdn.microsoft.com/en-us/library/ms645515(VS.85).aspx
* FindWIndow
http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx

Et bien sûr, la liste de tous les messages Windows :
http://msdn.microsoft.com/en-us/library/ms644927(v=VS.85).aspx#system_defined

De ce que tu dois retenir dans les paramètres de Sendmessage/ SendDlgItemMessage:
* Le handle d'une fenêtre, c'est un numéro attribué dynamiquement à une fenêtre lors de sa création ? C4est donc un nombre qui change constamment et qu'il faut trouver à l'aide d'une fonction telle que FindWIndow
* Le Control ID d'un élément, c'est un nombre figé attribué à un élément de la fenêtre (bouton, zone de texte, case à cocher, etc.). Il est défini au moment de la compilation du programme et peut se trouver à l'aide d'un logiciel espion (SPy++ fourni dans la suite Visual Studio de Microsoft, Winspector, qui est un vieux freeware, ou AutoIT Window Information, fourni avec le freeware AutoIT)
* Msg, wParam et lParam : le message à envoyer et ses paramètres correspondants ? il faut se référer à la liste des messages sur la MSDN (lien ci-dessus)
Un dernier truc: en règle générale, quand tu passes une chaine de caractères en paramètres, il faut utiliser ByVal devant, sinon ça plante)

* Et un bon bouquin dans tout ça ? *

Si l'Anglais ne te rebutes pas, on m?a recommandé le bouquin écrit par Dan Appleman en 1999 : ça date, on ne le trouve plus que d'occasion, mais il est plutôt instructif et très bien expliqué (et puis d'occasion, c'est toujours moins cher que neuf):
http://www.amazon.com/s/ref=nb_sb_noss'url=search-alias%3Daps&field-keywords=dan+appleman&ih=5_5_0_0_0_0_1_1_0_1.108_74&fsc=6
Voilà, en espérant que ça pourra te donner des idées...

Merci Chouchensb 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Chouchensb
Meilleure réponse
Chouchensb 64 Messages postés jeudi 3 mars 2005Date d'inscription 2 septembre 2010 Dernière intervention - 28 août 2010 à 00:54
3
Merci
Zut, pour le 1er lien sur les dll, je voulais mettre celui là propre à Windows:
http://en.wikipedia.org/wiki/Windows_API

Merci Chouchensb 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Chouchensb
Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 28 août 2010 à 23:25
3
Merci
gaffe a adapter les declarations d'APIs pour vb.net...
Long ====> integer

pour ta question, je repondrais simplement SC_RESTORE...

la doc est la:

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Renfield
Cpcdos 428 Messages postés samedi 11 juillet 2009Date d'inscription 28 octobre 2016 Dernière intervention - 28 août 2010 à 09:29
0
Merci
Woiiiii merciii Beaucoup pour tes explication , je comprend pratiquement tout cé super ^^

jcopie tous ca dans un txt ^^

et jregarde les lien
Commenter la réponse de Cpcdos
Cpcdos 428 Messages postés samedi 11 juillet 2009Date d'inscription 28 octobre 2016 Dernière intervention - 28 août 2010 à 09:40
0
Merci
Et saurais tu faire comment réduire une fenêtre d'un programme ??

si il faut un handle , où le mettre ?
Commenter la réponse de Cpcdos
Cpcdos 428 Messages postés samedi 11 juillet 2009Date d'inscription 28 octobre 2016 Dernière intervention - 28 août 2010 à 11:29
0
Merci
j'ai trouvé ça :

module :

[i]Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Public Const WM_SYSCOMMAND As Long = &H112
Public Const SC_SIZE As Long = &HF000&
Public Const SC_MINIMIZE As Long = &HF020&
Public Const SC_MAXIMIZE As Long = &HF030&/i

form :

[i]Private Sub Form_Load()
'mimiser calculatrice windows
SendMessage 2033168, WM_SYSCOMMAND, SC_SIZE Or SC_MINIMIZE, 0/i <(pour mimiser)

[i]'agrandir calculatrice windows
SendMessage 2033168}, WM_SYSCOMMAND, SC_SIZE Or SC_MAXIMIZE, 0/i <(pour restaurer en grand)
End Sub

mais le truk il y a t'il au autre truk que SC_MAXIMIZE car ca le restaure mais agrandi !
je veux pas car il y a des programmes qui est sencé pas être agrandi mais ca agrandi
même pour la calculatrice windows

il a t-il autre que SC_MAXIMIZE pour restaurer une fenêtre ?
Commenter la réponse de Cpcdos

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.