我需要将文件存储到Windows上的公共桌面.该应用程序是一个非常特殊的应用程序,适用于一个特殊的PC(设备准备),因此非技术用户必须很容易找到并修改配置文件.现在我们切换到一个域,因为不同的人(具有不同的帐户)应该使用该软件,它必须在一个共同的位置,每个用户都可以看到.所以请不要问为什么它在桌面上;)
以前,我刚刚用过Environment.GetFolderPath(Environment.SpecialFolder.Desktop).SpecialFolder枚举中有几个常见文件夹,但普通桌面似乎不存在.难道我失去了一些东西,或者我要的P/Invoke SHGetSpecialFolderPath用CSIDL_COMMON_DESKTOPDIRECTORY?
我想要一个显示媒体文件的一些文件属性的应用程序,如果可用,比如(不知道windows中使用的确切英文单词)FileName,Length/Duration,FileType(.avi .mp3等)我试过taglib和windowsapishell但我没有得到一个工作结果(参考是好的)
ShellFile so = ShellFile.FromFilePath(file);
so.Properties.System.(everythingIwant)
Run Code Online (Sandbox Code Playgroud)
向我展示了我想要显示的很多文件属性,但我无法让它工作一个错误的例子:
'WindowsFormsApplication2.vshost.exe'(托管(v4.0.30319)):已加载'C:\ Windows\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll',跳过加载符号.模块已经过优化,调试器选项"Just My Code"已启用.程序'[6300] WindowsFormsApplication2.vshost.exe:Program Trace'已退出,代码为0(0x0).程序 '[6300] WindowsFormsApplication2.vshost.exe:托管(v4.0.30319)' 已经与代码0(为0x0)退出.
容易的事情
var thing = so.Properties.System.FileName.Description;
Console.WriteLine(thing);
Run Code Online (Sandbox Code Playgroud)
不会工作
我确实知道一些Java和PHP编程,但我对C#完全不熟悉
特别感谢@ marr75和@errorstacks!
一个跟进问题:我做了这个,它有效
class Program
{
static void Main(string[] args)
{
string file = "E:/Dump/Shutter Island.avi";
FileInfo oFileInfo = new FileInfo(file);
Console.WriteLine("My File's Name: \"" + oFileInfo.Name + "\"");
DateTime dtCreationTime = oFileInfo.CreationTime;
Console.WriteLine("Date and Time File Created: " + dtCreationTime.ToString());
Console.WriteLine("myFile Extension: " + oFileInfo.Extension);
Console.WriteLine("myFile total Size: " + oFileInfo.Length.ToString());
Console.WriteLine("myFile filepath: " …Run Code Online (Sandbox Code Playgroud) 我想开发一个兼容Windows XP SP2(32位)和Windows 7 64位的shell扩展(上下文菜单处理程序).
是否可以在64位Windows中运行32位shell扩展,或者是否必须将shell扩展移植/重建为64位才能在Windows 7 64位中使用?
在64位操作系统中使用32位shell扩展是否存在任何缺点/已知问题?
32位应用程序运行在64位Windows就好了,但我不知道外壳扩展,因为如果我的理解是正确的,外壳扩展是在进程内加载到浏览器进程内COM服务器,这应该是一个64 64位Windows中的位进程...还是为在64位操作系统中运行的32位shell扩展提供的"32位仿真"形式?
与其他希望将项目添加到Windows资源管理器的人不同,我想在我的应用程序中显示上下文菜单.现在你可能在想,你正在寻找的课程是ContextMenu.让我告诉你我有兴趣做什么.请原谅小图片......
这是我目前拥有的:

这就是我希望它:

让我们把假设排除在外.我已经检测到用户安装了TortoiseSVN并且他们选择的项目受源代码管理.
我到目前为止的研究:
检索上下文菜单 - 这非常有用.这是Windows资源管理器的ac#库(可以检索特定文件夹/文件的上下文菜单).但是,即使在测试示例时,它也不会检索TortoiseSVN选项.
另一个上下文菜单检索 - 几乎与前一个链接相同(再次使用C#代码).获取Windows资源管理器上下文菜单减去TortoiseSVN选项.
添加上下文菜单的过程 - 我刚刚开始阅读这些深入的帖子.答案可能在本文中,但我需要一些时间来完成它.如果我有这些运气,我会回复一个答案.
用户似乎能够完成此任务 - 这似乎是一个处理SVN开发的电子邮件组.为什么要在这里发布?也许是为了证明这可以做到.引用:"我正在使用TSVN shell上下文菜单.我正在使用IContextMenu.QueryContextMenu(C++代码)方法访问TSVN shell上下文菜单,然后我将通过返回的菜单进行浏览."
总而言之,这似乎应该是一个相当直接的事情,我只是错过了一步.欢迎任何和所有建议.谢谢!
编辑:尝试更好地利用标签和更集中的标题
我试图从Windows桌面和资源管理器Windows获取所选文件的列表.要求是我应该能够从活动资源管理器窗口或桌面检索当前选择.
在完成在线资源后,我设法将以下代码放在一起,但它没有提供桌面上所选项目的列表.
ArrayList selected = new ArrayList();
var shell = new Shell32.Shell();
IntPtr handle = IntPtr.Zero;
handle = GetForegroundWindow();
int intHandle = handle.ToInt32();
//For each explorer
foreach (InternetExplorer window in new ShellWindowsClass())
{
if (window.HWND == (int)handle)
{
Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)window.Document).SelectedItems();
foreach (Shell32.FolderItem item in items)
{
selected.Add(item.Path);
}
}
}
Run Code Online (Sandbox Code Playgroud)
除此之外,我尝试了以下内容,但它只是在所有打开的资源管理器窗口中提供所有选定元素的列表,而忽略了桌面.
string filename; = Path.GetFileNameWithoutExtension(window.FullName).ToLower();
if (filename.ToLowerInvariant() == "explorer")
{
Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)window.Document).SelectedItems();
foreach (Shell32.FolderItem item in items)
{
//MessageBox.Show(item.Path.ToString());
selected.Add(item.Path);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我总是最终得到一个来自资源管理器窗口的列表,即使没有打开资源管理器窗口也没有结果.目前的技术似乎完全忽略了桌面.
如果有人可以帮助我从当前活动的窗口/桌面获取所选文件的列表,我将非常感激.
谢谢.
MyFile1.bat调用MyFile2.bat两次:
start MyFile2.bat argA, argB, argC
start MyFile2.bat argX, argY, argZ
Run Code Online (Sandbox Code Playgroud)
此时,我怎么能等到调用产生的两个进程MyFile2.bat都完成了?
我有一些Excel VBA代码需要知道下载文件夹路径.我怎么能这样做?
由于您可以移动" 下载"文件夹(以及" 文档"和大多数文件夹,通过文件夹属性),因此环境变量%USERPROFILE%无法构建类似的路径%USERPROFILE%\Downloads,WScript.Shell.SpecialFolders也不会列出"下载"文件夹.
我想必须要阅读注册表,但我对此毫无头绪.
谢谢!
如何获取IPreviewHandler特定文件扩展名的shell ?
Windows允许开发人员为其自定义文件类型创建预览处理程序:
选择项目时,将调用预览处理程序,以在视图的阅读窗格中显示文件内容的轻量级,丰富的只读预览.这是在不启动文件的关联应用程序的情况下完成的.
预览处理程序是托管应用程序.主机包括Windows Vista或Microsoft Outlook 2007中的Windows资源管理器.
我想利用现有的基础IPreviewHandler设施来获取文件的缩略图.
问题是我的文件没有放在shell命名空间中(即它们不在硬盘上).他们坐在记忆中,通过一个可以访问IStream.这意味着我无法使用传统IExtractImage接口; 因为它不支持从Stream加载文件.
幸运的是,这就是现代IPreviewHandler支持(推荐并且更喜欢)从a加载数据的原因Stream,并建议不要从文件加载预览:
此方法优先于Initialize,因为它能够使用无法通过Win32路径访问的流,例如具有.zip文件扩展名的压缩文件的内容.
没有关于获得与特定扩展相关联的正确方法的文档IPreviewHandler.但是,如果我采取怎样的方向注册一个IPreviewHandler,并读取对方的合同:
HKEY_CLASSES_ROOT
.xyz
(Default) = xyzfile
HKEY_CLASSES_ROOT
xyzfile
shellex
{8895b1c6-b41f-4c1c-a562-0d564250836f} //IPreviewHandler subkey
(Default) = [clsid of the IPreviewHandler]
Run Code Online (Sandbox Code Playgroud)
鉴于我知道扩展,我应该能够遵循相同的路线.让我们用一个真实世界的例子,一个.jpg文件:


请注意,该文件有预览.请注意,我添加了第二个屏幕截图,以强调预览不是来自硬盘上的文件.
首先是它是一个.jpg文件:
HKEY_CLASSES_ROOT
.jpg
(Default) = …Run Code Online (Sandbox Code Playgroud) 我知道还有一些关于固定收藏夹文件夹的其他问题,但我想做一些我有像OneDrive或Drop box这样的文件夹(它的行为几乎就像另一个驱动器).
无法找到我正在寻找的东西.我意识到它是一个特殊的文件夹,我意识到它可能是一个shell扩展(目前使用SharpShell).我已经有了一个上下文菜单来处理它,只是找不到这些信息.我想知道我是不是错了.
任何帮助总是受到赞赏!
更新:看起来我正在寻找的是Shell扩展,特别是ShellFolder的实现.尝试使用SharpShell或EZNamespaces执行此操作,但试图找到一些黑客围绕它.没有骰子.:)
感谢所有的评论!
在即将推出的(当前内部版本)OneDrive客户端 - 按需功能中,Microsoft引入了一些新的shell /命名空间扩展.
还有一列显示文件可用性状态,以及状态栏中的文本.
Microsoft是否为OneDrive同步文件夹或其他一些shell界面开发了特殊的IShellView实现?他们是如何联系到文件选择更改事件的呢?
我知道自从以前的一些Windows版本以来,对列处理程序扩展的支持已被删除.
请指出一些有关开发此类功能的有用资源:自定义列和状态栏扩展(最好使用C#..).
windows-shell ×10
windows ×5
c# ×4
c++ ×2
.net ×1
32bit-64bit ×1
batch-file ×1
com ×1
command-line ×1
contextmenu ×1
excel-vba ×1
shell32 ×1
taglib ×1
tortoisesvn ×1
vba ×1
visual-c++ ×1
wsh ×1