Software > Coding
Wie kann ich alle geöffneten Accessories schließen?
Count:
Hallo zusammen,
ich möchte aus meinem Programm heraus alle geöffneten Desk-Accessories schließen, wenn ein anderes Programm gestartet wird. Es geht hier nicht um Multitasking-Betriebssysteme.
Ansich sind laufende Accessories kein Problem, aber sie erscheinen nach dem Start des anderen Programms als mit Desktop-Hintergrund gefüllte Rechtecke, bekommen also keine WM_REDRAW-Message. Erst wenn ein Programmfenster aktualisiert werden muss, bekommen auch die Accessories die Aufforderung sich zu aktualisieren.
Der Atari-Desktop (TOS 2.06) schließt geöffnete Accessories, wenn ein Programm gestartet wird. Gemini macht es ebenso. Also muss es doch eine Möglichkeit geben. appl_find() funktioniert nur, wenn man den Dateinamen kennt.
Ist der einzige Ausweg wirklich, das Wurzelverzeichnis des Boot-Laufwerks nach "*.ACC" und "*.CPX" zu durchsuchen und die Treffer mit appl_find() und appl_write() zu bearbeiten?
Ratlos...
Oliver
goetz @ 3rz:
--- Zitat von: Count am Sa 28.07.2018, 20:41:51 ---Der Atari-Desktop (TOS 2.06) schließt geöffnete Accessories, wenn ein Programm gestartet wird. Gemini macht es ebenso. Also muss es doch eine Möglichkeit geben. appl_find() funktioniert nur, wenn man den Dateinamen kennt.
Ist der einzige Ausweg wirklich, das Wurzelverzeichnis des Boot-Laufwerks nach "*.ACC" und "*.CPX" zu durchsuchen und die Treffer mit appl_find() und appl_write() zu bearbeiten?
--- Ende Zitat ---
Ich weiß nicht wie es geht, aber du kannst Gemini ja mal mit Sysmon o.ä. auf die Pelle rücken und alle OS-Calls mitschneiden. Dann siehst du ja, wie es vorgeht.
mfro:
appl_search() (damit kann man laufende Applikationen finden) gibt's erst mit neueren AESen (XaAES, ...).
Wenn Du an jedes Element der Liste ein AC_CLOSE sendest (Applikationen sollte das nicht jucken), hast Du, was Du willst.
In Single-TOS werden GEM-Applikationen vom Desktop per shel_write() gestartet. Damit sie tatsächlich loslaufen, muss der Desktop sich aber erst selbst beenden und dabei werden die Accessories geschlossen (das ist also eigentlich ein Seiteneffekt).
Startest Du von deiner Anwendung aus weitere per Pexec()?
Dann ist das dein Problem. Verwende shel_write().
Thorsten Otto:
--- Zitat von: mfro am Sa 28.07.2018, 23:17:16 ---In Single-TOS werden GEM-Applikationen vom Desktop per shel_write() gestartet. Damit sie tatsächlich loslaufen, muss der Desktop sich aber erst selbst beenden und dabei werden die Accessories geschlossen (das ist also eigentlich ein Seiteneffekt).
--- Ende Zitat ---
Das ist soweit richtig und gleichzeitig auch das Problem. Der "Desktop" ist ja in diesem Fall sein Programm, und müsste sich also beenden. Ich gehe aber mal davon aus daß sein Programm nachher wieder aktiv sein soll.
Hatte in ORCS auch mal das Problem, als ich es eingebaut habe dort beliebige Programme nachzustarten. Ist unter SingleTOS echt ein ziemlicher Krampf. Ua. musst du auch unbedingt ein appl_exit() machen, sonst kommt das AES gehörig aus dem Tritt.
mfro:
--- Zitat von: gh-baden am Sa 28.07.2018, 23:03:43 ---Ich weiß nicht wie es geht, aber du kannst Gemini ja mal mit Sysmon o.ä. auf die Pelle rücken und alle OS-Calls mitschneiden. Dann siehst du ja, wie es vorgeht.
--- Ende Zitat ---
GEMINI macht sich's da einfach (aber da muss man auch erst mal drauf kommen): es startet nicht direkt die auszuführende Applikation, sondern ruft zunächst shel_write() für RUNNER2.APP (eine Mini-Applikation, die nur genau das kann) aus und beendet sich dann.
RUNNER2.APP startet die eigentliche Anwendung und verbleibt im Speicher (und braucht dabei - im Gegensatz zu GEMINI - nur ganz wenig davon). Wenn die eigentliche Applikation beendet wird, startet RUNNER2 wieder GEMINI.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln