Einsteigerfragen zur PROFAN Programmierung

| Suchen
| Zurück zur Übersicht

Autor | Thema: Programm schon gestartet oder nicht ?
Volker Lemke
| 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
Florian May
| 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...........
Volker Lemke
| 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
Rolf Koch
| 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
Rolf Koch
| 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
Volker Lemke
| 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
Rolf Koch
| 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
Rolf Koch
| 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
Volker Lemke
| 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
Volker Lemke
| Datum:01.08.02 20:30 |
vor : @messagebox ("fenster ist schon da","titel",4096) kommt : elseif sorry
Rolf Koch
| 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
Volker Lemke
| 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
Rolf Koch
| 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
Rolf Koch
| 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
Volker Lemke
| 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 :-(
Volker Lemke
| 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
Rolf Koch
| 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
Volker Lemke
| 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

| Zurück zur Übersicht

| Ein kostenloses WebMart Forum WebMart Homepage Tools kostenlos |