Добрый день возниклас следующая задача, надо вызывать из программы другую, но так как она является консольным приложением то хотелось бы скрыть запуск. Можно ли сделать вызываемый процесс невидимым???
Можно, но только используя API ОС.
Под виндой нужно использовать хуки, под никсами не знаю.
Насколько я помню QProcess и так скрывает консольные приложения, например CMD.EXE. А чтобы они были видны надо использовать метод startDetached().
Аааа, вот вы о чем!
Спасибо вам, приеду домой щёлкну волшебную кнопочку)))
Возник ещё один вопрос
Использую Postgres и пишу обёртку над pg_dump и pg_restore (задание не критикуем я тоже в курсе что есть pgadmin3.. ))))
Когда запускаю pg_dump без параметров из консоли выводится
"Password:" и предложение ввести пароль. Надо чтобы пароль вводила сама программа. Пытаюсь это реализовтаь следующим образом:
Попробуй для начала данные читать во временный QByteArray и выводи в QTextEdit его размер, а не передавать его сразу в QTextEdit.
При конвертации QByteArray в QString чтение происходит до первого '\0', может быть данные где-то портятся.
У write() проверь возвращающееся значение, если -1, то ошибка, иначе количество переданных байт.
И проверь process->errorString() что выводит.
Ловлю уже все сигналы... процесс стартует но при убийсте его почему не высылается finished. Started высылается нормально.. никаких ошибок не получаю =(( У кого=нибудь есть ещё идеи??(( Может быть кто-нибудь может првести примеры как грамотно читтаь из и писать в консольной приложение вызываемой через Qprocess???
совсем забыл запись в процесс сразу после создания успешно проходит, правда толку от этого ноль=((
На вот
#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()
{
te.append(QString::fromLocal8Bit(myProc.readAllStandardOutput()));
te.append(QString::fromLocal8Bit(myProc.readAllStandardError()));
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)