Mam problem se spoustenim externi aplikace pres makro.
Chci si udelat makro, ktery spusti externi aplikaci s parametry a pak se naslednespusti import souboru z vybraneho adresa.
Import souboru me funguje, ale nespusti se mi ta aplikace.
jen dodam, ze diakritika dela v BATech hokej.. a tim myslim to, ze si do BATu hodite cestu do pracovniho adresare geogetu, a je tan data aplikací .. pokud to zpustite poklikanim mysi, nebo rucne pres cmd tak to jede, ale geoget spousti ten prikazovej radek s jinym kodovanim a tam to pak blbne..
Vidis, malem bych zapomnel, ze v uplne posledni verzi jsem do maker pridal funkci AnsiToOem, kterou muzes to jmeno adresare prekodovat tak, aby bylo pouzitelne v obsahu BAT souboru.
ještě než jsem začal psát skript tak jsem se snažil pochopit jak ho použít a jestli by mi vyhovovalo, ale za prvé jsem asi pomaleji chápající a za druhé se mi zdálo jako kanón na komára.
Teď potřebuji jenom zjednodušit zápis skriptu a pokud to jde tak vyhodit ty temporrary bat soubory a udělat to elegantně jedním příkazem, což jsem myslel, že by byl ideální RunExec.
RunExec je zapouzdreni Win32APi funkce Createprocess. tedy vytvori se novy proces a ten se spusti.
Ve vsech pripadech, ktere ti nejdou, jde o presmerovani, tedy:
1.proces > soubor
Tedy ze se ma spustit jeden proces, ten vyprodukuje na konzoli nejaky vystup, ten se zachyti, a ulozi se do souboru. Toto chovani ale nezajistuje operacni system, ale stara se o nej cmd.exe.
Tedy aby to chodilo, musi to byt spusteno skrzeva cmd.exe! tedy volat:
Tak jsem se trochu unáhlil. Znovu se u této konstrukce začal objevovat zřejmě stejný problém v případě cesty k souboru, která obsahuje národní znaky, ale zde mi funkce AnsiToOem() už nepomáhá.
Jestli ti rozumim, spoustit GG pod wine a z GG chces spoustet linuxovy bash, ze? To je ovsem dost jina uloha, ktera nezalezi na GG, nybrz na wine. Najdi exe, ktery ti z wine spusti linuxovy program a mas vyhrano.
Tak jsem vymyslel další špek. Potřeboval bych to co spouštím příkazem RunExec skrýt aby to nevyskakovalo jako okno, ale bylo např. minimalizovaný. Jde mi samozřejmě hlavně o DOS okna.
Zkoušel jsem všechno možný, ale nedaří se mi to dotáhnout k dokonalosti.
Tohle nefunguje zřejmě ze stejného důvodu, jako psal geby již dříve:
RunExec('start /min cmd /c "něco"');
Když vytvořím bat s tímto obsahem, tak se sice obsah dávky spustí minimalizovaně, ale stejně zůstane viset to okno, které vyvolá RunExe (které vlastně spouští tu dávku).
Přes RunShell by to sice asi šlo, ale zase potřebuju počkat až operace doběhne, čili zase nepoužitelný.
Prima podpora pro toto v GG neni. Leda snad kdyby to slo pribit pres ten cmd.exe.
Nicmene protoze lze volat cokoliv z DLL, tak sikovny Win32API programator si hrave naimportuje z kernelu funkci CreateProcess a naprogramuje si to spousteni se skrytym oknem sam. Ve skriptech GG lze delat slusna kouzla.