На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> RegQueryValueEx ошибка чтения ключа
    Цитата Hryak @

    Добрый день, не могли бы вы и мне кое-что подсказать в подобном вопросе?
    Я пытаюсь получить номер порта устройств USB класса, подключенных к ПК. Код у меня такой(приведу лишь часть кода, касающуюся вопроса, что бы не нагромождать):
    ExpandedWrap disabled
      #include <windows.h>
      #include <setupapi.h>
      #include <string.h>
      #include <iostream>
      #include <stdio.h>
      #include <stdlib.h>
       
      #pragma comment(lib,"setupapi.lib")
      #pragma comment(lib,"advapi32.lib")
      #pragma comment(lib,"user32.lib")
      #pragma once
       
      void GetPORTnum(){
      SP_DEVINFO_DATA DeviceInfoData;
      CHAR   devicePortBuf[255] = {'\0'};
      DWORD  dwType = 0;
      DWORD  dwDataSize = 255;
       
      PnPHandle_USB = SetupDiGetClassDevs(&GUID_USB_DEVICE, 0, 0, DIGCF_PRESENT);
      DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
      int ch = 0;
      int k = 0;
      // берем каждое USB устройство из списка
      for (ch = 0; SetupDiEnumDeviceInfo(PnPHandle_USB, k, &DeviceInfoData); k++)
      {
              HKEY hKey = SetupDiOpenDevRegKey(PnPHandle_USB, &DeviceInfoData, DICS_FLAG_GLOBAL, NULL, DIREG_DEV, KEY_QUERY_VALUE);
              if (hKey == INVALID_HANDLE_VALUE)
          {
              error = GetLastError();
              break;
          }
       
          int result = RegQueryValueEx(hKey, L"PortName", 0, &dwType, (LPBYTE)&devicePortBuf, &dwDataSize);
          if (result != ERROR_SUCCESS)
          {
              MessageBox::Show("Can not read registry value PortName for device ");
          }
       
          ch++;
       
          for (const char* p = devicePortBuf; *p; p += strlen(p) + 1)
          {
              cbTest->Items->Add(Convert::ToString(p));
          }
          RegCloseKey(hKey);
      }
      }


    Вываливается в сообщение "Can not read registry value PortName for device" ну и соответственно номера портов я получить не могу. Подскажите, что я делаю не так? Или может какой-то другой способ получать номер порта, к которому подключено устройство из списка (SetupDiEnumDeviceInfo(PnPHandle_USB, k, &DeviceInfoData);) сможете предложить? Т.к. возможно способ получения порта через реестр не всегда будет корректен и надёжен (вдруг какие-то ограничения доступа будут мешать и т.п.). В общем жду любой помощи! Заранее спасибо!

    Эта тема была разделена из темы "RegQueryValueEx"
      что там GetLastError возвращает?
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0275 ]   [ 16 queries used ]   [ Generated: 27.04.24, 08:45 GMT ]