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

Wyświetlanie wyniku konsoli CMD w TextBox

kamilk87 03 Gru 2013 19:58 1752 14
  • #1 03 Gru 2013 19:58
    kamilk87
    Poziom 10  

    Witam!
    Mam następujący problem:
    Chciałbym przy pomocy aplikacji C++ wyświetlić wynik komendy konsolowej w TextBox. Komendę wywołuje następującym kodem:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Niestety nie mam pojęcia, jak wyświetlić wynik w TextBox.

    0 14
  • #3 03 Gru 2013 20:51
    kamilk87
    Poziom 10  

    stworzyłem taki kod:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    niestety kompilator wyrzuca mi błędy. Możecie spojrzeć co może być źle.

    0
  • #4 04 Gru 2013 08:17
    mickpr
    Poziom 39  

    kamilk87 napisał:
    niestety kompilator wyrzuca mi błędy
    Powiedz coś więcej temat tych błędów.

    0
  • #5 06 Sty 2014 14:54
    kamilk87
    Poziom 10  

    wyrzuca mi takie błędy:

    syntax error : missing ';' before identifier 'wysw'
    'System::Diagnostics::Process' : illegal syntax for using-declaration; expected qualified-name
    'wysw' : undeclared identifier
    syntax error : '('
    syntax error : missing ';' before '{'
    'reader' : undeclared identifier
    left of '->ReadToEnd' must point to class/struct/union/generic type

    0
  • #6 06 Sty 2014 16:15
    mickpr
    Poziom 39  

    Błędy, które napisałeś dotyczą stricte źle napisanego kodu.

    kamilk87 napisał:
    Chciałbym przy pomocy aplikacji C++ wyświetlić wynik komendy konsolowej w TextBox.
    Bardzo to zagmatwałeś.
    Rozumiem, że chcesz skierować standardowe wyjście + standardowe wyjście błędów jakiejś aplikacji (konsolowej) do okienka TextBox w twojej aplikacji pod Window Forms (tak jak to jest w przypadku np. IDE do jakiegoś języka programowania - gdzie w oknie textbox wyświetlana jest treść będąca wynikiem kompilacji) - czy tak?

    0
  • #7 06 Sty 2014 16:27
    kamilk87
    Poziom 10  

    Dokładnie, błędy pokazują, że jest gdzieś błąd w kodzie, tylko, że ja go nie widzę. To co chce zrobić opisze na przykładzie: wpisując komendę ipconfig/all w cmd, wyświetla się dane urządzeń, adresy IP, MAC'i itd. Ja chciałbym to wszystko wyświetlić w TextBox, bez uruchamiania wiersza poleceń.

    0
  • #9 06 Sty 2014 17:52
    szelus
    Specjalista - Mikrokontrolery

    kamilk87 napisał:
    wyrzuca mi takie błędy:
    syntax error : missing ';' before identifier 'wysw'
    'System::Diagnostics::Process' : illegal syntax for using-declaration; expected qualified-name
    'wysw' : undeclared identifier
    syntax error : '('
    syntax error : missing ';' before '{'
    'reader' : undeclared identifier
    left of '->ReadToEnd' must point to class/struct/union/generic type

    Twój program nie jest poprawnym programem w C+. Chyba pomieszałeś składnię z Pascalem. Deklaracja wskaźnika w C++ korzysta ze znaku * a nie ^, a składnia i zastosowanie dyrektywy i deklaracji "using" w C++ są zupełnie inne.

    0
  • #10 06 Sty 2014 18:01
    mickpr
    Poziom 39  

    szelus napisał:
    Twój program nie jest poprawnym programem w C+. Chyba pomieszałeś składnię z Pascalem. Deklaracja wskaźnika w C++ korzysta ze znaku * a nie ^, a składnia i zastosowanie dyrektywy i deklaracji "using" w C++ są zupełnie inne.
    Jesteś taki pewny?
    Zerknij do przykładowego źródła : http://msdn.microsoft.com/pl-pl/library/syste...spx?cs-save-lang=1&cs-lang=cpp#code-snippet-2

    A tu wyjaśnienie - co to jest ^ w CLI :
    http://en.wikipedia.org/wiki/C%2B%2B/CLI
    http://stackoverflow.com/questions/202463/what-does-the-caret-mean-in-c-cli

    0
  • #11 06 Sty 2014 18:30
    szelus
    Specjalista - Mikrokontrolery

    mickpr napisał:
    Jesteś taki pewny?

    Jestem pewny, w tym sensie, że była mowa o C++. Do tej pory nie było mowy o Microsoftowych udziwnieniach. Ale owszem, jeżeli wkraczamy na ten teren (MC++), to się poddaję.

    0
  • #12 06 Sty 2014 19:03
    mickpr
    Poziom 39  

    szelus napisał:
    Ale owszem, jeżeli wkraczamy na ten teren (MC++), to się poddaję.
    Swoją drogą masz rację. MFC było już skomplikowane, .NET (mówię o manglowanym C++) miało być prostsze, a zrobiło się z tego "narzędzie dla fanatyków". O wiele przyjemniej taki kod napisać np. w C#, VB..... albo w Qt :)

    0
  • #13 07 Sty 2014 15:26
    lukagrom
    Poziom 15  

    Kolega sobie bardzo utrudnił życie. Jak dla mnie wystarczy użyć ordynarnej funkcji "system" która zapisuje swoje działanie do wybranego pliku, po czym zawartość takiego pliku należało by otworzyć w textBoxie, który z kolei musi mieć naturalnie włączone Multiline (żeby wyświetlać liczbę linijek >1)
    A więc, jeśli działania na pliku to niezbędna deklaracja bibilioteki/modułu:

    Code:

    using namespace System::IO;


    Sam kod powiedzmy pod zdarzeniem wciśniecia Buttona jest już banalny:
    Code:

    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
                ;
                system("ipconfig/all>plik_do_zapisu.txt");
                System::String^ tekst_wyswietlenia;
                StreamReader^ plik_wykorzystany=gcnew StreamReader("plik_do_zapisu.txt",System::Text::Encoding::Default);
                while(tekst_wyswietlenia=plik_wykorzystany->ReadLine())
                {
                   textBox1->AppendText(tekst_wyswietlenia+System::Environment::NewLine);
                }
                plik_wykorzystany->Close();


                

              }

    0
  • #14 08 Sty 2014 15:39
    mickpr
    Poziom 39  

    lukagrom napisał:
    po czym zawartość takiego pliku należało by otworzyć w textBoxie
    Dodaj - nie tylko otworzyć, ale i co jakiś czas odświeżać.
    Pomysł jest prosty, ale ma wady dyskredytujące go przy szybkich zmianach w samym terminalu.

    0
  • #15 26 Sty 2014 11:19
    kamilk87
    Poziom 10  

    Udało mi się stworzyć następujący kod

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Koda działa, wynik konsoli jest wyświetlany w RichTextBox (wynik_wysw).
    Teraz chciałbym zrobić następującą rzecz: Ustawiając UseShellExecute na false nie da się urochomić konsoli z uprawnienia administratora i zarazem przekierować strumienia. Wiecie, jak można rozwiązać ten problem? Czytałem, że można to zrobić przy pomocy CreatePipe, ale nie wiem jak wygląda przykładowy kod z wykorzystaniem tego sposobu. Możecie jakoś pomóc w tej sprawie?

    0