Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi anderes Programm beenden (https://www.delphipraxis.net/39994-anderes-programm-beenden.html)

Luckie 12. Feb 2005 15:02

Re: anderes Programm beenden
 
Ist bei mir nicht drinne: Delphi 6 Personal.

Gambit 12. Feb 2005 15:08

Re: anderes Programm beenden
 
Bei mir schon, ist aber glaube ich auch nicht wirklich ne API Funktion...wirst wohl recht haben...
eine Frage noch Luckie, wenn ich durch Klicken auf ein inaktives Fenster dem Fenster den Focus gebe, wird dann auch ne Windows Botschaft gesendet bzw. welche?

Luckie 12. Feb 2005 15:11

Re: anderes Programm beenden
 
an das Fenster: WM_ACTIVATE und wohl noch WM_PAINT und WM_NCPAINT, Das dürften die wichtigsten sein.

Sprint 12. Feb 2005 15:24

Re: anderes Programm beenden
 
Zitat:

Zitat von Gambit
wenn ich durch Klicken auf ein inaktives Fenster dem Fenster den Focus gebe, wird dann auch ne Windows Botschaft gesendet bzw. welche?

Um ein Fenster in den Vordergrund zu holen, bietet Windows dir API Funktionen an. Also nicht mit SendMessage versuchen.

Gambit 12. Feb 2005 15:41

Re: anderes Programm beenden
 
Zitat:

Zitat von Sprint
[...bietet Windows dir API Funktionen an. Also nicht mit SendMessage versuchen.

Jau, habe ich auch gerade erfahren müssen...magst du mir die API-Funktion sagen?

So würde es gehen...zumindest versuchsweise...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  AppHWnd: HWND;
begin

  AppHWnd := FindWindow(nil, 'Unbenannt - Editor');
  if IsWindow(AppHWnd) then
    BringWindowToTop(AppHWnd)else ShowMessage('Pech gehabt')
end;

Sprint 12. Feb 2005 15:58

Re: anderes Programm beenden
 
Irgendwann mal war es BringWindowToTop. Dann SetForegroundWindow. Mit der Einführung von IE4, ging es nur noch, wenn du du dich in den Thread eingehackt hast. Kann das Verhalten von den Microsoft Entwicklern irgendwie nicht nachvollziehen. Aber die werden sich bestimmt etwas dabei gedacht haben.

Delphi-Quellcode:
procedure TTaskMgrForm.ForceSetForegroundWindow(AHandle: HWND);
var
  AppHWnd: HWND;
  AppThreadId: DWORD;
  ThisThreadId: DWORD;
  TimeOut: DWORD;
begin

  if GetForegroundWindow <> AHandle then
  begin
    BringWindowToTop(AHandle);
    SetForegroundWindow(AHandle);
    AppHWnd := GetForegroundWindow;
    if AppHWnd <> AHandle then
    begin
      AppThreadId := GetWindowThreadProcessId(AppHWnd, nil);
      ThisThreadId := GetCurrentThreadId;
      if (AppThreadId <> 0) and (ThisThreadId <> 0) then
      begin
        if AttachThreadInput(ThisThreadId, AppThreadId, True) then
        begin
          BringWindowToTop(AHandle);
          SetForegroundWindow(AHandle);
          AttachThreadInput(ThisThreadId, AppThreadId, False);
        end;
        if GetForegroundWindow <> AHandle then
        begin
          SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @TimeOut, 0);
          SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0), SPIF_SENDCHANGE);
          BringWindowToTop(AHandle);
          SetForegroundWindow(AHandle);
          SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(TimeOut), SPIF_SENDCHANGE);
        end;
      end;
    end;
  end;

end;
Hab ich jetzt so aus einem alten Projekt kopiert. Sollte aber immer noch funktionieren.

Gambit 12. Feb 2005 16:02

Re: anderes Programm beenden
 
Super, Danke!!

Und schönes Wochenende noch...

Gambit

Gambit 12. Feb 2005 17:51

Re: anderes Programm beenden
 
Shit, geht doch nicht, weil Premiere je nach Projekt seinen Fenstertitel ändert...

Gambit

Sprint 12. Feb 2005 21:30

Re: anderes Programm beenden
 
Zitat:

Zitat von Gambit
Shit, geht doch nicht, weil Premiere je nach Projekt seinen Fenstertitel ändert...

Aber du kannst immer noch per Klassenname suchen.

Gambit 12. Feb 2005 22:55

Re: anderes Programm beenden
 
Tja, da bin ich wieder dumm...bei STunnel hast du ja für den Klassennamen das Gleiche verwendet wie für den Fenstertitel. Bei Notepad beispielsweise klappt es, wenn ich als Klassenname nur 'notepad' eingebe.
Wie bekomme ich denn den Klassennamen heraus?

Gruß

Gambit


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr.
Seite 3 von 4     123 4      

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