问题标签 [shell32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6843 浏览

c# - 再次引用 shell32,C# Visual Studio

嗯。好的,在重新访问 PInvoke 之后,我确定我不太明白:-/(刚刚问了这个问题

让我说明我需要处理的代码。当我使用“添加引用--> COM--> Microsoft Shell Controls and Automatation”时它可以工作......但遗憾的是它在我的项目中放置了一个如下所示的引用:“C:\Users\Tim\Documents\Visual Studio 2008\Projects\Wing\FileWing\obj\Debug\Interop.Shell32.dll"

我正在翻找回收箱,寻找我想要回收的物品。有没有办法不通过 PInvoke 来完成这项工作?或者获取对 system32/shell32.dll 的引用,让我在运行时使用此代码?

0 投票
1 回答
471 浏览

c# - ShGetFileInfo 因目录异常而调用

我有一个简单的文件浏览器,在那里我显示文件和文件夹,

通过(用于目录)获得

它可以 100% 正常工作,但我注意到一个奇怪的地方 - 如果我尝试获取目录的图标,但指定 FILE_ATTRIBUTE_NORMAL 而不是 FILE_ATTRIBUTE_DIRECTORY 但它对目录做了奇怪的事情 - 普通文件夹有“未知文件类型白皮书”图标,回收bin 有 VLC 图标等。SVN 下的目录有适当的覆盖,但基本文件图标(白纸)。

我知道目录的基本图标现在是未知文件之一,但为什么有些文件夹的图标完全奇怪?Config.MSI 有安装程序图标,回收站有 VLC 图标(wtf?!)等。shell 函数对这个参数有什么作用?它究竟获得了什么图标?

同样,这不是问题,我只是好奇。

0 投票
1 回答
265 浏览

windows - Windows 2000 上的 ILClone

有人知道 Windows 2000 上的 ILClone() 函数有什么问题吗?是否完全支持?MSDN 说它可以在 Windows 2000 上运行,但我有一个用户报告说,由于该功能,我的程序将无法在 Windows 2000 上运行。

编辑:我能够获得一个 Win2K 系统,我可以确认这个问题。

安装的 Shell32.dll 版本为5.0.3700.6705。运行程序时显示的错误信息是:The procedure entry point ILClone could not be located in the dynamic link library SHELL32.DLL

0 投票
1 回答
2744 浏览

c# - 为什么我在通过 Shell32 读取公共快捷方式时得到 E_ACCESSDENIED?

我正在尝试读取 C# 4 应用程序中所有桌面快捷方式的目标。Windows 桌面上的快捷方式可以来自多个位置,具体取决于快捷方式是为所有用户创建的,还是仅为当前用户创建的。在这种特定情况下,我试图从公共桌面读取快捷方式,例如从 C:\Users\Public\Desktop\shortcut.lnk。

代码是这样的(路径是一个包含 lnk 文件路径的字符串):

最后一行抛出 System.UnauthorizedAccessException,表示不允许读取快捷方式文件的内容。我已经尝试过用户私人桌面(c:\Users\username\Desktop)上的快捷方式文件,效果很好。

所以,我的问题是:

(1) 当我作为用户可以清楚地读取内容时,为什么我的应用程序不允许 /read/ 从代码中读取快捷方式?

(2)有没有办法解决这个问题?也许为应用程序使用特殊的清单文件?

而且,顺便说一下,我的操作系统是 Windows 7,64 位。

好起来

-H-

0 投票
2 回答
1230 浏览

.net - 实现托管属性处理程序外壳扩展的正确方法是什么?

现在 .NET CLR 4.0 支持并行 (SxS) 操作,现在应该可以在托管代码中编写 shell 扩展。我已经尝试过这个并成功编写了一个实现 IPropertyStore、IInitializeWithStream 和 IPropertyStoreCapabilities 的属性处理程序。

该处理程序工作正常,并在通过资源管理器浏览文件时按预期调用。它还可以在预览面板和文件属性“详细信息”面板中显示自定义属性。

但是,当我尝试在预览面板中编辑属性,然后单击“保存”时,我收到“正在使用的文件”错误,指出该文件已在 Windows 资源管理器中打开。

一些花絮:

  1. 当资源管理器调用 IInitializeWithStream.Initialize 时,STGM 属性设置为 STGM_SHARE_DENY_WRITE。
  2. 并且资源管理器从未调用 IPropertyStore.SetValue 或 IPropertyStore.Commit。
  3. 我看到在相同文件属性的不同线程上重复调用我的处理程序。

那么我需要更改(或在注册表中设置)以使属性保存工作?

更新:

多亏了本,我已经成功了。“困难的部分”(至少对我而言)是理解 COM 互操作永远不会在我的 PropertyHandler 上调用 Dispose 或 Finalize。这使我处理的文件保持打开状态,直到 GC 运行。

幸运的是,“属性处理程序协议”的工作原理是,当为 ReadValue() 调用 IInitializeWithSream.Initialize() 时,streamMode 为 ReadOnly,当为 SetValue() 调用时,streamMode 为 ReadWrite 并且将调用 Commit()在末尾。

0 投票
1 回答
1482 浏览

delphi - 在网络共享上移动文件时的性能问题

我正在编写一个可以在网络共享上复制文件的应用程序。通常文件在同一个物理硬盘驱动器上移动。如果您使用 Windows 资源管理器对此进行测试,此操作将执行得非常快。看来,Windows 知道相同的位置并进行真正的移动,而不是复制和删除(这会更慢)。

假设您要复制一组文件:

目的地例如:

该应用程序使用 Windows Shell API(我在 Delphi 中编写了该应用程序,但其他语言的问题也应该相同):

不幸的是,此代码执行“复制和删除”,这在大文件或文件很多的情况下要慢得多。我怎样才能避免这种情况?有没有办法告诉移动操作,文件夹在同一个硬盘上?也许网络路径还有其他一些符号。

还是 Windows Explorer 使用了不同的 API 函数?

做一个简短的比较:

  • 文件数:260
  • 每个文件的文件大小:11 kB
  • 进入资源管理器的时间:2 秒
  • 使用 SHFILEOPERATION 移动的时间:20 秒

我在我的开发系统上使用 Windows 7,但它也应该在 XP 上工作,所以我不能使用新的 IFileOperation 界面。

亲切的问候

0 投票
2 回答
14014 浏览

.net - 如何以编程方式更改 .lnk 以更改其目标?

有什么方法可以打开 Windows 快捷方式(.lnk 文件)并更改它的目标?我找到了下面的代码片段,它可以让我找到当前的目标,但它是一个只读属性:

我找不到任何东西来改变目标。我唯一的选择是创建一个新的快捷方式来覆盖当前快捷方式吗?..如果是这样,我该怎么做?

0 投票
1 回答
1853 浏览

.net - Shell32.dll .NET 接口依赖于操作系统

我想找到用户程序菜单中列出的每个应用程序。我使用以下例程:

这在 Windows 7 x64 上运行良好。但不幸的是,在 Windows XP x86 上,该Shell32.Shell对象没有声明该Shell32.Shell.Target属性。如何使此代码在 Windows XP 上运行?

0 投票
1 回答
504 浏览

winapi - 安装后如何刷新资源管理器以在 VC++ 中显示已安装的驱动器?

我正在使用驱动程序代码通过 NPAddConnection3 安装 FTP 驱动器,现在问题是当我安装它已安装的驱动器时,但我需要终止资源管理器并手动重新启动以查看已安装的驱动器。

如何解决这个问题呢 ?我如何在不杀死资源管理器的情况下查看已安装的驱动器?提前致谢。

0 投票
1 回答
286 浏览

.net - 属性处理程序外壳扩展

有人知道如何实现属性处理程序外壳扩展吗?我主要对.NET 实现感兴趣。