Seite 2 von 2
Re: ich komme mit ProgramRunning nicht klar
Verfasst: 23.10.2017 08:42
von RSBasic
So habe ich das auch verstanden.

Re: ich komme mit ProgramRunning nicht klar
Verfasst: 23.10.2017 11:48
von Pelagio
Ich habe mal ein wenig gekramt und folgendes ausgegraben was, so glaube ich, das Problem erkennt und die Lösung ist.
Code: Alles auswählen
CreateMutex_(0, 1, ProgrammName)
If (GetLastError_() = #ERROR_ALREADY_EXISTS)
MessageRequester("InfoBox: Achtung!", "Programm läuft schon", #MB_OK|#MB_ICONERROR)
Else
RunProgramm (ProgrammName)
EndIf
Re: ich komme mit ProgramRunning nicht klar
Verfasst: 23.10.2017 12:49
von NicTheQuick
Das hilft auch nicht. Du merkst nicht, wenn das externe Programm beendet wird. Und du merkst auch nicht, wenn jemand anderes als dein Programm das externe Programm gestartet hat.
Re: ich komme mit ProgramRunning nicht klar
Verfasst: 23.10.2017 19:57
von wie_jetzt?
Hallo Allerseits!
Zuerst mal herzlichen Dank, dass Ihr Euch so viel um das Problem kümmert. Da sind eine ganze Menge Ansätze, die ich Anfänger gar nicht bedachte - das zeigt sich, wie tief Ihr alle in der Materie steckt! Großes Lob!
Im Lichte dessen habe ich erkannt, dass ich mich unklar ausgedrückt habe und mehr Verwirrung als unbedingt notwendig gestiftet habe - tut mir leid!
Also zur Dingsbums.exe:
Ein Programm, dass der User meines Programmes starten können soll, jedoch nicht unbedingt muss. Wenn es gestartet wird, soll nur eine Instanz davon laufen und nicht x-mal gestartet werden, nur weil es im Hintergrund eines Fensters nicht gesehen wird.
Allerdings - wie von Euch richtig bedacht wurde - bekommt mein Prog nicht unbedingt mit, wenn dingsbums.exe geschlossen wird. Meine unbedachte 08/15-Lösung
lässt nur einen einmaligen Start zu. Wenn der User das dingsbums.exe schließt, ist damit kein neuer Start mehr möglich.
Ich glaube, ich brauche 2 Dinge:
1) In dingsbums.exe die Prüfung, ob dingsbums.exe bereits läuft, um eine neue Instanz gleich wieder abzuwürgen.
2) In meinem Prog eine Prüfung, ob dingsbums.exe bereits läuft und wenn nicht, dann starten, und wenn doch, dann in den Vordergrund bringen.
Könnt Ihr mir da helfen? Gibt es irgendwo so eine "Schweizer-Taschemnesser-User-Lib", wo all sowas schon alles vorgekaut und Anfängerfreundlich serviert wird?
Re: ich komme mit ProgramRunning nicht klar
Verfasst: 23.10.2017 20:05
von NicTheQuick
Ich muss nochmal nachhaken: Ist Dingsbums.exe auch ein Programm von dir, das du ändern kannst? Das würde einiges einfacher machen.
Re: ich komme mit ProgramRunning nicht klar
Verfasst: 23.10.2017 21:51
von wie_jetzt?
Jep, dingsbums.exe ist auch von mir - um ehrlich zu sein, beschränkt sich da jedoch mein Beitrag mehr auf oberflächliches Anpassen und Zusammensetzen von Code-Schnippseln, deren Programmierung in nicht unerheblichem Maße von den Könnern dieses Forums stammt. Also eine Art Gesamtkunstwerk, wobei ich mich da eher als Koch verstehe, der sich der "Gewürze" dieses Forums (und anderer Quellen) bedient.
Re: ich komme mit ProgramRunning nicht klar
Verfasst: 23.10.2017 22:02
von ts-soft
Dann hast Du doch alles, was möglich ist. Mein Modul, aufrufen wie im Beitrag hier bereits beschrieben und den Rest mußte selber schaffen, da Dingbums.exe ja nicht weiter bekannt ist.
Guck Dir das Beispiel an und nicht unbedingt den Code!
//edit
Denk dran, es gibt nur eine Exe, keine zwei! Die Dingsbums.exe ist auch diejenige, die die zweite Instanz verhindert.
Re: ich komme mit ProgramRunning nicht klar
Verfasst: 24.10.2017 20:25
von wie_jetzt?
Hallo ts-soft,
funktioniert! Besten Dank für die Unterstützung. Habe zwar im Moment nur eine grobe Vorstellung dessen, was da passiert, aber das reicht erstmal so.
Re: ich komme mit ProgramRunning nicht klar
Verfasst: 24.10.2017 22:14
von ts-soft
wie_jetzt? hat geschrieben:Habe zwar im Moment nur eine grobe Vorstellung dessen, was da passiert, aber das reicht erstmal so.
Du hast auf jeden fall den Code angeguckt und drüber nachgedacht, das ist doch schon was
Ansonsten sollte so ein Modul funktionieren, man muß es nicht verstehen, sondern nur anwenden können!
Das wichtigste sind InitOne am Anfang, nach Fenstererstellung und ReleaseOne beim Programm beenden, damit alles
freigegeben wird, damit auch ein neuer Start möglich ist.
Wenn Du jetzt noch das benutzerdefinierte Event nutzt, z.B. um das Fenster in den Vordergrund zu bringen, biste doch schon da wo Du hin wolltest.
Gruß
Thomas