Cpcdos
Messages postés425Date d'inscriptionsamedi 11 juillet 2009StatutMembreDernière intervention28 octobre 2016
-
27 août 2010 à 21:25
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
28 août 2010 à 23:25
Je voudrais savoir comment fonctionne le 'sendmessage'
ex: pour réduire / restaurer / et fermer paint.exe
Chouchensb
Messages postés64Date d'inscriptionjeudi 3 mars 2005StatutMembreDernière intervention 2 septembre 20101 28 août 2010 à 00:35
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 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
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).
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)
Cpcdos
Messages postés425Date d'inscriptionsamedi 11 juillet 2009StatutMembreDernière intervention28 octobre 20161 28 août 2010 à 11:29
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 ?