我有一个Windows shell扩展,它使用IShellIconOverlayIdentifier接口在文件和文件夹上显示叠加图标.我的扩展有点像TortoiseCVS或TortoiseSVN.
有时候我需要让Windows资源管理器重绘它的所有图标.为此,我像这样调用SHChangeNotify:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
Run Code Online (Sandbox Code Playgroud)
这将刷新任何打开的资源管理器窗口的桌面和右侧窗格.它不会刷新任何资源管理器窗口左侧的文件夹树.
所以我试着像这样发送WM_SETTINGCHANGE:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
Run Code Online (Sandbox Code Playgroud)
在Vista上,这会刷新文件夹树,但不会刷新右侧窗格.
的组合SHChangeNotify()
之后WM_SETTINGCHANGE
,似乎在Vista上工作得非常好.但如果显示,我仍然无法刷新XP上的文件夹树.
有没有人有任何想法如何更好地做到这一点?
XP有更好的解决方案吗?
发送SHCNE_ASSOCCHANGED
有点像吟唱探险者头.它导致整个桌面刷新非常猛烈,并且任何打开的资源管理器窗口都会松开滚动位置.有什么东西不那么暴力吗?
在Windows上,我可以像这样运行我的ruby脚本:
> ruby myscript.rb
Run Code Online (Sandbox Code Playgroud)
但是我想把事情搞定,这样我才能做到这一点?
> myscript.rb
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我知道这是可能的,因为我最近从一台拥有这台设备的电脑转移到了尚未安装的新电脑上.
我可以在Windows资源管理器中显示和选择单个文件,如下所示:
explorer.exe /select, "c:\path\to\file.txt"
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何选择多个文件.没有选择的排列我尝试过工作.
注意:我查看了这些页面的文档,但没有帮助.
https://support.microsoft.com/kb/314853
http://www.infocellar.com/Win98/explorer-switches.htm
<html>
<script type="text/javascript">
function func() {
alert(document.getElementById('iView').contentDocument);
}
</script>
<body>
<iframe id="iView" style="width:200px;height:200px;"></iframe>
<a href="#" onclick="func();">click</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
点击后,Firefox返回[object HTMLDocument].Internet Explorer返回undefined.
如何使用Internet Explorer选择iView元素?谢谢.
在我的应用程序中,我可以通过编程方式打开资源管理器并使用以下代码选择文件:
void BrowseToFile(LPCTSTR filename)
{
CString strArgs;
strArgs = _T("/select,\"");
strArgs += filename;
strArgs += _T("\"");
ShellExecute(0, _T("open"), _T("explorer.exe"), strArgs, 0, SW_NORMAL);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我第二次使用不同的文件调用此函数,但在同一文件夹中,资源管理器中的选择不会更改为新文件,而是保留在以前的文件中.
例如,如果我调用我的函数C:\path\to\file1.txt
,将打开一个新的资源管理器窗口file1.txt
并将被选中.如果我第二次调用我的函数C:\path\to\file2.txt
,将激活现有的资源管理器窗口,但选择仍将打开file1.txt
.
有没有办法强制资源管理器更新选择或更好的方法来实现这一目标?
编辑:
上面提到的行为是在Windows XP上.似乎Vista/Win7上的行为是不同的.每次调用都会打开一个新的资源管理器实例并选择该文件.
我的主要目标是将Visual Studio选项复制到文档的Open Containing Folder.Visual Studio中的此功能在XP,Vista和Win7上的行为相同.如果具有相同文件夹的另一个实例已打开,则不会创建新实例,但会将选择更新为新文件.
如果有人知道Visual Studio如何实现这一点,我很想知道它.
在一个项目中,我们在设备上有一个“隐藏”文件夹(名称以“.”开头的文件夹)。从代码访问它没有问题,但在 AndroidStudios 的“设备文件资源管理器”中我找不到显示 unix 隐藏文件的选项。使用 adb shell 非常烦人。
AndroidStudios“设备文件资源管理器”中是否有选项(可能隐藏在某处)使它们可见?我无法找到它。
如果没有,是否有“AndroidStudio 功能提案”页面可以要求添加该功能?
有没有办法在WPF上安装Windows资源管理器?我能得到的关闭是Web浏览器,但它并不是我真正需要的.
请协助.
谢谢
有没有办法启动资源管理器窗口并使用WPF突出显示该文件夹中的文件?我已经尝试过以下方法:
Process ExplorerWindowProcess = new Process();
ExplorerWindowProcess.StartInfo.FileName = "explorer.exe";
ExplorerWindowProcess.StartInfo.Arguments = ConfigFile.File.FullName;
ExplorerWindowProcess.Start();
Run Code Online (Sandbox Code Playgroud)
...但是在Windows资源管理器中使用默认应用程序打开文件(在我的情况下是一个XML文件),我非常不想要.我知道可用于Eclipse的Aptana工具允许您在Eclipse项目浏览器中选择文件并在Explorer中完全按照我的意愿显示该文件,但我需要一种方法在我的WPF应用程序中实现它.
我的目标是编写一个C#代码,打开一个Windows资源管理器窗口,选择一个特定的文件.如果这样的窗户已经打开,我想把它带到前面.我尝试了两种选择.
首先,我首先明确地调用explorer.exe
:
arg = "/select, " + pathToFile;
Process.Start("explorer.exe", arg);
Run Code Online (Sandbox Code Playgroud)
这会打开并选择一个正常的窗口,但问题是它将始终打开一个新窗口,即使存在一个窗口.所以我尝试了这个:
Process.Start(pathToDir);
Run Code Online (Sandbox Code Playgroud)
这可以打开一个新窗口或聚焦旧窗口,但不能选择文件.
我能做什么?我查看了explorer
论据,但我没有看到任何可以使用的内容.我能想到的最后一个选项是获取已经打开的窗口列表并使用一些WINAPI级别的代码来处理它,但这似乎有点过分.
我在我的应用程序中有一个文件列表,我想让人们右键单击一个项目并显示Windows资源管理器上下文菜单.我假设我需要使用IContextMenu接口,但我不确定从哪里开始.
explorer ×10
windows ×6
c# ×3
wpf ×2
.net ×1
c++ ×1
command-line ×1
contextmenu ×1
directory ×1
hidden-files ×1
javascript ×1
process ×1
ruby ×1
scripting ×1
shellexecute ×1
winapi ×1