[delphi] aantal open windows..

Pagina: 1
Acties:

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 31-03 01:10
blaat! :P

ik heb een paar vraagjes:

1.Weet iemand hoe ik in delphi het aantal open windows kan vinden?
2.Hoe ik de namen van die windows kan vinden?
3.Hoe kan ik in mun progie decteren of er een nieuw window word geopend?

Ben namelijk bezig met mun eigen taskbar :)

Verwijderd

Zoek es in msdn op EnumWindows, EnumChildWindows,EnumThreadWindows oid.. zit vast wel wat tussen wat je gebruiken kan.

Verwijderd

code:
1
2
3
ProgramHandle := FindWindow(nil,'Volume Control');
 if ProgramHandle<>0 then
   PostMessage(ProgramHandle, WM_Close, 0, 0);

dit heb ik in een programma gebruikt, om te kijken of het venster Volume Control geopend is, dus je kan gewoon FindWindow gebruiken :P

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 31-03 01:10
Op zondag 12 augustus 2001 00:20 schreef [MoRtAl] het volgende:
code:
1
2
3
ProgramHandle := FindWindow(nil,'Volume Control');
 if ProgramHandle<>0 then
   PostMessage(ProgramHandle, WM_Close, 0, 0);

dit heb ik in een programma gebruikt, om te kijken of het venster Volume Control geopend is, dus je kan gewoon FindWindow gebruiken :P
:D en dan 1st zeker 10.000.000 programma's van over de hele wereld erin proppen :P

Verwijderd

Op zondag 12 augustus 2001 00:25 schreef hdd het volgende:

[..]

:D en dan 1st zeker 10.000.000 programma's van over de hele wereld erin proppen :P
kan je proberen :D

maar het was meer als hint bedoelt dat je Findwindow kan gebruiken...

Verwijderd

bv:
code:
1
2
3
4
5
function EnumWindowsProc(HWND:hwnd;LPARAM :lParam):boolean;stdcall;
begin
result:=true;
form1.ListBox1.items.add(inttostr(hwnd));
end;

en dan oproepen met:
EnumWindows(@EnumWindowsProc,a);


misschien ook handig:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses TlHelp32;

function GetWindowExeName(Handle: HWND): String;
var
  PE: TProcessEntry32;
  Snap: THandle;
  ProcessId: Integer;
begin
  GetWindowThreadProcessId(Handle, @ProcessId);
  Snap:= CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Snap <> -1 then begin
    if Process32First(Snap, PE) then
    if PE.th32ProcessID = ProcessId then
      Result:= String(PE.szExeFile)
    else while Process32Next(Snap, PE) do
      if PE.th32ProcessID = ProcessId then begin
        Result:= String(PE.szExeFile);
        break;
      end;
    CloseHandle(Snap);
  end;
end;

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 31-03 01:10
Op zondag 12 augustus 2001 00:43 schreef deur het volgende:
bv:
code:
1
2
3
4
5
function EnumWindowsProc(HWND:hwnd;LPARAM :lParam):boolean;stdcall;
begin
result:=true;
form1.ListBox1.items.add(inttostr(hwnd));
end;

en dan oproepen met:
EnumWindows(@EnumWindowsProc,a);
ik krijg bij

EnumWindows(@EnumWindowsProc,a);

de error dat a niet bestaat.. :)

Verwijderd

[spam] www.torry.net [/spam]

Zoeken naar WindowsList.
die zoekt voor je :

• visible windows
• invisible windows
• stuurt ze terug in een TstringList

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 31-03 01:10
De manier van deur lukt half,
hij poept een rij getallen uit van hier tot tokio waar ik geen reet uit kan halen :)


Afbeeldingslocatie: http://sloten.50megs.com/bla.gif

  • Sponz
  • Registratie: Juni 2001
  • Niet online

Sponz

nul nest parfait saif moi

Is dit een grapje? Echt geen idee hoe het komt dat er getallen in de listbox staan? ;)

ps:
code:
1
2
3
4
5
6
int GetWindowText(

    HWND  hWnd, // handle of window or control with text
    LPTSTR  lpString,   // address of buffer for text
    int  nMaxCount   // maximum number of characters to copy
   );

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 31-03 01:10
* Engineer snapt er geen rete meer van ;(

  • yodax
  • Registratie: Januari 2000
  • Laatst online: 11-08-2025
Wat deur laat zien is dat je de HANDLE van elk scherm terug krijgt. Die HANDLE is uniek binnen het OS voor elk scherm. Met die HANDLE kan je dus de members van een scherm opvragen, zoals de titel.

Verwijderd

voorbeeld:
code:
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
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1      : TForm1;

implementation

{$R *.DFM}

uses TlHelp32;

function GetWindowExeName(Handle: HWND): string;
var
  PE            : TProcessEntry32;
  Snap        : THandle;
  ProcessId    : Integer;
begin
  GetWindowThreadProcessId(Handle, @ProcessId);
  Snap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Snap <> -1 then
  begin
    if Process32First(Snap, PE) then
    if PE.th32ProcessID = ProcessId then
      Result := string(PE.szExeFile)
    else
      while Process32Next(Snap, PE) do
        if PE.th32ProcessID = ProcessId then
        begin
        Result := string(PE.szExeFile);
        break;
        end;
    CloseHandle(Snap);
  end;
end;

function WindowText(HWND: hwnd): string;
var
  buff        : array[byte] of Char;
begin
  GetWindowText(HWND, @buff, 255);
  Result := buff;
end;

function IsWindowOnScreen(HWND: hwnd): Boolean;
var
  rect        : TRect;
  dc            : hdc;
begin
  GetWindowRect(HWND, rect);
  dc := getdc(0);
  result := RectVisible(dc, rect);
  ReleaseDC(0, dc);
end;

function EnumWindowsProc(HWND: hwnd; LPARAM: lParam): boolean; stdcall;
begin
  result := true;
  if IsWindowVisible(HWND) and IsWindowEnabled(HWND) and IsWindowOnScreen(HWND) and (WindowText(HWND) <> '') then
    form1.ListBox1.items.add(inttostr(hwnd) + ' "' + WindowText(hwnd) + '","' + GetWindowExeName(hwnd) + '"');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  a          : Integer;
begin
  EnumWindows(@EnumWindowsProc, a);
end;

end.

Verwijderd

post anders eens wat van je source.

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 31-03 01:10
dat script hierboven werkt nu,
maar is er ook een manier om het bijbehorende icon van een prog te vinden? :)

Verwijderd

Met de boven getoonde procedures en functies heb je dus de Exenaam van de actieve vensters. Als je deze meegeeft aan ExtractIcon (gedefinieerd in ShellApi) kun je alle Icons uit de exe-file halen.

Verwijderd

Op maandag 13 augustus 2001 07:37 schreef The_Navigator het volgende:
Met de boven getoonde procedures en functies heb je dus de Exenaam van de actieve vensters. Als je deze meegeeft aan ExtractIcon (gedefinieerd in ShellApi) kun je alle Icons uit de exe-file halen.
zou ik niet doen, gebruik liever:
code:
1
2
3
4
5
6
7
8
9
function GetIcon(const HWND: hwnd):ticon;
var
  hwindow : THandle;
  H: HIcon;
begin
  H := CopyIcon(GetClassLong(HWND, GCL_HICON ));
  Result:=TIcon.Create;
  Result.Handle:=H;
end;

of alleen: CopyIcon(GetClassLong(HWND, GCL_HICON )); om een HICON te krijgen.
Pagina: 1