SOL9 2.0 Class: SWbemNotificationQueryApplet

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * SWbemNotificationQueryApplet.h 
 * Copyright (c) 2012 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// 2012/03/08 Updated

// SOL9

// 2009/12/21 Modified to use SOL::ReportWriter class to save a query result.
// 2009/12/22 Modified to show an error name for an exception caught by catch caluse.

#pragma once

#include <sol/wmi/SWbemQueryApplet.h>

#include <sol/wmi/SWbemEventSource.h>
#include <sol/wmi/SWbemObjectPath.h>

namespace SOL {

/**
 * Thread for SWbemServices::ExecNotificationQuery method call.
 * This is a semi-ascyncronus query.
 */
class SWbemNotificationQueryApplet: public SWbemQueryApplet {

public:    
    /**
     * Constructor
     */
    SWbemNotificationQueryApplet()
    :SWbemQueryApplet()
    {
    }


public:
    //Please redefine this method in your own sublcass to inherit this class.

    virtual void display(SWbemEventSource& source)
    {
        //2009/12/21

        SWbemQueryProperties& properties = getQueryProperties();
        _bstr_t reportFile = properties.getReportFile();
        _bstr_t query       = properties.getQuery();

        FileWriter writer(reportFile);
            
        writer.writeln(L"[SWbemNoticaitionQuery result for \"%s\"]", (const wchar_t*)query);
        LocalDateTime ldt;
        StringT<wchar_t> now;
        writer.writeln(L"(Generated on %s)", ldt.nowToSeconds(now));


        while (true) { 
            try {

                int nextEventInterval = properties.getNextEvent();

                SWbemObject object   = source.nextEvent(nextEventInterval);
    
                _bstr_t text = object.getObjectText(0);
                printf("\n\nNotified ObjectText:%S\n", (const wchar_t*)text);

                writer.writeln(L"\n\nNotified ObjectText:%s", (const wchar_t*)text);
                
            } catch (...) {

            }     
        }
    }

public:
    /**
     * Thread procedure to watch an instance creation of Win32_Process.
     */
    virtual void run()
    {
        ApartmentThreadedModel apartmentThreaded;

        //MultiThreadedModel   multiThreaded;

        try {
            printf("1 Locator\n");
            SWbemLocator locator;
                
            SWbemQueryProperties& properties = getQueryProperties();

            _bstr_t server = properties.getServer();
            _bstr_t nspace = properties.getNamespace();
            _bstr_t query  = properties.getQuery();

            printf("2 ConnectServer\n");

            SWbemServices services = locator.connectServer((BSTR)server, (BSTR)nspace);

            printf("3 ExecQery\n");
                
            SWbemEventSource eventSource  = services.execNotificationQuery((BSTR)query);

            printf("4 Display\n");

            display(eventSource);

        } catch (HRESULT hr) {
            WbemErrors errors;
            printf("SWbemNotificationQueryApplet,Exception:HRESULT=%08x %s", hr, errors.getName(hr));
        } catch (...) {
            printf("SWbemNotificationQueryApplet,Unknown Exception\n");
        }
    }

};

}

Last modified: 1 Apr 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.