Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden (https://www.delphipraxis.net/203758-tastatur-focus-meine-anwendung-nach-shelexecute-und-wait-auf-beenden.html)

joehd 20. Mär 2020 10:33

Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
Hallo !
ich habe eine Anwendung geschrieben die unter anderem eine weitere Anwendung aufruft wartet bis diese geschlossen ist und dann wieder in den Vordergrund kommt.
Das klappt aber den Tastatur Focus bekommt sie nicht warum ?
Ich habe schon einiges probiert
kann mir da jemand helfen ? Habe auch schon gesucht


Delphi-Quellcode:
 
  Form1.Memo1.SetFocus;                             // Focus in das Memofeld 1 
  Form1.FormStyle := fsNormal;                     // Formstyle auf Noormal hatte es auch schon on Top
   application.Minimize;                            // Application minimieren
 try
  if (Fileexists(trim(mydata.Start_Minilis_A) )) and (mydata.wait = 'FALSE' ) then   // Wenn die Exe existiert dann ausführen ohne Wait
   ShellExecute(0,'open',pchar(Trim(mydata.Start_Minilis_A)),nil,nil,SW_SHOWNORMAL) else
  if (Fileexists(trim(mydata.Start_Minilis_A) )) and (mydata.wait = 'TRUE' ) then    // Wenn die Exe existiert dann ausführen mit Wait
     Form1.ShellExecAndWait(pchar(Trim(mydata.Start_Minilis_A)), '', SW_SHOWNORMAL) else
     Showmessage('Die Datei : ' + Trim(mydata.Start_Minilis_A) + ' ist nicht vorhanden !');
  finally
   Show();                                                                    // Zeige das Fenster wieder ..
   if Windowstate = WsMinimized then Windowstate := wsnormal;               // Windows State wieder auf Normal
   Application.BringToFront;                                                  // Bringe Application nach vorne
   // Form1.FormStyle := fsStayOnTop;
   Form1.SetFocus;                                                            // TEST
   Memo1.SetFocus;                                                            // TEST
   Setforegroundwindow(application.Handle);                                   // Test
   end;

himitsu 20. Mär 2020 11:07

AW: Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
Deine Anwendung ist nicht der aktive Prozess und hast somit nicht die Berechtigung.

MSDN-Library durchsuchenSetForeGroundWindow, MSDN-Library durchsuchenSetFocus usw.
https://docs.microsoft.com/en-us/win...regroundwindow
siehe die Remarks

joehd 20. Mär 2020 19:41

AW: Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
Das bedeutet ich muss erst mein handle suchen wie wenn ich ein Programm remoten möchte.
Also nach dem Prozess suchen ?
Kann ich in meinem Programm nicht selbst raus finden welches Handle ich habe?

Dalai 20. Mär 2020 19:46

AW: Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
Wenn du das Minimieren der eigenen Anwendung unterlässt, sollte das eigentlich funktionieren, weil der Fokus automatisch auf die zuletzt aktive Anwendung geht (sofern der Nutzer sich da nicht einmischt).

Minimierte Anwendungen haben aus guten Gründen keine Möglichkeit mehr, den Fokus an sich zu reißen.

Grüße
Dalai

joehd 20. Mär 2020 20:36

AW: Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
OK sowas habe ich befürchtet ist halt unbequem für den User ,
ich empfange Barcode eingaben arbeite die um und starte eine andere Application wenn die dann fertig ist sollte er den nächsten eingeben können.

Das mit dem nicht minimieren probiere ich -.. das wäre ja einfach

himitsu 20. Mär 2020 21:57

AW: Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
Also geht es nur darum die Daten von einem Barcodescanner zu bekommen?

Dann nicht über die Tastatur gehen, sondern den Scanner so konfigurieren, dass er einen COM-Port nutzt und dich mit dem verbinden, was auch geht, wenn die Anwendung minimiert ist.

zeras 21. Mär 2020 07:07

AW: Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
Und bitte auch Boolsche Variablen nicht mit TRUE oder FALSE abfragen, sondern einfach

nicht so

Delphi-Quellcode:
 if (Fileexists(trim(mydata.Start_Minilis_A) )) and (mydata.wait = 'FALSE' ) then // Wenn die Exe existiert dann ausführen ohne Wait


sondern beispielsweise so

Delphi-Quellcode:
 if (Fileexists(trim(mydata.Start_Minilis_A) )) and not mydata.wait then

Dalai 21. Mär 2020 14:34

AW: Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
@zeras:
Grundsätzlich stimme ich zwar zu, aber an dieser Stelle wird ein String verglichen, keine boolsche Variable. Stellt sich die Frage, warum das offenbar als String deklariert ist, aber ggf. gibt's dafür Gründe.

Grüße
Dalai

joehd 23. Mär 2020 20:12

AW: Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
"ggf. gibt's dafür Gründe."

ja gibt es das sind Parameter aus einer Ini Datei die ich nicht in Boolsche Variable umwandle weil sie nur 1 mal genutzt werden. ggf würde zwar eine Boolsche abfrage schneller gehen aber dabei kommt es darauf nicht an. Wird ja nur einmal abgefragt sonst in einer schleife würde ich vorher wandeln.

joehd 23. Mär 2020 20:13

AW: Tastatur Focus in meine Anwendung nach Shelexecute und Wait auf Beenden
 
Zitat:

Zitat von himitsu (Beitrag 1460234)
Also geht es nur darum die Daten von einem Barcodescanner zu bekommen?

Dann nicht über die Tastatur gehen, sondern den Scanner so konfigurieren, dass er einen COM-Port nutzt und dich mit dem verbinden, was auch geht, wenn die Anwendung minimiert ist.

Der Scanner ist aber ein HID Scanner das kostet beim einlesen leider auch Zeit .
Schade ...
Aber die Anbindung ist halt einfach und die Anwendung stellt sicher das alles in ein Memo geht ... auch da ggf ging es schneller in ein RTF zu scannen ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 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