Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fenster Handle ermitteln ohne Application.Title (https://www.delphipraxis.net/116079-fenster-handle-ermitteln-ohne-application-title.html)

patti 23. Jun 2008 13:09

Re: Fenster Handle ermitteln ohne Application.Title
 
Schau mal hier. Ich hatte selbst mal das Problem, dass ich nur den EXE-Namen (Dateinamen) gekannt habe, aber keinen Fenstertitel etc. bitsetter hat mir damals ziemlich geholfen.

Vielleicht ist das ja auch eine Lösung für dich

Patti

Apollonius 23. Jun 2008 13:24

Re: Fenster Handle ermitteln ohne Application.Title
 
Um das ganze nochmal näher zu erläutern:
Delphi-Quellcode:

const WM_RESPONSE = WM_USER + 6; //WM_USER + beliebig

type
TfrmMain = class(TForm)
  procedure frmMainCreate(Sender: TObject);
protected
  procedure WndProc(var Message: TMessage); override;
  procedure ResponseMessage(var Message: TMessage); message WM_RESPONSE;
private
  fOtherHandle: HWnd;
end;

implementation

var MySpecialMessage: Cardinal;

procedure TfrmMain.frmMainCreate(Sender: TObject);
begin
  HandleNeeded; //wir brauchen ein Fenster-Handle
  MySpecialMessage := RegisterWindowMessage('Eindeutige String-Konstante');
  SendMessage(HWND_BROADCAST, MySpecialMessage, Integer(Handle), WM_RESPONSE);
  if fOtherHandle <> 0 then
  begin
    //es gibt eine andere Instanz, in dieser hat das Hauptfenster das Handle fOtherHandle
  end;
end;

procedure TfrmMain.WndProc(var Message: TMessage);
begin
  if Message.Msg = MySpecialMessage then
    SendMessage(Message.WParam, Message.LParam, Handle, 0)
  else
    inherited;
end;

procedure TfrmMain.ResponseMessage(var Message: TMessage);
begin
  fOtherHandle := Message.WParam;
end;

TUX_der_Pinguin 24. Jun 2008 09:27

Re: Fenster Handle ermitteln ohne Application.Title
 
Ich habe das ganze jetzt mal mit Windows Messages versucht, scheint auch alles zu klappen.

Projekt Datei:
Delphi-Quellcode:
program tab;

uses
  Forms,
  Windows,
  uMain in 'uMain.pas' {frmMain},
  uGlobal in 'uGlobal.pas',
  ...;

{$R *.res}

var
  //dwMessage : DWORD; in uGlobal.pas Deklariert.
  dwMutex      : DWORD;
  hWindow      : THandle;

begin
  //Ermitteln in welchem Modus das Programm läuft
  glPrgMode := fGetProgMode; //glProgMode ist ein Integer-Wert

  // Eigene Message erzeugen
  dwMessage := RegisterWindowMessage('{110E0C4D-A63F-4B36-829D-3847E28636AF}');

  //Mutex erzeugen
  dwmutex := CreateMutex(nil, True, '{B2662A89-1938-4799-9F8D-11FBD5179EA9}');
  try
    //prüfen ob die Anwendung bereits läuft...
    if GetLastError <> ERROR_ALREADY_EXISTS then begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.Title := '';
      Application.CreateForm(TfrmMain, frmMain);
      Application.CreateForm(TfrmSplashScreen, frmSplashScreen);
      Application.OnMessage := frmMain.OnAppMsg;
      Application.Run;
    end
    else begin
      //Windows Botschaft an alle Fenster schicken...
      PostMessage(HWND_BROADCAST, dwMessage, glPrgMode, 0);
    end;{else}
  finally
    //Mutex freigeben
    if dwMutex <> 0 then ReleaseMutex(dwMutex);
  end;

end.
Und hier die Application.OnMessage Prozedur:
Delphi-Quellcode:
procedure TfrmMain.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  Handled := False;

  if Msg.message = dwMessage then begin
    if Msg.wParam = glPrgMode then begin
      //ShowWindow(Application.MainFormHandle, SW_NORMAL);
      Application.Restore;
      SetForegroundWindow(Application.MainFormHandle);
    end;
    Handled := True;
  end;

end;
Jedoch habe ich an der Stelle noch das Problem, das ich mein Fenster bzw.
meine Anwendung nicht vernüftig wiederhergestellt bekomme.

Vjay 24. Jun 2008 09:31

Re: Fenster Handle ermitteln ohne Application.Title
 
Dann mach dazu mal ein neues Thema auf, das Problem ist ja gelöst. Vielleicht hilft dir die Suche nach forceForegroundWindow, falls der Fokus das Problem ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 Uhr.
Seite 2 von 2     12   

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