Programm wird mehrfach gestartet?

08/16/2013 20:52 Professor Linebeck#1
Hallo liebe Elitepvper's.
Ich hab' vor, ein Programm per [F7] aufrufen zu lassen. Das klappt auch ganz gut, aber nachdem ich [F7] drücke, erscheint das Programm mehrfach, anstatt nur 1 mal.

Wo mache ich den Fehler?

Code:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

while 1
    if _IsPressed("76", $dll) then Run("script\PROGRAMM.exe")

wend
Lg
08/16/2013 21:13 Rolle#2
Heyho,
du hast dein Aufruf in einer While Schleife, diese ist endlos.
Könntest jetzt wenn das Programm gestartet wurde einfach ExitLoop reinschreiben damit er aus der While Schleife geht und mit dem Script weiter macht.

Hoffe konnte dir helfen =)

Grüße
08/16/2013 22:01 Professor Linebeck#3
Quote:
Originally Posted by Rolle View Post
Heyho,
du hast dein Aufruf in einer While Schleife, diese ist endlos.
Könntest jetzt wenn das Programm gestartet wurde einfach ExitLoop reinschreiben damit er aus der While Schleife geht und mit dem Script weiter macht.

Hoffe konnte dir helfen =)

Grüße
Danke für die schnelle Antwort! (:

Das Problem ist nur, dass das Programm bzw die Funktion nicht beendet werden soll. Es soll eine Art Hotkey(Deshalb [F7]) darstellen, welchen man jederzeit drücken kann.
Deshalb sollte sich das Programm nicht schließen x:
08/16/2013 22:32 Rolle#4
Dann mach doch einfach am anfang des Scripts:
HotKeySet("{Taste}", "Function")

Dann kannste die Taste immer drücken ohne das sich dein Programm beendet.

Das ist jetzt die Hilfe die ich aus deiner Fragestellung raus lesen kann ^^

Am besten schreibst du mal genau was du vorhast :)

Grüße
08/16/2013 22:58 Professor Linebeck#5
Quote:
Originally Posted by Rolle View Post
Dann mach doch einfach am anfang des Scripts:
HotKeySet("{Taste}", "Function")

Dann kannste die Taste immer drücken ohne das sich dein Programm beendet.

Das ist jetzt die Hilfe die ich aus deiner Fragestellung raus lesen kann ^^

Am besten schreibst du mal genau was du vorhast :)

Grüße
Du hast es schon richtig verstanden (:

Ich hab' es nun mal so versucht, aber nun startet das Programm nicht einmal.(Zwar kein Error, aber auch nicht im Taskmanager zu sehen):
Code:
HotKeySet("{F1}", "Start")

Func Start()
	Run("script\PROGRAMM.exe")
EndFunc
08/16/2013 23:05 Jeoni#6
Bin zwar kaum in AutoIt drin, aber das kommt daher, dass außer dem HotKeySet kein Code zum ausführen da ist. Du musst das Programm mit einer while-schleife am Leben erhalten.
Code:
HotKeySet("{F1}", "Start")

While 1
	Sleep(10)
WEnd

Func Start()
	Run("script\PROGRAMM.exe")
EndFunc
So sollte es dann auch klappen ;)
MfG
Jeoni
08/16/2013 23:21 BladeTiger12#7
Naja, das Hauptproblem ist, das es in einer While-Schleife steht.
B.z.w die While durchläuft so schnell das _IsPressed in
einer Sekunde vielleicht 2x(oder mehrmals) abgefragt wird.

Code:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

while 1
    if _IsPressed("76", $dll) then
          Run("script\PROGRAMM.exe")
          Sleep(200)
    EndIf

wend
08/16/2013 23:25 Rolle#8
Jeoni hat recht, du musst dem Programm eine While Schleife geben. Damit es am "leben" bleibt. Ansonsten geht das Script einmal durch und dann ist es "zu Ende" und beendet sich in dem Fall^^
Somit haste keine Chance deinen HotKey zu drücken :P

Grüße
08/16/2013 23:26 Professor Linebeck#9
Quote:
Originally Posted by BladeTiger12 View Post
Naja, das Hauptproblem ist, das es in einer While-Schleife steht.
B.z.w die While durchläuft so schnell das _IsPressed in
einer Sekunde vielleicht 2x(oder mehrmals) abgefragt wird.

Code:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

while 1
    if _IsPressed("76", $dll) then
          Run("script\PROGRAMM.exe")
          Sleep(200)
    EndIf

wend
So funktionert es, vielen Dank! (:
08/17/2013 00:28 KDeluxe#10
Wenn das "PROGRAMM" generell nur einmal gestartet werden soll kannst du dir auch die Funktion _Singleton() angucken. Vorausgesetzt, dass du die "PROGRAMM.exe" aus einem AutoIt Script erstellst.
08/17/2013 19:56 FacePalmMan#11
oder besser (das programm wartet nun auch darauf, bis F7 wieder losgelassen wird):
Code:
#include <Misc.au3>
while 1
    if _IsPressed("76") then
          Run("script\PROGRAMM.exe")
          While 1
               If not _ispressed("76") then Exitloop
          WEnd
    EndIf
WEnd