Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
1

Автоматическая инициализация Plug & Play

11.10.2012, 23:34. Просмотров 1882. Ответов 12
Метки нет (Все метки)

История болезни вот тут: Пропадает звук после сна на Win7 x64
Не думаю, что мне там помогут, поэтому решил спросить возможно ли программным образом вызывать Обновление конфигурации оборудования каждый раз после перезагрузки/сна/гибернации? В какую сторону смотреть - направьте, пожалуйста.

Может вообще не С++?

Добавлено через 56 минут
Ну в общем я на пути решения проблемы, благодаря Avazart'у... Правда пока через одно место

На автозагрузку поставил:
devcon rescan
Осталось теперь отлавливать просыпание и тоже самое фигачить

Но Avazart заставляет оформить через Api , так что будет дальше курить
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 23:34
Ответы с готовыми решениями:

Автоматическая инициализация массива при объявлении
Гарантирует ли такое объявление то, что все элементы массива - нули, или там могут оказаться...

Проблемы Plug - and - play
Добрового времени суток !!! столкнулся с 2 терабайтовой проблемой :swoon: : после очередного...

Что такое Plug-and-Play
Объясните простым языком что такое Plug-and-Play. Меня интересует: 1. Эта служба присутствует на...

Logitech g13 + Plug and Play
Здравствуйте.:) Проблема: В течении полугода использования "Win7х64 домашняя базовая" не...

Перечислитель программных устройств Plug and Play
Доброго время суток! Прошу помочь со следующей проблемой. В Windows XP SP2 пропал звук. Вначале...

12
kzru_hunter
1064 / 779 / 100
Регистрация: 01.02.2011
Сообщений: 1,795
Записей в блоге: 1
12.10.2012, 00:54 2
Под windows7 без проблем отрабатывает следующий код:

Unit1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
class TForm1 : public TForm
{
__published:    // IDE-managed Components
// ....
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    void __fastcall OnPowerBroadcast(TMessage &Message);
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_POWERBROADCAST, TMessage, OnPowerBroadcast)
    END_MESSAGE_MAP(TControl)
};
Unit1.cpp
C++
1
2
3
4
5
6
7
void __fastcall TForm1::OnPowerBroadcast(TMessage &Message)
{
    if (Message.WParam == PBT_APMRESUMEAUTOMATIC) // вызывается после возвращения из сна или гибернации
    {
        WinExec("devcon rescan", SW_SHOWNORMAL); // èëè SW_HIDE ÷òîáû ñêðûòî áûëî
    }
}
1
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
12.10.2012, 02:03  [ТС] 3
kzru_hunter, интересует как реализовать апдейт дров через WinAPI - нашел такую функцию:
UpdateDriverForPlugAndPlayDevices

Пытаюсь юзать:
C++
1
2
3
4
5
6
7
8
    wchar_t * hId = L"HDAUDIO\FUNC_01&VEN_14F1&DEV_5045&SUBSYS_1179FF31";
    wchar_t infFile[] = L"c:\\1\\BD1VHDza.inf";
    if (UpdateDriverForPlugAndPlayDevices(NULL, hId, infFile,
        INSTALLFLAG_FORCE, NULL))
        Memo1->Lines->Add("good! " + Now());
    else
        Memo1->Lines->Add("bad! " + Now());
    ShowMessage(StrWinError(GetLastError()));
Выдает ошибку №5.

Возможные ошибки:


ERROR_FILE_NOT_FOUND

The path that was specified for FullInfPath does not exist.


ERROR_IN_WOW64

The calling application is a 32-bit application attempting to execute in a 64-bit environment, which is not allowed.


ERROR_INVALID_FLAGS

The value specified for InstallFlags is invalid.


ERROR_NO_SUCH_DEVINST

The value specified for HardwareId does not match any device on the system. That is, the device is not plugged in.


ERROR_NO_MORE_ITEMS

The function found a match for the HardwareId value, but the specified driver was not a better match than the current driver and the caller did not specify the INSTALLFLAG_FORCE flag.
Что из этого 5? Последнее?

Содрал пример FormatMessage:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LPSTR StrWinError(int _err)
{
    LPSTR errString = NULL;  // will be allocated and filled by FormatMessage
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM, // use windows internal message table
        0,       // 0 since source is internal message table
        _err,    // this is the error code
                          // Could just as well have been an error code from generic
                          // Windows errors from GetLastError()
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),       // auto-determine language to use
        (wchar_t*)&errString,
        0,       // min size for buffer
        0);
    return errString;
}
Выдает мне абрукадабру вместо описания
Автоматическая инициализация Plug & Play
0
kzru_hunter
1064 / 779 / 100
Регистрация: 01.02.2011
Сообщений: 1,795
Записей в блоге: 1
12.10.2012, 06:29 4
The_Immortal Зачем каждый раз устанавливать(обновлять) этот проблемный драйвер?
Достаточно devcon rescan.
1
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
12.10.2012, 09:49  [ТС] 5
kzru_hunter, rescan у меня не хило вешает систему, т.к. речекает все устройства.
А тут направленное обновление дров. Точнее попытка (довольно быстрая), т.к. на самом деле дров-то нету подходящих Но когда пытаешь, то звук оживает, получается что-то типа направленного на определенное устройство rescan'а.

У devcon'а тоже есть команда update, но она просто выдает ошибку в общем, которую не распознать. А через WinAPI можно хоть какую-то инфу по ошибке получить.
0
kzru_hunter
1064 / 779 / 100
Регистрация: 01.02.2011
Сообщений: 1,795
Записей в блоге: 1
12.10.2012, 10:04 6
Попробуй:
devcon install
Хелп по нему:
devcon help install
Добавлено через 5 минут
Цитата Сообщение от The_Immortal Посмотреть сообщение
У devcon'а тоже есть команда update, но она просто выдает ошибку в общем, которую не распознать.
А звук все равно не появляется?

Добавлено через 2 минуты
Цитата Сообщение от The_Immortal Посмотреть сообщение
А тут направленное обновление дров. Точнее попытка (довольно быстрая), т.к. на самом деле дров-то нету подходящих Но когда пытаешь, то звук оживает, получается что-то типа направленного на определенное устройство rescan'а.
Как обновляешь? Через пункт "Обновить драйвера" в контекстном меню устройства?
У меня в этом случае всегда появляется сообщение "Наиболее подходящее программное обеспечение для данного устройства уже установлено", по которому не скажешь, что что-то изменилось с текущим драйвером.
0
LK
Заблокирован
12.10.2012, 10:11 7
Какого эта тема делает в разделе Билдера? Или будьте конкретнее, или уберу куда-нибудь. Или, что верятнее, закрою по причине отсутствия информативного содержимого и уверенного превращения темы в свалку.
1
kzru_hunter
1064 / 779 / 100
Регистрация: 01.02.2011
Сообщений: 1,795
Записей в блоге: 1
12.10.2012, 10:13 8
LK Он хочет программным способом (Builder) исправлять проблему, выходя из сна или гибернации.
1
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
12.10.2012, 18:22  [ТС] 9
kzru_hunter,

Цитата Сообщение от kzru_hunter Посмотреть сообщение
А звук все равно не появляется?
Нет, через devcon не появляется.


Цитата Сообщение от kzru_hunter Посмотреть сообщение
Как обновляешь? Через пункт "Обновить драйвера" в контекстном меню устройства?
У меня в этом случае всегда появляется сообщение "Наиболее подходящее программное обеспечение для данного устройства уже установлено", по которому не скажешь, что что-то изменилось с текущим драйвером.
Да-да, у меня также. Только вот после этого звук появляется. Поэтому хочу попробовать через UpdateDriverForPlugAndPlayDevices.

Проблема усугубляется вдвойне: если звук отсутствует в течение n-минут неактивности (пока не определил сколько именно), то звук опять пропадает... При этом дисплей не вырубается, заставок никаких не запускается... Вот это я уже не знаю как остлеживать... Надо, наверное, как-то ловить неактивность компа и после изменения на активное состояние запускать обновление дров (которое еще не готово).


LK,

Цитата Сообщение от LK Посмотреть сообщение
Какого эта тема делает в разделе Билдера?
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Он хочет программным способом (Builder) исправлять проблему, выходя из сна или гибернации.

Цитата Сообщение от LK Посмотреть сообщение
будьте конкретнее
Автоматическая инициализация Plug & Play
0
kzru_hunter
1064 / 779 / 100
Регистрация: 01.02.2011
Сообщений: 1,795
Записей в блоге: 1
12.10.2012, 19:24 10
The_Immortal
По идее должна возвращаться ошибка ERROR_IN_WOW64, но она не равна 5.
В справке msdn там написано, что 32 битные приложения не имеют возможности установить драйвер (т.е. запускать функцию UpdateDriverForPlugAndPlayDevices) на 64 битной системе:
Device Installations on 64-Bit Systems

Добавлено через 3 минуты
Эту ошибку ("5") устанавливает Memo
C++
1
2
Memo1->Lines->Add("bad! " + Now()); // <--
ShowMessage(StrWinError(GetLastError()));
Добавлено через 2 минуты
ERROR_IN_WOW64 равно 3758096949
2
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
12.10.2012, 19:47  [ТС] 11
kzru_hunter,
C++
1
2
3
4
5
6
7
    if (UpdateDriverForPlugAndPlayDevices(NULL, hId, infFile,
        INSTALLFLAG_FORCE, NULL))
      //    Memo1->Lines->Add("good! " + Now());
        ShowMessage(StrWinError(GetLastError()));
    else
        //Memo1->Lines->Add("bad! " + Now());
        ShowMessage(GetLastError());
Получил:
3758096949
И шо делать?

Цитата Сообщение от kzru_hunter Посмотреть сообщение
ERROR_IN_WOW64 равно 3758096949
Кстати, а как Вы это узнали? На будущее...
0
kzru_hunter
1064 / 779 / 100
Регистрация: 01.02.2011
Сообщений: 1,795
Записей в блоге: 1
12.10.2012, 19:49 12
The_Immortal
Попробуй в Visual Studio, в нем есть 64 битный компилятор.
1
LK
12.10.2012, 22:54     Автоматическая инициализация Plug & Play
  #13

Не по теме:

ну, вот... поворчал, и все сразу активненько начали дрыгать конечностями... (для тех, кто в танке - это шутка :) )

1
12.10.2012, 22:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2012, 22:54
Привет! Вот еще темы с ответами:

Creative Sound Blaster 16 Plug and Play и YAMAHA Native ds1
можно ли одновримено использовать две звуковых карты? Creative Sound Blaster 16 Plug and Play и...

Ошибка 0х000000са, в тексте BSODa написано Plug and Play обнаружил ошибку
Здравствуйте. Столкнулся с такой-же причиной, только синий экран, ошибка 0х000000са, в тексте...

Автоматическая инициализация логера
Доброго времени суток:) Пытаюсь разобраться в следующем вопросе (ситуации): пусть есть простейшее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru