Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Détection d'une boite de confirmation

12 réponses
Avatar
cyan
Bonjour,

Est il possible de d=E9tecter l'apparition de la boite de confirmation
( par exemple sous word, quand l'on modifie un document et que l'on
ferme l'application, une boite appara=EEt et demande si l'on souhaite
sauvegarder les modifications) et savoir quel bouton a =E9t=E9 press=E9 ?


toutes mes excuses si je poste dans le mauvais forum, pourriez vous
alors m'indiquer le forum ad=E9quat ?

merci d'avance=20

Yann

10 réponses

1 2
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à cyan qui a écrit :
Bonjour,

Est il possible de détecter l'apparition de la boite de confirmation
( par exemple sous word, quand l'on modifie un document et que l'on
ferme l'application, une boite apparaît et demande si l'on souhaite
sauvegarder les modifications) et savoir quel bouton a été pressé ?




Il y a un logiciel nommé AutoIt qui est fait pour automatiser de force des
processus intégrant des confirmations forcées d'interfaces graphiques. Ca
implique qu'il soit capable de détecter l'ouverture d'une fenêtre et de la
localiser avec ses boutons.
Je vais avoir à le mettre en oeuvre bientôt, mais donc pour l'instant je ne
le connais pas assez pour savoir s'il est capable de détecter aussi des
interventions de l'utilisateur (clics souris ou accélérateurs clavier).
C'est probable mais...
Si quelqu'un le connaissant mieux pouvait confirmer, ça m'intéresse aussi.

Ensuite donc si c'est possible, comme cet utilitaire est fait lui-même pour
déclencher des choses, il doit bien y avoir un moyen de lui faire
transmettre l'information là où vous voulez la récupérer (déclenchement d'un
bouton macro, etc.).

toutes mes excuses si je poste dans le mauvais forum, pourriez vous
alors m'indiquer le forum adéquat ?



Il est AMHA inévitable que ça réclame une forme de programmation, quel que
soit l'outil mis en jeu...

Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/
Avatar
Christian ASTOR
cyan wrote:


Est il possible de détecter l'apparition de la boite de confirmation
( par exemple sous word, quand l'on modifie un document et que l'on
ferme l'application, une boite apparaît et demande si l'on souhaite
sauvegarder les modifications) et savoir quel bouton a été pressé ?



WH_CBT + subclassing
Avatar
cyan
le subclassing est ce l'héritage ?
si oui pourquoi l'utiliser ?
Avatar
Thierry
Bonjour,

cyan a écrit :

le subclassing est ce l'héritage ?
si oui pourquoi l'utiliser ?



Heu.. dans le sens MFC oui mais là ca va etre chaud a utiliser.

Pour preciser le message de Christian : faire un hook sur la création de
fenetre (WH_CBT) et subclasser les fenetres qui t'interesse pour pouvoir
connaitre leurs evenements (clic, ...).

--
« Le travail est probablement ce qu'il y a sur cette terre de plus bas et
de plus ignoble. Il n'est pas possible de regarder un travailleur sans
maudire ce qui a fait que cet homme travaille, alors qu'il pourrait nager,
dormir dans l'herbe ou simplement lire ou faire l'amour avec sa femme. »
Boris VIAN
Mon blog RSS : http://yarglah.free.fr/monblog_rss.php <<




Avatar
cyan
merci pour le renseignement.

Cependant je n'arrive pas à capter le signal WH_CB, dans le sens où
la fonction associée au signal ne se lance jamais....... je ne
comprend pas.
alors que dans mon programme de test , j'appelle une Message Box.

quelqu'un pourrait il m'indiquer ce qui ne va pas ?

merci d'avance.

voici mon code :

//// DLL

#include "Hook.h"
#include "stdafx.h"

#define TXTLENGTH 20

bool bHooked = false; /// vrai si hook amorcé
bool trapped = false; /// vrai si event capturé
HINSTANCE hInst;
HHOOK hhook; /// instance du hook



BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

/// traitement
LRESULT CALLBACK CBTProc(int code, WPARAM wParam, LPARAM lParam)
{
/// activation d'une nouvelle fenêtre ?
if(code == HCBT_SETFOCUS /*HCBT_ACTIVATE*/)
{
/// buffer pour récupérer le nom de la classe de la nouvelle
fenêtre
char text[TXTLENGTH];

/// récupération du nom de la classe
GetClassName((HWND)wParam, text, TXTLENGTH);

trapped = true;

return CallNextHookEx(hhook, code, wParam, lParam);
}

/// amorce l'écoute
_declspec(dllexport) void SetHook(void)
{
if(!bHooked)
{
/// début de l'écoute de l'évènement WH_CBT
/// CBTProc = fonction à éxécuter après réception de
l'évènement
hhook = SetWindowsHookEx(WH_CBT, CBTProc, hInst, (DWORD)NULL);
bHooked = FALSE;
trapped = FALSE;
}
}

/// stoppe l'écoute
_declspec(dllexport) void RemoveHook(void)
{
if(bHooked)
UnhookWindowsHookEx(hhook);
}

_declspec(dllexport) bool IsTrapped(){ return trapped;}



//// mon programme de test
#include "stdafx.h"
#include <windows.h>
#include <iostream>

using namespace std;

#pragma comment(lib, "Hook.lib")

_declspec(dllimport) void SetHook(void);
_declspec(dllimport) void RemoveHook(void);
_declspec(dllimport) bool IsTrapped();


int _tmain(int argc, _TCHAR* argv[])
{
SetHook();

MessageBox(NULL,"coucou","test",0);

if( IsTrapped() )
cout<<"ok capture"<<endl;
else
cout<<"pas de capture"<<endl;

getchar();
return 0;
}
Avatar
Christian ASTOR
cyan wrote:


hhook = SetWindowsHookEx(WH_CBT, CBTProc, hInst, (DWORD)NULL);



Bug sur hInst (GetModuleHandle() par ex)
Avatar
cyan
je n'arrive toujours pas à détecter l'évènement meme en faisant la
modification conseillée :

/// amorce l'écoute
_declspec(dllexport) void SetHook(void)
{
if(!bHooked)
{
/// début de l'écoute de l'évènement WH_CBT
/// CBTProc = fonction à éxécuter après réception de
l'évènement
hInst = GetModuleHandle("Hook.dll"); /// AJOUTEE

hhook = SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, hInst,
/*(DWORD)NULL*/GetCurrentThreadId());

MessageBox(NULL,"","test",0);
}
}
Avatar
patrick
ca marche bien chez moi : j'obtiens "ok capture".
t'as quel OS ?
Avatar
cyan
en fait cela marche très bien....je ne chargeais pas la bonne DLL....

pour en revenir au subclassing, pourriez vous m'éclairer un peu sur le
sujet car je ne comprend pas comment cela fonctionne même après avoir
lu quelques commentaires sur le net.
Ce qui m'échappe c'est comment capturer le message du bouton qui a
été pressé ?
Avatar
Christien ASTOR
cyan wrote:

pour en revenir au subclassing, pourriez vous m'éclairer un peu sur le
sujet car je ne comprend pas comment cela fonctionne même après avoir
lu quelques commentaires sur le net.
Ce qui m'échappe c'est comment capturer le message du bouton qui a
été pressé ?



OldDialogProc = SetWindowLong((HWND)wParam,GWL_WNDPROC,(LONG) (WNDPROC)
DialogProc);

puis LOWORD(wParam) de WM_COMMAND de DialogProc() pour bouton clické.
1 2