#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <Windows.h>#include <wtsapi32.h>#include <winbase.h>#include <winuser.h>#include <ws2spi.h>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECT public: static MainWindow* instance(); ~MainWindow();protected: bool winEvent(MSG *message, long *result); private: explicit MainWindow(QWidget *parent = 0); Ui::MainWindow *ui; typedef bool (*MyPrototype2)(HWND,DWORD); MyPrototype2 WTSRegisterSessionNotification;protected slots: };#endif // MAINWINDOW_H
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); QLibrary myLib("wtsapi32"); myLib.load(); myLib.loadHints(); if (!myLib.isLoaded()) exit(0); QLibrary myLib2("user32"); myLib2.load(); myLib2.loadHints(); if (!myLib2.isLoaded()) exit(0); WTSRegisterSessionNotification = (MyPrototype2) myLib.resolve("WTSRegisterSessionNotification"); if (!WTSRegisterSessionNotification) exit(0); else WTSRegisterSessionNotification(MainWindow::winId(),0); // регестрируем наше окно на получение сообщения. Здесь всё правильно? typedef BOOL (*MyPrototype)(); MyPrototype myFunction = (MyPrototype) myLib2.resolve("LockWorkStation"); // фун-я блокировки экрана if (!myFunction()) qDebug()<<"!!!!"; // вызываю блокировку экрана }MainWindow::~MainWindow(){ delete ui;}MainWindow* MainWindow::instance(){ static MainWindow* MainWindowPTR = new MainWindow(); return MainWindowPTR;}bool MainWindow::winEvent(MSG *message, long *result){ qDebug()<<message<<"\n"<<result; // как мне вытащить здесь wParam ??? this->winEvent(message,result);}
LRESULT CALLBACK WindowProc( HWND hWnd, // handle to window UINT Msg, // WM_WTSSESSION_CHANGE WPARAM wParam, // session state change event LPARAM lParam // session ID);
bool MainWindow::winEvent(MSG *message, long *result){ qDebug()<<message<<"\n"<<result; // как мне вытащить здесь wParam ??? this->winEvent(message,result);}