begin process at 2012 02 11 06:25:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

detection d'un messageBox et fermeture automatique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

detection d'un messageBox et fermeture automatique

mardi 5 juillet 2005 à 16:21:23 | detection d'un messageBox et fermeture automatique

elroulianito


J'aimerai utiliser une fonction issue d'une dll. Le problème est qu'à l'execution de celle-ci une fenêtre de type messagebox apparait m'invitant à cliquer sur ok.
Comment faire pour eviter que cette fenêtre apparaisse?
Je précise que j'utilise les MFC sous vc6 avec une appli "dialog based".

Voici ma première ébauche
------------------------------------------------------------
// 0) je crée un thread pour fermer automatiquement la fenêtre active
UINT Thread(LPVOID lparam)
{
     Sleep(100);
     PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0);
     AfxEndThread(TRUE);
     return 0;
}
void MyDlg::OnButton()
{
   // 1) Je lance le thread avant l'appel de la fonction dll
   AfxBeginThread(Thread,this);
   // 2) recours a la fonction contenue dans la dll
   Mafonctiondll();
 
}
------------------------------------------------------------
Cette "solution" n'est pas recevable car je ne sais pas à quel moment la messagebox apparaît, je suppose simplement qu'au bout de 100ms je peux tenter de la fermer mais cela sans aucune garantie!!
mardi 5 juillet 2005 à 21:07:01 | Re : detection d'un messageBox et fermeture automatique

vecchio56

Administrateur CodeS-SourceS
Je suis désolé de dire ca, mais le plus simple est de désassembler l'exécutable (avec w32dasm). Tu cherche ou est l'appel de MessageBox (tu trouves à partir des chaines utilisées par le programme). Tu dois trouver un call ??? qui va faire je crois 5 octets en tout. Tu note l'offset dans l'exécutable, et avec un editeur hexa, tu remplace par des "nop" (code 90h, tu en mets donc 5 à la suite)
mercredi 6 juillet 2005 à 13:47:07 | Re : detection d'un messageBox et fermeture automatique

Zootella

Sinon tu peux aussi esseyer de faire ce que vecchio56 a dit sans modifier la dll mais sa mémoire avec la fonction WriteProcessMemory(). D'ailleurs comment on modifie la mémoire d'une dll chargé ? if faut un processid pour un processus, et pour une dll ? Ou alors elle est chargé dans la mémoire du processus qui la charge ?
mercredi 6 juillet 2005 à 15:03:21 | Re : detection d'un messageBox et fermeture automatique

elroulianito


Ok les gars, je vais essayer tant bien que mal ce que vous me dites. Mais j'avoue que mon ambition de réussite n'est plus aussi élevée. Je pense que ce sera plus de la curiosité qu'autre chose. Car cela m'a l'air bien compliqué tout ça!! 
Je pensais naïvement qu'il existerait une fonction dans l'api windows "écoutant" les messages et interceptant celui d'un nouvelle fenêtre créee. Ainsi en lançant un thread d'écoute à un moment t. Lorsqu'à t+1 une fenêtre se crée (peut importe laquelle), celle-ci est automatiquement fermée.
En effet, on peut faire comme postulat que la prochaine qui s'ouvre est celle qu'on veut fermer. C'est pas "the solution" mais c'est un compromis résultat/temps passé.


...
mercredi 6 juillet 2005 à 18:30:30 | Re : detection d'un messageBox et fermeture automatique

vecchio56

Administrateur CodeS-SourceS
Ce que tu décrit existe aussi, ca s'appelle un hook (de type  WH_CBT). Regarde  SetWindowsHookEx dans MSDN
jeudi 7 juillet 2005 à 00:11:18 | Re : detection d'un messageBox et fermeture automatique

Zootella

Sinon, on peut modifier ta dll si tu la poste.
jeudi 7 juillet 2005 à 14:18:34 | Re : detection d'un messageBox et fermeture automatique

elroulianito

Pour commencer, merci beaucoup pour vos réponses et pour l'aide que vous vous proposez de m'offrir.

j'ai récupéré w32Dasm et l'éditeur hexadémal nécéssaire en complément (d'après différents topics) que j'ai choisi est pspad (il est apparemment conseillé d'utilisé hexaworkshop mais j'avais déjà pspad pour le php).

Plusieurs questions:

1) Comment trouver le call en question? La fonction dans le .h est déclarée comme ci-dessous:
 BOOL LoadImage(LPCTSTR Filename);

et dans le .cpp on retrouve:

BOOL CCVimage::LoadImage(LPCTSTR Filename)
{
 BOOL result;
 static BYTE parms[] = VTS_BSTR;
 InvokeHelper(0x21, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, Filename);
 return result;
}

2) Supposons que la ligne correspondante est trouvée (offset ??)
comment faire pour modifier celle-ci. Je précise que ma version de w32dasm est celle disponible à l'url [ Lien ] est-ce avec l'éditeur hexadécimal que l'on procède?

3) pour finir, zootella ou veux-tu que je la poste ma dll (me répond pas "dans ton c... !!" comme certaines de mes connaissances  le font souvent)


jeudi 7 juillet 2005 à 22:08:33 | Re : detection d'un messageBox et fermeture automatique

Zootella

Avec windasm tu cherche le call à modifier avec l'editeur hexa tu le modifie.

Tu ouvres ta dll avec windasm puis en haut à droite tu as un bouton 'Strn Ref'
Tu clic dessus puis tu cherche dans la listbox le text qui s'affiche dans la messagebox.
Une fois trouvé tu double-clique dessus et normalement windasm affichera le code asm qui affiche cette MessageBox (tu verras une ligne bleue : reference to: USER32.MessageBoxA) le code à modifier se trouve juste en dessous de cette ligne, donc tu sélectionne la première ligne puis dans la barre de statut en bas tout en bas tu as '@offset xxxxxxxxh' tu note ce numéro sans les zérosn et sans le h, tu vas dans ton éditeur héxa, tu dois avoir l'option 'aller à l'offset' tu rentre l'offset, là le curseur est direcment dessus, tu remplace FF15 (call) par 90 90 (nop) et encore 4 fois 90 pour l'adresse de la fonction MessageBoxA.

Voilà normalement ça devrait marcher comme ça.

Sinon tu poste ta dll dans ton c.. euh sur http://www.yousendit.com/



Cette discussion est classée dans : fonction, dll, fenêtre, thread, messagebox


Répondre à ce message

Sujets en rapport avec ce message

Constructeur dans une dll [ par kyfranBibax ] Coucou, J'ai quelques petites questions car je suis pas un pro du c++. J'ai cré une Dll pour utiliser dans un programme c#. J'obtiens une exception fonction recevant un pointeur de fonction d'une classe [ par fuliculi ] Bonjour à tous,j'ai un thread qui doit faire évoluer une variable "progress" de 0 à 100% (j'utilise les mutex pour éviter les écritures/lectures simul Probleme : creation d' une interface graphique par dll ... :-s [ par GeroXXXX ] Bonjour a tous :) Alors voici mon problème... Je suis actuellement sur la création d' un plugin en c++ ( dll ) pour Xchat : http://www.ircfr.com/code GetLayeredWindowAttributes et Windows 2000 [ par Xaviou ] Bonjour à tous.J'ai un petit soft qui tourne actuellement sur différentes machines, dont certaines encore équipées de Windows 2000.A un moment donné, gestion des timeouts sur port com C/C++ [ par HeXa2 ] Bonjour!Je suis actuelement en train de generer une dll qui comunique sur le port sérieIl me faut gerer les timeouts.je veux qu'au bout de 1500ms d'in Thread ? [ par galax98 ] Bonjour Une petite question sans doute basique mais je n'arrive pas à m'en sortir. J'ai développé une application Windows sous dev-cpp, avec notamment Obtenir l'handle d'une DLL [ par TryToHelpMe ] Bonjour,J'ai un nouveau problème que je n'arrive pas à résoudre.J'ai besoin de récupérer l'handle de ma DLL.Je fait appel à ma DLL depuis un programme VirtualProtect qui crash [ par TryToHelpMe ] Bonjour, après avoir lu plusieurs sources de ce site sur le hook de l'API, j'essaye de réaliser ma propre source, pour bien comprendre comment cela fo dll COM question!!! un truc qui me chiffone [ par darkpoulpo ] bonjour, imaginons que nous avons, une dll avec une fonction qui créer une objet COM et la renvoi au programme X pour être utilisé... imagine que plu Erreur C2352 appel non conforme d'une fonction membre non static [ par astvt ] Bonjour à tous, j'ai écris un programme de simulation en C# et je le transcrit en Visual C++ pour apprendre. J'ai une fenêtre principale et une foncti


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales