刷新桌面以查看隐藏的图标

时间:2015-08-28 18:17:41

标签: vb.net refresh desktop

我正在尝试使用我编写的winforms VB.Net应用程序刷新桌面。

应用程序修改注册表以取消隐藏文件和文件夹/受保护的操作系统文件。我有一个工作方法来更改注册表后刷新所有Windows资源管理器窗口,但桌面仍保持不变,除非我手动刷新它。

单击桌面并使用键盘上的 F5 键进行刷新,可以成功刷新桌面,以便用户可以查看隐藏的图标。但是当我使用下面的代码时,桌面会闪烁,但除非我用鼠标点击桌面并按键盘上的F5,否则隐藏文件不会显示:

Private Declare Function SHChangeNotify Lib "Shell32.dll" (ByVal wEventID As Int32, _
                                                               ByVal uFlags As Int32, _
                                                               ByVal dwitem1 As Int32, _
                                                               ByVal deitem2 As Int32) As Int32

Private Sub refreshDesktop()

SHChangeNotify(&H8000000, &H1000, 0, 0)

End Sub

我无法想象它应该是这么困难。我考虑的另一个替代方法是使用SendKeys.Send("{F5}")但是无法将焦点放到桌面上以将此方法应用于桌面而不是表单。我在Windows 7机器上测试它。

任何想法如何实现这一点/他们所知道的任何建议或代码都将起作用。

更新:我已经将Pinvoke.net中的 SHChangeNotify 方法签名放在了我上面的地方,但它仍然返回相同的结果桌面图标闪存就像桌面实际上正在刷新,但不是显示隐藏的图标,如键盘上的 F5 。参考Pinvoke.net

后,请参阅下面的已修改代码
<DllImport("Shell32.dll")> _
    Shared Sub SHChangeNotify(ByVal wEventID As Int32, _
                              ByVal uFlags As Int32, _
                              ByVal dwitem1 As Int32, _
                              ByVal deitem2 As Int32)
    End Sub


 Private Sub refreshDesktop()

        SHChangeNotify(&H8000000, &H1000, 0, 0)

 End Sub

0 个答案:

没有答案