标签: windows-shell

如何执行/ShellExecuteEx/InvokeCommand ITEMIDLIST 指向 Shell 对象?

我正在构建一种码头,我很难找到如何保存“运行”、“搜索”、“帮助”、“打印机”等内容并在此之后重新打开它们。

我试过这个:

CComPtr<IShellFolder> pDF;
SHGetDesktopFolder(&pDF);

LPITEMIDLIST pidlPrintersAndFaxes=0;
hr=pDF->ParseDisplayName(0, 0, L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}", 0, &pidlPrintersAndFaxes, NULL);

CComPtr<IShellFolder> pSF;
hr=pDF->BindToObject(pidlPrintersAndFaxes, 0, IID_IShellFolder, (void**)&pSF);

LPITEMIDLIST pidlPrinter=0;
hr=pSF->ParseDisplayName(0, 0, L"PDFCreator", 0, &pidlPrinter, NULL);

CComPtr<IContextMenu> pPrinterCtxMenu;
hr=pSF->GetUIObjectOf(0, 1, (LPCITEMIDLIST*)&pidlPrinter, IID_IContextMenu, 0, (void**)&pPrinterCtxMenu);

CMINVOKECOMMANDINFO cmd={0};
cmd.cbSize=sizeof(CMINVOKECOMMANDINFO);
cmd.lpVerb=MAKEINTRESOURCE(0);
cmd.nShow=SW_SHOWNORMAL;
hr=pPrinterCtxMenu->InvokeCommand(&cmd);
Run Code Online (Sandbox Code Playgroud)

无论我在最后一行尝试 InvokeCommand 什么,总是返回 E_INVALIDARG。我用 ShellExecuteEx 试了一下,得到了同样的错误。

我尝试了所有可能的动词。

我试图枚举动词并得到 E_INVALIDARG。

我不能让它工作,但在正常的文件系统路径上,比如文件夹上的“c:\”和 clsid。我错过了什么 ?

com shellexecute windows-shell win32ole

2
推荐指数
1
解决办法
971
查看次数

我如何开始编写Windows shell扩展?

我正在考虑编写一个shell扩展,所以当单击一个文件时,可以对它执行一个动作.(像任何其他上下文菜单:))

在上下文菜单中插入新菜单项并对一个或多个文件执行操作所需的最小值是多少.比较的例子是我选择了10个文件和Send to Zip.

我读到编写一些非托管代码是必需的,但我对c ++非托管代码的知识大约为零所以我想尽可能少地在Windows上下文菜单中获取菜单项(文件>右键单击).之后,我想调用一个C#控制台应用程序来进行主处理,那么是否可以从非托管代码调用ac#console app?

另外,我需要什么类型的visual studio项目来创建Windows Shell程序?我可以选择哪种项目类型:

  • Win32控制台应用程序
  • MFC应用程序
  • Win32项目
  • ATL项目
  • MFC DLL
  • CLR控制台应用程序
  • 班级图书馆
  • Makefile项目
  • MFC ActiveX控件
  • Windows窗体控件库

干杯

c# c++ windows windows-shell

2
推荐指数
1
解决办法
3100
查看次数

如何以编程方式将文件夹添加到用户的收藏夹(在Windows资源管理器中)?

我正在寻找一种方法,以编程方式将文件夹添加到Windows资源管理器中的收藏夹.它的Windows资源管理器特定,基于这个项目:http://www.codeproject.com/Tips/132804/Open-folders-using-a-Run-Command

到目前为止,我已经尝试过Process Monitor并搜索注册表,但我似乎无法找到我的Windows资源管理器收藏夹regedit.


Microsoft已在Windows 8中对此进行了更改,因此我已相应地标记了我的问题.请参阅Win8及其他详细信息的标记答案中的注释.

c# favorites windows-shell windows-7

2
推荐指数
1
解决办法
9630
查看次数

哪个Windows API控制文件名编辑?

当您在Windows Shell中按F2编辑文件名时,可以理解一组有限的编辑键 - 例如CTRL +箭头键,Home,End,CTRL + X. 例如,当您键入CTRL +右箭头时,光标将在短划线后停止,但不会在一段时间内停止.这些操作是否可以自定义,如果可以,如何?

任何与您没有直接关系但您认为可能有助于该主题的其他信息也将受到赞赏.

winapi windows-shell

2
推荐指数
1
解决办法
329
查看次数

使用delphi中的shell循环遍历目录中的文件

我想遍历给定目录中的所有文件并返回其版本号和exe名称.我已经尝试深入挖掘外壳以确定是否可以将其关闭,但是我无法找到解决方案.任何提示将不胜感激.

delphi shell windows-shell delphi-2010

2
推荐指数
1
解决办法
1917
查看次数

如何使用shell扩展dll C++在上下文菜单之间添加分隔符

我使用Shell扩展DLL(C++)创建了一个上下文菜单.当用户单击任何资源管理器文件夹时,将显示新创建的上下文菜单,其中包含子菜单.我想在子菜单之间添加一个行分隔符

winapi windows-shell shell-extensions

2
推荐指数
1
解决办法
2647
查看次数

了解C++ VK_热键组合值

我一直在使用IShellLink界面,并对如何映射热键组合感到困惑.

仅应用单个热键时,返回值对应于记录的虚拟键代码; 例如F5 == 0x74

但是,当使用组合时,会返回一个我没有解密的无证值; 例如CTRL + ALT + A == 0x641

使用什么操作来组合多个虚拟键码?

c++ windows hotkeys windows-shell

2
推荐指数
1
解决办法
2189
查看次数

Windows批处理:在后台运行进程并等待它

我需要从批处理作业中启动2个后台进程,然后等待它们.Unix shell模拟是:

myprocess1 -flags1 &
pid1=$!

myprocess2 -flags2 &
pid2=$!

wait ${pid1}
wait ${pid2}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

windows batch-file windows-shell

2
推荐指数
1
解决办法
1万
查看次数

跨越COM方法边界的C++异常会发生什么?

在基于COM的Windows资源管理器外壳扩展中,使用从COM接口方法HRESULT返回的返回值表示错误条件.

但是,如果一个COM接口方法的体内(或C++对象的方法中直接或间接调用COM方法)C++异常(例如std::runtime_error,std::bad_alloc,std::invalid_argument等)被抛出,请问究竟怎样呢?

这只是一个未定义的行为吗?

或者C++异常以某种方式转换Win32结构化异常(SEH)
如果是这样,转换过程的机制是什么?

c++ com winapi exception windows-shell

2
推荐指数
1
解决办法
96
查看次数

为特定文件扩展名注册Windows shell命名空间文件夹视图扩展名

我有一些用于文件夹视图的Windows命名空间shell扩展.我想用它来与具有特定文件扩展名的文件进行用户交互.这些文件是由我的其他应用程序创建的.

如何在Windows注册表中正确注册它.我应该为我的扩展名和扩展名的CLSID或其他东西添加一些文件扩展名的密钥吗?

c++ windows registry explorer windows-shell

2
推荐指数
1
解决办法
705
查看次数