|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Débuté par nac, 25 jan. 2023 14:28 - 3 réponses |
| |
| | | |
|
| |
Membre enregistré 29 messages |
|
Posté le 25 janvier 2023 - 14:28 |
Bonjour a tous,
J'ai une application windev 27 qui doit intercepter le clic sur un bouton (A) d'un autre logiciel (non windev) qui lance une impression .
Je voudrais entre le clic sur le bouton A et son impression executer le code du bouton (BT_ENTER ) qui se trouve dans mon application windev qui valide une info et si c'est correct laisser l'impression se faire sinon ne rien faire.
J'intercepte bien le clic et il execute bien le code de mon bouton BT_ENTER mais il lance l'impression du bouton A avant d'aller dans mon code BT_ENTER.
j'ai utilisé le hook.
Quelqu'un a-t-il une idée ?
MErci d'avance Nac
Dans l'initialisation de ma fenetre : ////////////////////////////////// CONSTANTE WH_MOUSE_LL = 14 WM_LBUTTONDOWN = 513 WM_LBUTTONUP = 514 WM_LBUTTONDBLCLK = 515 WM_RBUTTONDOWN = 516 WM_RBUTTONUP = 517 WM_RBUTTONDBLCLK = 518 WM_MBUTTONDOWN = 519 WM_MBUTTONUP = 520 WM_MBUTTONDBLCLK = 521 WM_MOUSEMOVE = 512 WM_MOUSEWHEEL = 522 MK_LBUTTON = 1 MOUSEEVENTF_ABSOLUTE = 32768//0x8000 MOUSEEVENTF_LEFTDOWN = 2//0x0002 MOUSEEVENTF_LEFTUP = 4//0x0004 MOUSEEVENTF_RIGHTDOWN = 8//0x0008 MOUSEEVENTF_RIGHTUP = 16//0x0010 MOUSEEVENTF_MIDDLEDOWN = 32//0x0020 MOUSEEVENTF_MIDDLEUP = 64//0x0040 MOUSEEVENTF_MOVE = 1//0x0001 MOUSEEVENTF_WHEEL = 2048//0x0800 MOUSEEVENTF_HWHEEL = 4096//0x1000 MOUSETRAILS = 39//39 MOUSE_EVENT = 2//0x0002 MOUSE_MOVED = 1//0x0001 XBUTTON1 = 1 XBUTTON2 = 2 FIN
iHook est un entier système = 0 iHook = API("user32","SetWindowsHookExA",WH_MOUSE_LL,&MouseEvent,Instance(),0)
//////////////////////////// Dans la procedure local MouseEvent : PROCEDURE MouseEvent(iIdHook est un entier,wParam est un entier,LParam est un entier) amount_tmp est un réel mok est un entier mok=0 SELON wParam
//Bouton gauche enfoncé CAS WM_LBUTTONDOWN //513 // Trace("Bouton gauche enfoncé") //Récupérer le handle de la fenêtre Windows cliquée strPOINT est une Structure x est un entier y est un entier FIN stPoint est une strPOINT stPoint.x = PoidsFaible(CurseurPos(cpEcran)) stPoint.y = PoidsFort(CurseurPos(cpEcran)) iHandle est un entier système iHandle = API("USER32","WindowFromPoint",stPoint) IF stPoint.x >=415 AND stPoint.x <=616 AND stPoint.y >=39 AND stPoint.y <=81 THEN iX = stPoint.x iY = stPoint.y
ExécuteTraitement(BTM_ENTER1,trtClick) END //Bouton gauche relaché CAS WM_LBUTTONUP //514 // Trace("Bouton gauche relaché") //Bouton droit enfoncé CAS WM_RBUTTONDOWN //516 // Trace("Bouton droit enfoncé") //Bouton droit relaché CAS WM_RBUTTONUP//517 // Trace("Bouton droit relaché") //Déplacement souris CAS WM_MOUSEMOVE //512 // Trace("Déplacement souris") //Roulette souris CAS WM_MOUSEWHEEL //522 // Trace("Roulette souris") FIN
RENVOYER API("User32","CallNextHookEx",iHook,iIdHook,wParam,LParam) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 111 messages Popularité : +1 (1 vote) |
|
Posté le 25 janvier 2023 - 18:13 |
Bonjour,
Curieux de savoir si il y a une astuce possible à ce que vous cherchez à faire ... Dans le principe, qu'est ce qui pourrait empêcher l'appli non windev de poursuivre son cours même si vous avez intercepté un clic de souris sur le bouton qui lance l'impression. Le dit bouton ayant reçu son clic, il exécute son code et vous ne pouvez intervenir dans le code que vous n'avez pas écrit. Peut être voir du côté de l'impression ? Bloqué, supprimé l'impression et ensuite piloter ou pas un 2e clic sur le bouton de l'appli tierce. Dans tous les cas, ça resterait bancal comme solution. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 29 messages |
|
Posté le 26 janvier 2023 - 11:21 |
Bonjour
Lorsque je le prends en debug il recupere bien le clic avant d'executer l'impression de l'autre application mais sans debug ca ne marche pas. Si je ne me trompe pas c'est pas le clicdown qui execute le code d'un bouton mais le clicup, c'est pour cette raison qu'on peut intercepter.
mais pq ca ne marche pas en execution !?!?
je cherche tjrs |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 58 messages Popularité : +6 (6 votes) |
|
Posté le 27 janvier 2023 - 08:50 |
Bonjour,
Je pense, comme NadSoftware, qu'il n'est pas possible (et cela devrait rester ainsi), de "bloquer" le traitement d'un autre logiciel. La solution ici, serait de mettre sur pause l'impression, le temps de valider l'info. Puis de relancer le spooler d'impression ou de supprimer le document dans le spooler puis de relancer le spooler.
-- Qui ne sait rien, de rien ne doute... |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|