Přejít na obsah


Fotka

jak spustit externi program pres makro?


  • Pokud chcete vložit odpověď, přihlašte se
19 odpovědí na toto téma

#1 patris-4841

patris-4841

    Member

  • Members
  • PipPip
  • 15 příspěvků(y)

Publikováno 03 leden 2008 - 10:43

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. procedure PluginWork; begin RunExec('c:\GJ\gj.exe' + ' " gj.ini cache ' + GC_ID + '"'); GeoImportDir('c:\GJ\data\'); end; Zkousel sem i pouzit .bat soubor, ktery se spousti bez parametru, ale nejde mi to :-( RunExec('c:\GJ\gj.bat'); Pokusy nahradit RunExec za RunShell taky nezabraly. Co mam v makru blbe? Muzete nekdo poslat ukazku funkcniho makra, ktery spusti externi aplikaci a pri spusteni preda parametry?
  • 0

#2 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 03 leden 2008 - 11:42

EXE s parametry by melo jit spustit pres RunExec, BAT soubor vsak uz ne. BAT ale jde spustit pres RunShell.

Nicmene v jednom existujicim makru vidim nasledujici konstrukce, ktere tam zjevne funguji...

  gjresult := RunExec('"' + Geoget_datadir + '\geojarry.exe" "' + inif + '"');

nebo:
  dbatf := Geoget_datadir + '\gjtemp.bat';
  RunShell(dbatf);

  • 0

#3 mikrom

mikrom

    Advanced Member

  • Members
  • PipPipPip
  • 1 748 příspěvků(y)

Publikováno 01 duben 2008 - 18:02

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..
  • 0

#4 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 01 duben 2008 - 18:08

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.
  • 0

#5 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 01 září 2010 - 9:43

Některé příkazy mi nejdou spustit přímo pomocí RunExec(), ale když je uložím do bat a spustím ten se stejným obsahem, tak se to provede.

Např. toto neprojde:
script := 'reg query "HKEY_CURRENT_USER\Software\JavaSoft\Prefs\geokuk\current\umisteni/Souboru" /v "kachle/Cache/Dir" > "' + MakroPath + 'reg_PC.txt"'
RunExec(script);
ulozene do bat to projde:
script := 'reg query "HKEY_CURRENT_USER\Software\JavaSoft\Prefs\geokuk\current\umisteni/Souboru" /v "kachle/Cache/Dir" > "' + MakroPath + 'reg_PC.txt"'
StringToFile(AnsiToOem(script), Makropath + 'readreg_PC.bat');
RunExec('"' + MakroPath + 'readreg_PC.bat' + '"');

Toto taky přímo neprojde (přes bat ano):
script := '"' + MakroPath + 'RapiReg.exe" -v HKEY_CURRENT_USER\Software\PocketDrake\PocketDrake\Options > "' + MakroPath + 'reg_PDA.txt"'
RunExec(script);


Naopakt tento příkaz projde bez problémů:
RunExec('"' + MakroPath + 'rapisync.exe" -m -s "' + GEOGET_DATADIR + '\offline\inc" "' + MapPath + '\Img"');

V čem by mohl být problém? Nedokázal jsem vypozorovat co RunExec dokáže a co už ne. Nebo dělám nějakou chybu?

Edit: pro úplnost ještě MakroPath := D:\+Dokumenty\+GeoCaching\=GeoGet\GeoGet\script\PocketDrake

Díky.
  • 0

LG G3 + a:Drake


#6 Sally&eL

Sally&eL

    Sally

  • Members
  • PipPipPip
  • 823 příspěvků(y)

Publikováno 01 září 2010 - 9:48

...a makro Combine jsi nezkoušel jestli by vyhovovalo tvým požadavkům?
  • 0

#7 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 01 září 2010 - 9:52

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.
  • 0

LG G3 + a:Drake


#8 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 01 září 2010 - 9:53

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: cmd.exe /c co_chces_spustit
  • 0

#9 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 01 září 2010 - 9:54

BTW: od pristiho GG budes mit primo skript-funkce pro praci s registry...
  • 0

#10 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 01 září 2010 - 10:46

Tak funguje perfektně. V mém případě je to tedy takto:

script := '"' + MakroPath + 'RapiReg.exe" -v HKEY_CURRENT_USER\Software\PocketDrake\PocketDrake\Options > "' + MakroPath + 'reg_PDA.txt"'
RunExec('cmd.exe /c "' + AnsiToOem(script) + '"');

Díky za pomoc.
  • 0

LG G3 + a:Drake


#11 h0--

h0--

    Advanced Member

  • Members
  • PipPipPip
  • 2 079 příspěvků(y)

Publikováno 01 září 2010 - 11:14

(ja teda vim ze tohle potrebuju asi jen ja, a ze to asi bude spis problem ve wine, ale je nejaka moznost takhle poustet bashovy skripty?)
  • 0

garmin 60CSx | galaxy nexus + locus pro | lumia 640 + geocaching pro

astrolux S1 | convoy S2+ | 2x aurora ak-p7

norco search a.105 '16 | mibo mastr '12 | #fialka '9x

 

http://openstreetmap.cz/


#12 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 01 září 2010 - 11:33

Subi napsal/a:
Tak funguje perfektně. V mém případě je to tedy takto:

script := '"' + MakroPath + 'RapiReg.exe" -v HKEY_CURRENT_USER\Software\PocketDrake\PocketDrake\Options > "' + MakroPath + 'reg_PDA.txt"'
RunExec('cmd.exe /c "' + AnsiToOem(script) + '"');

Díky za pomoc.


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á.
  • 0

LG G3 + a:Drake


#13 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 01 září 2010 - 11:51

honny napsal/a:
(ja teda vim ze tohle potrebuju asi jen ja, a ze to asi bude spis problem ve wine, ale je nejaka moznost takhle poustet bashovy skripty?)


Nemam sebemensi tuseni, jak ma tohle WINE zarizene.
  • 0

#14 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 01 září 2010 - 11:52

Subi napsal/a:
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á.


V tomto pripade by to melo byt (snad se nemylim) v ANSI kodovani. Ale tezko rict, tohle jsem vlastne nikdy nezkousel.
  • 0

#15 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 01 září 2010 - 12:05

Sem už úplně blbej, zase máš pravdu!
Vyzkoušel jsem všechny možné kombinace s AnsiToOEM, ale úplně ji vyhodit mě nenapadlo.

Takže takto to vypadá, že to chodí:
script := '"' + MakroPath + 'RapiReg.exe" -v HKEY_CURRENT_USER\Software\PocketDrake\PocketDrake\Options > "' + MakroPath + 'reg_PDA.txt"'
RunExec('cmd.exe /c "' + script + '"');

  • 0

LG G3 + a:Drake


#16 gord

gord

    Advanced Member

  • Members
  • PipPipPip
  • 6 631 příspěvků(y)

Publikováno 01 září 2010 - 12:27

honny napsal/a:
(ja teda vim ze tohle potrebuju asi jen ja, a ze to asi bude spis problem ve wine, ale je nejaka moznost takhle poustet bashovy skripty?)


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.
  • 0

MHD/PID vybranych mest CR jako POI (diskuse)
GeoGet:
- OwnMaintenance - prehled udrzby vlastnich kesi - v1.1.3 (diskuse)
- Combine 2 - automatizace opakovanych cinnosti (diskuse, dávky)
- Spoiler - uložení spoilerů do GPS jako POI (diskuse)

- Stator - statistiky y GeoGetu (diskuse)

- Náhrada GJ legálními postupy

 


#17 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 03 říjen 2010 - 19:17

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ý.

Neporadí mi někdo jak na to?

Díky moc.
  • 0

LG G3 + a:Drake


#18 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 11 450 příspěvků(y)

Publikováno 03 říjen 2010 - 19:26

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.
  • 0

#19 gord

gord

    Advanced Member

  • Members
  • PipPipPip
  • 6 631 příspěvků(y)

Publikováno 03 říjen 2010 - 19:51

To je skoro zrale na knihovnu ggp :-) Takovahle funkce by se mohla leckomu hodit. (Ale pozor na prehaneni, obcas je vhodne videt, ze se neco dela.)
  • 0

MHD/PID vybranych mest CR jako POI (diskuse)
GeoGet:
- OwnMaintenance - prehled udrzby vlastnich kesi - v1.1.3 (diskuse)
- Combine 2 - automatizace opakovanych cinnosti (diskuse, dávky)
- Spoiler - uložení spoilerů do GPS jako POI (diskuse)

- Stator - statistiky y GeoGetu (diskuse)

- Náhrada GJ legálními postupy

 


#20 Subi

Subi

    Šubi

  • Members
  • PipPipPip
  • 447 příspěvků(y)

Publikováno 03 říjen 2010 - 20:17

Tak jsem chvíli googlil a myslím, že už mám jasno! Zjistil jsem, že nejsem API programátor a šikovný už vůbec ne :D Je tam na mě moc divokejch parametrů, musím počkat až se toho někdo šikovnější ujme :(
  • 0

LG G3 + a:Drake





0 uživatel(ů) prochází toto téma

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

Reklama