Einsteigerfragen zur PROFAN Programmierung
  Suchen
 Zurück zur Übersicht
 AutorThema: Programm schon gestartet oder nicht ?
Volker Lemke
Datum:01.08.02 15:16 Antwortenals Email verschicken  


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


Florian May
Datum:01.08.02 14:59 Antwortenals Email verschicken  


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...........


Volker Lemke
Datum:01.08.02 15:59 Antwortenals Email verschicken  


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


Rolf Koch
Datum:01.08.02 18:21 Antwortenals Email verschicken (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



Rolf Koch
Datum:01.08.02 19:00 Antwortenals Email verschicken (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


Volker Lemke
Datum:01.08.02 19:39 Antwortenals Email verschicken  


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


Rolf Koch
Datum:01.08.02 20:26 Antwortenals Email verschicken (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


Rolf Koch
Datum:01.08.02 20:27 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Noch vergessen:
teststatus% musst Du vor dem Compilieren auf 2 setzen
und im Interpretermodus auf 1
Rolf


Volker Lemke
Datum:01.08.02 20:27 Antwortenals Email verschicken  


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


Volker Lemke
Datum:01.08.02 20:30 Antwortenals Email verschicken  


vor : @messagebox ("fenster ist schon da","titel",4096)
kommt : elseif
sorry


Rolf Koch
Datum:01.08.02 20:34 Antwortenals Email verschicken (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



Volker Lemke
Datum:01.08.02 20:51 Antwortenals Email verschicken  


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


Rolf Koch
Datum:01.08.02 21:48 Antwortenals Email verschicken (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


Rolf Koch
Datum:01.08.02 22:07 Antwortenals Email verschicken (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



Volker Lemke
Datum:02.08.02 08:38 Antwortenals Email verschicken  


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 :-(


Volker Lemke
Datum:02.08.02 09:10 Antwortenals Email verschicken  


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


Rolf Koch
Datum:02.08.02 18:18 Antwortenals Email verschicken (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



Volker Lemke
Datum: 03.08.02 10:23 Antwortenals Email verschicken  


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


 Zurück zur Übersicht
 

 Ein kostenloses WebMart Forum
WebMart Homepage Tools kostenlos
doteu.info: Don´t miss your .eu-Domain