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.

C++ Builder / WinAPI - Nakładka graficzna do aplikacji konsolowej

28 Kwi 2013 16:32 1878 2
  • Poziom 9  
    Witam kolegów
    Jak w temacie: zabrałem się za pisanie nakładki graficznej na pewien program działający w trybie konsoli. Początkowo używałem tylko funkcji API- SendMessage po uprzednim uruchomieniu aplikacji przez ShellExecute działa bardzo dobrze. Ale chce również czytać co owa aplikacja mi odpowiada. Użyłem więc kodu w BCB z tej stronki z użyciem pipe. Działa - jednak program konsolowy po wyrzuceniu przywitania zaraz się zamyka (nie widze go w menagerze zadań). Dlatego jako że nie jestem programistą a jedynie skromnym elektronikiem, kilka pytań:

    - Jak zmodyfikować kod aby program nie kończył działania po wyświetleniu przywitania a czekał na komendy? (próbowałem z różnymi flagami/ustawieniami w funkcji CreateProcess)
    - Jak stworzyć również pipe do wpisywania komend do konsoli?

    Pozdrawiam

    Poniżej kod zamieszczony na w/w stronie:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Poziom 25  
    Nie mam pojęcia czy to co chcesz zrobić jest możliwe za pomocą Pipe. Do takich celów korzystam z funkcji dla konsoli. Podłączam się pod konsolę aplikacji i z niej odczytuję bufor outputu jak również wysyłam input.
    Tutaj masz listę odpowiednich funkcji: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073.aspx
    Tutaj jakiś przykład: http://msdn.microsoft.com/en-us/library/windows/desktop/ms685032.aspx

    To chyba oczywiste, ale wspominam żebyś zaraz nie przyleciał z gradem pytań: żeby dobrze zrozumieć przykład i go rozbudować do własnych celów, musisz przeczytać od deski do deski instrukcję każdej użytej funkcji.

    Dla czytelności kodu zrezygnowałem ze sprawdzania wartości zwracanych przez funkcję. Dodam jeszcze (co na pewno wyczytasz z manuala ;)), że ReadConsoleOutput się nie powiedzie jeśli bufor jest za duży (64 KB?). Wtedy należy zmniejszyć bufor w opcjach konsoli (łatwe rozwiązanie :)) lub oczytywać bufor fragmentami (trudniejsze rozwiązanie).

    Kod: cpp
    Zaloguj się, aby zobaczyć kod
  • Poziom 9  
    Dokładnie o to mi chodziło. Podany kod działa znakomicie. Dzięki wielkie beluosus za pomoc i naprowadzenie na właściwy trop!