问题标签 [shell32.dll]

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 回答
848 浏览

vb.net - 传递给 Icon 的 Win32 句柄无效或类型错误

我的代码有以下问题。

该行代码如下:

SHFILEINFO 声明

SHGetFileInfo 声明

SHGetFileInfo 用法

运行

以下是传递给 SHGetFileInfo 的值。

错误

当上述值被传递给 SHGetFileInfo 时,它返回 0 值,从而使 hIcon = 0。

当它到达

发生以下错误

你们能帮我确定是什么问题吗?

谢谢

0 投票
1 回答
270 浏览

c# - 为什么使用 ExtractIconEx,返回索引超出范围,x 在异常时跳高 10 个值?

我编写了以下代码,旨在返回一个List<Icon>文件中找到的所有图标的列表。

当我使用如下代码时:

这是我单步执行代码时得到的结果:

count是 29

x达到 28 时,抛出异常。x 的值跳到 39

这没有意义,因为这意味着当返回 29 的计数时,实际上有 27 个图标使第一个图标的值为 -1。如果计数从 0 开始,则 29 - 1 = 28,并且由于 28 小于count(29),因此不应引发异常,因为它在边界内。

当 api 返回(可能)此文件中正确数量的图标时,为什么此代码会导致越界错误?——除了改变我还能做x < count什么x < (count - 1)

0 投票
2 回答
1962 浏览

c# - 引用 Shell32.dll?

我没有 .NET 4.5 来解压缩 zip 文件,所以我使用Shell32的是这样.NET 4.5 。但是当我像这样引用dll时:

我收到此错误:

更新:没有 Visual Studio,只需csc.exe.

0 投票
1 回答
448 浏览

vb.net - VB.net 或 Windows API:如何找出文件资源管理器使用的图标?

我目前正在使用 VB.net 开发 Windows 桌面应用程序,我希望直接集成文件和文件夹浏览界面,即用户不必打开文件浏览器对话框来选择文件。

我的文件浏览器应该类似于最初的 Windows 文件浏览器,至少因为它对最常见的位置使用相同的图标。例如,我想包含带有适当图标的“收藏夹”文件夹(请注意,这不是 IE 收藏夹文件夹,而是当您shell:links在文件资源管理器的地址栏中键入时出现的文件夹)。

我的问题是获取图标。到目前为止,我已经为 Windows API 的一些函数编写了一个包装类,特别是SHGetKnownFolderPathSHGetFileInfo. 我的方法如下:

1)SHGetKnownFolderPath用于获取相应位置的完整路径(取决于 Windows 版本和本地化)。这部分按预期工作。例如,在我的系统(W7 Pro x64)上,SHGetKnownFolderPath使用相应的 rfid 查询时返回“C:\Users\Administrator\Links”。

2)SHGetFileInfo用于获取1) 中获得的路径的Windows 认为默认图标的图标。这部分在技术上也可以工作,但是返回了错误的图标- 错误的意思是它是 Windows 文件资源管理器用于同一位置的另一个图标。

我已经在四个不同的位置(MyLibraries、MyFavorites (Links)、MyComputer、MyNetwork)进行了尝试。MyLibraries 的图标是预期的,其他三个与 Windows 文件资源管理器使用的图标完全不同。

所以我有一些问题

1) 有什么方法可以检测标准 Windows 文件资源管理器对某些文件夹使用哪些图标,例如“收藏夹”(我机器上的 C:\Users\Administrator\Links)?我会对通用解决方案感兴趣(即适用于此处描述的所有位置的解决方案)。

2)如果没有这种方法,我会找出shell32.dll中所有感兴趣的图标的数量(索引)(实际上,目前只有几个)。我可以确定这些索引将来不会改变吗?

3)根据这个文件,我必须CoInitialize在使用前打电话SHGetFileInfo。我相信 .NET 框架会在启动之前自动为主线程执行此操作,因此我还没有自己完成(应用程序的开发刚刚开始,目前只有一个线程)。

我认为丢失的呼叫CoInitialize不能成为“错误”图标的原因。如果我在这里错了,请告诉我。

一个潜在的解决方案可能是使用 .NET 语言或本机 Windows API/SDK。只要有某种方式(甚至是极其复杂的方式)可以在 VB.net 中使用该解决方案,我就会很高兴。

0 投票
3 回答
1260 浏览

windows - NOTIFYICONDATA 结构中使用的 NOTIFYICON_VERSION 和 NOTIFYICON_VERSION_4 之间的区别?

在 Windows 中添加系统托盘图标时,我们可以Shell_NotifyIcon()通过NOTIFYICONDATA结构传递两个版本的 API。这两个 API 之间有细微的差别,这些都没有在 MSDN 上的任何地方列出。我花了一些精力来找出其中的一些差异,我现在将分享这些差异。总是欢迎对答案进行改进/补充。

PS:这个问题纯粹是为了分享我在过去几天尝试Windows DPI缩放所学到的东西。

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 回答
203 浏览

.net - 如何解决windows-10 webbrowser shellfolderview 滚动Bug?

我使用 WebBrowser-Control 来查看文件夹的内容。

在 Windows 10 上,当所选项目从底部移动到顶部时,重新排序内容后会出现显示错误。

让我们重现:

  1. 启动干净的winform或wpf解决方案
  2. 将 WebBrowser-Control 拖到里面
  3. 添加代码以导航到您的自定义文件夹,例如:

    public Form1() { InitializeComponent(); webBrowser1.Navigate(@"C:\tmp\yourfolder\"); }

  4. 启动应用程序,如果需要,切换到详细信息视图(右键单击 - 上下文菜单) WebBrowser 控件在 DetailView 中显示本地文件夹

  5. 按名称列排序,选择第一个条目

  6. 按名称列排序以将项目移动到末尾

所选项目滚动到底部

  1. 再次按名称列排序以将所选项目移至顶部

显示滚动条、窗口和列表不同步

你会看到,滚动条、窗口和列表不同步。滚动条向上移动,但项目没有移动到列表中的第一个位置。此外,该项目仅在鼠标悬停后可见。稍微拖动滚动条也不能治愈这种不当行为。

有人知道如何克服这个问题吗?我正在考虑通过调用 InvalidateRect 或向挂钩的 SysListView32 发送 WM_PAINT 消息来强制 shellfolderview 重绘,但没有成功。

是的,我想显示带有详细信息视图的列表:-)。

如何解决这个问题?

0 投票
0 回答
990 浏览

c# - 从具有透明度的 DLL 中提取图标

我有以下 C# 代码从特定 DLL 中提取具有特定索引的图标:

这工作正常。有点。因为它不处理透明度。

看一看:

在此处输入图像描述

我怎样才能解决这个问题?


编辑

归功于@rbmm

问题不在于上面的代码,而在于我用来从 转换IconBitmap. 我正在使用Bitmap.FromHIcon,它显然丢弃了透明度。我现在使用自定义方法在这两者之间进行转换,它可以完美地工作。

0 投票
1 回答
137 浏览

c# - 在使用 Shell32DLL SHFileOperation/SHFILEOPSTRUCT 时,跨驱动器移动系统文件导致 fAnyOperationsAborted 为 TRUE

在使用 Shell32DLL SHFileOperation 进行文件操作时,我遇到了一个与跨驱动器移动系统文件相关的问题(例如,c:\ 到 d:)。

移动时,系统对话框会提示用户“您确定要移动此系统文件吗?[Yes, Skip, Cancel]”

下面是我的move操作的核心精髓:

操作返回 0x0 即成功,但返回的 fAnyOperationsAborted 为 TRUE,即使用户接受移动系统文件。在这种情况下,我希望操作返回 fAnyOperationsAborted=FALSE。

问题是我无法区分用户接受、跳过或取消操作,因为 fAnyOperationsAborted 在所有三种情况下都是 TRUE。

如何解决这个问题?

MSDN 关于 SHFileOperation 函数: https ://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx

0 投票
2 回答
272 浏览

c# - 为什么 C# 允许从“new Shell32.Shell()”中的接口构造对象?

我知道在 C# 中通常不能创建抽象类或接口的实例。有人可以帮我理解这段代码(它编译时没有任何错误)。

Shell32.Shell是来自“shell32.dll”的接口

我尝试了以下方法,但没有编译:


更新:

为了使它工作,我只需要添加ComImport属性并更改 co-class(我不能选择 Shell32.ShellClass)。

多谢你们!