logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak w Delphi wywołać allowio.exe z parametrami dla portów LPT?

22 Lip 2005 00:16 5050 15
REKLAMA
  • #1 1672059
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • Pomocny post
    #2 1672076
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    W jaki sposób wywołujesz program zewnętrzny?
  • Pomocny post
    #3 1672184
    SaraniS
    Poziom 26  
    Posty: 745
    Pomógł: 78
    Ocena: 26
    A co to ma za znaczenie?
    
    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" ;)
  • REKLAMA
  • #4 1672653
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #5 1672834
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    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.
  • #6 1672875
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #8 1679882
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #9 1680320
    Kasia18
    Poziom 12  
    Posty: 53
    Pomógł: 6
    Ocena: 1
    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
    #10 1681698
    SaraniS
    Poziom 26  
    Posty: 745
    Pomógł: 78
    Ocena: 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
    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 :)
  • #11 1681770
    Konto nie istnieje
    Poziom 1  
  • #12 1684437
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    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.
  • REKLAMA
  • #13 1684592
    Konto nie istnieje
    Poziom 1  
  • #15 1686588
    Konto nie istnieje
    Poziom 1  
  • #16 1690236
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

✨ Dyskusja dotyczy wywołania programu allowio.exe z poziomu aplikacji napisanej w Delphi w celu odblokowania portów LPT w systemie Windows XP. Program allowio.exe umożliwia nadanie dostępu do portów LPT dla innych aplikacji poprzez wywołanie z odpowiednimi parametrami, np. "allowio XXX.exe /a" dla pełnego dostępu lub "allowio XXX.exe 0x378" dla dostępu tylko do portu LPT o adresie 0x378. Użytkownik pyta, jak poprawnie wywołać allowio.exe z parametrami z poziomu Delphi, znając ścieżkę do programu. W odpowiedziach wskazano metody uruchamiania zewnętrznych programów w Delphi, takie jak ShellExecute, WinExec i CreateProcess, z podaniem przykładowej składni wywołania ShellExecute z parametrami. Podkreślono, że parametry należy przekazać w czwartym argumencie funkcji ShellExecute, łącząc nazwę programu wywołującego (Application.ExeName) z parametrem portu (np. " 0x378"). Użytkownik miał problem z formatem liczby portu (wprowadził 378 zamiast $378), co po poprawieniu rozwiązało problem przekazywania parametrów. Jednak allowio.exe nie zawsze skutecznie odblokowuje porty, co skłoniło do użycia alternatywnego narzędzia UserPort. Wskazano również, że allowio.exe może być przeznaczony do współpracy z programem porttalk. Podsumowując, prawidłowe wywołanie allowio.exe z parametrami w Delphi wymaga użycia funkcji ShellExecute z odpowiednio sformatowanym ciągiem parametrów, a do odblokowania portów LPT można rozważyć inne narzędzia, jeśli allowio.exe nie działa zgodnie z oczekiwaniami.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA