Delphi, ako zmenit vystupnu premennu?
Chcem si urobit jednoduchy program ktory spusti iny program a zachyti jeho vystup. Nasiel som si tento priklad http://zive.cz/h/Programovani/AR.asp?ARI=112035&CAI =2091 kde je to urobene tak ze sa to najskor zapise do suboru z neho do Memo a potom sa ten subor zmaze. Neviem to ale prerobit tak aby to zapisalo priamo do premennej napr. vystup:string. Poprosil by som niekoho kto tomu rozumie aby mi napisla ako to zmenit.
mě jen není jasné, jak jinak než zachycením výstupu jiné aplikace do souboru (ergo přes OS) bys chtěl docílit "přečtení" tohoto výstupu. Snad jen si napsat vlastní emulátor Logicky přece musíš nechat systém aplikaci spustit, nechat proběhnout a její výstup přesměrovat do souboru nebo pipky. Bohužel pipky jsou v DOS/Win implementovány hrozně, takže ti nic jiného, než "sprostý soubor" nezbývá.
Pokud jsem to nepochopil, tak sorry
Ja v podstate proti suboru ani nic nemam len tato operacia sa bude vykonavat v cikle a nechcel som neustale pristupovat na disk a vytvarat/mazat tam subor. Preto som to chcel dat do stringu aby sa pracovalo iba s pamatou.
Nasiel som ze existuje v Delphi TMemIniFile ktory vsetky udaje uklada do vyrovnavacej pamate.
Takze otazka znie ako z TMemIniFile urobit THandle aby to ukazovalo na subor 'vystup.ini'?
Nechapu, ceho chces dosahnout.
K cemu potrebujes THandle pri praci s TMemIniFile ?
Otevreni souboru pomoci CreateFile() a pomoci TMemIniFile jsou 2 naprosto odlisne veci.
Kedze to bez suboru nejde tak som ho chcel nahradit niecim co nieje umiestnene na disku (proces sa bude vykonavat v cykle aby sa stale nevytvaral a nemazal na disku). Nakoniec to asi vyriesim pomocou RamDisku co je standardne v XP. Tam nepotrebujem nic menit a mozem k tomu pristupovat ako k disku a fyzicky to bude umiestnene v RAM.
Ak mas zdrojaky / robis oba programy, tak si nieco precitaj (napr. na msdn.microsoft.com) o komunikacii a prenose dat medzi procesmi/aplikaciami. Je to obsirna tema, riesit to cez subory je samozrejme najjednoduchsie ale (ako prave vidis) najchujovejsie riesenie.
To nemozes urobit len ako jednu aplikaciu?
on se ale odkazoval na "jednoduché" DOSovské aplikace
Program ktory chcem spustat je uz urobeny (nieje to program ktory som vytvoril ani k nemu nemam zdrojove subory). Povodne som nevedel preco je v tom priklade pouzity subor ako medziclanok na prenos informacii a myslel som ze nahradenie za iny typ premennej nebude problem. Kedze to problem je tak to budem riesit tym RamDiskom na ktorom budem pracovat. Hlavne my slo o disk aby sa nan neustale nevytvaral a nemazal subor ktory sluzi k prenosu udajov z externej aplikacie do mojho programu. Oznacil by som to za vyriesene. Pokial pozna niekto efektivnejsi sposob ktory nieje prilis narocny tak budem rad ak ho tu spomenie.
A uvedomuješ si, že píšeš protichodné veci? Ako chceš upraviť aplikáciu, ktorá je už vytvorená a nemáš k nej zdrojový kód, tak aby výstup neukladala na disk, ale do pamäti? Viem, že už si sa zmieril so súborom, ale doteraz si chcel súbor niečím nahradiť. Môžeš mi prosím vysvetliť, ako si si to predstavoval?
Este raz:
1) Je externy program ktory potrebujem spustit s urcitym parametrom ktory sa bude menit.
2) Ten odkaz na zaciatku ukazuje riesenie ako to realizovat v Delphi.
3) Externy program sa spusti a jeho vystup sa ulozi do suboru ktory sa na tento ucel vytvori. Z neho sa informacie nacitaju do Memo a subor sa zmaze.
4) Povodne som chcel aby sa informacie miesto do suboru ukladali do premennej typu string (cize do pamate nie do suboru fyzicky sa nachadzajucom na disku).
5) Teraz uz viem ze to take jednoduche nieje a tomu suboru sa asi nevyhnem takze som sa rozhodol to realizovat tak ako je to v tom priklade len s tym rozdielo ze ten subor bude umiestneny na RamDisku cize v pamati. Je to 'oklukou' ale zatial je to asi najlepsie riesenie ako tuto operaciu vykonavat v pamati a nie na disku.
Cele to vlastne bolo o tom ako zrychlit tento proces a aby som nepracoval s diskom ale s RAM. Dufam ze som to dostatocne objasnil.
Áno už rozumiem, ale na druhej strane, disková vyrovnávacia pamäť pre takéto účely nie je až tak malá, takže si myslím, že nie je nutné pracovať kvôli tomu práve s RAM diskom. Alebo to máš pravdepodobne asi odskúšané a nie si s tým spokojný, pretože ten disk ozaj veľmi šramoce? Zrejem to tak bude. Ale aký dlhý je teda ten výstupný súbor? Počítam, že rádovo megabyty, je tak?
Ve WinXP je nějaký standardní ramdisk? To mi uniklo, můžeš mi k tomu dát bližší info? Díky.
Pavel
Ovládací panely -> Pridat hardware -> Dalsi -> Ano hardware jiz byl pridan -> Dalsi -> Na konci zoznamu Pridat nove hardwarove zarizeni ->Dalsi -> Nainstalovat hardware ktery vyberu ze seznamu -> Na zaciatku zoznamu Zobrazit vsechna zarizeni -> Dalsi -> Vlavo Vyrobce vybrat Microsoft v pravo model Windows Ram Disk Controller.
Díky moc. Mám WinXP SP2 a po nainstalování (dokončení Průvodce přidáním HW) se dozvím: "Toto zařízení nepracuje správně, protože sytému Windows se nepodařilo načíst ovladače zařízením požadované. (Kód 31)". Takže zatím nic...
Pavel
Tak a v tejto chvíli mi to zmrzlo, po čase naskočilo v titulku "neodpovídá". Do pekla aj s Windowsom. Bill mi lezie krkom. V TaskBare to nemám, čiže TaskManager to ani nezobrazuje. Ak to chcem ukončiť, musím seknúť nejaký proces. A teraz otázka: Aký? Billa za vajcia do prievanu na hrdzavý hák.
Edit: Ako som hľadal proces, ktorý ukončiť, tak na mňa vyskočilo to okno (asi po 10 minútach). Ach, zaujímalo by ma, keď má WinXP taký problém s okamžitou reakciou, tak, čo bude robiť Windows 6.0.
Teraz som to skusal a po tom co som napisal vyssie si windows vypital instalacne CD a nainstaloval z neho ovladac na ten RamDisk. Nenastala ziadna chyba. Mam taky dojem ze treba este nainstalovat i Zarizeni Windows RAM Disk (svazek) to je tam kde bol i ten Windows Ram Disk Controller. Ked som urobil i toto tak este stale sa mi neobjavil novy disk. Ja som sa s tymto zaoberal asi pred rokom a urcite to fungovalo v XP SP1. Este po tom popatram na internete pretoze nemozem najst ten postup pomocou ktoreho som to robil prvi krat. Neviem preco to u vas dvoch skoncilo chybami. Mozno to ma vazbu na nejaku sluzbu ktoru mate vypnutu. I ked i ja mam niektore povipinane. Najvacsia nevyhoda tohto RamDisku je ze ma iba 32MB a myslim ze sa uz neda zvacsit. Posudte sami ci vam to k niecomu bude. Pokusim sa najs presny postup ako to spojazdnit.
Já sám používám jinej ramdisk, myslím že od cenateku, free verzi. Smysl rozhodně má: mám na něm dočasný soubory pro Operu (obdoba Temporary internet files). Plná spokojenost.
Pavel
Ja som to tiez povodne nasiel v suvislosti s Temporary internet files v IE. Myslim ze to so SP2 nejako zmrsili aj ked stale nemozem najst ten navod podla ktoreho som to robil pred rokom. Nasiel som odkaz pre Win2k support.microsoft.com ked som ten ovladac nainstaloval miesto toho co sa nainstaloval z instalacneho CD k windowsu XP SP2 tak sa mi ten RamDisk objavil ako disk ale s kapacitou 0B a nieje pristupny. Nechce sa mi uz s tym hrat nainstalujem si tiez nejaku free verziu RamDisku. Z istotou mozem povedat ze v XP SP1 to fungovalo. Dalsi odkaz na tuto temu 7963
Skús sa pozrieť sem, či je to, čo chceš:
truco.cgi
P.S. Ja som to skúsil s mojou konzolovou aplikáciou a ... Funguje to !!
Tohle je ale odchytavany vystupu konzolove aplikace. Pokud to ta aplikace zapisuje do souboru, ktery ji predas jako parametr, moc ti to nepomuze...
Hlavne o to išlo..., že ?
Vdaka za odkaz . Funguje to tak ako som povodne chcel prerobit ten odkaz na zaciatku. Nezapisuje sa tam nic zbytocne na disk.
Oznacil by som tuto temu za vyriesenu.
Klobúk dole.