Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wywoływanie z parametrami w Delphi

22 Lip 2005 00:16 4600 15
  • Poziom 43  
    Mam taki mały program (allowio.exe) który odblokowuje port LPT ( i nie tylko) w Windows XP dla dowolnej aplikacji.
    Aby program XXX.exe miał odblokowany dostęp do wszystkich portów to musze najpierw wywołać program allowio, który w tym wypadku wywołuje sie tak:
    allowio XXX.exe /a

    A jak chcę żeby program XXX.exe miał dostęp tylko do LPT to musze wywołac tak:
    allowio XXX.exe 0x378

    Tak mi napisał FranekDzbanek, ale nic z tego nie zrozumiałem.

    Powiedzcie jak mam z poziomu Delphi wywołać program allowio.exe z tymi parametrami. (znam ścieżkę do allowio.exe)

    (XXX.exe jest napisany w Delphi jakby co i to on ma wywoływać)

    Z góry bardzo dziękuje!!!!!!
  • Pomocny post
    Poziom 42  
    W jaki sposób wywołujesz program zewnętrzny?
  • Pomocny post
    Poziom 26  
    A co to ma za znaczenie?
    Code:

    ret:= ShellExecute(Self.Handle, PChar('open'), PChar('allowio.exe'), PChar(Application.ExeName), nil, SW_HIDE);

    Jesli ret bedzie true to program zostal wykonany :D
    Wiecej info - w pomocy Delphi w dziale "Win32 Programmers Reference" ;)
  • Poziom 43  
    Do Elektryk:
    Program zewnetrzny???
    Jeśli chodziło Ci o XXX, to ...... klikam dwa razy na jego ikonce :P

    Do SaraniS:
    No to gdzie mam wpisać "allowio XXX.exe 0x378" ?
  • Pomocny post
    Poziom 42  
    atom1477 napisał:
    Do Elektryk:
    Program zewnetrzny???
    Jeśli chodziło Ci o XXX, to ...... klikam dwa razy na jego ikonce :P
    Pytam w jaki sposób chcesz wywoływać uruchamianie zewnętrznego programu, bo jest kilka spososbów i w każdym nieco inaczej się podaje parametry.
  • Poziom 43  
    Acha.
    A jak można jeszcze inaczej z programu XXX.exe wywołać program allowio.exe?
    Tylko tak żebym zrozumiał!!! (i wiedział gdzie wpisać "allowio XXX.exe 0x378" :P)
  • Poziom 43  
    SaraniS napisał:

    Code:

    ret:= ShellExecute(Self.Handle, PChar('open'), PChar('allowio.exe'), PChar(Application.ExeName), nil, SW_HIDE);



    Po pierwsze Ret nie może być True bo to nie jest zmianna typu Boolean. Ma być Cardinal

    A po drugie dalej nie wiem gdzie mam wpisac "allowio XXX.exe 0x378".

    Tylko nie dawajcie mi żadnych linków do Google i słów kluczowych do wyszykania w pomocy w Delphi czy coś takiego, bo jestem za ciemny żeby to znaleść. Juz szukałem kilka dni i dalej nic nie rozumiem.

    Dajcie proszę tylko tę jedną liniję kodu i będę zadowolony! Nic więcej mi nie trzeba!
  • Pomocny post
    Poziom 12  
    Procedura wyglada tak:

    HINSTANCE ShellExecute(

    HWND hwnd, // handle to parent window
    LPCTSTR lpOperation, // pointer to string that specifies operation to perform
    LPCTSTR lpFile, // pointer to filename or folder name string
    LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
    LPCTSTR lpDirectory, // pointer to string that specifies default directory
    INT nShowCmd // whether file is shown when opened
    );

    Wpisz to:

    ShellExecute(Self.Handle, PChar('open'), PChar('allowio.exe'), PChar(Application.ExeName), PChar('XXX.exe 0x378'), SW_HIDE);

    Pa :*

    Edit: lewa jestem nie potrafie tego sformatowac :D
  • Pomocny post
    Poziom 26  
    Witam :)
    Zacytuje Kasie18 ale odpowiadam atomowi1477 ;)
    Kasia18 napisał:
    Procedura wyglada tak:

    HINSTANCE ShellExecute(

    HWND hwnd, // handle to parent window
    LPCTSTR lpOperation, // pointer to string that specifies operation to perform
    LPCTSTR lpFile, // pointer to filename or folder name string
    LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
    LPCTSTR lpDirectory, // pointer to string that specifies default directory
    INT nShowCmd // whether file is shown when opened
    );

    Wpisz to:

    ShellExecute(Self.Handle, PChar('open'), PChar('allowio.exe'), PChar(Application.ExeName), PChar('XXX.exe 0x378'), SW_HIDE);

    Pa :*

    Edit: lewa jestem nie potrafie tego sformatowac :D


    O ile sie nie myle to XXX.exe to nazwa tego programu, z ktorego chcesz wywolac allowio, tak? wobec tego w powyzszym zapisie jest blad :P
    Pozinno byc
    Code:
    ShellExecute(Self.Handle, PChar('open'), PChar('allowio.exe'), PChar(Application.ExeName + ' 0x378'), nil, SW_HIDE); 
    

    poniewaz Application.ExeName zwroci ci biezaca nazwe Twojego programu - dzieki temu uniezalezniasz sie od uzytkownika, ktoremu moze przyjsc do glowy zmiana nazwy programu a wtedy kod z wpisana nazwa "na sztywno" przestalby dzialac; nastepny parametr to adres domyslnego foldera programu allowio, chyba nie trzeba go podawac (zwlaszcza jesli allowio bedzie lezec w tym samym katalogu co Twoj program). I to nie ma prawa nie dzialac :D
    A co do typu danych wartosci zwracanej przez funkcje, to chodzi tylko o to czy ret <> 0 - jesli tak, uruchomienie sie powiodlo. Radzilbym Ci to sprawdzac i od tego uzaleznic dalsze wykonywanie kodu - nie bedziesz mial pozniej niespodzianek z "bledami dostepu do portu" ;)
    Tak na marginesie - uwierz ale w WinAPI (Delphi tez sie do tego stosuje) typ bool to 0 dla false i <>0 dla true (zazwyczaj 1 lub -1 zaleznie od implementacji) wiec z glowa mozna te typy stosowac zamiennie nawet bez rzutowania ;)
    Pozdrawiam :)
  • Poziom 43  
    Do SarniS:
    Po pierwsze patrz:

    ShellExecute(Self.Handle, PChar('open'), PChar('AllowIo.exe'), PChar(Application.ExeName), PChar('Project1.exe 0x378'), SW_HIDE);
    ShellExecute(Self.Handle, PChar('open'), PChar('allowio.exe'), PChar(Application.ExeName + ' 0x378'), nil, SW_HIDE);

    "0x378" było u Kasia18 w przedostatnim parametrze, czyli w "następnym" jak Ty go nazwałeś. I jego właśnie MUSOWO podać, bo on zawiera numer portu który trzeba odblokować. (Chyba że to ma być podane w poprzednim parametrze)

    Po drugie: Żaden z kodów nie działa! Uruchamiają Allowio.exe ale porty nadal są zablokowane.


    Po trzecie to miałem napisac że wiem o co Ci chodziło z tym True, czyli że true <> 0. Nie napisałem bo juz nie chciałem mącic. Ale mniejsza o to.

    Dodano po 49 [minuty]:

    PS. Widziałem kod programu allowio i było tam napisane w komentarzach że służy on do odblokowywania potrów dla programu porttalk.
    Może on potrafi odblokowac tylko jemu? (W taki razie po co ten parametr gdzie przekazuje się nazwę programu któremu ma opdblokowac?)

    I może program allowio trzeba uruchomic przed programem któremu ma odblokować potry?

    Napisałem w Delphi 7 coś takiego i wywalało błąd po naciśnięciu:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Ret:=ShellExecute(Self.Handle, PChar('open'), PChar('AllowIo.exe'), PChar(Application.ExeName), PChar('Project1.exe 0x378'), SW_HIDE);

    Asm
    mov DX , 378
    out DX, AL
    end;
    end;

    Jak komuś się uda to uruchomic to niech da znać. Będę bardzo wdzięczny!
  • Poziom 42  
    atom1477 napisał:
    Po drugie: Żaden z kodów nie działa! Uruchamiają Allowio.exe ale porty nadal są zablokowane.
    A moze czas zajrzeć do specyfikacji i poczytać o parametrach funkcji ShellExecute? Albo poczytać specyfikacje do allowio, tam też pewnie jest wszystko wyjaśnione. Odrobina własnej inwencji nie boli. Najprościej sprawdzić czy działa można w ten sposób że oddzielnie uruchomić sobie program odblokowujący i program testujący dostęp.
  • Poziom 43  
    Po pierwsze to nie mam specyfikacji programu allowio i nie wiem gdzie jej szukać.
    A po drugie to nie wiem jak mam osobno uruchomić program allowio podając parametry.
    Może ktoś mi powie łaskawie jak podać parametry podczas uruchamiania programu w XP-ku.
  • Poziom 43  
    No nareszcie coś konkretnego! Wielkie dziex!!!
  • Poziom 43  
    Ludzie ale jestem debil!!!


    W moim programie wpisałem 378 zamiast $378 !!!!!
    I teraz mi działa!!!

    Wielkie dzięki wszystkim!!!



    AllowIo dalej nie działa jakby co.
    Ale przekazywanie parametrów tak.
    A porty odblokowałem raz na zawsze programem UserPort.