1

我正在尝试使用 QT Creator、QT SDK 和 Windows API 在我的 QT 应用程序中实现 winEventFilter

在我的类文件中声明了以下内容

bool winEventFilter( MSG * msg, long * result )
{
    if( msg->message == WM_QUERYENDSESSION)
        DebugLog("shutdown");
    else
        DebugLog("Quit") ;    
}

我通过以下方式调用上述方法

MSG * msg;
long * result;

winEventFilter(msg, result);

当我注销或关闭计算机时,它从不打印日志关闭

4

1 回答 1

3

条件msg->message == WM_QUERYENDSESSION永远不会成立,因为您使用未初始化的指针 ( MSG * msg) 调用函数。

你需要传递一个有意义的msg.

但是,这不是您想要实现 winEventFilter 的方式。

winEventFilterQCoreApplication您应该通过在QCoreApplication子类中重新实现它来使用的方法。然后它会自动为您调用。

有关详细信息,请参阅http://qt-project.org/doc/qt-4.8/qcoreapplication.html#winEventFilter 。

于 2012-06-25T23:05:18.780 回答