Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Qt WinApi

Ostatnio zmodyfikowano 2016-04-19 20:39
Autor Wiadomość
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.
C/C++
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    if( WM_POWERBROADCAST == message && PBT_APMSUSPEND == wParam )
    {
        // Going to sleep
       
    }
   
}
Pozdrawiam
P-147367
Monika90
» 2016-04-17 22:49:28
Tak samo jak zrobiłeś wtedy
http://cpp0x.pl/forum/temat/?id=21538&p=2


P-147370
Kefirek
Temat założony przez niniejszego użytkownika
» 2016-04-17 23:15:21
Dzięki Monika jutro spróbuje to ogarnąć.
Pozdrawiam
P-147371
Kefirek
Temat założony przez niniejszego użytkownika
» 2016-04-18 19:18:33
Witam
Poniższa funkcja działa:
C/C++
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
P-147401
Kefirek
Temat założony przez niniejszego użytkownika
» 2016-04-18 19:54:48
C/C++
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
P-147403
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
).
P-147408
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.
P-147412
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...
P-147413
« 1 » 2
  Strona 1 z 2 Następna strona