Announcement

Collapse
No announcement yet.

Info über andere Programme ermitteln

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

  • Info über andere Programme ermitteln

    Hi Leute,
    ich benötige eure Hilfe.
    Ich möchte mit meinem Prog Infos über alle geöffneten Programme anzeigen lassen.
    Ich habe alles bis auf die Grösse und Position der Fenster raus bekommen.
    Was muss ich dafür benutzen.
    Des weiteren möchte ich aus meinem Prog automatisch einer anderen Anwendung den Activfocus übergeben?

    Ich bedanke mich schon im voraus für eure Hilfe.

    Mfg Diabolo

  • #2
    Hallo,

    das folgende Beispiel demonstriert die Vorgehensweise. Während die Win32-API-Funktion <b>EnumWindows</b> alle Fenster aufzählt, ermittelt die Win32-API-Funktion <b>GetWindowRect</b> die Position sowie die Größe der Fenster:
    <pre>
    function EnumWindProc(Wnd: HWND; i: Integer): Boolean; stdcall;
    const
    cLENGTH = 199;
    var
    szTitel : array[0..cLENGTH] of Char;
    aRect : TRect;
    sInfo : String;
    begin
    GetWindowText(wnd, szTitel, cLENGTH);
    if StrLen(szTitel) > 1 then
    begin
    GetWindowRect(wnd, aRect);
    sInfo := Format('Fenster: %s; Breite: %d; Höhe: %d; Pos: %d-%d',
    [szTitel, aRect.Right - aRect.Left,
    aRect.Bottom - aRect.Top,
    aRect.Top, aRect.Left]);
    Form1.ListBox1.Items.Add(sInfo);

    end;
    Result := True;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ListBox1.Clear;
    EnumWindows(@EnumWindProc,0);
    end;
    </pre>
    Borland stellt in der Unit <b>sndkey32.pas</b> die Funktion <b>AppActivate</b> zur Verfügung, um eine Anwendung in den Vordergrund zu holen und zu aktivieren. Da das Fensterhandle über EnumWindows bereits bekannt ist, kann man sich den ersten Teil sparen:
    <pre>
    function AppActivate(WindowName : String) : boolean;
    var
    WindowHandle : HWND;
    begin
    Result:=true;
    WindowHandle:=FindWindow(nil,PChar(WindowName));
    If (WindowHandle<>0) then begin
    SendMessage(WindowHandle, WM_SYSCOMMAND, SC_HOTKEY, WindowHandle);
    SendMessage(WindowHandle, WM_SYSCOMMAND, SC_RESTORE, WindowHandle);
    end else Result:=false;
    end;
    </pre&gt

    Comment

    Working...
    X