Регистрация USB устройств
От: Del00 Россия  
Дата: 24.01.05 13:13
Оценка:
Пишу dll. Хочу, чтобы она, помимо всего прочего, могла обрабатывать момент подключения/отключения нового USB устройства в системе.

Понятно, что окна для того, чтобы ловить WM_DEVICECHANGE нет (и создавать его не хотелось бы). Есть ли какой-нибудь callback у системы, чтобы дернуть dll?

Второй вариант — написать свой callback и поставить hook, но я это делал только для случая, когда callback-функция была в dll, а hook ставился в клиенте. Можно всю эту систему закрутить в одной dll? Например, клиент сымитировать(?) дополнительным потоком? или в этом нет смысла?

Горит! Помогите..
Re: Регистрация USB устройств
От: Аноним  
Дата: 24.01.05 14:53
Оценка:
Здравствуйте, Del00, Вы писали:

D>Пишу dll. Хочу, чтобы она, помимо всего прочего, могла обрабатывать момент подключения/отключения нового USB устройства в системе.


D>Понятно, что окна для того, чтобы ловить WM_DEVICECHANGE нет (и создавать его не хотелось бы). Есть ли какой-нибудь callback у системы, чтобы дернуть dll?


D>Второй вариант — написать свой callback и поставить hook, но я это делал только для случая, когда callback-функция была в dll, а hook ставился в клиенте. Можно всю эту систему закрутить в одной dll? Например, клиент сымитировать(?) дополнительным потоком? или в этом нет смысла?


D>Горит! Помогите..



Попробуй Device Management functions. Или SetupDiGetClassDevs дальше по ссылкам. Но, по-моему, там всюду хендл окна нужен

RobinBobin
Re: Регистрация USB устройств
От: Del00 Россия  
Дата: 24.01.05 18:50
Оценка:
Я понял!

Типа вводим функцию:

LRESULT CALLBACK USBHook(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode == HC_ACTION)
{
CWPSTRUCT * pMsg = (CWPSTRUCT *) lParam;

if(pMsg->message == WM_DEVICECHANGE)
{
MessageBox(
NULL,
"Кто-то что-то вставил) или вынул или еще че сделал с USB",
"Break Point",
MB_OK
);

}
}

return CallNextHookEx(hUSBHook, nCode, wParam, lParam);
}

Ставим хук:

HMODULE hModule = GetModuleHandle("Driver.dll");

if(hModule)
{
hUSBHook=SetWindowsHookEx(
WH_CALLWNDPROC,
(HOOKPROC)&USBHook,
hModule,
0
);
И все оби)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.