Articles of Windowsshell

如何判断操作系统在Windows XP之后是否没有默认文件扩展名关联?

回到Windows XP的日子,可以使用下面的代码来判断扩展是否存在文件关联: TCHAR buffPath[MAX_PATH] = {0}; DWORD dwszBuffPath = MAX_PATH; HRESULT hR = ::AssocQueryString( ASSOCF_NOFIXUPS | ASSOCF_VERIFY, ASSOCSTR_EXECUTABLE, _T(".weirdassextension"), NULL, buffPath, &dwszBuffPath); if(hR != S_OK && hR != E_POINTER) { //Association does not exist } 但是从Windows 8开始, AssocQueryString API会返回S_OK并且如果没有find任何东西, buffPath设置为类似于C:\WINDOWS\system32\OpenWith.exe东西。 现在有更好的方法来确定文件扩展名没有壳牌协会? PS。 我不想只比较文件名到OpenWith.exe 。 如果有一个合法的可执行文件被称为…那么一定有更好的办法。

如何从某个驱动器打开文件夹closuresWindows资源pipe理器窗口

我在写一个小应用程序,允许用户popup(或安全删除)USB驱动器。 除了在Windows资源pipe理器中打开USB驱动器(或多个文件夹)上的文件夹时,我的应用程序工作正常。 在这种情况下popupfunction失败,因为驱动器似乎被locking。 所以我很好奇,因为用户通过我的应用程序发出一个命令来popupUSB驱动器,有没有办法让ExplorerclosuresUSB驱动器打开的窗口? PS。 请注意,我不想closures属于Windows资源pipe理器的所有进程,但仅closures在特定驱动器上打开文件夹的进程。

什么是“Shell命名空间”的方式来创build一个新的文件夹?

显然这对于​​win32 api来说是微不足道的 – CreateDirectory()。 但是我正在尝试托pipe一个IShellView,并且希望以最基于shell的方式来实现这一点。 我原以为会有一个createobject或者createfolder或者一些来自于一个IShellFolder的文件夹。 但是IShellView,IShellFolder,甚至IFolderView都没有这样的东西。 有没有一种Shell编程的方式来创build一个新的文件夹? 还是我需要用老式的path名创build一个文件夹? 如果必须通过CreateDirectory()来完成,那么我的下一个问题可能是:如何让IShellView / IFolderView实际看到这个新对象并将其显示给用户? 动机:创build我自己的文件对话框replace,我想提供标准XP风格文件对话框的“新文件夹”工具栏图标function。 编辑:我继续创build一些基本上可以使用CreateDirectory的东西。 但是,我仍然希望有一个更好的方法来做到这一点,但是这样你就可以看到如何工作,并提供更好的想法来解决这个问题: PidlUtils::Pidl pidl(m_folder); CFilename folderName(GetDisplayNameOf(pidl), "New Folder"); for (int i = 2; folderName.Exists(); ++i) folderName.SetFullName(FString("New Folder (%d)", i)); if (!CPathname::Create(folderName, false)) throw CContextException("Unable to create a new folder here: "); // get the PIDL for the newly created folder PidlUtils::Pidl pidlNew; […]

不知道如何正确使用IShellWindows :: Item

我在XP系统上使用VC6。 以下是我的代码。 它在我的电脑上完美运行,但在其他电脑上似乎pisw-> Item(v,&pidisp)不等于S_OK。 现在我试图找出这里有什么问题 IShellWindows *pisw; if (SUCCEEDED(CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_ALL, IID_IShellWindows, (void**)&pisw))) { VARIANT v; V_VT(&v) = VT_I4; IDispatch *pidisp; found = FALSE; for (V_I4(&v) = 0; !found && pisw->Item(v, &pidisp) == S_OK; V_I4(&v)++) { IWebBrowserApp *piwba; if (SUCCEEDED(pidisp->QueryInterface(IID_IWebBrowserApp, (void**)&piwba))) { // blablabla….do something.. } 所以我改了一些代码 … IDispatch *pidisp; hr = pisw->Item(v, &pidisp); if […]

更改Shellregistry

在我的应用程序的开始,我将registry的shell值更改为一个自定义的shell并杀死explorer.exe(这是在应用程序之外完成的),我想允许一个后门程序返回到原来的shell并带回资源pipe理器。可执行程序。 为进程恢复正常工作对我来说,但是当我运行我的代码来更改registry值没有引发exception,但价值不会改变时,我检查registry,这是我的代码(在这里看到一个不同的问题): RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); regKey.SetValue("Shell", "explorer.exe", RegistryValueKind.String); regKey.Close(); 请帮忙

在Windows资源pipe理器中编程select多个文件

我可以在Windows资源pipe理器中显示和select一个文件,如下所示: explorer.exe /select, "c:\path\to\file.txt" 但是,我不能找出如何select多个文件。 我没有尝试工作的select排列组合。 注:我看了这些页面的文档,都没有帮助。 https://support.microsoft.com/kb/314853 http://www.infocellar.com/Win98/explorer-switches.htm

如何“安全”删除文件夹到回收站

我正在寻找一种方法将文件夹(与子文件夹)放入一个回收站与这些条件: 它必须默默地完成 – 没有任何 Windows用户界面。 该文件夹不能永久删除。 如果它不能被放入回收站,我希望API失败。 获取像CopyFileEx这样的过程的callback例程。 到目前为止,我能够想出这个: SHFILEOPSTRUCT sfo = {0}; sfo.wFunc = FO_DELETE; sfo.pFrom = L"K:\\test del from USB\0"; //Folder on a USB stick sfo.fFlags = FOF_ALLOWUNDO | FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR | FOF_WANTNUKEWARNING; int res = SHFileOperation(&sfo); BOOL bFullSuccess = res == 0 && !sfo.fAnyOperationsAborted; 在USB闪存驱动器上的文件夹可怕地失败,即,即使FOF_ALLOWUNDO标志被永久删除。 所以不pipe我是不是做对了,或者SHFileOperation API是错误的! […]

如何创build一个右键单击上下文shell快捷方式“编辑Emacs”?

记事本+ +自动添加一个shell快捷方式,以便当您在Windows资源pipe理器,您可以右键单击一个文件,并select“用记事本++编辑”。 我该怎么做与emacs一样? 我正在使用Windows的GNU Emacs 22.3。