问题标签 [windows-shell]
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.
c++ - IContextMenu3 HandleMenuMsg2 从未被调用
IContextMenu3
我正在尝试实现一个扩展and的 shell 扩展IShellExtInit
,并且我正在使用HBMMENU_CALLBACK 方法部分中描述的方法插入菜单项,但在我的项目中,该方法HandleMenuMsg2
或HandleMenuMsg
从未调用过。
谁能解释一下接听HandleMenuMsg2
电话需要什么?
我的 ATL 对象是这样实现的:
我正在插入 nanoANT 页面中描述的菜单项:
有了这一切,菜单条目出现在资源管理器上下文菜单中,但没有显示图像,这两种方法HandleMenuMsg
都HandleMenuMsg2
不会被调用,而且我正在测试的系统是 WinXP(在 vista 中一切正常,因为我们使用hbmpItem
)。
我错过了一些初始化或什么?谁能解释我?
谢谢
c# - 拖放动态创建的快捷方式
我有一个 C# 应用程序,它创建快捷方式来启动具有特定参数和初始目录的其他程序。我希望用户能够从 Windows 窗体中拖动快捷方式并将其拖放到任何相关的位置,例如桌面、开始菜单等,但我真的不知道如何处理,谁能指出我正确的方向?
我已经看到一些使用 PInvoke 和IShellLink的示例,或者像这里一样阅读 SO 上的答案,这已经有助于创建快捷方式并将它们保存在 .lnk 文件中。我假设当用户启动拖动操作时,我必须在通话中交出数据DoDragDrop()
,例如通过处理MouseDown
信号。据我所知,我想我需要确切地知道目标期望接受丢弃的类型,以及如何序列化快捷方式,但找不到关于该部分的任何信息。
也许另一种选择是获取放置的位置,并从我的应用程序中对其进行管理,但是我又对如何做到这一点一无所知。
框架版本目前是3.5,我只考虑Windows平台。
在此先感谢您的帮助!
更新/解决方案:
使用上面提到的ShellLink 代码DataObject
创建一个临时的快捷方式文件,我只是简单地用于拖放,如下例所示:
如果您考虑 PInvoke 代码(此处未显示),则相当复杂,我仍然需要使用目标名称创建这个临时文件。如果有人知道...呃,捷径,欢迎!也许通过移植John Knoeller提供链接的代码(谢谢!)。
vba - VBA Zip File error
I am using code similar to the below to add some files to a zip folder:
This works fine most of the time, but sometimes I get an error:
"(Compressed (zipped) Folders Error) Cannot create output file". This error is raised asynchronously outside of my VBA code and as such I cannot trap it to take remedial action.
If I enter break mode and step back to:
then the file is added correctly.
I am guessing that there is some kind of lock either on the compressed folder or the source file that is causing this problem, but I am unsure as to how to check this. I should note that the files are being added are pdf files created from Microsoft Access 2007 and we are using the fully qualified paths and the code runs as follows creating up to 10 pdfs per zip file:
Create Zip
Run this loop:
Any idea how to either fix this or trap the Cannot create output file error? Thanks
c# - 如何通过 C# 重现“在文件夹中显示”/“查找目标”
使用 Chrome 时,如果您下载文件,则可以选择一个选项(在文件夹中显示),该选项将打开包含目录并突出显示该文件。同样,如果您查看快捷方式的属性,您可以为相同的功能选择“查找目标”按钮。我尝试了无数次搜索,并查看了Shell Functions 上 MSDN 条目的相当一部分,但无济于事。我认为这只是一个简单的 API 调用或一系列调用,但我没有找到它。
c# - Shell 菜单项分隔符
我的问题可能是这里重复的问题,但即使在谷歌搜索之后我还没有得到解决方案。
我为文件添加了一个 shell 上下文菜单项,即当您在资源管理器中右键单击文件时,菜单会显示我的自定义菜单项。
我用过 -
HKLM\Software\Classes*\shell\myappname HKLM\Software\Classes*\shell\myappname\command
但我不能做的是在该上下文菜单中添加一个分隔符。
我正在使用 C# 2005 创建我的 Windows 应用程序。
有人可以帮助解决我的问题。
感谢您分享您宝贵的时间。
c# - 从 .NET 以编程方式访问“打开方式”Windows Explorer 菜单列表
在 Windows 资源管理器中右键单击文件时,“打开方式”菜单项会根据单击文件的文件类型显示可用应用程序列表。
以这张图片为例:
(来源:magerquark.de)
现在,我希望能够以编程方式从 C# .NET 2.0 应用程序中读取给定文件扩展名/类型(例如“png”)的应用程序列表。
例如
问题:
有可能得到这个列表吗?
windows - 如何显示“发送至”和“打开方式”上下文菜单?
前段时间我询问如何在 Delphi 中为某个文件弹出 Windows 上下文(右键单击)菜单。但是,即使一切正常(几乎)正常,“发送到...”和“打开方式...”子菜单也没有任何项目,即使当我在资源管理器中右键单击相同的文件名时,它们工作正常。(例如,“发送至...”有“桌面(创建快照)”、“电子邮件收件人”等)。
我怎样才能让这些菜单出现?
batch-file - 将文本发送到 Windows 控制台应用程序的标准输入
我正在尝试编写一个 .bat 文件来自动化一些 shell 命令。大多数命令都很简单,我可以直接将它们放入批处理文件中,但是有一个命令不是采用命令行参数,而是希望您使用“标准输入”键入您想要的选项。我不确定那是什么意思。有人可以告诉我该怎么做吗?我想输入的文本是目录中一个文件的内容:“options.txt”,我想将它与批处理文件“$(additionaloptions)”中的变量连接起来。
有道理?
c# - 以编程方式执行 Windows 资源管理器上下文菜单项
当我右键单击某个项目时,是否有一种一致的、万无一失的方法来获取资源管理器显示的上下文菜单项?我不想显示菜单,我只想在后台解析项目并以编程方式执行它们。
我尝试了 IShellFolder、IContextMenu 和其他 COM 接口的各种组合,但我找不到任何可以始终如一的工作。
如何以编程方式执行 Windows 资源管理器上下文菜单项?
c++ - 众所周知的虚拟文件夹 GUID 是什么?
似乎有一些虚拟文件夹具有与之关联的 GUID(控制面板、桌面)-
::{00021400-0000-0000-c000-000000000046} // 桌面
这些大火是在哪里定义的?它们什么时候使用?
我想要的是一种方法,让字符串代表一个虚拟文件夹,没有任何歧义。
例如,如果我要为桌面创建一个 PIDL,则显示名称将返回为“C:\Users\Steve\Desktop”。
好吧,目前确实如此 - 但它并不是真正正确的文件夹。我可以在资源管理器中导航到该文件夹,它包含我桌面上的部分文件,而不是整个桌面。
我想要的是一种将该位置编码为字符串的方法,该字符串将始终导航到虚拟桌面文件夹(具有其所有内容的文件夹,而不仅仅是一些内容)。
有谁知道此类 GUID 的最终列表?或者我如何将给定的 PIDL 转换为一个?
我尝试了 SHGetDisplayName(pidl, SHGDN_*) - 桌面 pidl 的每个版本都给了我一个简短的“桌面”或“C:\Users\Steve\Desktop”。(显然,我是在“史蒂夫”帐户下登录的)。
想法/评论/指针?
编辑:所以看来我可以使用下面给出的答案来获得已知文件夹 GUId 的列表。但是有谁知道如何以编程方式从 PIDL -> 已知文件夹 GUID 转换?我假设我可以 ParseDisplayName("::{guid}") 获取 PIDL,但是有没有办法获取 GUID?
EDIT2:我仍然找不到以编程方式访问 GUID 的方法。但是,出于我的目的,我正在记录最初用于创建对象的 CSIDL_xxx,然后将其写出并在稍后恢复它,然后通过 CSIDL 创建一个 PIDL,它保留其正确的身份(即它不不会降级为“C:\Users\\Desktop”,而是生成一个真正指向虚拟桌面的 PIDL。
对我来说,诀窍是始终使用 CSIDL->PIDL,从不使用介于两者之间的字符串。CSIDL->PIDL->string->PIDL = 退化为非虚拟路径。
感谢大家的帮助-如果有人找到有关该主题的更多信息并将其发布,我将继续寻找,我会很感兴趣!;)