Re[2]: WndProc пропускаются сообщения WM_DEVICECHANGE
От: Alex74 Россия  
Дата: 31.10.20 12:18
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Здравствуйте, Alex74, Вы писали:


A>>Можно как-то вылечить эту проблему?


VF>Я бы попробовал Spy++ с фильтром на WM_DEVICECHANGE. На Вашем окне, и на каком-то другом, не .NET (все top level окна должны это получать).


Спасибо за совет. Хотя (надо работать, а не бесконечно мучать "нерешаемую проблему") реализовал поиск подключения через таймер (пока все не подключено, раз в секунду проверять порты) попробовал Spy++

protected override void WndProc у меня остался, но закомментирован.
вот результат Spy++ на работающей программе

...
<000381> 00010990 R WM_PRINTCLIENT
<000382> 00010990 S WM_DEVICECHANGE Event:0007 dwData:00000000
<000383> 00010990 R WM_DEVICECHANGE fComplete:True
<000384> 00010990 S WM_DEVICECHANGE Event:DBT_DEVICEARRIVAL dwData:0774DDE8
<000385> 00010990 R WM_DEVICECHANGE fComplete:True
<000386> 00010990 S WM_DEVICECHANGE Event:0007 dwData:00000000
<000387> 00010990 R WM_DEVICECHANGE fComplete:True
<000388> 00010990 S WM_CTLCOLORBTN hdcButton:4C0110B1 hwndButton:00010AD6
...
...
<000423> 00010990 S WM_GETTEXT cchTextMax:12 lpszText:012FCFD4
<000424> 00010990 R WM_GETTEXT cchCopied:5 lpszText:012FCFD4 ("F")
<000425> 00010990 R WM_PRINTCLIENT
<000426> 00010990 S WM_DEVICECHANGE Event:DBT_DEVICEREMOVECOMPLETE dwData:0774DDE8
<000427> 00010990 R WM_DEVICECHANGE fComplete:True
<000428> 00010990 S WM_DEVICECHANGE Event:0007 dwData:00000000
<000429> 00010990 R WM_DEVICECHANGE fComplete:True
<000430> 00010990 S WM_DEVICECHANGE Event:DBT_DEVICEREMOVECOMPLETE dwData:0774E088
<000431> 00010990 R WM_DEVICECHANGE fComplete:True

Ненадежно очень
При "одновременном" подключении ТРЕХ портов. только одно сообщение Event:DBT_DEVICEARRIVAL
При "одновременном" отключении ТРЕХ портов. только два Event:DBT_DEVICEREMOVECOMPLETE

Не знаю кто (что) виноват(о), но четко видно, что до ФОРМЫ добираются НЕ ВСЕ сообщения WM_DEVICECHANGE
Терять время дальше считаю НЕЦЕЛЕСООБРАЗНО...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.