某些驱动程序使用在注册表中编写的参数在引导时加载时自行配置。 我可以修改这些值然后重新启动,但我想知道是否可以强制重新加载驱动程序,使更改生效而无需重新启动。
具体来说,我说的是视频驱动程序(nvidia)。
我读到某个地方,通过pINvoke()[User32.ll] :: ChangeDisplaySettings()调用640x480x8bits分辨率(这是如此之低以至于现代驱动程序不应该支持)将强制窗口加载“标准VGA驱动程序”,并使用当前分辨率进行另一次调用将再次加载nvidia驱动程序。
但这不起作用。至少在Windows 7中,即使低分辨率未显示为“支持”,系统也会将屏幕缩小到屏幕中央的一个小方块,显示低分辨率不会卸载nvidia驱动程序。
那么,是否有任何.NET / Win32 API,重启服务,或者任何方式强制重新加载视频驱动程序?
也许以编程方式禁用设备(就像你可以从设备管理器那样做)并重新启用它?
有什么想法吗?
非常感谢。
答案 0 :(得分:2)
我终于做到了。遵循禁用/重新启用设备实际工作的想法。
当然问题是从设备管理器中禁用您的视频卡设备可能不是一个好主意,因为您可能无法重新启用它。
以编程方式执行此操作并不会显得如此不安全。从理论上讲,假设应用程序已成功禁用该设备,重新启用它应该不会造成问题。
我发现here,在stackoverflow中有一个梦幻般的类来完成此任务,感谢Justin Grant。
视频驱动程序在重新启用视频设备时重新加载。
希望它有所帮助。
答案 1 :(得分:1)
这取决于司机。如果它是为支持停止和重新启动而编写的,那么它是可能的;否则,你运气不好。如果找到服务名称,可以执行“sc stop [name]”,然后执行“sc start [name]”。 Win32等价物是OpenService / ControlService。