Qt WinApi
Ostatnio zmodyfikowano 2016-04-19 20:39
Kefirek Temat założony przez niniejszego użytkownika |
Qt WinApi » 2016-04-17 21:08:24 Witam Jak wywołać poniższą funkcję WinApi w Qt. LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { if( WM_POWERBROADCAST == message && PBT_APMSUSPEND == wParam ) { } }
Pozdrawiam |
|
Monika90 |
» 2016-04-17 22:49:28 Tak samo jak zrobiłeś wtedy http://cpp0x.pl/forum/temat/?id=21538&p=2
|
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2016-04-17 23:15:21 Dzięki Monika jutro spróbuje to ogarnąć. Pozdrawiam |
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2016-04-18 19:18:33 Witam Poniższa funkcja działa: bool MainWindow::nativeEvent( const QByteArray &, void * message, long * result ) { #ifdef _WIN32 auto & msg = * static_cast < const MSG *>( message ); if( WM_POWERBROADCAST == msg.message && PBT_APMSUSPEND == msg.wParam ) { qDebug() << "I was suspended for a while"; * result = true; return true; } #endif qDebug() << "I was not suspended"; return false; }
Wynik z debugera po zamknięciu klapy laptopa i ponownym otwarciu: I was suspended for a while I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended I was not suspended Nie wiem tylko dlaczego tyle razy wyświetla I was not suspended? Pozdrawiam |
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2016-04-18 19:54:48 bool MainWindow::nativeEvent( const QByteArray &, void * message, long * result ) { #ifdef _WIN32 auto & msg = * static_cast < const MSG *>( message ); if( WM_POWERBROADCAST == msg.message && PBT_APMSUSPEND == msg.wParam ) { qDebug() << "I was suspended for a while"; * result = true; return true; } if( WM_POWERBROADCAST == msg.message && PBT_APMRESUMEAUTOMATIC == msg.wParam ) { qDebug() << "I was awaked "; * result = true; return true; } #endif qDebug() << "I was not suspended"; return false; }
Można również wyłapać moment wybudzenie systemu: I was suspended for a while I was not suspended I was not suspended I was awaked I was not suspended I was not suspended I was not suspended |
|
jankowalski25 |
» 2016-04-18 20:45:41 dlaczego tyle razy wyświetla I was not suspended? |
Może dlatego, że nie wyłapujesz wszystkich możliwych przypadków? Wątpię, że na samym końcu za każdym razem masz identyczny stan. Spróbuj na przykład wypisać sobie wartości poszczególnych zmiennych (zwłaszcza msg.wParam ). |
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2016-04-18 21:35:40 No tak bo nawet jak wejdę kursorem myszki na MainWindow to qDebug daje komunikat I was not suspended.
|
|
Monika90 |
» 2016-04-18 21:57:31 Usuń qDebug() << "I was not suspended"; to się nie będzie wyświetlać. Funkcja nativeEvent jest wywoływana za każdym razem gdy zajdzie jakieś zdarzenie dotyczące twojego okna, np. ruch myszą, naciśniecie klawisza, zmiana rozmiaru, itp... |
|
« 1 » 2 |