问题标签 [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 投票
2 回答
468 浏览

c# - 如何使用 C# 从回收站中删除多选项目?

在此处输入图像描述

如何通过C#或windows api删除多项,我已经搜索了很长时间,没有解决方案。我在Shell32.dll中使用FolderItemVerb一个一个地删除文件,但它会同时弹出一个对话框。如果您知道如何解决此问题,我将不胜感激。谢谢你。

0 投票
1 回答
429 浏览

winapi - SHChangeNotify 与 SHCNE_RMDIR 行为在 Windows 7 和 Windows 10 之间不一致

概述

我使用SHChangeNotifywithSHCNE_RMDIR来通知 shell 已从我的shell 命名空间扩展中删除的文件夹。我的期望是,这将导致其文件夹视图导航到已删除文件夹(或其任何子文件夹)的任何资源管理器(或其他 shell)窗口被导航到已删除文件夹的父文件夹。此预期行为正在 Windows 10 上发生。但是,在 Windows 7 上,这些窗口被导航到已删除的文件夹。

问题

Windows 7 上的这种行为是否是一个错误,和/或我可以做些什么(没有针对 Windows 7 的特殊代码)来获得两个操作系统的相同行为?

重现问题的详细步骤

以下是如何从头开始创建和观察问题的演练。这涉及使用称为Shell Instance Object的“内置”Microsoft 命名空间扩展(而不是我真正的命名空间扩展)。为了简单起见,我使用它来表明它与我的特定命名空间扩展无关。这个示例命名空间扩展所做的只是在“我的电脑”下创建一个图标,该图标将浏览到您的 %TEMP% 目录。

  1. 安装命名空间扩展并在“我的电脑”下注册。为此,请在注册表中输入以下内容:

    这是一个 .reg 文件,它将为您自动执行该操作:

    以下 .reg 文件将允许您轻松删除上述注册表项:

    /li>
  2. 此时,当您打开资源管理器窗口并浏览“我的电脑”时,您应该会看到“我的命名空间扩展”。浏览它应该会显示您的 %TEMP% 目录文件夹/文件。

  3. 在您的文件夹中创建一个%TEMP%名为FolderToRemove. 在其中FolderToRemove创建一个名为subFolder.

  4. 打开 3 个资源管理器窗口并浏览到以下位置:

    • 我的电脑\我的命名空间扩展
    • 我的电脑\我的命名空间扩展\FolderToRemove
    • 我的电脑\我的命名空间扩展\FolderToRemove\subFolder

    显示执行 SHChangeNotify 之前的 3 个资源管理器窗口的图像

  5. 在 Windows 7 上,执行以下 C++ 代码:

    /li>
  6. 执行上述代码后,您会注意到唯一更改的资源管理器窗口是最初导航到My Computer\My Namespace Extension\FolderToRemove\subFolder. 请注意,它现在指向My Computer\My Namespace Extension\FolderToRemove

    执行 SHChangeNotify 后显示 Windows 7 的图像

  7. 期望两个资源管理器窗口已更改,以便它们都被导航到My Computer\My Namespace Extension(已删除文件夹的父文件夹)。这是预期行为的图像(这是在 Windows 10 上发生的情况): 执行 SHChangeNotify 后显示预期结果的图像

补充说明

  • 我发现我可以通过SHChangeNotify. 例如:

    但是,当我在 Windows 10 上执行此代码时,它当然会导致将窗口导航回My Computer不希望的位置。如果我采用这种解决方法,我将需要针对不同操作系统的不同代码。

0 投票
0 回答
277 浏览

c# - 阅读视频拍摄日期

是否可以读取视频的拍摄日期而不是创建日期或修改日期...我试图检查视频详细信息,但我总是看到拍摄日期为空

0 投票
0 回答
95 浏览

c# - 在c#中查询桌面选定的项目不返回任何内容

我在堆栈溢出时在这里找到了这段代码,并将其修改为返回一个列表而不是一个数组列表。每当我按下一个键时都会调用该函数,虽然该函数被调用正常,但 SelectedItems() 每次似乎都是空的,即使我在桌面上突出显示了一些东西。我也在资源管理器窗口中尝试过,结果相同。有谁知道为什么它什么都不返回?stackoverflow 上的其他人似乎能够让它工作我的有什么问题?

0 投票
1 回答
6518 浏览

windows - Iterating over an array batch script

While following a tutorial for iterating over arrays in a batch script I didn't get the same result:

enter image description here

#xA;

When I run this command I get:

enter image description here

0 投票
0 回答
906 浏览

vb.net - 无法将“system.__comObject”类型的 COM 对象转换为接口类型“shell32.shell”

我在win 7和xp中运行我的项目,但是有一条错误消息,在这个项目中我使用shell32.shell复制和提取自动exe文件,shell32.shell在windows 7和xp中不起作用吗?如果可以,请建议sheell32.shell可以运行

错误信息

0 投票
1 回答
179 浏览

winapi - FTP PIDL 的 SHGetNameFromIDList 失败

如果我在 Windows 上添加一个 FTP 网络位置,它会创建一个指向该位置的 .lnk 文件。如果我通过IShellLink打开链接,获取其IShellFile目标,并将其绑定到IShellFolder ,我可以使用IShellFolder::EnumObjects枚举远程位置上的文件(登录后),并返回正确的文件。

但是,如果我尝试通过SHGetNameFromIDListIShellItem::GetDisplayName获取那里的任何文件的名称,则该函数将失败并显示0x80070057(无效参数)HRESULT。我确定 PIDL 是有效的,因为我可以构造IShellItem,并且它的大小是 72 字节,但是任何获取路径的尝试都失败了。访问我在IShellItem2上从 PIDL 构造的任何我能想到的属性也会失败,并且只需调用SHGetPathFromIDList

那么,我如何从 PIDL 中获取任何有意义的名称,最好是在 PIDL 中SIGDN_PARENTRELATIVEPARSING?为什么所有这些操作都失败了?我认为任何 PIDL 至少是一个文件路径或一个 CLSID,但是这个 PIDL 根本无法查询任何东西。

我知道访问 FTP 有很多更好的解决方案,但我一般对 Shell32 有这个问题,而不是专门针对 FTP。

我还通过ILSaveToStream将 PIDL 转换为字节,我可以看到文件名肯定在那里。

0 投票
3 回答
749 浏览

c++ - DeleteFile (kernel32.dll) 与 DeleteItem (shell32.dll)

这两个功能有什么区别?

0 投票
1 回答
543 浏览

c# - 在 C# 中使用 SHAssocEnumHandlers

我正在努力在 C# 中调用 WinAPI SHAssocEnumHandlers。

当调用 SHAssocEnumHandlers 我只得到一个

“意外错误:HRESULT:0x80004005 (E_FAIL)”

堆栈跟踪显示了例外情况

我想我可能错过了一些实现。但我不知道是什么。

更新 1

此错误仅在 Windows 7 上发生。在 Windows 10 机器上它工作正常。(在各种win7和win10机器上测试过)

0 投票
2 回答
202 浏览

c# - 使用 c# 和 shell32 递归 android 设备

因为我想递归我使用 Shell32 的任何文件夹的完整结构,它可以连接到字母驱动器 c:\;d:\ 等以及连接的没有字母的设备,例如 Android 平板电脑。

我的问题是我无法从 FolderItem 中提取文件夹进行递归。

谢谢。