Announcement

Collapse
No announcement yet.

Application-Objekt unter VBA

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

  • Application-Objekt unter VBA

    Hallo,

    wie kann man das Application.Handle einer laufenden Winword-Anwendung ermitteln? Dieses Handle soll an eine DLL übergeben werden, um nach Abarbeitung der DLL-Prozeduren wieder zur Hauptanwendung zurück zu finden. In meinem Fall ruft die DLL ein nicht-modales Fenster auf, wenn die Abarbeitung der DLL-Prozedur beendet ist, ist Winword nicht mehr zu sehen.

    Vielen Dank für jede Hilfe.

    Marco

  • #2
    Hallo,

    man könnte das Fensterhandle über die Win32-API-Funktion <b>FindWindow</b> über den Namen der Fensterklasse von Word (OpusApp) suchen, wobei diese Suche auch innerhalb der DLL erfolgen kann:
    <pre>
    var
    FWordWnd : HWnd;
    begin
    FWordWnd := FindWindow('OpusApp', nil);
    ...
    end;
    </pre&gt

    Comment


    • #3
      Sehr geehrter Herr Kosch,
      vielen Dank für die schnelle Reaktion.
      Ich bekomme zwar das Handle der Winword-Anwendung, weiss aber nicht, wem ich dieses Handle zuordnen soll, da kein Application-Objekt zur Verfügung steht.
      Wenn ich am Ende der DLL-Prozedur ein einfaches Meldungs-Fenster (ShowMessage('fertig')) bringe, bleibt Winword sichtbar.

      Vielleicht könnten Sie mir nochmals auf die Sprünge helfen.
      Vielen Dank

      Marc

      Comment


      • #4
        Hallo,

        über das folgende Testprogramm kann ich Word wieder in den Vordergrund holen, auch dann, wenn Word als Icon in der Taskleiste abgelegt wurde:
        <pre>
        procedure TForm1.Button1Click(Sender: TObject);
        var
        hWordWnd : HWnd;
        begin
        hWordWnd := FindWindow('OpusApp', nil);
        if hWordWnd <> 0 then
        begin
        ShowWindow(hWordWnd, SW_RESTORE);
        BringWindowToTop(hWordWnd);
        end;
        end;
        </pre>
        Falls das nicht funktioniert, würde ich prüfen, ob <i>hWordWnd</i> den Wert <b>0</b> erhält. Wenn ja, scheint Word zu diesem Zeitpunkt gar nicht mehr "zu leben". Dies wird immer dann der Fall sein, wenn die DLL über Automation eine Word-Instanz erzeugt und dann am Ende den Interface-Zeiger wieder freigibt. In diesem Fall wird Word von COM sofort abgeräumt, da der letzte Client seinen Interface-Zeiger zurückgegeben hat.
        &#10

        Comment

        Working...
        X