Entwickler-Ecke

Windows API - Teilstring aus Windowcaption auslesen


Hansi@OMG - So 27.04.03 10:39
Titel: Teilstring aus Windowcaption auslesen
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 - 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. :)


Hansi@OMG - 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.


MSCH - 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 - 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 [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/enumwindows.asp] gucken.


Delete - So 27.04.03 16:10


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;