Page 1 of 1

Přepínání/spuštění dvou aplikací Promotic na jednom PC

PostPosted: Mon 29. Jul 2019 15:54:26
by mace
Zdravím, z historických důvodů běží na jednom PC dvě samostatné aplikace Promotic. V samotném spuštění a provozu aplikací není problém. Chtěl bych zajistit přes tlačítko v liště, aby se dalo z jedné aplikace přepínat do druhé aplikace pokud již běží nebo by spustila a následně maximalizovala (pro obě aplikace).
Pro spuštení a přepínání používám skript který byl měl přes OtherAppOper zjistit zda běří druhá aplikace a pokud ne pak by ji měl spustit pomocí ShellExecute. Druhá aplikace má v horní liště skutečně název "Ledová voda".
Skript se chová tak, že vždy dojde k zavolání ShellExecute bez ohledu, zda aplikace běží nebo ne. Pokus o druhé spuštění aplikace Promotic pak způsobí chybové hlášení "Aplikaci nelze spustit protože běží nebo není soubor dostupný".

dim bOper
bOper = Pm.OtherAppOper (3, "Ledová voda", 11)
pm.Debug "bOper:" & bOper
if NOT bOper then
Pm.ShellExecute "open", "C:\Projekty_PM\xxx.pra", "", "C:\Projekty_PM\", 3
end if

Jak lze jinak zajistit funkci spuštění / přepnutí obou aplikací mezi sebou.

Díky.

Re: Přepínání/spuštění dvou aplikací Promotic na jednom PC

PostPosted: Tue 30. Jul 2019 7:02:11
by Tomáš Bräuer
Dobrý den,
díval jsem se do implementace funkce Pm.OtherAppOper v 8.3 i 9.0 a jsem si jistý, že vrací True, pokud funkce najde cílové okno a False, pokud nenajde.
Pokud vám funkce okno nenajde, musí vrátit False. Mohla tam dříve být chyba.
Váš postup je myslím správný a měl by fungovat.
Nezmínil jste, ve které verzi pracujete?

Re: Přepínání/spuštění dvou aplikací Promotic na jednom PC

PostPosted: Tue 30. Jul 2019 15:18:17
by mace
Aplikace je napsaná ve verzi 8.1.13. Bohužel se mi zdá, že funkce Pm.OtherAppOper nic nevrací, protože v debugu se objevuje prázdný řetězec tedy pouze text "bOper:".
Podle chování aplikce se pak vždy provádí podmínka if, tedy zavolání spuštění programu.

Re: Přepínání/spuštění dvou aplikací Promotic na jednom PC

PostPosted: Thu 01. Aug 2019 7:21:20
by Tomáš Bräuer
Tak bohužel, informaci o tom, zda cílové okno existuje nebo ne funkce začala vracet až v 8.3.19 a samozřejmě ve verzi 9.0, kdy to bylo nahlášeno jako chyba. Do dřívějších verzí se oprava nepřenášela a navíc ani starší verze už nebyly generovány.
Budete muset buď použít nový PROMOTIC (asi nereálné) nebo najít jiný postup.
Musíte zjistit, zda PROMOTIC aplikace běží. Napadají mě 2 rychlá řešení.
1) PRA soubor s aplikací je po celou dobu DT i RT otevřený pro zápis, takže selže i operace čtení (Pm.FileBinaryRead). V l bude buď 0 nebo velikost souboru v bajtech.
Code: Select all
dim l, a
l = Pm.FileBinaryRead("Test.pra", 0, 1, a)
Pm.Debug l

2) V app.ini v sekci [Promotic] v položce Running je buď 0 nebo 1, jako příznak, zda daná aplikace běží. Metoda by byla nepřesná pouze po pádu aplikace, kdy v INI zůstane 1, jinak to funguje.
Code: Select all
dim r
r = Pm.IniFileRead("Test.ini", "Promotic", "Running", 0, 3)
Pm.Debug r

Nebo můžete řešit problém externím skriptem nebo programem.

Re: Přepínání/spuštění dvou aplikací Promotic na jednom PC

PostPosted: Wed 07. Aug 2019 8:24:58
by mace
Zdravím, tak nakonec elegantně vyřešeno skriptem/aplikací externě pomocí AutoIt.