crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

bigory
  опции профиля:
сообщение 3.11.2010, 22:04
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 10.10.2010
Пользователь №: 2099

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем доброе время суток!
Здесь я оставлял код программы, которой я откопал http://www.forum.crossplatform.ru/index.ph...ost&p=42317
Мне нужно эту программу передалать для невидимой формы, т.е. там нет кнопок, но работать должна также, но только выводить результаты ответа консоля в переменные а и b.
Вот мои проделки:
(Я знаю что очень "грязно", но у меня пока задача добиться правильного получения результатов)
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //это, допустим, параметры функции
    const char* user="Администратор";
    const char* pass="123";

    //тут собираем строку
    std::string s;

    s+="net user ";
    s+=user;
    s+=" ";
    s+=pass;

    setError(false);
    QString prog="C:\\WINDOWS\\system32\\cmd.exe";
    QProcess myProc;
    myProc.start(prog);
    if(myProc.waitForStarted()){}
    else setError(true);
    QString S;
    for(int i=0;s[i]!=0;i++)S[i]=s[i];
    if(Error==false)
    {
        if(myProc.write(S.toAscii())!=-1){};
    }

    connect(&myProc,SIGNAL(readyReadStandardOutput()),this,SLOT(showOutput()));
    connect(&myProc,SIGNAL(readyReadStandardError()),this,SLOT(showOutput()));
}

void Widget::setError(bool mod)
{
        Error = mod;
}

void Widget::showOutput()
{
    QString a,b;
    b=QString::fromLocal8Bit(myProc.readAllStandardOutput());
    a=QString::fromLocal8Bit(myProc.readAllStandardError());
    // te.append(QString::fromLocal8Bit(myProc.readAllStandardError()));
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
bigory
  опции профиля:
сообщение 4.11.2010, 13:12
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 10.10.2010
Пользователь №: 2099

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 3.11.2010, 22:54) *
Ну так main( int argc, char *argv[] )


Ну, понимаете, эта строчка срабатывает если через консоль задать парраметры и вызвать эту прогу, тогда получит. Мне нужно немного другое: запускаю прогу, эта прога выполняет свои действия, формирует строчку где включаются команды для консоля и отправляет в консоль, но при этом я должен получить ответ на эту команду от консоля.
Ну я же привел выше готовый пример. Посмотрите его, ненадо там даже ничего менять, только вот в заголовочном файле надо будет там добавить
#include <QtGui>

class myProcess : public QDialog
{
    Q_OBJECT

public:
    myProcess(QWidget *parent=0);
private slots:
        void startProcess();
        void showOutput();
        void doInput();
private:
        QProcess myProc;
        QTextEdit te;
        QLineEdit le;
        QPushButton sb,ib;
};


Там не просто загружается консоль, там еще постоянный обмен командами и ответами на них. Вот мне и нужно это.
Если говорить конкретно, то мне нужно отправить на консоль команду "net user (имя) (пароль)", где имя и пароль, программа еще до отправки должна это все получить (как, эту задачу я подумаю позже). Но только отправить, этого мало, надо еще получить ответ прошла ли операция или возникла ошибка (например связанная с тем, что нет такого имени).


Я уже запутался в каком топике это оставлял. Вот сама программа:
#include "myprocess.h"

myProcess::myProcess(QWidget *parent) : QDialog(parent)
{
        sb.setText("start");
        ib.setText("input");
        QVBoxLayout *vl=new QVBoxLayout;
        vl->addWidget(&sb);
        vl->addWidget(&te);
        vl->addWidget(&le);
        vl->addWidget(&ib);
        setLayout(vl);

        connect(&sb,SIGNAL(clicked()),this,SLOT(startProcess()));
        connect(&ib,SIGNAL(clicked()),this,SLOT(doInput()));
        connect(&myProc,SIGNAL(readyReadStandardOutput()),this,SLOT(showOutput()));
        connect(&myProc,SIGNAL(readyReadStandardError()),this,SLOT(showOutput()));
}

void myProcess::startProcess()
{
        QString prog="C:\\WINDOWS\\system32\\cmd.exe";
     //   QString prog="C:\\Qt\\2010.05\\qt\\Forum\\testcon-build-desktop\\release\\testcon.exe";
        myProc.start(prog);
        if(myProc.waitForStarted())
                te.append(QString("Program <b>%1</b> started").arg(prog));
        else
                te.append(QString("Can't start program <b>%1</b>").arg(prog));
}

void myProcess::doInput()
{
        QString s=le.text()+"\n";
        if(myProc.write(s.toAscii())!=-1) le.clear();
}

void myProcess::showOutput()
{
   // QString a;
        te.append(QString::fromLocal8Bit(myProc.readAllStandardOutput()));
   // Код ниже получает информацию об ошибке a=QString::fromLocal8Bit(myProc.readAllStandardError());
        te.append(QString::fromLocal8Bit(myProc.readAllStandardError()));
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- bigory   Готовое подделать под себя   3.11.2010, 22:04
- - Алексей1153   вот это QString S; for(int i=0;s[i]...   3.11.2010, 22:31
- - BRE   От "невидимых" форм нужно отказаться сра...   3.11.2010, 22:33
- - bigory   Цитата(BRE @ 3.11.2010, 22:33) От "н...   3.11.2010, 22:48
|- - BRE   Цитата(bigory @ 3.11.2010, 22:48) Ладно, ...   3.11.2010, 22:54
- - bigory   Цитата(BRE @ 3.11.2010, 22:54) Ну так mai...   4.11.2010, 13:12
- - BRE   Цитата(bigory @ 3.11.2010, 22:04) Мне нуж...   4.11.2010, 13:27
- - bigory   Цитата(Алексей1153 @ 3.11.2010, 22:31) От...   4.11.2010, 13:39
- - bigory   Неужели никто не знает как это делать???   4.11.2010, 16:09
- - Алексей1153   bigory, отчего ж не знать. #include <QtGui/QAp...   4.11.2010, 16:11
- - bigory   Цитата(Алексей1153 @ 4.11.2010, 16:11) bi...   4.11.2010, 16:21
- - Алексей1153   консоль, кстати, женского рода. а зачем эта ссылк...   4.11.2010, 16:32
- - bigory   Уж если и это будет непонятно, я стреляюсь Не ...   4.11.2010, 17:01
- - Алексей1153   что означает "клиент получает сообщение от ко...   4.11.2010, 18:46
- - bigory   Воо, уже ближе. Револьвер в сторонке))) Можно ли э...   4.11.2010, 18:53
- - Алексей1153   Единственное - чёта не могу найти, как скрыть конс...   4.11.2010, 18:59
- - bigory   Я бы с удовольствием перешел на ВинАПИ, но дело в ...   4.11.2010, 19:17
- - Алексей1153   bigory, если речь идёт про net.exe или cmd.exe, то...   4.11.2010, 19:27
- - BRE   Для чего эти переопределения? В документации по QP...   4.11.2010, 19:33
- - Алексей1153   BRE, я же не использовал (в Qt), я только справку ...   4.11.2010, 19:36
- - bigory   Вот уже что-то скомкал, но выводит не совсем то, ч...   4.11.2010, 21:04
- - Litkevich Yuriy   Цитата(Алексей1153 @ 4.11.2010, 20:11) QA...   4.11.2010, 21:07
- - BRE   int main(...) { QString user="Админис...   4.11.2010, 21:21
- - bigory   Все, докопался) Спасибо всем Вам за помощь!   4.11.2010, 22:14
- - Алексей1153   Цитата(Litkevich Yuriy @ 4.11.2010, 23:07...   4.11.2010, 23:50


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 12.7.2025, 10:39