Принудительно перезагрузите видео драйвер Windows. Это вообще возможно? - PullRequest
4 голосов
/ 23 марта 2010

Некоторые драйверы используют параметры, записанные в реестре, для самостоятельной настройки при загрузке во время загрузки. Я могу изменить эти значения и затем перезагрузить компьютер, но я хотел бы знать, возможно ли принудительно перезагрузить драйвер, чтобы изменения вступили в силу без перезагрузки.

В частности, я говорю о видеодрайвере (nvidia).

Я где-то читал, что вызов через pINvoke () [User32.ll] :: ChangeDisplaySettings () с разрешением 640x480x8bit (который настолько низок, что не должен поддерживаться современным драйвером) заставит окна загружать «Стандартный драйвер VGA» и повторный вызов с текущим разрешением снова загрузит драйвер nvidia.

Это не работает, хотя. По крайней мере, в Windows 7, даже если низкое разрешение не отображается как «поддерживаемое», система уменьшает экран до небольшого квадрата в центре экрана, показывая низкое разрешение без выгрузки драйвера nvidia.

Итак, есть ли какой-либо .NET / Win32 API, служба для перезапуска или какой-либо способ принудительно перезагрузить видеодрайвер?

Возможно, программно отключить устройство (как вы могли бы это сделать из диспетчера устройств) и снова включить его?

Есть идеи?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 23 марта 2010

Я наконец сделал это. Следуя идее отключения / повторного включения устройства, на самом деле сработало.

Конечно, проблема в том, что отключение устройства с видеокартой из диспетчера устройств не может быть хорошей идеей, поскольку, возможно, вы не сможете снова включить его.

Делать это программно, хотя и не так небезопасно. Теоретически, если приложение успешно отключило устройство, его повторное включение не должно вызывать проблем.

Я нашел здесь , в stackoverflow класс * фантастический для выполнения этого благодаря Джастину Гранту.

Видеодрайвер перезагружается при включении видеоустройства.

Надеюсь, это кому-нибудь поможет.

1 голос
/ 23 марта 2010

Это зависит от водителя. Если он был написан для поддержки остановки и перезапуска, то это возможно; в противном случае вам не повезло. Если вы найдете название службы, вы можете выполнить «sc stop [name]», а затем «sc start [name]». Win32 эквивалентно OpenService / ControlService.

...