标签: windows-shell

获取.NET中的常见桌面路径

我需要将文件存储到Windows上的公共桌面.该应用程序是一个非常特殊的应用程序,适用于一个特殊的PC(设备准备),因此非技术用户必须很容易找到并修改配置文件.现在我们切换到一个域,因为不同的人(具有不同的帐户)应该使用该软件,它必须在一个共同的位置,每个用户都可以看到.所以请不要问为什么它在桌面上;)

以前,我刚刚用过Environment.GetFolderPath(Environment.SpecialFolder.Desktop).SpecialFolder枚举中有几个常见文件夹,但普通桌面似乎不存在.难道我失去了一些东西,或者我要的P/Invoke SHGetSpecialFolderPathCSIDL_COMMON_DESKTOPDIRECTORY

.net windows windows-shell

8
推荐指数
1
解决办法
2324
查看次数

如何获取文件属性?

我想要一个显示媒体文件的一些文件属性的应用程序,如果可用,比如(不知道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)

c# windows-shell taglib getproperties windows-api-code-pack

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

在Windows 7 64位中使用32位外壳扩展

我想开发一个兼容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位仿真"形式?

c++ windows com windows-shell 32bit-64bit

8
推荐指数
1
解决办法
4832
查看次数

在C#应用程序中使用第三方上下文菜单(对于Windows资源管理器)?

与其他希望将项目添加到Windows资源管理器的人不同,我想在我的应用程序中显示上下文菜单.现在你可能在想,你正在寻找的课程是ContextMenu.让我告诉你我有兴趣做什么.请原谅小图片......

这是我目前拥有的:

我当前的上下文菜单

这就是我希望它:

我希望它看起来像什么

让我们把假设排除在外.我已经检测到用户安装了TortoiseSVN并且他们选择的项目受源代码管理.

我到目前为止的研究:

检索上下文菜单 - 这非常有用.这是Windows资源管理器的ac#库(可以检索特定文件夹/文件的上下文菜单).但是,即使在测试示例时,它也不会检索TortoiseSVN选项.

另一个上下文菜单检索 - 几乎与前一个链接相同(再次使用C#代码).获取Windows资源管理器上下文菜单减去TortoiseSVN选项.

添加上下文菜单的过程 - 我刚刚开始阅读这些深入的帖子.答案可能在本文中,但我需要一些时间来完成它.如果我有这些运气,我会回复一个答案.

用户似乎能够完成此任务 - 这似乎是一个处理SVN开发的电子邮件组.为什么要在这里发布?也许是为了证明这可以做到.引用:"我正在使用TSVN shell上下文菜单.我正在使用IContextMenu.QueryContextMenu(C++代码)方法访问TSVN shell上下文菜单,然后我将通过返回的菜单进行浏览."

总而言之,这似乎应该是一个相当直接的事情,我只是错过了一步.欢迎任何和所有建议.谢谢!

编辑:尝试更好地利用标签和更集中的标题

c# c++ tortoisesvn contextmenu windows-shell

8
推荐指数
1
解决办法
537
查看次数

从Windows桌面获取所选文件的列表

我试图从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)

因此,我总是最终得到一个来自资源管理器窗口的列表,即使没有打开资源管理器窗口也没有结果.目前的技术似乎完全忽略了桌面.

如果有人可以帮助我从当前活动的窗口/桌面获取所选文件的列表,我将非常感激.

谢谢.

c# windows shell32 windows-shell visual-c++

8
推荐指数
1
解决办法
2558
查看次数

等待通过调用批处理文件创建的进程已完成

MyFile1.bat调用MyFile2.bat两次:

start MyFile2.bat argA, argB, argC
start MyFile2.bat argX, argY, argZ
Run Code Online (Sandbox Code Playgroud)

此时,我怎么能等到调用产生的两个进程MyFile2.bat都完成了?

command-line batch-file windows-shell command-prompt

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

获取Windows下载文件夹的路径

我有一些Excel VBA代码需要知道下载文件夹路径.我怎么能这样做?

由于您可以移动" 下载"文件夹(以及" 文档"和大多数文件夹,通过文件夹属性),因此环境变量%USERPROFILE%无法构建类似的路径%USERPROFILE%\Downloads,WScript.Shell.SpecialFolders也不会列出"下载"文件夹.

我想必须要阅读注册表,但我对此毫无头绪.

谢谢!

windows vba wsh windows-shell excel-vba

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

如何获取IPreviewHandler文件扩展名?

如何获取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)

windows windows-shell ipreviewhandler

8
推荐指数
1
解决办法
3562
查看次数

在Windows资源管理器中创建一个特殊文件夹,如DropBox或OneDrive

我知道还有一些关于固定收藏夹文件夹的其他问题,但我想做一些我有像OneDrive或Drop box这样的文件夹(它的行为几乎就像另一个驱动器).

无法找到我正在寻找的东西.我意识到它是一个特殊的文件夹,我意识到它可能是一个shell扩展(目前使用SharpShell).我已经有了一个上下文菜单来处理它,只是找不到这些信息.我想知道我是不是错了.

任何帮助总是受到赞赏!

更新:看起来我正在寻找的是Shell扩展,特别是ShellFolder的实现.尝试使用SharpShell或EZNamespaces执行此操作,但试图找到一些黑客围绕它.没有骰子.:)

感谢所有的评论!

c# windows-shell

8
推荐指数
1
解决办法
5486
查看次数

Microsoft如何为即将推出的OneDrive On-Demand功能实施外壳扩展?

在即将推出的(当前内部版本)OneDrive客户端 - 按需功能中,Microsoft引入了一些新的shell /命名空间扩展.

还有一列显示文件可用性状态,以及状态栏中的文本.

Microsoft是否为OneDrive同步文件夹或其他一些shell界面开发了特殊的IShellView实现?他们是如何联系到文件选择更改事件的呢?

我知道自从以前的一些Windows版本以来,对列处理程序扩展的支持已被删除.

请指出一些有关开发此类功能的有用资源:自定义列和状态栏扩展(最好使用C#..).

windows-shell shell-extensions shell-namespace-extension

8
推荐指数
0
解决办法
386
查看次数