Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre émérite Avatar de Montor
    Homme Profil pro
    Inscrit en
    avril 2008
    Messages
    863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : avril 2008
    Messages : 863
    Points : 801
    Points
    801

    Par défaut Piloter une application externe

    Piloter une application externe...
    Code :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        procedure MenuItemClick(Sender: TObject);
        procedure Ita(Item: TMenuItem; H: HMENU);
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    uses ShellApi;
    var
     H :THandle;
     S:array[0..63] of AnsiChar;
     
    procedure TForm1.MenuItemClick(Sender: TObject);
    begin
     if GetActiveWindow <> H then
     begin
       Sendmessage(H,WM_SYSCOMMAND,SC_RESTORE,0);
     end;
     Caption:=Format('Item Id:%d',[TComponent(Sender).Tag]);
     Sendmessage(H,WM_SETFOCUS,0,0);
     Sendmessage(H,WM_COMMAND,TComponent(Sender).Tag,0);
     
    end;
     
    procedure TForm1.Ita(Item:TMenuItem;H:HMENU);
    var
     MF: TMenuItemInfo;
     I : integer;
     N : TMenuItem;
    begin
      for I:= 0 to GetMenuItemCount(H)-1 do
      begin
            s:='';
            FillChar(MF,SizeOf(TMenuItemInfo),#0);
            with MF do
            begin
              cbSize :=SizeOf(TMenuItemInfo);
              fMask  :=MIIM_TYPE or  MIIM_ID or MIIM_SUBMENU;
              dwTypeData :=@S[0];
              cch        :=64;
            end;
            if GetMenuItemInfo(H,I,true,MF) then
            with MF do
            begin
                 N :=TMenuItem.Create(Item);
                 Item.Add(N);
                 N.Tag     := wID;
                 if cch = 0 then
                   N.Caption := '-'
                 else
                   N.Caption := StrPas(dwTypeData);
     
                 if hSubMenu = 0 then
                    N.OnClick := MenuItemClick
                 else
                    Ita(N,hSubMenu);
            end;
       end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      H:=FindWindow('Notepad',nil);
      if H = 0 then
       ShellExecute(0,'Open','Notepad.exe',nil,nil,1);
      Sleep(1000);
      H:=FindWindow('Notepad',nil);
      SetWindowPos(H,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE);
      Menu :=TMainMenu.Create(Self);
      Ita(Menu.Items,GetMenu(H));
    end;
     
    end.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2005
    Messages
    5 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 192
    Points : 7 620
    Points
    7 620

    Par défaut

    Merci de mettre un minimum de commentaires afin d'expliquer à quoi servent les fonctions sinon c'est illisible.

    De plus il manque le dfm.
    Modérateur Delphi Combattez la brute
    Aucune réponse aux sollicitations techniques par MP

    Le guide du bon forumeur :
    __________
    [Projet en cours] Des unités pour faciliter l'utilisation d'indy : EasyIndy 1.3

  3. #3
    Membre émérite Avatar de Montor
    Homme Profil pro
    Inscrit en
    avril 2008
    Messages
    863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : avril 2008
    Messages : 863
    Points : 801
    Points
    801

    Par défaut

    Pas de dfm avec le code on récupère le menu principale pour le dite exe et travailler depuis notre fiche ...

  4. #4
    Membre Expert
    Homme Profil pro AbdelHakim Kellouche
    Inscrit en
    mai 2008
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Nom : Homme AbdelHakim Kellouche
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 077
    Points : 1 972
    Points
    1 972

    Par défaut

    Citation Envoyé par Montor Voir le message
    Pas de dfm avec le code on récupère le menu principale pour le dite exe et travailler depuis notre fiche ...
    Salut

    Pas trop évident pour tout le monde, trop haut la barre ! je rejoins Rayek sur ce point un minimum de commentaires est requis, avis perso, merci par avance Montor.
    Bon courage ou Bonne Chance (selon le contexte)

  5. #5
    Invité de passage
    Inscrit en
    septembre 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : septembre 2012
    Messages : 1
    Points : 1
    Points
    1

    Par défaut

    Ce message a été envoyé en 2008 et nous sommes maintenant en 2012. Je cherchais des idées pour piloter une application externe et je suis tombé sur ce programme qui avait l'air intéressant mais bien crypté.

    J'ai pris la peine de créer un .dfm (se limitant à un formulaire Form1 de type TForm1) et j'ai associé à l'événement OnCreate la procédure FormCreate. Rien de bien original.

    Je suis bien récompensé de mes efforts. Dés le lancement du programme, Notepad.exe s'est ouvert. Son Mainmenu s'est recopié sur ma Form1 et quand j'ai cliqué sur un des items de ce Mainmenu, c'était comme si je cliquais sur le menu de Notepad: j'ai pu ouvrir un fichier dans Notepad et le refermer depuis ma form1, sans toucher au menu de Notepad.

    C'est balaise ! je vais reprendre ça pour faire des choses intéressantes. Si par hasard, on peut trouver quelque part des infos supplémentaires sur ce sujet, ce serait sympa de nous le dire.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •