Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| USER32.DLL et SendMessageA sur FORM 0 | |
| | Auteur | Message |
---|
Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: USER32.DLL et SendMessageA sur FORM 0 Lun 30 Avr 2018 - 23:53 | |
| Bonjour, A l'époque où je codais avec l'excellent PowersoftMaker dont je pleure chaque jour l'arrêt du développement, j'utilisais une astuce toute bête pour autoriser le déplacement d'une fenêtre sur tout son espace et pas seulement sur la barre de titre afin de skinner intégralement mes applications. Ce "truc" est disponible partout sur le net ( comme ici : Moving a Form without the Title Bar). Seulement voilà, avec PANORAMIC, impossibilité de reproduire le même fonctionnement. Quelqu'un a-t-il assez de connaissance pointue sur le sujet pour résoudre mon souci ? Merci infiniment, voire au-delà. - Code:
-
dll_on "user32" : dim res% label deplace,exit on_mouse_down 0, deplace on_close 0,exit END
deplace: res% = dll_call4("SendMessageA",handle(0),161,2,0) return
exit: dll_off return | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 0:48 | |
| Hello Fred Tu dois appeler ReleaseCapture avant SendMessageAComme ceci - Code:
-
dll_on "user32" : dim res% label deplace,exit on_mouse_down 0, deplace on_close 0,exit END
deplace: res% = dll_call0("ReleaseCapture") res% = dll_call4("SendMessageA",handle(0),161,2,0) return
exit: dll_off return
| |
| | | Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 0:55 | |
| - papydall a écrit:
- Hello Fred
Tu dois appeler ReleaseCapture avant SendMessageA SPLENDIDE | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 0:58 | |
| Bravo, Papydall ! Voici un code 100 % Panoramic, sans API, pour faire la même chose: - Code:
-
label down, move, up dim xp0%, yp0%, x%, y%, d% on_mouse_down 0,down on_mouse_move 0,move on_mouse_up 0,up END
deplace: res% = dll_call0("ReleaseCapture) res% = dll_call4("SendMessageA",handle(0),161,2,0) return
down: xp0% = mouse_x_left_down(0) yp0% = mouse_y_left_down(0) d% = 1 return up: d% = 0 return move: if d%=1 x% = mouse_x_position(0) y% = mouse_y_position(0) left 0,left(0) - (xp0%-x%) top 0,top(0) - (yp0%-y%) end_if return
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 1:00 | |
| Cette astuce est très utile si la barre de titre de la fenêtre est invisible. Il suffit de cliquer n’importe où dans la fenêtre et déplacer tout en maintenant le bouton de la souris. - Code:
-
dll_on "user32" : dim res% label deplace,exit top 0,-100 : ' la barre de titre est hors vision on_mouse_down 0, deplace on_close 0,exit END
deplace: res% = dll_call0("ReleaseCapture") res% = dll_call4("SendMessageA",handle(0),161,2,0) return
exit: dll_off return
| |
| | | Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 1:13 | |
| - Klaus a écrit:
- Bravo, Papydall !
Voici un code 100 % Panoramic, sans API, pour faire la même chose: C'est encore plus magique !!! Mille merci. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 1:14 | |
| - Citation :
- Cette astuce est très utile si la barre de titre de la fenêtre est invisible.
ou pour une form avec BORDER_HIDE ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 1:39 | |
| Peut-être trouveriez-vous une quelconque utilité pour cet autre code. Envoyer une ou plusieurs entrées clavier vers la fenêtre active comme si ces dernières étaient saisies depuis le clavier. - Code:
-
rem ============================================================================ rem SendKeys rem Par Papydall rem ============================================================================ rem Envoie une ou plusieurs entrées clavier vers la fenêtre active comme si ces rem dernières étaient saisies depuis le clavier. rem Syntaxe : SendKeys(string) rem string : Expression de chaîne spécifiant les entrées clavier à envoyer. rem Chaque touche est représentée par un ou plusieurs caractères. rem Pour spécifier un caractère unique, utilisez le caractère correspondant. rem Par exemple, pour représenter la lettre A, utilisez la chaîne "A". rem Pour représenter plusieurs caractères, entrez les caractères les uns à la rem suite des autres. rem Pour représenter les lettres A, B et C, utilisez la chaîne "ABC". rem rem Les signes plus (+), circonflexe (^), pourcentage (%), tilde (~), parenthèses ( ) rem possèdent des significations spéciales pour SendKeys. rem Pour spécifier l’un de ces caractères, incluez-le entre des accolades {} rem Par exemple, pour spécifier le signe plus, utilisez {+} rem Les crochets ([ ]) ne possèdent pas de signification particulière pour SendKeys, rem mais vous devez tout de même les inclure entre des accolades. rem Pour spécifier des accolades, utilisez {{} et {}}.
rem Pour spécifier des caractères qui ne sont pas affichés lorsque vous appuyez rem sur une touche, tels que ENTRÉE ou TAB, ainsi que des touches qui représentent rem des actions et non des caractères, utilisez les codes affichés dans le tableau suivant :
rem Touche Code rem ESPACE ARRIÈRE {BACKSPACE}, {BS}, ou {BKSP} rem ARRÊT DÉFIL {BREAK} rem VERR. MAJ {CAPSLOCK} rem SUPPR ou SUPPRIMER {DELETE} ou {DEL} rem FLÈCHE VERS LE BAS {DOWN} rem FIN {END} rem ENTRÉE {ENTER} ou ~ rem ÉCHAP {ESC} rem AIDE {HELP} rem ORIGINE {HOME} rem INS OU INSER {INSERT} ou {INS} rem FLÈCHE GAUCHE {LEFT} rem VER NUM {NUMLOCK} rem PAGE SUIV {PGDN} rem PAGE PRÉC {PGUP} rem IMPR ÉCRAN {PRTSC} rem FLÈCHE DROITE {RIGHT} rem ARRÊT DÉFIL {SCROLLLOCK} rem TAB {TAB} rem FLÈCHE HAUT {UP} rem F1 {F1} rem F2 {F2} rem F3 {F3} rem F4 {F4} rem F5 {F5} rem F6 {F6} rem F7 {F7} rem F8 {F8} rem F9 {F9} rem F10 {F10} rem F11 {F11} rem F12 {F12} rem F13 {F13} rem F14 {F14} rem F15 {F15} rem F16 {F16}
rem Pour spécifier des combinaisons de touches avec les touches MAJ, CTRL et ALT, rem faites précéder le code de la touche par un ou plusieurs des codes suivants : rem Touche Code rem MAJ + rem CTRL ^ rem ALT %
rem Pour spécifier une combinaison dans laquelle la touche MAJ, CTRL et ALT rem doit être maintenue enfoncée alors que vous appuyez sur d’autres touches, rem incluez le code de ces touches entre parenthèses. rem Par exemple, pour indiquer que la touche MAJ doit être enfoncée alors que vous rem appuyez sur les touches E et C, utilisez "+(EC)". rem Pour spécifier que la touche MAJ doit être enfoncée alors que vous appuyez sur rem la touche E, suivi de la touche C sans que la touche MAJ ne soit enfoncée, rem utilisez "+EC".
rem Pour indiquer la répétition de touches, utilisez la forme {touche nombre} rem Veillez à placer un espace entre la touche et le nombre de fois que cette rem touche doit être entrée. rem Par exemple: rem {LEFT 42} rem signifie l’activation de la touche FLÈCHE GAUCHE 42 fois. rem {h 10} rem indique que la touche H doit être appuyée 10 fois. rem ============================================================================ rem Exemple 1 rem Envoyer des caractères à un memo rem ============================================================================ dim i memo 10 : height 10,200 : font_bold 10 : font_color 10,0,0,255 : set_focus 10 memo 20 : left 20,200 : height 20,200 : font_bold 20 : font_color 20,255,0,0 :hide 20
SendKeys("+salut") : ' seule la lettre s est en majuscule SendKeys("+(tout)") : ' le mot tout est en majuscule SendKeys("le") SendKeys("monde") SendKeys("{* 30}") : ' 30 * SendKeys("+nous sommes le "+ date$) SendKeys("+il est : " + time$) rem ============================================================================ rem Exemple 2 rem Envoyer des caractères à la calculatrice rem ============================================================================ SendKeys_Calc("10{+}20~*30~") : ' Envoyer 10+20 + <ENTREE> *30 + <ENTREE> ; le résultat est 900 message "Arrêter la calculatrice" TaskKill("calc.exe") : ' Fermer la calculatrice show 20 : set_focus 20 : pause 500 rem ============================================================================ rem Exemple 3 rem Envoyer un texte au memo 20 rem ============================================================================ SendKeys("+that's all folks!") for i = 10 to 0 step -1 SendKeys("+bye bye dans " + str$(i)+ " secondes") : pause 1000 next i rem ============================================================================ terminate
rem ============================================================================ rem Envoyer des caractères à la fenêtre active SUB SendKeys(key$) dim_local q$ q$ = chr$(34) file_open_write 9999,"SendKeys.vbs" file_writeln 9999,"set WshShell = WScript.CreateObject(" + q$ + "WScript.Shell" + q$ + ")" file_writeln 9999,"WshShell.SendKeys "+ q$ + key$ + q$ file_writeln 9999,"WshShell.SendKeys "+ q$ + "~" + q$ file_close 9999 execute_wait "SendKeys.vbs" file_delete "SendKeys.vbs" END_SUB rem ============================================================================ rem Envoyer des caractères à la calculatrice SUB SendKeys_Calc(key$) dim_local q$ q$ = chr$(34) file_open_write 9999,"SendKeys_Calc.vbs" file_writeln 9999,"set WshShell = WScript.CreateObject(" + q$ + "WScript.Shell"+ q$ +")" file_writeln 9999,"WshShell.Run "+ q$ + "calc" + q$ file_writeln 9999,"WScript.Sleep 500" file_writeln 9999,"WScript.Sleep 100" file_writeln 9999,"WshShell.SendKeys " + q$ + key$ + q$ file_close 9999 execute_wait "SendKeys_Calc.vbs" file_delete "SendKeys_Calc.vbs" END_SUB rem ============================================================================ rem Terminer une application SUB TaskKill(task$) dim_local q$ q$ = chr$(34) file_open_write 9999,"TaskKill.vbs" file_writeln 9999,"set WshShell = WScript.CreateObject(" + q$ + "WScript.Shell"+ q$ +")" file_writeln 9999,"Set oExec = Wshshell.exec("+q$+"taskkill.exe /im "+task$+q$+")" file_writeln 9999,"WScript.Sleep 100" file_close 9999 execute_wait "TaskKill.vbs" file_delete "TaskKill.vbs" END_SUB rem ============================================================================
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 9:36 | |
| Avec l'aide de Silverman, j'ai pu simplifier mon code pour le déplacement d'une form: - Code:
-
label move dim xp0%, yp0%, x%, y%, d% d% = 0 on_mouse_move 0,move END
move: if mouse_left_down(0)>0 d%=1 xp0% = mouse_x_left_down(0) yp0% = mouse_y_left_down(0) end_if if mouse_left_up(0)>0 then d%=0 if d%=1 x% = mouse_x_position(0) y% = mouse_y_position(0) left 0,left(0) - (xp0%-x%) top 0,top(0) - (yp0%-y%) end_if return | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 9:45 | |
| @Klaus Excellent... et hop, archivé! Même si ça marche parfaitement, tu devrais placer le couple 'off_mouse_move/on_mouse_move' pour éviter un potentiel plantage | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 9:54 | |
| Comme ceci: - Code:
-
label move dim xp0%, yp0%, x%, y%, d% d% = 0 on_mouse_move 0,move END
move: off_mouse_move 0 if mouse_left_down(0)>0 d%=1 xp0% = mouse_x_left_down(0) yp0% = mouse_y_left_down(0) end_if if mouse_left_up(0)>0 then d%=0 if d%=1 x% = mouse_x_position(0) y% = mouse_y_position(0) left 0,left(0) - (xp0%-x%) top 0,top(0) - (yp0%-y%) end_if on_mouse_move 0,move return | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 10:03 | |
| Cette astuce permet d'avoir une form sans bord, avec une barre de titre simulée par un PICTURE. On tire cette form par ce PICTURE, pas par la form elle-même. Ceci permet de s'affranchir totalement de la croix rouge. On peut ensuite y placer les boutons qu'on veut - ici, la simulation d'un bouton plat pour sortir: - Code:
-
label move, exit dim xp0%, yp0%, x%, y%, d% d% = 0 border_hide 0 picture 1 : width 1,width_client(0) : height 1,30 : color 1,255,255,0 picture 2 : width 2,20 : height 2,20 : color 2,255,0,0 top 2,5 : left 2,width_client(0)-25 font_bold 2 : font_size 2,10 : font_color 2,255,255,255 2d_target_is 2 : 2d_fill_color 255,0,0 print_target_is 2 : print_locate 5,2 : print "X" on_click 2,exit on_mouse_move 1,move END
move: off_mouse_move 1 if mouse_left_down(1)>0 d%=1 xp0% = mouse_x_left_down(1) yp0% = mouse_y_left_down(1) end_if if mouse_left_up(1)>0 then d%=0 if d%=1 x% = mouse_x_position(1) y% = mouse_y_position(1) left 0,left(0) - (xp0%-x%) top 0,top(0) - (yp0%-y%) end_if on_mouse_move 1,move return exit: if message_confirmation_yes_no("Voulez-vous vraiment sortir ?")<>1 then return terminate | |
| | | Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 Mar 1 Mai 2018 - 11:29 | |
| Très très bien tous ces bouts de code.. A conserver | |
| | | Contenu sponsorisé
| Sujet: Re: USER32.DLL et SendMessageA sur FORM 0 | |
| |
| | | | USER32.DLL et SendMessageA sur FORM 0 | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |