Guid deviceGuid = new Guid("{4D36E96F-E325-11CE-BFC1-08002BE10318}");//думаю это можно захардкодить
string instancePath = @"HID\VID_062A&PID_4101&MI_01&COL01\8&14EA75C&0&0000";//это захардкодить вряд ли выйдет, нужно будет поискать в девайс менеджере через шарп нужный путь
DeviceHelper.SetDeviceEnabled(deviceGuid, instancePath, false); //фалс отключает девайс / тру - включает
конкретно этим кодом и конкретно этими значениями я себе отключил мышку для теста :)
Но этим способом так же под вопросом выйдет ли отключить конкретный девайс. Не все девайсы это поддерживают.
Как видно по второму ответу прога DevManView.exe умеет отключать в рантайме. Значит это ВОЗМОЖНО (лично я думал что это блокировано на хардварном уровне) . Но как сделать это напрямую из шарпа я не подскажу. :) Только если использовать консольные возможности этой проги -- снова таки, по линке описано как.
блокировать конкретный USB порт без перезагрузок?
Не понимаю что такое "блокировать". Если ты про просто дисейбл устройства как через девайс менеджер - то реализация выше. Без перезагрузок.
Если ты про "блокировать ручное включение девайса" -- ты можешь просто устроить слежку за тем, не включили ли этот девайс без твоего разрешения в отдельном потоке и автоматом отключать. Криво, но будет работать как тебе нужно.
Или же отключать не отключаемые устройства?
Наверное они на то и отключаемые, что бы их не отключали. Вряд ли.
Только если питание рубонуть.
UPD: как обозначил MSDN.WhiteKnight в коментариях, то вполне возможно что неотключаемые устройства являются "составными". То есть если ты отключишь несколько дочерних, то и это неотключаемое будет отключено.
在网上找到了这门课:
如果您手头有 GUID 和 instancePath(即设备管理器中的路径),则可以按如下方式禁用设备:
конкретно этим кодом и конкретно этими значениями я себе отключил мышку для теста :)
Но этим способом так же под вопросом выйдет ли отключить конкретный девайс. Не все девайсы это поддерживают.
Оригинал кода нашел вот здесь: https://stackoverflow.com/questions/1438371/win32-api-function-to-programmatically-enable-disable-device
Так же, судя по тексту, нужно твою прогу компилить именно в х64 (в той платформе -- в которой у тебя операционка).
С поиском GUID девайса все довольно просто: девайс менеджер -> ищешь нужный девайс -> пропертиз -> Ивентс -> в блоке инфрпмации будет "Class Guid".
с поиском программного пути конкретного девайса разберешся сам. Вопрос стоял об отключении девайса :)
Внезапно (для меня лично), но это возможно.
https://stackoverflow.com/questions/14690157/turn-off-power-to-usb-port-programmatically
Как видно по второму ответу прога DevManView.exe умеет отключать в рантайме. Значит это ВОЗМОЖНО (лично я думал что это блокировано на хардварном уровне) . Но как сделать это напрямую из шарпа я не подскажу. :) Только если использовать консольные возможности этой проги -- снова таки, по линке описано как.
Не понимаю что такое "блокировать". Если ты про просто дисейбл устройства как через девайс менеджер - то реализация выше. Без перезагрузок.
Если ты про "блокировать ручное включение девайса" -- ты можешь просто устроить слежку за тем, не включили ли этот девайс без твоего разрешения в отдельном потоке и автоматом отключать. Криво, но будет работать как тебе нужно.
Наверное они на то и отключаемые, что бы их не отключали. Вряд ли.
Только если питание рубонуть.
UPD: как обозначил MSDN.WhiteKnight в коментариях, то вполне возможно что неотключаемые устройства являются "составными". То есть если ты отключишь несколько дочерних, то и это неотключаемое будет отключено.
Я пришел к двум вариантам:
Вариант №1: отключать USB порты можно через regedit
Вариант №2: с помощью утилиты DevManView.exe(freeware):
转到设备管理器并找出将切断电源的设备的名称,或者您可以通过编程方式获取设备名称。