AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi mit createProcess ein Prog starten ohne Focus zu verlieren

mit createProcess ein Prog starten ohne Focus zu verlieren

Ein Thema von Gambit · begonnen am 15. Feb 2005 · letzter Beitrag vom 15. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2   
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

mit createProcess ein Prog starten ohne Focus zu verlieren

  Alt 15. Feb 2005, 10:46
Hallo,
ich kann ja mit createProcess ein anderes Programm aus meiner Anwendung heraus starten. Dabei verliert meine Anwendung aber den Focus. Alle Versuche, meine Anwendung nach Start des anderen Programms wieder nach vorne zu bringen, sind bisher gescheitert. Ich habe es mit verschiedenen Beispielen hier aus diesem Forum probiert.
Gibt es eine Möglichkeit, mit createProcess ein anderes Programm zu starten ohne den Focus zu verlieren bzw. ihn danach zurückzubekommen?

Gruß

Gambit
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: mit createProcess ein Prog starten ohne Focus zu verlier

  Alt 15. Feb 2005, 10:55
Der Focus wird von Windows entrissen. Da gibt es wohl keine Moeglichkeit das zu verhindern.
Mit CreateProcess das Programm starten und mit WaitForInputIdle warten bis das Programm voellig gestartet ist.
Dann muesste es moeglich sein den Focus zurueckzuerobern.
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#3

Re: mit createProcess ein Prog starten ohne Focus zu verlier

  Alt 15. Feb 2005, 11:17
OK WaitForInputIdle rufe ich jetzt nach Aufruf des fremden Programms auf. Das fremde Programm starte ich im OnCreate Ereignis meiner Anwendung.
Habe versucht mit folgender Routine von SPRINT den Focus zurückzubekommen:

Delphi-Quellcode:
procedure TForm1.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;
wobei ich als Handle "self.handle" eingebe. Das führe ich jetzt im OnActivate Ereignis meiner Anwendung aus. Funzt aber nicht und ich verstehe nicht warum.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

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

Re: mit createProcess ein Prog starten ohne Focus zu verlier

  Alt 15. Feb 2005, 11:24
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
begin

  FillChar(SI, SizeOf(TStartupInfo), 0);

  with SI do
  begin
    cb := SizeOf(TStartupInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_SHOWNOACTIVATE;
  end;

  if CreateProcess(nil, 'NOTEPAD.EXE', nil, nil, False, 0, nil, nil, SI, PI) then
  begin
    WaitForInputIdle(PI.hProcess, INFINITE);
    BringWindowToTop(Self.Handle);
    CloseHandle(PI.hProcess);
    CloseHandle(PI.hThread);
  end;

end;
Ciao, Sprint.

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

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#5

Re: mit createProcess ein Prog starten ohne Focus zu verlier

  Alt 15. Feb 2005, 11:38
ne, klappt auch irgendwie nicht...

EDIT
in deinem Beispiel hier wohl aber bei meinem(was du ja kennst mit STunnel) gehts nicht,
der einzige Unterschied ist bei mir, dass ich jetzt nicht self.handle angegeben habe sondern Form1.Handle weil bei mir die Routinen in ner eigenen Klasse stehen...
//EDIT
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

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

Re: mit createProcess ein Prog starten ohne Focus zu verlier

  Alt 15. Feb 2005, 11:44
Starte stunnel versteckt. Oder musst das Fenster auf sein?
Ciao, Sprint.

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

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#7

Re: mit createProcess ein Prog starten ohne Focus zu verlier

  Alt 15. Feb 2005, 11:47
nein nur das Icon im Tray sollte zu sehen sein. Meinst du mit SW_Hide starten? Hatte ich auch schon probiert...

edit
ich hatte schon aus lauter Verzweiflung daran gedacht noch ein Miniprogramm zu schreiben, welches ich versteckt nach STunnel starte und welches den Focus an meine Hauptapplikation zurückgibt aber das wäre ja von hinten durch die Brust ins Auge...
//edit
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

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

Re: mit createProcess ein Prog starten ohne Focus zu verlier

  Alt 15. Feb 2005, 11:56
Sonst versuche mal Application.Handle, anstat Self.Handle. Ja, SW_HIDE meinte ich.
Ciao, Sprint.

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

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#9

Re: mit createProcess ein Prog starten ohne Focus zu verlier

  Alt 15. Feb 2005, 11:59
das Handle stimmt schon glaube ich, hatte ich mal mit FindWindow überprüft...
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: mit createProcess ein Prog starten ohne Focus zu verlier

  Alt 15. Feb 2005, 13:37
Im OnCreate ein anderes Programm zu starten ist Unsinn.
Da ist die Mainform noch garnicht angezeigt/existent und das Programm kann den Focus doch noch garnicht haben.
Mach es im OnShow und schuetze es dort vor Mehrfachaufruf.
  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:24 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