AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Funktion für mehrere Fenster (n help)

Funktion für mehrere Fenster (n help)

Ein Thema von 110110 · begonnen am 11. Nov 2009 · letzter Beitrag vom 12. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2   
110110

Registriert seit: 11. Nov 2009
9 Beiträge
 
#1

Funktion für mehrere Fenster (n help)

  Alt 11. Nov 2009, 23:33
hi, ich habe hier diese funktion gefunden:

Delphi-Quellcode:
type THandleArray = array of HWND;

function FindAllWindows(const WindowCaption: String): THandleArray;
type
  PParam = ^TParam;
  TParam = record
    WindowCaption: String;
    Res: THandleArray;
  end;
var
  Rec: TParam;
  function _EnumProc(_hWnd: HWND; _LParam: LPARAM): LongBool; stdcall;
  var
    cTitle: array[0..1023] of Char;
  begin
    with PParam(_LParam)^ do
    begin
      GetWindowText(_hWnd, cTitle, SizeOf(cTitle));
      if (CompareText(cTitle, WindowCaption) = 0) then
      begin
        SetLength(Res, Length(Res)+1);
        Res[Length(Res)-1] := _hWnd;
      end;
      Result := True;
    end;
  end;
begin
  Rec.WindowCaption := WindowCaption;
  SetLength(Rec.Res, 0);
  EnumWindows(@_EnumProc, Integer(@Rec));
  Result := Rec.Res;
end;
die funktion sollte mir ermöglichen fenster mit dem gleichen titel anzusprechen. In meinem Fall wäre das mit
Postmessage();

Also nehmen wir an ich habe 2 programme am laufen (2 mal das gleiche)

wie kann ich damit nun auf ein bestimmtes der beiden fenster zugreifen?
wie wird das angewendet? (postmessage)

dankeschön =)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Funktion für mehrere Fenster (n help)

  Alt 12. Nov 2009, 00:18
Du brauchst ein zweites Unterscheidungsmerkmal, sonst kannst du die Fenster nicht auseinander halten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
110110

Registriert seit: 11. Nov 2009
9 Beiträge
 
#3

Re: Funktion für mehrere Fenster (n help)

  Alt 12. Nov 2009, 16:47
danke, hast mir fast geholfen.
bei der beschreibung der oben geposteten funktion stand dabei dass sie genau für solche zwecke sei (2 gleiche fenster zu unterscheiden).

hab noch gehört es würde z.B. mit lauf"zeit" unterscheidbar sein aber wie ich das jetzt umsetzen kann weiß ich leider immer noch nicht. vll findet sich ja noch wer der mir helfen kann/will =)
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Funktion für mehrere Fenster (n help)

  Alt 12. Nov 2009, 16:58
@110110:

Erst einmal herzlich willkommen inder der DP

Du hast geschrieben:

Zitat:
hi, ich habe hier diese funktion gefunden:
In solchen Fällen wüßten wir auch gerne, wo (URL) Du
den Quelltext gefunden hast.

Gruß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#5

Re: Funktion für mehrere Fenster (n help)

  Alt 12. Nov 2009, 17:04
Zitat von 110110:
wie wird das angewendet? (postmessage)
Na du bekommst von der Funktion ein Array mit allen gefundenen Fenstern drinnen
und dieses Array, bzw. die Fenster-Handle darin, kannst du nun auswerten, wie du willst und wie man es mit Arrays so im allgemeinen auch macht.
Zitat von 110110:
wie kann ich damit nun auf ein bestimmtes der beiden fenster zugreifen?
tja, wenn du ein bestimmtest willst, dann wirst du dir wohl noch ein (paar) weitere Unterscheidungskriterien aussuchen müssen.

Hier bekommst du erstmal nur die Handle von allen (Toplevel)Fenstern, welche den gesuchten Namen im Titel haben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

Re: Funktion für mehrere Fenster (n help)

  Alt 12. Nov 2009, 17:05
Die Fenster unterscheiden sich durch ein unterschiedliches Handle. D.h. wenn zwei Fenster mit dem gleichen Titel geöffnet sind, gibt es zwei unterschiedliche Handles im THandleArray.
Thomas
  Mit Zitat antworten Zitat
110110

Registriert seit: 11. Nov 2009
9 Beiträge
 
#7

Re: Funktion für mehrere Fenster (n help)

  Alt 12. Nov 2009, 18:20
danke erstmal an alle!

also, wo ich die function genau gefunden habe weiß ich leider nicht mehr *schäm* (stand aber auch nicht mehr dabei "leider")

wie ich euch jetzt verstanden habe gibt mir die function keinen normalen handle wie bei findwindow() sondern unterscheidet bei gleichen titeln auch noch bzw. gibt mir dann andere handles?

hab leider noch nicht sehr viel erfahrung mit hwnd und hab daher auch noch kA wie ich jetzt sagen kann sende postmessage an das bestimmte handle das ich durch die function ausgewählt hab oO könnt ihr mir bitte ein wenig unter die arme greifen?

hab hier mal was versucht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  h:thandlearray;
begin
h := FindAllWindows('Rechner');
//--
  if h[0]<>0 then //0 oder 1 instanz
begin
    sleep(4000);
    PostMessage(hwnd(h[0]), WM_KeyDown, $39, 0); //0 oder 1 instanz
    Application.ProcessMessages;
//--
end;

end;
habs grad mal am rechner ausprobiert und dachte ich könnte jetzt einfach im array unterscheiden zwischen 1. und 2. instanz vom rechner aber das ging leider nicht. postmessage sendet trotzdem noch an den zuletzt aktiven rechner.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#8

Re: Funktion für mehrere Fenster (n help)

  Alt 12. Nov 2009, 18:50
Die FindWindow-Funktion ermittelt das Handle des ersten gefundenen Top-Level-Fensters.
Wenn z.B. zwei Notepad Instanzen geöffnet sind mit dem gleichen Titel,
dann findet FindWindow immer nur eines der Fenster resp. gibt nur immer ein Handle einer Notepad Instanz zurück.

FindAllWindows liefert dir alle Handles der geöffneten Top-Level-Fenster,
bei welchen der Fenstertitel mit dem Parameter WindowCaption übereinstimmt.
Diese Handles werden im Array THandleArray zurückgegeben.

Anwendungsbeispiel der Funktion:

Delphi-Quellcode:
var
  FensterHandles: THandleArray;
  i: Smallint;
begin
  FensterHandles := FindAllWindows('Unbenannt - Editor'); // Alle Fenster mit Titel 'Unbenannt - Editor' suchen
  for i := Low(FensterHandles) to High(FensterHandles) do
  begin
    ShowMessage(IntToStr(FensterHandles[i])); // Handle des Fensters anzeigen
  end;
end;
Thomas
  Mit Zitat antworten Zitat
110110

Registriert seit: 11. Nov 2009
9 Beiträge
 
#9

Re: Funktion für mehrere Fenster (n help)

  Alt 12. Nov 2009, 19:06
sieht für mich aus als würde die funktion dennoch nicht unterscheiden oO schaut euch doch mal bitte meinen vorletzten post an da hab ich mich dran versucht aber es sendet dennoch an die zuletzt aktive instanz vom rechner
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: Funktion für mehrere Fenster (n help)

  Alt 12. Nov 2009, 19:13
Bei mir sendet es an beide Instanzen.

Test:

Delphi-Quellcode:
h := FindAllWindows('Rechner');
if High(h) = 1 then // Wenn 2 Rechner Instanzen gefunden
begin
  PostMessage(hwnd(h[0]), WM_KeyDown, $39, 0); // an erste Instanz senden
  PostMessage(hwnd(h[1]), WM_KeyDown, $39, 0); // an zweite Instanz senden
end;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz