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

Contribuez Delphi Discussion :

Piloter une application externe


Sujet :

Contribuez Delphi

  1. #1
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut Piloter une application externe
    Piloter une application externe...
    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
    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 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
    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

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

  3. #3
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    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 émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    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)
    Mon blog sur WordPress

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 7
    Points
    7
    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.

Discussions similaires

  1. [WD16] Piloter une application externe sans bouger la souris
    Par WDKyle dans le forum WinDev
    Réponses: 3
    Dernier message: 17/07/2013, 10h51
  2. Piloter une application externe
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 26/07/2010, 09h35
  3. Réponses: 12
    Dernier message: 23/01/2008, 10h17
  4. Réponses: 6
    Dernier message: 07/09/2005, 21h31
  5. [Excel] Utiliser une application externe par une macro
    Par thierry2.dlp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2005, 23h07

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