2012-09-30 13 views
5

मैं WMI के साथ कुछ (कुछ घटना सूचना प्राप्त करने के) करना चाहते हैं में वस्तु संपत्ति प्राप्त करने में विफल तो मैं MSDN वेबसाइट से सरल उदाहरण के साथ शुरू:WMI (C++)

Receiving Event Notifications Through WMI

इस कार्यक्रम की एक घटना को प्राप्त करता है WMI के माध्यम से अधिसूचना (प्रक्रिया निर्माण), और ईवेंट इवेंट सिंक :: ईवेंट प्राप्त करने पर संकेत दें।

मैं एक परिवर्तन के साथ ऊपर (कॉपी/अतीत) कड़ी में एक ही कोड का प्रयोग किया: वर्ग EventSink में , समारोह

HRESULT EventSink::Indicate(long lObjectCount, IWbemClassObject **apObjArray) 

मैं वस्तु की एक संपत्ति (पुनः प्राप्त करने के कुछ लाइनों जोड़ा वस्तु apObjArray में दिया जाता है):

for (int i = 0; i < lObjectCount; i++) 
    { 
     VARIANT varName; 
     hres = apObjArray[i]->Get(_bstr_t(L"Name"), 
      0, &varName, 0, 0); 
//... 
    } 

अब प्राप्त करें (...) कार्यों रिटर्न WBEM_E_NOT_FOUND (निर्दिष्ट संपत्ति नहीं पाया जाता है) कोई बात नहीं मैं के लिए क्या देखो (प्रलेखन कि गुण हैं से विश्वास है कि वहाँ ...)

कृपया मुझे बताएं कि मुझे क्या याद आया? किसी भी मदद की सराहना की है। ताकि आप TargetInstance वस्तु का मूल्य प्राप्त होगा और फिर Name संपत्ति के मूल्य को पुनः प्राप्त

उत्तर

10

Name संपत्ति, TargetInstance वस्तु का हिस्सा है।

इस नमूने

HRESULT EventSink::Indicate(long lObjectCount, 
    IWbemClassObject **apObjArray) 
{ 
    HRESULT hr = S_OK; 
    _variant_t vtProp; 

    for (int i = 0; i < lObjectCount; i++) 
    { 

    hr = apObjArray[i]->Get(_bstr_t(L"TargetInstance"), 0, &vtProp, 0, 0); 
    if (!FAILED(hr)) 
    { 
     IUnknown* str = vtProp; 
     hr = str->QueryInterface(IID_IWbemClassObject, reinterpret_cast< void** >(&apObjArray[i])); 
     if (SUCCEEDED(hr)) 
     { 
      _variant_t cn; 
     hr = apObjArray[i]->Get(L"Name", 0, &cn, NULL, NULL); 
      if (SUCCEEDED(hr)) 
      { 
      if ((cn.vt==VT_NULL) || (cn.vt==VT_EMPTY)) 
      wcout << "Name : " << ((cn.vt==VT_NULL) ? "NULL" : "EMPTY") << endl; 
      else 
      wcout << "Name : " << cn.bstrVal << endl; 
      } 
      VariantClear(&cn); 


     } 
    } 
    VariantClear(&vtProp); 

    } 

    return WBEM_S_NO_ERROR; 
} 
+1

शानदार प्रयास करें !!! मैं तुमसे प्यार करता हूँ !!!!!!!!: डी – Edward83

+0

यदि मैंने एक से अधिक प्रकार की घटनाओं के लिए पंजीकरण किया है, तो क्या आप जानते हैं कि कॉलबैक में किस प्रकार का पता लगाना है? –

+0

@RRUZ: क्या आप यहां मेरी मदद कर सकते हैं: http://stackoverflow.com/questions/28897897/c-monitor-process-creation-and-termination-in-windows/28921442 – Jackzz