Thema: Delphi anderes Programm beenden

Einzelnen Beitrag anzeigen

Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#26

Re: anderes Programm beenden

  Alt 12. Feb 2005, 15:58
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.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat