微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C ++中实现OOBE完成通知?

如何解决如何在C ++中实现OOBE完成通知?

我想为我的应用程序执行RegisterWaitUntilOOBECompleted API的win32实现。 目的是检测OOBE是否完成并执行特定操作。

但是,我不太了解如何用c ++代码实现它。 在过去的6个小时中,我一直在寻找示例实现,但是没有运气。 谁能解释怎么做?

注册一个回调,一旦OOBE(欢迎使用Windows)被调用 完成。

语法C ++

BOOL RegisterWaitUntilOOBECompleted(   OOBE_COMPLETED_CALLBACK
OOBECompletedCallback,PVOID                   CallbackContext,PVOID                   *WaitHandle ); 

参数

OOBECompletedCallback

指向应用程序定义的回调函数的指针,该函数将 OOBE完成时调用。有关更多信息,请参见 OOBE_COMPLETED_CALLBACK。

CallbackContext

指向回调上下文的指针。该值将传递给 OOBECompletedCallback指定的函数。该值可以为null。

WaitHandle

指向将接收等待句柄的变量的指针 回调注册

解决方法

对于将来任何可能正在寻找此API的示例实现的人,这就是我的做法。该示例代码并非旨在进行编译。

头文件

#include "Oobenotification.h"

class MainClass
{
    // put constructor here
    
    // destructor
    ~MainClass();
    
    // OOBE notification
    OOBE_COMPLETED_CALLBACK OOBECompletedCallback;
    PVOID m_OOBEHandle = NULL;


    // receive notification one OOBE complete
    void OOBERegisterNotification();
    static void CALLBACK NotifyOOBEComplete(PVOID CallbackContext);
    
    public:
        Init();
};

CPP文件

#include "header.h"

void MainClass::~MainClass()
{
    if (m_OOBEHandle != NULL)
        UnregisterWaitUntilOOBECompleted(m_OOBEHandle);
}

void MainClass::Init()
{
    // register to receive oobe complete notification
    OOBERegisterNotification();
}


void MainClass::OOBERegisterNotification()
{
    OOBECompletedCallback = &NotifyOOBEComplete;
    BOOL bRes = ::RegisterWaitUntilOOBECompleted(OOBECompletedCallback,NULL,&m_OOBEHandle);
    if (!bRes)
    {
        // handle failed registration here
    }
}

void CALLBACK MainClass::NotifyOOBEComplete(PVOID Context)
{// async
    UNREFERENCED_PARAMETER(Context);

    // what you want to do after OOBE
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。