问题标签 [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 回答
549 浏览

winapi - 在 Windows Vista 进度对话框中显示更多详细信息选项

我使用IProgressDialog接口来创建一个带有 Windows-Vista 风格的 ProgressDialog,如下所示:

我的进度对话框

在 Windows 资源管理器中复制、粘贴和移动文件时显示的对话框通常提供一个附加按钮“更多详细信息”,该按钮提供有关当前进度的更多信息。

Windows 中的进度对话框

关于 IProgressDialog 界面,是否有可能显示和使用此按钮?

此致

0 投票
2 回答
868 浏览

c# - 检查用户是否正在文件资源管理器中重命名文件 C#

我正在编写一个 C# 程序,它侦听文件资源管理器中按下的空格。当按下空格时,我创建一个 WPF 窗口,它在 WPF 窗口中显示选定的文件。

唯一的问题是,当有人在编辑文件名并按下空格以获取文件名中的空格时,也会调用此文件 Preview。

有没有办法检测用户是否正在重命名文件?


附加信息:

我知道我可以听 F2,但也可以通过用鼠标左键单击两次或右键单击文件并选择重命名来开始重命名文件。所以这不是一个好的解决方案。

技术信息(如果需要):

我使用 GetForegroundWindow 来检查前景中的窗口是否是资源管理器窗口。然后我使用 Hooks 在前台的资​​源管理器进程中监听按下的键。

要获得选定的项目,我使用 SHDocVw 和 Shell32

0 投票
1 回答
654 浏览

vb.net - vb解压文件

尝试解压缩文件时出现异常

当我删除尝试时,我收到:

附加信息:对象引用未设置为对象的实例。

我尝试将output.CopyHere(input.Items, 4)设置为output.CopyHere(input.Items, 148)但返回相同的错误。

(148是拉链内的物品数量)

0 投票
2 回答
451 浏览

vb.net - Shell32 提取可以与进度条一起使用吗?

我试图让我的程序提取一个 .zip 文件,将其内容交付到一个文件夹中,同时在进度条中显示进度。如果我有点继续让进度条工作,如果“解压缩器”可以切换到另一种形式,我也会很高兴。这是我目前提取的代码:

感谢您为我提供的任何帮助:)

0 投票
1 回答
999 浏览

java - 错误 com4j.ComException: 80004005 .\invoke.cpp:51 在打开窗口和选定项目时

我需要在 Windows 资源管理器中获取所有选定的文件和文件夹。我正在使用 com4j 访问 win Shell32 API (感谢 Tom91136,如果您需要了解如何安装和初始化 com4j ,请参考内容) 。

此代码类在 Windows 资源管理器中获取选定的文件或文件夹并打印。

我只发布了重要的部分。我正在使用计时器定期检查打开的文件。每秒调用 list() 方法。它工作正常,但如果我关闭一个窗口,我会收到以下错误。

我开始使用 try-catch 并得到了这个:

“IShellFolderViewDual3”方法有问题。

0 投票
0 回答
246 浏览

.net - interop.Shell32.dll 在 IIS8/Windows 2012 上找不到属性

此代码在开发中使用 IIS 7.5 打印文件的扩展属性,但在运行 IIS 8 的生产服务器上运行时找不到属性。

没有错误,并且属性确实出现在 Windows 资源管理器中。

0 投票
1 回答
142 浏览

c# - 托管 Web 应用程序后,使用 Shell32 解压缩不起作用

我正在使用下面的代码来解压缩我的文件。它在本地机器上完美运行。但是,当我在服务器上托管此代码时,它会完美地解压缩文件,但它会在那里等待完成某些事情。不知道为什么要等。

0 投票
0 回答
775 浏览

c# - ShellExecuteEx 函数在 Windows 10 中以不同的方式工作?

我正在尝试打开文件的信息属性。在以前版本的 Windows 中,显示属性窗口,然后在我的代码中将控制权交给下一个函数,但在 Windows 10 中,函数调用卡住,直到我通过鼠标单击关闭文件属性。
我想知道新的 Windows 版本有什么变化?
我的代码如下:

0 投票
0 回答
337 浏览

c# - 如何调试 Shell32 复制这里 Zip

我正在尝试调试一些 C# 代码,非常感谢您的帮助。

这是我的代码。

我正在使用 Shell32 将 zip 文件解压缩到目标文件夹中。

在我的服务器上使用 Visual Studio 运行此代码时,一切正常,提取的文件到达目标文件夹。

在同一台服务器上将此代码作为服务运行时,日志文件成功显示:

提取:File1.txt 提取:File2.txt 提取:File3.txt

但是,文件不会到达目标文件夹。它表明循环工作正常,但destination.CopyHere 没有。

我正在使用服务帐户来运行此代码。该帐户对源文件夹和目标文件夹具有完全的 AD 权限。该代码不会引发任何错误。

有没有办法让 destinationFolder.Copy 在这里返回错误输出?

就像测试一样,我使用自己的 Windows 用户安装了该服务,因此该过程使用我的用户帐户运行,并且在服务器上具有管理员权限。结果与使用服务帐户运行它相同。

我会很感激任何指示。

谢谢

问候

托比

0 投票
3 回答
519 浏览

winapi - IProgressDialog 问题:我是否误解了它的多线程,因为我似乎需要一个消息泵?我可以避免在它结束之前打开另一个对话框吗?

我正在尝试在 PROGDLG_MODAL 模式下使用 IProgressDialog 并且遇到了两个障碍。

首先,根据我从 MSDN 收集到的信息以及<shlobj.h>描述 IProgressDialog 的头文件中的块注释,您应该直接从您正在工作的线程中使用它,并且 IProgressDialog 将从另一个线程执行它的 UI 工作;那是,

足以启动并运行响应式进度对话框。

但是,在实践中,我仍然需要在do_more_work(); 如果我不这样做,直到循环结束后才会显示进度对话框!那么,当它说“对象然后在后台线程上处理更新”时,我是否误解了 MSDN?好的,所以我确实需要发送消息,但现在我仍然对 MSDN 所说的内容感到困惑:我可以从我的工作线程运行 IProgressDialog 的哪些方法?知道了这一点,我可以正确地重构我的代码。

然而,一个更可怕的问题是它StopProgressDialog()不会立即拆除窗户。事实上,两者都没有Release()!在非模态情况下,进度对话框会在屏幕上停留一段时间。这个特定的问题之前已经解决过;我会解决的。然而,这一次,我将进度对话框用作 UI 模式对话框。MessageBox()如果我碰巧在释放 IProgressDialog 后立即调用了另一个对话框函数,例如,那么我们将得到两个具有相同所有者窗口的模态对话框:进度对话框会自行关闭并重新启用主窗口,而消息框是仍在运行。

其他人仅通过在调用后隐藏进度对话框StopProgressDialog()来解决非模态情况。虽然这确实隐藏了窗口,但它对模态没有任何作用。基于问题提问者在链接问题末尾的假设,我还尝试在WM_NULL之后发布和发送 s StopProgressDialog()。那也没用。

最后,我尝试设置一个 WinEvents 挂钩,等待窗口被销毁并在它被销毁时触发一个事件对象。这确实有效;在MessageBox()进度对话框被销毁之前不会发生。但是,这并不完美:主窗口不会立即再次变为活动状态,并且在MessageBox()我单击主窗口的任务栏图标之前,它甚至不会出现在后台。

(即便如此,因为我无法将 LPARAM 传递给我的 WinEvents 挂钩,如果我想跨不同线程处理多个 IProgressDialogs,我需要有一个全局的窗口句柄列表来监视(及其关联的事件对象),即同步。幸运的是,出于我的目的,我不需要它。此外,以上所有内容都假设 CLSID_ProgressDialog 也是一个 IOleWindow;如果情况发生变化,那么......)

我用这种 WinEvents 方式做错了吗?我怀疑我没有MsgWaitForMultipleObjectsEx()正确调用,但如果事实证明 IProgressDialog 没有正确实现模态,那么我想我不走运:S

下面的示例程序完成了上述所有操作。我已经在 Windows 7 64 位(构建为 64 位)上使用 Visual Studio 2013 对其进行了测试。

更新嗯,经过进一步检查,当我停止进度对话框而不显示消息框时,所有者窗口也不会重新获得焦点!我猜进度对话框根本无法正确处理模态;如果我删除PROGDLG_MODAL标志一切正常。哦,好吧:/我将不得不伪造这种方式或切换到其他方式。

我可能只是在进度对话框本身上显示我的消息框,并希望未来版本的 Windows 不会带走 IOleWindow。除非有更好的方法?或者除非手动执行模态并在调用后保持进度对话框不模式StopProgressDialog()足够好(只会在StopProgressDialog()开始后报告错误),然后再次......