crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Готовое подделать под себя
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()));
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.11.2010, 22:31
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


вот это
    QString S;
    for(int i=0;s[i]!=0;i++)S[i]=s[i];


можно и нужно заменить на
  QString S=s.c_str();



или уж сразу вместо std::string s применить QString s
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 3.11.2010, 22:33
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


От "невидимых" форм нужно отказаться сразу и делать просто консольное приложение. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bigory
  опции профиля:
сообщение 3.11.2010, 22:48
Сообщение #4


Студент
*

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

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




Репутация:   0  


Цитата(BRE @ 3.11.2010, 22:33) *
От "невидимых" форм нужно отказаться сразу и делать просто консольное приложение.


Ладно, а как отправлять там команды в командную строку, принимать ответы от командной строки для дальнейшей работы?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 3.11.2010, 22:54
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(bigory @ 3.11.2010, 22:48) *
Ладно, а как отправлять там команды в командную строку, принимать ответы от командной строки для дальнейшей работы?

Ну так main( int argc, char *argv[] )

А также при использовании QCoreApplication:
QStringList QCoreApplication::arguments () [static]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bigory
  опции профиля:
сообщение 4.11.2010, 13:12
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 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()));
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 4.11.2010, 13:27
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(bigory @ 3.11.2010, 22:04) *
Мне нужно эту программу передалать для невидимой формы, т.е. там нет кнопок, но работать должна также, но только выводить результаты ответа консоля в переменные а и b.

Ты описываешь работу консольной программы (без GUI), но сам постоянно пытаешься использовать QWidget/QDialog. Для чего?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bigory
  опции профиля:
сообщение 4.11.2010, 13:39
Сообщение #8


Студент
*

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

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




Репутация:   0  


Цитата(Алексей1153 @ 3.11.2010, 22:31) *
От "невидимых" форм нужно отказаться сразу и делать просто консольное приложение.

Ну я еще новичек, еще не совсем понимаю связи. Мне только нужно реализовать задуманное. Поэтому я и хотел сделать в самом начале невидимую форму
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bigory
  опции профиля:
сообщение 4.11.2010, 16:09
Сообщение #9


Студент
*

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

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




Репутация:   0  


Неужели никто не знает как это делать???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 4.11.2010, 16:11
Сообщение #10


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


bigory, отчего ж не знать.
#include <QtGui/QApplication>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    тут твой код работы с сервером.


    return a.exec();
}


Сообщение отредактировал Алексей1153 - 4.11.2010, 16:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 18.4.2024, 17:04