Autor Beitrag
Hansi@OMG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: So 27.04.03 10:39 
Hallo,
ich möchte gerne ein Programm schreiben, dass prüft, ob ein Programm geöffnet ist, und wenn nicht, dieses öffnet. Das Problem dabei ist nur, die Windowcaption ändert sich wie, z.B. beim Internetexplorer, also möchte ich das Programm so schreiben, dass es in allen Windowcaptions, von Fenstern die geöffnet sind nach dem Teilstring, z.B. 'Microsoft Internet Explorer' sucht, denn dieser String ist immer in der Windowcaption.
Frage 1:
Wie kann ich die Windowcaptions in einen String laden.
Frage 2:
Wie kann ich in diesem String nach dem Teilstring suchen.

Ich bin um jeden Hinweis dankbar. Danke im Vorraus an alle, die was schreiben. :D
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 27.04.03 10:47 
guckst du mal in der PSDK/MSDN nach folgenden Funktionen:

- FindWindow: Erster Parameter = Klassenname!!
- GetWindowText

Damit dürftest du das hinbekommen. Wenn nicht, dann frag einfach nochmal. :)

_________________
Viele Grüße
Jakob
Hansi@OMG Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: So 27.04.03 11:02 
Daran hab ich auch schon gedacht, aber ich schaffs nicht, dass er die Captions von allen Fenstern ausliest, weil ich muss ihm immer sagen, von welchem Window er den Caption ausliest, und des ist ein bisschen sinnlos. Er soll in allen offenen Fenstern nach dem Teilstring suchen, weil ich ja nicht vorher weis, welche Fenster geöffnet sind.

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: So 27.04.03 11:08 
da gibts eine Funktion Enumxxxx(). Schau mal in diw W32 Hilfe. Da findest du das gesuchte.
grez
msch
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 27.04.03 11:20 
oh, sorry, habe überlesen, dass du alle Fenster haben wolltest. Wie MSCH schon gesagt hat, brauchst du die Funktion Enumxxxx = EnumWindows. :wink:

Für Informationen, kannste ja mal hier gucken.

_________________
Viele Grüße
Jakob
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 27.04.03 16:10 
ausblenden Quelltext
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:
type
PMyEnumParam = ^TMyEnumParam;
TMyEnumParam = record
  lb: TListbox;
end;

function GetWindows(const hWnd : Longword; Param: PMyEnumParam): LongBool; stdcall;
var
  Len : Longint;
  S   : String;
begin
  Result := True;
  if not ( IsWindow(hWnd) and IsWindowVisible(hWnd) ) then Exit;
  Len := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0);
  if Len > 0 then
  begin
    SetLength(S, Len);
    SendMessage(hWnd, WM_GETTEXT, Len + 1, Longint(Pchar(S)));
    Param.lb.Items.Add(s);
  end;
  // mit Result = False kann die Callbackfunktion vorzeitig verlassen werden
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Param: TMyEnumParam;
begin
  Param.lb := Listbox1;
  EnumWindows(@GetWindows, LPARAM(@Param));
end;