Avatar billede snorga Nybegynder
01. juli 1999 - 01:48 Der er 3 kommentarer og
1 løsning

navne på vinduer

Hvordan kan jeg fra Delphi få navnene på alle de andre programmer der kører?

Der er vist et API kald men hvad hedder det og hvordan virker det?

Det jeg vil have er en liste over de programmer der kører lige nu (jeg skal bare bruge navnene på vinduerne)
Avatar billede lange Nybegynder
01. juli 1999 - 02:38 #1
Følgende klaskes i en Form sammen med en button og en TlistBox - laver en liste over alle vinduestitler:

type
  PFindWindowStruct = ^TFindWindowStruct;
  TFindWindowStruct = record
    Caption : string;
    ClassName : string;
    WindowHandle : THandle;
  end;

procedure EnumWindowsProc(hWindow : hWnd;
                        lParam  : LongInt);
{$IFDEF Win32} stdcall; {$ELSE} ; export; {$ENDIF}
var
  lpBuffer : PChar;

begin
  GetMem(lpBuffer, 255);

  try
    if GetWindowText(hWindow, lpBuffer, 255) > 0 then
      Form1.ListBox1.Items.Add(lpBuffer);
  finally
    FreeMem(lpBuffer, sizeof(lpBuffer^));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    WindowInfo : TFindWindowStruct;
begin
    EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));
end;

:)
Avatar billede snorga Nybegynder
01. juli 1999 - 21:54 #2
Du var hurtigt til at finde svaret når der var point på bordet :)

Er det muligt kun at finde de vinduer der er synlige?
Avatar billede lange Nybegynder
01. juli 1999 - 22:11 #3
Hehe :)

Hmmm... Man kan sikkert undersøge vinduerne, som man jo får handles til og finde ud af deres status e.l.
Avatar billede loproc Praktikant
29. oktober 2000 - 14:28 #4
Prøv den her:
--------------
function EnumCall(Handle: THandle; lParam: LPARAM):boolean;stdcall;
var
  S: array [0..256] of char;
begin
  if IsWindowVisible(Handle) then
  begin
      GetWindowText(Handle, S, 200);
      if (S <> \'\') and (Pos(Application.Title, S) <> 1) then
      Form1.ListBox1.Items.Add(S);
  end;
  Result := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  ListBox1.Items.Clear;
  EnumWindows(@EnumCall,0);
end;
--------------
Håber det kunne bruges!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester