Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по WMI. Не могу получить числовые значения. 
:(
    Опции темы
AndreySol
Дата 2.11.2005, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Есть такой код:
Код

CoInitialize (NULL);
CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);
HRESULT hr = 0;
IWbemLocator *pWbemLocator = NULL;
if(SUCCEEDED(hr = CoCreateInstance (CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void**) &pWbemLocator)))
{       
    IWbemServices *pServices = NULL;
    if(SUCCEEDED(hr = pWbemLocator->ConnectServer(_bstr_t(L"root\\cimv2"), NULL, NULL, NULL, 0, NULL, NULL, &pServices)))
    {
        IEnumWbemClassObject * pEnum = NULL;
        hr = pServices->CreateInstanceEnum(_bstr_t(L"Win32_CDROMDrive"), 0, NULL, &pEnum);
        if(pEnum)
        {
            ULONG uReturned = 1;
            while(uReturned == 1)
            {
                IWbemClassObject * pClassObject = NULL;
                hr = pEnum->Next(7000, 1, &pClassObject, &uReturned);
                if (SUCCEEDED(hr) && (uReturned == 1))
                {
                    // получаем текстовое значение "Caption"
                    VARIANT v;
                    VariantInit(&v);
                    CIMTYPE vtType = CIM_STRING;
                    LONG lFlavor = 0L;
                    pClassObject->Get (L"Caption", 0, &v, &vtType, &lFlavor);
                    if(v.vt == VT_BSTR)
                    {
                        WCHAR buf[1024] = L"";
                        DWORD dwLen = *((DWORD*)v.bstrVal - 1)/sizeof(WCHAR);
                        wcsncpy(buf, v.bstrVal, dwLen); 
                        *(buf + dwLen) = L'\0';
                        ::MessageBoxW (0, buf, L"", MB_OK);
                    }

                    // получаем числовое значение "FileSystemFlagsEx"
                    VariantClear(&v);
                    VariantInit(&v);
                    vtType = CIM_SINT32;
                    pClassObject->Get(L"FileSystemFlagsEx", 0, &v, &vtType, &lFlavor);
                    if(v.vt == VT_UINT)
                    {
                        CString res = "";
                        res.Format("%u", v.ullVal);
                        MessageBox(res, "", MB_OK);
                    }
                    VariantClear(&v);
                    pClassObject->Release ();
                }
            }//end while

            pEnum->Release ();
        }
        pServices->Release ();
    }
    pWbemLocator->Release ();
}
CoUninitialize ();

Для текстовых значений все нормально, а числовые не могу получить.
Помогите кто разобрался с этим, запарился уже.
PM MAIL   Вверх
AndreySol
Дата 4.11.2005, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Ну что же молчим ?
Че никто с WMI не работал ?
PM MAIL   Вверх
p0s0l
Дата 15.11.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 1
Всего: 112



Код

// в объявлении класса Win32_CDROMDrive свойство FileSystemFlagsEx имеет тип uint32,
// поэтому целесообразнее запрашивать беззнаковое значение
                    vtType = CIM_UINT32;

                    pClassObject->Get(L"FileSystemFlagsEx", 0, &v, &vtType, &lFlavor);

// но почему-то WMI всё равно возвращает знаковое значение... :(
// поэтому проверка типа будет VT_I4
                    if(v.vt == VT_I4)    
                    {    
                        CString res = "";    
                        res.Format("%d", v.lVal);
                        MessageBox(res, "", MB_OK);    
                    }

Добавлено @ 15:16
Также убедись, что в CD-ROM вставлен диск smile


--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.