Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit Schleifen (https://www.delphipraxis.net/10627-probleme-mit-schleifen.html)

KyroxX 22. Okt 2003 13:12


Probleme mit Schleifen
 
Hallo,

habe folgenden, einfachen Quellcode zum senden von Shortcuts an nen andres Fenster:

Delphi-Quellcode:
ShellExecute(Handle,'open',PChar('c:\programm.exe'),nil,nil,SW_SHOWNORMAL);
sleep (50);
AppActivate('Fenstername');
SendKeys('%(AW)', TRUE);
application.Terminate;
Wie ihr seht starte ich das "programm.exe", warte 50 Milisekunden,
und sende dann die Tastenkombi "Alt+A+W". ('%(AW)')
Die Kombi wird an das Angesprochene fenster gesendet, welches mit der
funktion "AppActivate('Fenstername'); ermittelt wird.
Dann beendet es sich von selbst.

Alles soweit ok!

Aber jetzt muss ich eine Endlosschleife da rein bringen die alle 50 Milisek.
nach einem Titel sucht und währenddessen durchgehend "Warte auf Programm" anzeigt.
Wenn der richtige Titel dann gefunden ist, soll das Programm den Shortcut senden,
und sich dann beenden.

Sollte ja eigentlich kein problem sein mit ner while Schleife oder so -
aber ich hab irgendwie keine erfolge damit ^^
Kann mir einer von euch vielleicht helfen? Is irgendwie wichtig das ich das hinbekomm *gg*

Thx im vorraus!

p.s.: Code müsste eigentlich so ähnlich lauten:
while AppActivate('fenstername') do
begin
SendKeys('%(AW)', TRUE);
application.Terminate;
end;

aber wie mach ich es das er alle 50 milisek. das macht, und wie zeige ich dann die meldung "warte auf Programm" an?

pp.s.: Die AppActivate funktion hat auch ein result, also wenn result = false ist, heisst das der er das Fenster nicht gefunden hat -.- Die funktion liegt aber in einer andren unit...

Jens Schumann 22. Okt 2003 13:42

Re: Probleme mit Schleifen
 
Hallo,
habe ich auch noch nicht machen müssen.
Aber das Stichwort lautet WaitForMultipleObjects.
Da würde ich beginnen.

Christian Seehase 22. Okt 2003 13:56

Re: Probleme mit Schleifen
 
Moin KyroxX,

Zitat:

Zitat von KyroxX
p.s.: Code müsste eigentlich so ähnlich lauten:
while AppActivate('fenstername') do
begin
SendKeys('%(AW)', TRUE);
application.Terminate;
end;

stimmt.

So könnte es gehen:

Delphi-Quellcode:
while not AppActivate('fenstername') do
begin
  Delay(50); // Siehe Codelibrary
end;
SendKeys('%(AW)', TRUE);
application.Terminate;

KyroxX 22. Okt 2003 15:40

Re: Probleme mit Schleifen
 
Danke für eure Hinweise ! ;)

Mit etwas Fruckelei und Glück isses mir so gelungen:
(ja nicht sehr sauber der code)

begin
Delphi-Quellcode:
ShellExecute(Handle,'open',PChar('programmdatei.exe'),nil,nil,SW_SHOWNORMAL); //startet Programm
while not AppActivate('Fenstername') do // wenn er Fensternamen NICHT findet..
begin
sleep(50);                              // soll er immer wieder 50 milisek warten!
end;
AppActivate('Fenstername'); //findet den Fensternamen
sleep (20);                 //wartet 20 milisek.
SendKeys('%(SA)', TRUE);    //sendet dem Fenster den Shortcut Alt+S+A
sleep (30000);              //wartet 30 sek
AppActivate('Fenstername'); //sucht nochmals nach dem Fensternamen
sleep (50);                 //wartet nochmal 50 milisek.
SendKeys('%(SA)', TRUE);    //sendet nochmals Keys
application.Terminate;      //und nach der Sicherheitsprüfung beenden!
Is doch nett geregelt oder? *gg*

THX 4 help nochmals :mrgreen:

Übrigens nutze ich die Unit "sndkey32.pas" einfach im Forum suchen, falls die jemand braucht...

dac424 5. Jul 2006 07:52

Re: Probleme mit Schleifen
 
das konte ich gut brauchen nur wie mache ich das die Taste gedrückt bleibt bis das ein anderer befehl sie wieder auflöst sprich los läst.


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