Announcement

Collapse
No announcement yet.

Externe Exe in Neuen Clientbereich ziehen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Externe Exe in Neuen Clientbereich ziehen

    Hallo Allerseits!!<p>
    Folgendes Problem:<br>
    Ich starte mit Createprocess eine Anwendung(Notepad, Word, etc..).Danach möchte ich erreichen, dass dieses Programm einen bestimmten Client-Bereich nicht verlässt(z.B. einen Panel oder ein Form-Objekt).<br>
    Ich habe es schon mit <b>SetParent </b>probiert. Es steht jedoch in der Hilfe schon, dass diese Funktion nicht auf Externe Prozesse anwendbar ist.
    <br><b>Frage :</b><br>
    Wie kann ich o.g. erzwingen und dabei noch erreichen, dass bei einer Grössenänderung des Panels (z.b. mit einem Splitter-Control) sich die Grösse der Exe mitändert.<p>
    Danke im Voraus<p>
    Walter <br>
    [email protected]

  • #2
    Hi

    Mir scheint der einzigste Weg ist Du nutzt COM/OLE-Container Technik, falls die Anwendung dies unterstützt (WordPad, Word, MSPaint etc). Jeder andere Lösungsansatz (Hooken, biegen und brechen) läuft zwangsläufig darauf hinaus, daß Du Dich auf EIN Betriebssystem konzentieren mußt oder für alle versch. System auch versch. Methoden entwickeln mußt. Meiner Meinung nach ist das aussichtslos.
    Unter Win95 besteht die Möglichkeit die Schranken (Zugriff auf Client/Parent Processe/Task) durch NICHT dokumentierte Funktionen auszuschalten, ist ABER ganz,ganz tiefe Trickprogrammierung und funktioniert auf gar keinen Fall mit NT.

    Gruß Hage

    Comment


    • #3
      es gibt von Sheridian eine Active-X Control Sammlung namens ActiveThreedPlus (Demo kostenlos auf Zoschke.de). Dem dort enthaltenen Contol "SSSplitter" kann man(nur in VB) als Eigenschaft das Handle eines Fensters zuweisen. Dies kann ein im Projekt enthaltenes Fenster, oder auch ein externes Programm sein.<br>
      Nach dem Zuweisen wird das Fenster in das Splitter-Control "gezogen" und verschwindet aus der Task-Leiste.<br>
      Wird das VB-Programm beendet, wird das Container-Programm auch geschlossen.<p>
      Ich bin gerade dabei von VB auf Delphi umzulernen. Hauptgrund dafür ist, dass mir durch einschlägige Erfahrungen, ActiveX "gestohlen bleiben kann".Solche Features wie o.g. Problem wären aber trotzdem recht komfortabel.<p>
      mfg<br>
      Walte

      Comment


      • #4
        Hi

        Hm, hast'e mal dieses ActiveX unter NT bzw. Win2000 probiert ??
        Falls es funktionieren sollte, ist es eine Überlegung wert, daß ich ein bißchen rumexperimentiere, wäre interessant :-))

        Übrigens, ein ActiveX Control in Delphi zu nutzen/installieren ist das einfachste der Welt, d.h. es sollte Dir keine Schwierigkeiten bereiten diese ActiveX in Delphi wie in VB zu nutzen.

        Gruß Hage

        Comment


        • #5
          Hallo,

          für das Einbinden des Formulurs einer zweiten, selbst entwickelten EXE in eine TPanel-Instanz hätte ich ein Beispielprojekt vorrätig. Dieses geht jedoch davon aus, das man die notwendigen Vorkehrungen in beiden Anwendungen treffen kann. Da in einer Delphi-Anwendung nur das "versteckte" TApplication-Fenster das für Win32 gültige Hauptfenster ist, kann man mit den Formularen trickreich hantieren.

          Allerdings steht der Weg über die Win32-Botschaften in jedem Fall offen. Wenn man sich das Fensterhandle der fremden Anwendung besorgt hat, kann man die Grösse und Position "fernsteuern", so das das Fenster der fremden EXE immer im definierten Bereich bleibt. Dies könnte zum Beispiel so aussehen:
          <pre>
          procedure TFormMainApp.PanelMainResize(Sender: TObject);
          begin
          if FChildFrm <> 0 then
          with PanelMain do
          MoveWindow(FChildFrm, 0, 0, ClientWidth, ClientHeight, True);
          end;
          </pre>
          Die Fleissaufgabe besteht dann nur darin, für alle Win32-Aktivitäten (Aktivierung; Deaktivierung; Grössenänderung; Positionsänderung etc.) die notwendigen "Antwort"-Botschaften an das positionierte Fenster abzuschicken. Der Rest (das Entfernen des Buttons aus der Taskbar) kann über <b>SetWindowLong</b> etc. erledigt werden

          Comment


          • #6
            Dank an Andreas!<br>
            Ich werde damit ein wenig experimentieren.<p>
            An Hagen!<br>
            Ich habe das Tool bis jetzt nur auf Win98 getestet. Unter Delphi funktioniert das zwar mit dem Einbinden des Controls, es fehlt jedoch die Eigenschaft Controls(in der Panels-Auflistung) zum "Hereinziehen" des Programms.<br>
            Wenn Du mir Deine EMail-Adresse bekanntgibst, kann ich Dir eine Probeversion schicken.<p>
            mfg<br>
            Walte

            Comment


            • #7
              Hi

              [email protected]

              Gruß Hage

              Comment


              • #8
                Hallo,

                ich möchte eine fremdes Programm auf mein Form (Programm) binden und nicht nur posisionieren oder verschieben.

                hier ist mein Code:
                procedure TForm1.Button2Click(Sender: TObject);
                var
                dhwnd: THandle;
                begin
                dhwnd := FindWindow(nil, 'Test');
                if dhwnd <> 0 then

                with Panel1 do

                MoveWindow(dhwnd, 0, 0, ClientWidth, ClientHeight, True); // nun möchte ich binden und nicht verschieben

                end;
                Zuletzt editiert von Delphiest; 20.09.2007, 10:42.

                Comment

                Working...
                X