【发布时间】:2015-10-06 22:56:59
【问题描述】:
我个人对此问题的担忧是因为我正在创建一个动态桌面程序,其目的是让用户单击桌面上的文件夹,该文件夹的内容成为新桌面。 (我将在下面发布代码作为答案,以免混淆我的实际问题)。但是,部分代码需要终止并重新启动 explorer.exe 进程,以便重新初始化桌面以显示新位置。
很难找到这个问题的文档,因为它比大多数人愿意为这个特定领域去研究的技术要多。 This man is trying to do the exact same thing as me except using autoit 和 here users looked more into doing it vbscript side 但都得出了相同的结果,即杀死并重新启动 explorer.exe 以更新桌面。
我以强行方式终止explorer.exe 进程的问题可能导致系统不稳定,并且实际终止该进程需要更长的时间来重新启动桌面,而不是when you simply move the desktop location 发生的任何操作。我想知道如何通过调用更新它的 dll 来更新我的桌面,但是从批处理和 vbscript 混合中。
编辑:
对 rundll32.exe user32.dll,LockWorkStation 等命令的调查以及后来对 user32.dll 依赖项的调查发现了桌面功能的多种用途,我假设这些功能用于以某种形式更新桌面。如果您想查看此内容,请download dependency walker 并从程序中将其打开到此文件夹。 (C:\Windows\WinSxS\amd64_microsoft-windows-user32_31bf3856ad364e35_6.3.9600.18123_none_be367a2e4123fd9d\user32.dll)
【问题讨论】:
-
我认为您正在寻找的术语是“shell 扩展”,但我不确定是否可以覆盖任何类型的桌面文件夹的默认行为(打开)。
-
If I can find what variable is being passed within the registry editor是什么让您认为注册表与在桌面上打开文件夹有什么关系? -
在大多数 Windows 版本中(至少到 8.1,我还没有使用 10),桌面只是一个对 Windows shell(AKA Explorer)具有特殊意义的文件夹。它与注册表的唯一关系是该位置存储在那里。有特定的 API 调用用于检索该文件夹的位置,但据我所知,没有一个允许通过代码更改它。 (FWIW,我认为这是一个可怕的想法,特别是如果它不是用于您自己的个人 PC 的。就像物理桌面一样,您可以(并且应该)从 Windows 桌面拾取(拖放)文件并移动它们。)
-
(续)。如果您想动态地更改内容,只需通过脚本将文件从现有桌面文件夹移动到另一个文件夹,然后(通过脚本)将文件从另一个文件夹移动到现有桌面文件夹。瞧 - 桌面内容被替换,而不会乱用注册表,也不会冒损坏您(或其他人)操作系统的风险。
-
不知道如何在 vbs 中执行此操作,但您可以制作一个使用 SetWindowsHookEx() 挂钩 WH_CALLWNDPROCRET 事件的 c/c++ 应用程序。然后通过检查 WM_CREATE 消息来侦听 explorer.exe 进程中新创建的窗口。最后,调用 GetWindowText() 获取名称。
标签: windows batch-file dll vbscript registry