Wiele parametrów do podprogramu przez ShellExecute

0

Witam wszystkich serdecznie,

Potrzebuje pomocy przy wywołaniu podprogramu z wieloma parametrami. Korzystam z:

ShellExecute(Handle, 'open', 'c:\edytor.exe', 'c:\plik.bmp', nil, SW_NORMAL)

i to mi działa dobrze tylko dla programu z jednym parametrem. Jak chce do tego dorzucić jeszcze jeden parametr to nie chce taka konstrukcja poprawnie zadziałać przy wywołaniu.

Ma ktoś jakieś propozycje? Jeżeli ShellExecute nie nadaje się do wywołania wielu parametrów to proszę o sugestie

Pozdrawiam

0

i to mi działa dobrze tylko dla programu z jednym parametrem. Jak chce do tego dorzucić jeszcze jeden parametr to nie chce taka konstrukcja poprawnie zadziałać przy wywołaniu.

Dobrze że nie pokazałeś kodu który nie chce działać bo ktoś jeszcze by skopiował i sobie komputer zepsuł.

Ma ktoś jakieś propozycje? Jeżeli ShellExecute nie nadaje się do wywołania wielu parametrów to proszę o sugestie

A może: Program nie nadaje się do wielu parametrów?

0

Jeżeli masz głupio odpowiadać to nie odpowiadaj może wcale. Przecież jest wyraźnie napisane, że ta linijka kodu, którą pokazałem działa, ale dla jednego parametru. Podprogram działa z wieloma parametrami bo z wiersza poleceń jak uruchamiam ręcznie to wszystko się wykonuje tak jak należy. Przy takim rozwiązaniu:

ShellExecute(Handle, 'open', 'c:\edytor.exe', 'c:\plik.bmp l', nil, SW_NORMAL)

wykonuje tylko pierwszy parametr a drugi jest ignorowany. Sprawdzałem zapisu na różne sposoby i nic nie pomaga

0

Oczywiście na przykład taki kod:

  ShellExecute(Handle, 'open', 'C:\PROGRAM FILES\TOTALCMD\totalcmd.exe', '/L=C:\WINDOWS /R="C:\PROGRAM FILES"', nil, SW_NORMAL)

U mnie działa bez problemów, także może problemem jest to, że docelowy program obsługuje tylko jeden parametr. Może też jesteś jego autorem i zamiast odczytać w pętli od 1 do ParamCount wszystkie ParamStr(IteratorPetli) odczytujesz tylko 1.

0

Podesłany przez Ciebie kod rzeczywiście u mnie też działa. Jak chodzi o odczytywanie parametrów przez tamten podprogram to jakby to było źle rozwiązane to bezpośrednio z wiersza poleceń też nie powinno to działać? Jeżeli jestem w błędzie to mnie poprawcie. Jak wklepuje CMD i ręcznie podaje ścieżkę do programu i podaje dwa parametry to oba są brane pod uwagę i wykonuje mi te dwie czynności.

0

Znalazłem rozwiązanie tylko trochę nie rozumiem dla czego tak się dzieje. Zadziałało to w taki sposób:

ShellExecute(Handle, 'open', 'edytor.exe', 'c:\plik.bmp l', nil, SW_NORMAL);

tylko jedna uwaga, podprogram musi znajdować się w katalogu z programem docelowym. W taki sposób zadziałały dwa parametry.

Jeżeli w wierszu poleceń wstukam ręcznie polecenie: "edytor c:\plik.bmp l" to wszystko działa dobrze, ale w momencie kiedy w CMD wejdziemy do jakiegoś katalogu i z poziomu tego katalogu będziemy chcieli uruchomić ten podprogram (np. "c:\edytor.exe c:\plik.bmp l") to przy podaniu pełnej ścieżki wykonuje nam tylko jeden parametr. Nie mam pojęcie czemu tak się to dzieje.

Powyżej przytoczony kod zadziałał tak jak powienien

0

jeżeli masz głupio odpowiadać to nie odpowiadaj może wcale.

Jeżeli masz głupio pytać to nie pytaj może wcale.
I uważaj o co prosisz.

Przecież jest wyraźnie napisane, że ta linijka kodu, którą pokazałem działa, ale dla jednego parametru.

Tylko że nie dałeś przykładu kiedy to NIE działa, tak ciężko żebyś zrozumiał?

Przy takim rozwiązaniu: [...] wykonuje tylko pierwszy parametr a drugi jest ignorowany. Sprawdzałem zapisu na różne sposoby i nic nie pomaga

No więc jednak umiesz podać, brawa..

tylko jedna uwaga, podprogram musi znajdować się w katalogu z programem docelowym. W taki sposób zadziałały dwa parametry.

Też miałem podobny problem z aplikacją pisaną w Visualu. Bodaj pomogły jakieś kombinacje z katalogiem startowym.

Nie mam pojęcie czemu tak się to dzieje.

Mi też nie udało się dojść. Jednak ta aplikacja z którą kombinowałem nie była zbyt przystosowana do parametrów wejściowych i właśnie odwalała. Polecam pobawić się z katalogiem startowym, ustawianiem aktualnego katalogu itp.

0

Może taką formę spróbuj

ShellExecute(Handle, 'open', 'c:\edytor.exe', '"c:\plik.bmp l"', nil, SW_NORMAL)
0

Jak słusznie -123oho zauważa, wygląda na jakiś problem związany ze ścieżkami a konkretnie z katalogiem roboczym. Coś musi być nie tak w tej drugiej aplikacji którą uruchamiasz. Doraźnie możesz ustawić katalog roboczy na ten, w którym znajduje się EXE:

ShellExecute(Handle, 'open', 'c:\edytor.exe', 'c:\plik.bmp l', {tu podajemy katalog roboczy->} 'c:\', SW_NORMAL);

Możesz zrobić mały test, żeby to potwierdzić. Otwórz konsolę i nie przechodź do "c:", zostań w innym katalogu i wykonaj polecenie:
c:\edytor.exe c:\plik.bmp l
Powinien zaistnieć identyczny problem (rzekome ignorowanie drugiego parametru).

0
adf88 napisał(a):

Wygląda na jakiś problem związany ze ścieżkami a konkretnie z katalogiem roboczym. Coś musi być nie tak w tej drugiej aplikacji którą uruchamiasz. Doraźnie możesz ustawić katalog roboczy na ten, w którym znajduje się EXE:

ShellExecute(Handle, 'open', 'c:\edytor.exe', 'c:\plik.bmp l', {tu podajemy katalog roboczy->} 'c:\', SW_NORMAL);

Możesz zrobić mały test, żeby to potwierdzić. Otwórz konsolę i nie przechodź do "c:", zostań w innym katalogu i wykonaj polecenie:
c:\edytor.exe c:\plik.bmp l
Powinien zaistnieć identyczny problem (rzekome ignorowanie drugiego parametru).

-123oho napisał(a)

Polecam pobawić się z katalogiem startowym, ustawianiem aktualnego katalogu itp.

Czy tylko ja nie lubię jak się powtarza to co ja mówię i przypisuje sobie? Nie żebym miał coś przeciwko powtarzaniu dobrych rad ale można zauważyć kto o tym pierwszy wspomniał. Thx.

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