1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
//En-tête pour Qt
#include <QApplication>
#include <QFont>
#include <QPushButton>
#include <QDebug>
#if (_WIN32_WINNT < 0x0500) // This switch is needed to make the program compile
#undef _WIN32_WINNT // because AttachConsole needs it. See Documentation
#define _WIN32_WINNT 0x0501 // for AttachConsole in MSDN.
#endif
#include <windows.h>
#include <cstdio>
#include <iostream>
HANDLE hOutput;
int consoleCnx(void)
{
static LPCTSTR ConsoleClassName = TEXT( "ConsoleWindowClass" );
static LPCTSTR ConsoleTitle = TEXT( "Invite de commandes" );
// trouver la fenêtre console à partir du titre donné
HWND hConsoleWnd = ::FindWindow(
ConsoleClassName,
ConsoleTitle );
if(hConsoleWnd == NULL) return 1;
// récupérer le processus associé à cette fenêtre
DWORD pid;
if (!::GetWindowThreadProcessId(hConsoleWnd,&pid)) return 2;
// s'attacher à la console de ce processus
if(!::AttachConsole(pid)) return 3;
// si une console est rattachée au processus, alors il existe des fichiers
// virtuel CONIN$ et CONOUT$ qui permettent respectivement de lire
// et d'écrire depuis / dans cette console (voir la doc de CreateFile).
#if _MSC_VER >= 1400 // VC++ 8
// éviter le warning C4996: 'freopen' was declared deprecated
// This function or variable may be unsafe. Consider using freopen_s instead.
FILE *stream;
freopen_s( &stream, "CONIN$", "r", stdin );
freopen_s( &stream, "CONOUT$", "w", stdout );
freopen_s( &stream, "CONOUT$", "w", stderr );
#else
std::freopen( "CONIN$", "r", stdin );
std::freopen( "CONOUT$", "w", stdout );
std::freopen( "CONOUT$", "w", stderr );
#endif
// la ligne suivante synchronise les flux standards C++ (cin, cout, cerr...)
std::ios_base::sync_with_stdio();
// récupérer un handle sur la sortie console
hOutput = ::GetStdHandle(STD_OUTPUT_HANDLE);
if (hOutput == INVALID_HANDLE_VALUE){
::FreeConsole();
return 4;
}
return 0;
}
int main(int argc, char* argv[])
{
#ifndef DEBUG
consoleCnx();
#endif
if (argc > 1)
if (QString(argv[1]) == QString("-v")){
std::cout << "cout \n";
DWORD *wrote = 0;
WriteFile(hOutput,"WriteFile \n",11,wrote,NULL);
unsigned long ulWritten;
WriteConsole(hOutput,TEXT("WriteConsole \n"),14,&ulWritten,NULL);
return 0;
}
//Code Qt pour afficher un bouton
QApplication app(argc, argv);
QPushButton quit("Quit");
quit.resize(75, 30);
quit.setFont(QFont("Times", 18, QFont::Bold));
QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
quit.show();
return app.exec();
} |
Partager