AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem mit Events bei fremder Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Events bei fremder Anwendung

Ein Thema von Preddy2005 · begonnen am 28. Sep 2007 · letzter Beitrag vom 28. Sep 2007
Antwort Antwort
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#1

Problem mit Events bei fremder Anwendung

  Alt 28. Sep 2007, 09:13
Hallo zusammen,

ich benötige Hilfe in Bezug auf die Verarbeitung oder besser gesagt die Verwendung von Windows Messages.
Und zwar habe ich folgendes Problem:

An ein fremedes Fenster wird aus meiner Anwendung ein Wert übergeben und je nach Zustand wird dieses Fenster halt minimiert oder in den Vordergrund geholt.

Hier mal etwas Code :

Delphi-Quellcode:

                      // Wir senden Text an das Programm
             SendMessage(h_Edit, WM_SETTEXT, 0, Integer(PChar(objnr)));
             SendMessage(h_Edit, WM_LBUTTONDOWN, MK_LBUTTON, 0);
             SendMessage(h_Edit_Klick, WM_LBUTTONUP, MK_LBUTTON, 0);
             SendMessage(h_Edit_Klick, WM_LBUTTONDOWN, MK_LBUTTON, 0);
             SendMessage(h_Edit_Klick, WM_LBUTTONUP, MK_LBUTTON, 0);
             Hole_Fenster_in_den_Vordergrund('xxx.exe');
In einer anderen Unit verwende ich die Prozeduren, welche die Funktionalität von Hole_Fenster_in_den_Vordergrund abbilden.

Delphi-Quellcode:

 // Verbesserte Version von SetForeGroundWindow
procedure ForceForegroundWindow(hwnd: THandle);
  // (W) 2001 Daniel Rolf
  // [url]http://www.finecode.de[/url]
  // [email]rolf@finecode.de[/email]
var
  hlp: TForm;
begin
  hlp := TForm.Create(nil);
  try
    hlp.BorderStyle := bsNone;
    hlp.SetBounds(0, 0, 1, 1);
    hlp.FormStyle := fsStayOnTop;
    hlp.Show;
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    SetForegroundWindow(hwnd);
  finally
    hlp.Free;
  end;
end;
Delphi-Quellcode:

 // Holt das Fenster in den Vordergrund via SW_Restore oder zeigt es an onTop an
procedure Hole_Fenster_in_den_Vordergrund ( Programmname : String);
var h_Prog : hwnd;
begin
  // Funktion holt Fenster in den Vordergrund
   h_Prog := FindWindowByTitle(Programmname);
   if (h_Prog <> 0) then
    begin
     h_Prog := GetWindow(h_Prog, GW_OWNER); // Owner-Handle holen (Handle des TApplication-Fensters)
      if IsIconic(h_Prog) then
       ShowWindow(h_Prog, SW_RESTORE); // restoren wenn minimiert
         // Hauptfenster in den Vordergrund holen
         ForceForegroundWindow(h_Prog);
         BringWindowToTop(h_Prog);
    end;
end;
Nun mein Problem :

Wenn ich das Fenster aus dem IsIconic-Zustand via SW_Restore zurückhole, funktioniert alles tadellos.
Ist das Fenster dagegen sichtbar auf dem Desktop, dann wird es angezeigt und ich muss um das Fenster zu minimieren oder beenden,
doppelt auf den jeweiligen Button drücken.

Welche Windows - Message bzw. Notification benötige ich noch, damit ich zum minimieren oder beenden nur noch einmal den Button drücken muss? Oder liegt das Problem an einer anderen Stelle?

Vielen Dank im vorraus für eure Hilfe,

Gruß

Matthias
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: Problem mit Events bei fremder Anwendung

  Alt 28. Sep 2007, 09:17
Hallo,

vielleicht liegt es daran, dass Dein Fenster gar nicht wirklich im Vordergrund ist, obwohl die Fensterleiste danach aussieht?
Das Problem hatten wir kürzlich hier
  Mit Zitat antworten Zitat
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#3

Re: Problem mit Events bei fremder Anwendung

  Alt 28. Sep 2007, 11:42
Danke schonmal für den Tip.
Wenn ich in den Fenstertitel klicke, dann kann ich das Fenster anschließend minimieren.

Eine WM_SETFOCUS UND KILLFOCUS Message scheinen keinen Effekt zu haben oder ich verwende sie falsch.

Irgendwelche anderen Ideen?

Gruß

Matthias
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:46 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