Articles of Windows资源pipe理器

从Web浏览器打开文件系统文件夹/目录

我将我的桌面应用程序分发到闪存驱动器上数以千计的Windows,Mac和Linux上的用户。 我有一个HTML起始页面,其中包含文档链接,安装指南,发行说明等,这些都在闪存驱动器上。 我希望用户直接从浏览器安装,但这正是反病毒程序试图防止的(正确的)。 而不是尝试启动安装程序,只需find安装程序并让用户自行完成最后一步即可。 是否有可能导致主机上的文件系统pipe理器(Explorer,Finder等)打开包含该文件的文件夹并将其突出显示? 我认为这将需要JavaScript,它可能会有所不同的Windows,Mac和Linux。 另外,在大多数浏览器(IE,FF,Chrome,Safari,Opera)中都可以工作。 这是否与解决费马大定理相似的难度? 谢谢

如何将上下文菜单添加到Windows资源pipe理器中以用于Java应用程序?

如何将一个子菜单项添加到Windows资源pipe理器上下文菜单(如7-Zip所做的)为Java应用程序?

用C ++代码中的Windows本机程序打开文件

我的C + +程序创build.png文件,我需要创build后立即打开(查看)该文件 – 有没有办法打开它,因为它是在Windows资源pipe理器中打开 – 所以文件将用用户首选的程序打开,如果有没有与文件格式相关联的程序 – Windows将显示对话窗口,用户将能够select任何程序来打开该文件。 跨平台(+ Linux,+ MacOS,+ BSD)解决scheme将是完美的。 谢谢。

使用WinAPI获取选定的文件夹项目

嘿家伙,我尝试获取用户正在使用的文件夹的选定文件。 我有以下代码已经运行,但只在桌面文件上: private string selectedFiles() { // get the handle of the desktop listview IntPtr vHandle = WinApiWrapper.FindWindow("Progman", "Program Manager"); vHandle = WinApiWrapper.FindWindowEx(vHandle, IntPtr.Zero, "SHELLDLL_DefView", null); vHandle = WinApiWrapper.FindWindowEx(vHandle, IntPtr.Zero, "SysListView32", "FolderView"); //IntPtr vHandle = WinApiWrapper.GetForegroundWindow(); //Get total count of the icons on the desktop int vItemCount = WinApiWrapper.SendMessage(vHandle, WinApiWrapper.LVM_GETITEMCOUNT, 0, 0); //MessageBox.Show(vItemCount.ToString()); uint vProcessId; […]

我如何以编程方式刷新Windows资源pipe理器?

我有一个Windowsshell扩展使用IShellIconOverlayIdentifier接口来显示文件和文件夹上的重叠图标。 我的扩展有点像TortoiseCVS或TortoiseSVN 。 有时我需要使Windows资源pipe理器重新绘制所有的图标。 要做到这一点,我打电话给SHChangeNotify像这样: SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL) 这将刷新任何打开的资源pipe理器窗口的桌面和右侧窗格。 它不会刷新任何资源pipe理器窗口左侧的文件夹树。 所以我尝试发送WM_SETTINGCHANGE像这样: SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0) 在Vista上刷新文件夹树,但不是右侧窗格。 SHChangeNotify()跟WM_SETTINGCHANGE的组合似乎在Vista上运行的很好。 但是如果显示的话,我仍然无法刷新XP上的文件夹树。 有没有人有任何想法如何做到这一点更好? 有没有更好的XP解决scheme? 发送SHCNE_ASSOCCHANGED有点像clubbing Explorer。 它导致整个桌面刷新相当猛烈,打开任何打开的资源pipe理器窗口松动滚动位置。 有没有什么是暴力的?

如何使用自定义面板扩展Windows资源pipe理器

我想扩展Windows资源pipe理器的自定义底部或右侧面板(如下图)。 从我一直在阅读,我认为我应该开始实施IShellView。 它是否正确? 任何人都可以给我几个指针如何在.NET中做到这一点? 谢谢

Windows资源pipe理器右击文件和文件夹的上下文菜单

我的问题与此类似,但是这并没有给我所需要的所有信息,或者我不太了解。 我希望在文件上下文菜单中有选项来通知我的应用程序。 我添加了键: HKLM/SOFTWARE/Classes/*/shell/MyApp/command::"C:\\path\\test.exe" "%1" HKLM/SOFTWARE/Classes/Folder/shell/MyApp/command::"C:\\path\\test.exe" "%1" testing代码: #include <iostream> int main(int argc, char *argv[]) { for (int i = 1; i < argc; ++i) std::cout << argv[i] << "\r\n"; system("pause"); return 0; } 这工作正常,但是…如果我标记几个文件/文件夹,并右键单击并select我添加的选项,许多testing应用程序启动。 这不是我想要的行为,我希望所有的path将被传递到我的应用程序的单个实例作为argv的列表,有没有人知道如何做到这一点? BTW。 我用C++编码,但我认为这不是问题,因为它是Windowsshell的业务。 谢谢。

如何刷新Windows资源pipe理器

networking卷的名称可以更改。 我改名为Spinal Disk 为了更改networking名称,我这样做 在registry中写入新名称。 使用像DefineDosDeviceW这样的函数连接我的networking卷。 在这个时机,Windows资源pipe理器读取我的猜测registry。 SHChangeNotify(SHCNE_DRIVEADD,SHCNF_PATH,root,NULL); // 为了确定。 SendMessageTimeout(HWND_BROADCAST,WM_DEVICECHANGE,message,(LPARAM)(&dbv), – SMTO_ABORTIFHUNG,200,&dwResult); //再次确定! 它的工作,但有时不工作,即使我使用SHChangeNotify和WM_DEVICECHANGE确定。 有时,新的名称不适用于Windows资源pipe理器。 但是,如果我终止资源pipe理器并重新执行,名称应用。 我find一个界面,Windows资源pipe理器刷新(是否正确的语法?对不起,我不能很好地expression这个句子。) 有没有适当的function? 资源pipe理器应重新读取registry并刷新。

如何判断操作系统在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 。 如果有一个合法的可执行文件被称为…那么一定有更好的办法。

如何重新使用现有/已打开的Windows资源pipe理器窗口来启动资源pipe理器

我有一个经常使用启动explorer.exe的应用程序。 我想重新使用现有/已经打开的资源pipe理器窗口,而不是每次启动过程时都创build一个新窗口。 这是我的代码看起来像: System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo { UseShellExecute = true, FileName = "Explorer.exe", Arguments = myDirectoryPath }; System.Diagnostics.Process.Start(info); 我没有看到一个命令行开关来做到这一点。 我尝试的一种方法是简单地杀死任何一个现有的浏览器进程,并将其replace为新的进程: var processes = System.Diagnostics.Process.GetProcesses(Environment.MachineName);int kills = 0; for (int i = 0; i < processes.Length; i++) { System.Diagnostics.Process p = processes[i]; if (p.ProcessName == "explorer" && kills < 1) ++kills p.Kill(); } 但是这会造成不必要的影响,不仅仅是杀死一个进程,而是彻底杀死资源pipe理器,甚至是任务栏也会消失。 […]