IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Simuler le clic sur le bouton OK d'une fenêtre


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Simuler le clic sur le bouton OK d'une fenêtre
    Bonjour

    J'ai écrit un programme qui a pour but de fermer une fenêtre popup à son apparition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    var
     bSortie: Boolean;
     i: Integer;
     
    function GetWindows1(Handle: HWND; Info: Pointer): BOOL; stdcall;
    var
      Ch: Array[0..255] of Char;
    begin
      GetWindowText(Handle, Ch, SizeOf(Ch) - 1);
      if (Ch = 'intercos2.exe - Application Error') then
      begin
        SendMessage(Handle, WM_IME_KEYDOWN, VK_RETURN, 0);
        bSortie := True;
        Result := False;
      end
      else
        Result := True;
    end;
     
    begin
      i := 0;
     
      // Attente du popup
      bSortie := False;
      repeat
        Application.ProcessMessages;
        Sleep(StrToIntDef(ParamStr(1), 10)*60*1000);
        EnumWindows(@GetWindows1, 0);
        Inc(i);
      until (bSortie) or (i >= StrToIntDef(ParamStr(2), 0));
    end.
    Ce programme fonctionne à merveille sous XP mais pas sous NT. En effet, la commande SendMessage sous NT de la procédure GetWindows1 est sans effet.

    Est ce que qu'un a une petite idée ? ou a déjà fait un programme similaire qui fonctionnerait sous XP et NT ?

    D'avance merci !

    ______________
    Ajout des balises de code par qi130 - Merci d'y penser (bouton #)

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    A mon avis ton problème vient du fait que XP ou NT n'ont pas le même type d'entête de fenêtre, ce qui fait que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (Ch = 'intercos2.exe - Application Error') then
    ne sera jamais vrai sous l'un des OS et vrai sous l'autre.

    il faudrait que tu vérifies l'entête que te retourne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GetWindowText(Handle, Ch, SizeOf(Ch) - 1);
    quand tu l'utilises sous XP et NT, après tu regardes ce qu'il y a en commun afin qu'il soit détecté par l'un ou l'autre.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Ch = 'intercos2.exe - Application Error') then
    Il passe bien dans le if quand la popup est affichée. Donc le problème vient bien du SendMessage

  4. #4
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Il ne faudrait pas utiliser PostMessage avec les anciennes versions? (je crois que j'avais vu ça dans le cadre du défi démineur)
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    J'ai changé avec un PostMessage, çà ne fonctionne pas mieux

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    ca marche avec le message WM_CLOSE

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Simuler un clic sur un bouton
    Par taher452 dans le forum C++
    Réponses: 4
    Dernier message: 16/02/2010, 12h47
  2. Simuler un clic sur un bouton
    Par pasqual dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/08/2009, 10h10
  3. [HTML] simuler un clic sur un bouton
    Par sebac dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/06/2009, 18h13
  4. comment simuler un clic sur un bouton en java
    Par kohan95 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/03/2009, 13h31
  5. [VB.NET]Simuler un clic sur un bouton
    Par olbi dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/03/2006, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo