Autor | Thema: Programm schon gestartet oder nicht ? | | Datum:01.08.02 15:16 
| |
hallo leute,
habe mal wieder ein problem ;-)
wie kann ich feststellen ob das programm schon gestartet ist oder nicht ?
'--- Info ---
Proc Info
Declare Info&,InfoFenster%
Let InfoFenster% = winexec("info.exe",1)
Let Info& = @FindWindow("Test")
SetText Info&,"Test-Fenster"
@Asetparent(Info&,%hwnd)
ShowWindow (Info&,0)
setwindowpos Info& = 5,30-200,100
ShowWindow (Info&,1)
EndProc
mfg
volker
|
| | Datum:01.08.02 14:59 
| |
wenn du die überschrift deines programmes hast, mach es so:
starte das programm
lass danach eine schleife ablaufen, in dieser vergleichst du die überschrift mit einen string, der ebenfalls die überschrift enthält, ist dieser gleich, so wird eine fenster angezeigt, ist er nicht gleich so beginnt die schleife von neuen...........
|
| | Datum:01.08.02 15:59 
| |
so habe ich es mir auch gedacht, hast du da mal ein beispiel ?
währe echt supi, den titel vom fenster habe ich ja schon in meiner PROC und ändere ihn ja auch.
mfg
volker
|
| | Datum:01.08.02 18:21 
(webmaster@rokosoft.de) | |
Hi
oder schreib am Anfang Deines Programms in eine Inidatei und kurz vor Ende
let lauftest$=readini ......
if equ$(lauftest$,1)
'Hier dann die Aktion wenn Schlüssel = 1
'bedeutet, wenn es schon läuft!
endif
Writeini ....... 'Hier jetzt eine 1 rein
'PROGRAMM.......
Ende des Programms:
Writeini ....... 'Hier jetzt eine 0 in die INI
Wenn Du nun das Programm nochmal aufrufst, steht ja zur Laufzeit der ersten Instanz eine 1 in der INI und Du kannst auf die 1 reagieren.
Rolf
P.S: Habt Ihr schon den Profanforumwächter - Watch@Profan²Forum? Nein?
Hier:
http://home.t-online.de/home/rokosoft/waw.zip
|
| | Datum:01.08.02 19:00 
(webmaster@rokosoft.de) | |
Sorry :)))))
Hatte wieder nicht richtig gelesen - Hatte verstanden, daß Du verhindern willst, daß Dein Programm nicht zweimal gestartet wird -
nochmals Sorry
Rolf
|
| | Datum:01.08.02 19:39 
| |
hallo rolf,
das ist eine gute idee :-)
allerdings bekomme ich es nicht hin das die ini in den verzeichnis geschrieben wird, in den ich auch bin.
ich muss immer einen path angeben :-(
mit lesen geht es
-Let FensterAktiv$=@ReadIni$(@Add$(@GetDir$("@"),"\Daten.ini"),"Info","Fenster")-
nur wie kann man das auch mit schreiben machen ???
gruß volker
|
| | Datum:01.08.02 20:26 
(webmaster@rokosoft.de) | |
Hi mach es besser so:
declare teststatus%,pfad$
declare inidatei$
teststatus%=1
if teststatus%=1 'INTERPRETERMODUS
let pfad$=@getdir$("@")
elseif teststatus%=2 ' EXEMODUS
let pfad$=@Par$(0)
let pfad$=@upper$(pfad$)
'Hier nun noch abändern (NAMEDERDATEI!):
let pfad$=@Translate$(pfad$,"\NAMEDERDATEI.EXE","")
endif
und dann:
let inidatei$=pfad$;"\DATEN.INI"
die Iniaktionen:
FensterAktiv$=@ReadIni$(inidatei$,"Info","Fenster")
'**********************************************
'Zum Schreiben
CHDIR pfad$
Writeini inidatei$,"Info","Fenster"= DEIN EINTRAG HIER
Rolf
|
| | Datum:01.08.02 20:27 
(webmaster@rokosoft.de) | |
Noch vergessen:
teststatus% musst Du vor dem Compilieren auf 2 setzen
und im Interpretermodus auf 1
Rolf
|
| | Datum:01.08.02 20:27 
| |
ich noch mal,
wie gehts nu weiter ?
proc start
let fensteraktiv$ = readini$ ("c:\daten.ini","info","fenster")
if @equ$(fensteraktiv$,0)
...öffnen erxterne exe-datei...
writeini "c:\daten.ini","info","fenster"="1"elseif
@messagebox ("fenster ist schon da","titel",4096)
endif
endproc
und wie merke ich nun das es geschlossen wurde um
writeini "c:\daten.ini","info","fenster"="1"
zu veranlassen ???
mfg
volker
|
| | Datum:01.08.02 20:30 
| |
vor : @messagebox ("fenster ist schon da","titel",4096)
kommt : elseif
sorry
|
| | Datum:01.08.02 20:34 
(webmaster@rokosoft.de) | |
vielleicht immer wieder per findwindow nach Waitinput abfragen? - Dies ist aber nur gut, wenn die Aktion ausgeführt werden soll, wenn das Programm nach einer Useraktion danach schauen soll.
Wenn es öfters (also auch im Leerlauf) nach dem Fenster schauen soll, dann rate ich Dir zu %Timer
Rolf
|
| | Datum:01.08.02 20:51 
| |
wie soll ich das nur anstellen mit findwindow :-(
habe diese fuktion ja schon in mein ersten text, mit wen ich es nutze um den neuen fenster-titel ab zu fragen kommt nix.
Let fensteraktic& = @FindWindow("Test-Fesnster")
If @equ$(fensteraktiv$,0)
...fenster bau...
elseif
...massage fenster schon da...
endif
volker
|
| | Datum:01.08.02 21:48 
(webmaster@rokosoft.de) | |
Hi,
Versuchs mal hiermit - also bei mir klappt es.
Setze die Abfrage in eine Prozedur und dann kannste diese immer aufrufen, wenn Du diese benötigst!
declare fenster%
Proc Findefenster
let fenster%=@FindWindow("Unbenannt - Paint")
'als Beispiel
if neq(fenster%,0)
locate 2,2
print " "
locate 2,2
print "Fenster da"
else
locate 2,2
print " "
locate 2,2
print "nicht da "
endif
Endproc
cls
Findefenster
While 1
Findefenster
Wend
Rolf
|
| | Datum:01.08.02 22:07 
(webmaster@rokosoft.de) | |
Achso, einige Sachen, welche Du falsch hast:
>Let fensteraktic& = @FindWindow("Test-Fesnster")
fensteraktic? bedeutet bestimmt fensteraktiv, oder?
Und: Test-Fesnster ???
>If @equ$(fensteraktiv$,0)
Warum hier equ$????????
In fensteraktiv& ist ein Wert und der wird per
If @equ() abgefragt! Ausserdem ist ober let fensteractive& richtig und hier haste aufeinmal fensteraktiv$
>...fenster bau...
>elseif
entweder
ELSE
oder
elseif neq(fensteraktiv&,0)
Elseif alleine geht nicht.
>...massage fenster schon da...
:))))))) GEIL, wo bekommt man den so ein MASSAGEfenster?
Ich hab ab und zu auch Rückenschmerzen (Sorry, aber das
war wirklich Stark - nicht böse sein :)))) )
>endif
Vielleicht hast Du dies aber auch nur schnell Online hierhin geschrieben, dann sieht hoffentlich Dein Quelltext nicht so aus ;) - dann kann einiges nicht funktionieren!
Rolf
|
| | Datum:02.08.02 08:38 
| |
Hallo Rolf,
nein mein Code sieht nicht so aus ;-) hier mal die Prozedur
Proc ExternFenster
let Info&=@FindWindow("X")
If @Neq(Info&,0)
winexec("info.dll",1)
Let Info& = @FindWindow("Test")
SetText Info&,"X" 'Fenster neuen Titel geben...
@Asetparent(Info&,%hwnd)
ShowWindow (Info&,0)
setwindowpos Info& = 5,30-200,100
ShowWindow (Info&,1)
ElseIf
@MessageBox ("Fenster ist schon da !","Fensterabfrage...",4096)
EndIf
EndProc
aber die funzt nicht :-(
|
| | Datum:02.08.02 09:10 
| |
sorry das ist alt, hier das neue dsas nicht hi haut ;-)
Proc Info
Declare Info&,FensterAktiv%,pfad$,inidatei$
'TraceOn
let Info&=@FindWindow("X")
If @Neq(Info&,0)
winexec("info.dll",1)
Let Info& = @FindWindow("Test")
SetText Info&,"X"
@Asetparent(Info&,%hwnd)
ShowWindow (Info&,0)
setwindowpos Info& = 5,30-200,100
ShowWindow (Info&,1)
ElseIf
@MessageBox ("Fenster ist schon da !","Fensterabfrage...",4096)
EndIf
EndProc
|
| | Datum:02.08.02 18:18 
(webmaster@rokosoft.de) | |
Volker,
schau Dir doch mal die Vorlage von mir an! Hier weiter oben.
Wieso denn folgendes:
>If @Neq(Info&,0)
Dies bedeutet doch: WENN FENSTER DA!
und dann schreibst Du weiter unten:
>ElseIf
>@MessageBox ("Fenster ist schon da !","Fensterabfrage...",4096)
Komisch die erste Bedingung ist WENN FENSTER DA und dann
ein ELSEIF (was es in dieser Form nicht gibt, sondern nur
ELSE !!!) mit dem selben Ergebnis, wenn Fenster da ?????
Aufjedenfall aus dem Elseif ein Else machen - vielleicht liegt es ja schon daran.
Und wenn ich es richtig verstanden habe ist die erste Bedingung Wenn kein Fenster da ???
Dann muss aber doch dorthin:
If equ(Info&,0) - oder hab ich da was falsch verstanden ?
;)
Rolf
|
| | Datum: 03.08.02 10:23 
| |
hallo rolf,
habe das (neq AUF equ) geändert und das (elseif AUF else)
geht aber trotzdem nicht :-( das programm wird immer wieder gestartet...
es muss doch eine möglichkeit geben alle fenster ab zu fragen.
volker
|
|
|