shellExecute +winrar

0

hej mam pytanie, jak uruchomic winrara z podkonsoli z odpowiednimi paramterami ,tj np zeby mi spakowal,albo rozkpakowal jakies pliki po nacisnieciu klawisza opcji programu. No i zeby te wyniki z powrotem do programu przeslal ,uzywam tego shellExecute, ale nie wychodzi zbytnio, prosze o pomoc , najlepiej jakies przykladowe wywolanie funkcji shellExecute dla mojego problemu.
Pozdorwionka:)

0

Ja bym tu zamiast ShellExecute uzyl CreateProces, a zeby przechwycic wyniki przekierowal strumien do pliku, czyli uruchamiasz proces:

command.com /c "C:\Pro...\rar.exe -opcje" > wynik.txt

Po wywolaniu CreateProcess, czekasz na zakonczenie procesu rara, np WaitForSingleObject. Potem mozesz juz otworzyc "wynik.txt" i pobrac dane wynikowe rara do swojego programu. Uzycie command.com jest konieczne z tego wzgeldu, ze windowsowa konsloa nie obsluguje przekierowywania strumieni, a uzycie command.com daje ten sam efekt jak w czystym dosie. Powinno dzialac i pod 98 i pod xp. Pozdro

0

Wieli dzieki LEON mam jeszcze jedna pytanie. W ogole to musze napisac projekt w API oblugujacy archiwa, dodajacy do nich pliki i rozpakowujacy, przy czym ma korzystac z programu zewnetrzenego. Jakbys mogl to nakresl mi tak z grubsza jak sie za to zabrac bylbym bardzo wdzieczny.

Menadżer archiwów. Minimum (50%): Obsługa wybranego formatu przy pomocy zewnętrznego programu (n.p. ARJ,ZIP,RAR,GZ). W oknie głównym dla każdego elementu archiwum wyświetlane są następujące atrybuty: nazwa, lokalizacja (względna ścieżka) rozmiar przed i po kompresji, data modyfikacji). Możliwość wyboru widocznych atrybutów. Możliwość sortowania zawartości archiwum względem dowolnego atrybutu rosnąco lub malejąco. Dodawanie i usuwanie plików z archiwum (pojedynczo lub przy pomocy maski i rekurencyjnego przeszukiwania katalogów). Tworzenie nowego archiwum

Pozdrowionka

0

Ja zrobil bym to uzywajac dwoch list - jedna od chodznia po dysku (wybierajac z niej jakies archiwum iniclowal bys dane w drugiej), druga zawierala by informacje o archiwum (lista plikow, ich atrybuty, sciezka, itd.), chyba najlepiej zeby byla w stylu Report z multiselectem. Co do sortowania wg kolumny to zwiazalbym procedure sortujaca z kliknieciem na okreslona kolumne, przyjrzyj sie zdarzeniu LVN_COLUMNCLICK. Wybieranie widocznych atrybutów - z menu kontekstowego listy lub osobnych opcji. Jesli chodzi o usuwanie plikow z archiwum to dalbym dwa buttony - jeden usuwa zazmaczone pliki na drugiej liscie (rar.exe d nazwa.rar plik1 plik2 ...), drugi wyskakuje z dialogiem w ktorym user wprowadza maske (rar.exe d nazwa.rar *.jpg (nie wiem czy dziala rekurencyjnie ale powinno)). Analogicznie z dodawaniem plikow do archiwum - user wciska button, wyskakuje dialog z GetOpenFileName() gdzie wybiera pliki do dodania. Przeszukiwanie rekurencyjne - zobacz przelaczniki "r" i "r0". Widzialem ze w innym poscie upierasz sie na uzycie ShellExecute, moim zdaniem bylo by to raczej malo elegancke, nie masz mozliwosci czekania az proces rara sie skonczy, a to ma tutaj bardzo duze znaczenie, chyba ze jakos umiesz, na sile mozesz uruchomic z ta sama sciezka co podalem wczesniej, z drugim parameterm "open".

0

ok dzieki na poczatku mam tylko klopoty z tym CreateProccess, ma on wieele parametrow i chyba sie wysypuje mi na na tych 2
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
nie wiem do konca jak to ma dzialac ani czy wymaga jeszcze jakis dodatkowych struktur azeby dziallo, najlepiej to bym na jakims przykladzie zobaczyl, ale znalezc nie moge zbytnio.
pozdro

0

np.:

STARTUPINFO si;
PROCESS_INFORMATION pi;

si.cb = sizeof(si);
si.lpReserved = 0;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
si.cbReserved2 = 0;
si.lpReserved2 = 0;

CreateProcess("plik.exe",0,0,0,0,CREATE_NEW_CONSOLE,0,0,&si,&pi);

Mniej wiecej tak to wyglada, nie sprawdzalem ale powinno dzialac.

0

ostatni param to &pi

0

eh, znowu mi zamienilo na pi, tam jest oczywiscie "&p i" (bez spsacji rzecz jasna)

0

wyglada na to ze dziala teraz , parametry do cmd to po myslinku wpisywac no nie
-dir, czy jakos inaczej czy z command.com korzystac?

0

Jak mozes to napisz mi jeszcze ta sciezka w CreateProcces do command.com z wywoalniem jakis parametrow ktore bede przekazane do np tego rara a potem do pliku . i juz wiecej cie nie mecze. Dzieki pozdrow

0

ok,:

CreateProcess("command.com","/c  \"c:\\Pro...\\rar.exe\" a arch.rar \"plik 1.rar\"   plik2.rar",....);

Pamietaj ze jesli w lini komend uzywasz nazw plikow/sciezek zawierajacych spacje musisz objac je w cudzyslowy (""), a wlasciwie domyslnie kazda nazwe mozesz w nich umieszczac, nie powinno zaszkodzic. Uchwyt procesu masz w strukturze PROCESS_INFORMATIO. Pozdro

0

Moze ktos napisac dlaczego czasem ShellExecute nie chce dzialac? Co moze byc przeczyna , wywala mi ze jest to nie rozpoznawana nazwa.. w jednych projektach dziala a w innych nie no i nie mam pojecia o co moze chodzic. moze jakias bibilioteka jest potrzebna

1 użytkowników online, w tym zalogowanych: 0, gości: 1