标签: windows-api-code-pack

如何删除ShellFile"图标"的背景颜色,而不删除"真实"缩略图的背景颜色

我正在使用WindowsAPICodePack,获取ShellFile的缩略图.但是其中一些看起来像通用图标 - 具有黑色背景.因此,我将其设为Bitmap并将Black设置为透明.

问题是,当它是图片的缩略图时 - 它不应该这样做.如何从"图标"中分辨出真实的缩略图?

我的代码:

ShellFile sf = ShellFile.FromFilePath(path);
Bitmap bm = sf.Thumbnail.MediumBitmap;
bm.MakeTransparent(Color.Black);
Run Code Online (Sandbox Code Playgroud)

谢谢

c# winforms windows-api-code-pack

6
推荐指数
1
解决办法
1616
查看次数

WinAPICodePack中的TaskDialog在.NET 4.0上不起作用

我正在编写一个应用程序,并希望使用该TaskDialogIndirect函数 - 但是我不想写大量的P/Invoke等等,所以我已经包含了WinAPICodePack.但是有一个问题!当我为TaskDialog它创建一个控件并将其添加到对话框时,一切正常.但是,运行Show方法会导致OverflowExceptionmscorlib.我将其跟踪到一些指针处理和编组.

尝试使用代码得到了结果,我发现,必须为.NET 3.5和包含应用程序TOO编译DLL .在.NET 4.0上安装我的应用程序会调用此错误...有关解决方法的任何想法 - 或者您甚至可以重现此错误?

另一个问题是我可以将Icon属性设置为我想要的,但图标根本不显示.我必须设置一个Opened动态设置图标的事件......

信息:在Windows 8 Pro x64 RTM上运行Visual Studio 2012 RTM.应用程序是标准的WPF应用程序.

示例代码:

TaskDialog td = new TaskDialog();
td.Cancelable = true;
td.Caption = "Caption";
td.InstructionText = "Instructions";
td.Text = "Text";

TaskDialogCommandLink buttonElevation =
    new TaskDialogCommandLink("elevation", "Elevation Required Sample");
buttonElevation.UseElevationIcon = true;

td.Controls.Add(buttonElevation);
td.Show(); // OverflowException occurs here!
Run Code Online (Sandbox Code Playgroud)

.net winapi marshalling overflowexception windows-api-code-pack

6
推荐指数
1
解决办法
1396
查看次数

TaskDialog触发异常:需要版本6中的comctl32.dll

我正在开发现代WPF应用程序。我想使用TaskDialog,但总是会遇到常见错误:

TaskDialog功能需要加载comctl32.dll的版本6,但是当前正在内存中加载了其他版本。

我试图添加一个清单(已经包含正确的comctl32.dll所需的依赖项),并将其设置为项目属性中的默认清单。

它仍然抛出此异常:-/

我的应用程序是这样构建的:它是一个启动应用程序(正常的Windows应用程序,非wpf)。它仅具有“ Program.cs”,这是入口点。它在那里动态地加载实际的应用程序(它是一个库,而不是WPF应用程序项目)。它调用启动方法来启动应用程序。

效果很好,但是我总是会遇到这个异常。我猜这是因为有这个启动系统...但是解决该问题的可能解决方法是什么?

非常感谢 :)

[R

wpf taskdialog windows-api-code-pack

6
推荐指数
1
解决办法
2690
查看次数

是否可以使用Windows API代码包设置/编辑文件扩展属性?

我想知道是否可以使用Windows API代码包来设置/编辑文件扩展属性(资源管理器:右键单击>属性>详细信息)。

var shellFile = Microsoft.WindowsAPICodePack.Shell.ShellObject.FromParsingName(filePath);
var artistName = shellFile.Properties.GetProperty(SystemProperties.System.Music.DisplayArtist).ValueAsObject.ToString();
var duration = TimeSpan.FromMilliseconds(Convert.ToDouble(shellFile.Properties.GetProperty(SystemProperties.System.Media.Duration).ValueAsObject) * 0.0001);
Run Code Online (Sandbox Code Playgroud)

我使用以下几行来获取所需的属性,但是我不知道如何编辑其中之一(例如艺术家名称)。我知道我可以使用taglib-sharp,但是只有在没有外部代码的情况下没有解决方案时,我才会使用它。

谢谢大家花时间帮助我。

c# file-properties windows-api-code-pack

6
推荐指数
1
解决办法
4071
查看次数

ByRef与ByVal的ReadProcessMemory函数

我在VBA/VB6中使用了windows函数ReadProcessMemory,我不明白为什么当我更改ByVal的传递机制时lpBuffer,该函数仍然会修改通过此参数传递的原始对象的值.在文档中,此参数被指定为应通过引用传递的输出.不应该通过值更改传递机制来防止原始实例被修改?为什么不呢?

Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any  _
,byVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Run Code Online (Sandbox Code Playgroud)

MSDN ReadProcessMemory

vb6 vba windows-api-code-pack

6
推荐指数
1
解决办法
894
查看次数

Windows API代码包-ShellFile无法生成PDF位图

使用先前堆栈溢出问题中的代码:

System.Drawing.Bitmap image;
ShellFile f = ShellFile.FromFilePath(fileLocation);
image = f.Thumbnail.ExtraLargeBitmap;
image.Save(tempfile, ImageFormat.Png);
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Window API来获取PDF的缩略图

我被认为可以生成类似于PDF文档第一页的图像文件。

但是实际情况是,它看起来并不像PDF图标。

在实际按预期工作之前,我是否需要缺少任何内容?

PDF文件已与Adobe Reader正确关联。

在Windows资源管理器中浏览目录时,我确实会看到与文档关联的缩略图。

我应该注意,在处理Excel和Word文档时,该代码实际上确实可以正确提取缩略图。

编辑(参考):

c# pdf thumbnails windows-api-code-pack

5
推荐指数
1
解决办法
3826
查看次数

在 OpenFileDialog (WindowsAPICodePack) 上设置“我的电脑”位置

我想将InitialDirectorya的属性设置WindowsAPICodePack CommonOpenFileDialog我的计算机位置,我使用等效的CLSIDGUID或这到底是什么,只是我想知道是否存在更本地/安全的方法来正确设置我的计算机位置,我试过这个,但没有奏效:

.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer) 
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

Dim FolderPicker As New Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog

With FolderPicker

    .IsFolderPicker = True
    .Title = "Folder Dialog Test"
    .InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" ' My Computer
    .DefaultFileName = "C:\"

End With
Run Code Online (Sandbox Code Playgroud)

更新:

我在 Windows 8 x64 上。

其他特殊文件夹(例如库和桌面)的工作方式如下:

.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
Run Code Online (Sandbox Code Playgroud)

.net vb.net openfiledialog winforms windows-api-code-pack

5
推荐指数
1
解决办法
3519
查看次数

ShellFile错误:缺少程序集引用?

我找不到的名称空间ShellFile

我已经添加using System.Windows.Shell并尝试通过程序包管理器控制台加载Windows7APICodePack:

PM>安装包Windows7APICodePack

安装“ Windows7APICodePack 1.0.0.0”。

您正在从Microsoft下载Windows7APICodePack,可以从http://code.msdn.microsoft.com/WindowsAPICodePack/Project/License.aspx获得许可协议。检查程序包是否有其他依赖性,这些依赖性可能与它们自己的许可协议一起提供。您使用软件包和依存关系即表示您接受其许可协议。如果您不接受许可协议,请从设备中删除相关组件。

已成功安装“ Windows7APICodePack 1.0.0.0”。

将“ Windows7APICodePack 1.0.0.0”添加到CADBuilderGUI。

已将“ Windows7APICodePack 1.0.0.0”成功添加到CADBuilderGUI。

我只是尝试使用以下命令安装更高版本的1.1.0.0:

PM> Install-Package Windows7APICodePack-Shell
Run Code Online (Sandbox Code Playgroud)

但仍然没有运气。

我只是想通过以下方式获取文件的缩略图:

ShellFile shellFile = ShellFile.FromFilePath(files[0]);
Bitmap shellThumb = shellFile.Thumbnail.ExtraLargeBitmap;
Run Code Online (Sandbox Code Playgroud)

但是它不知道是什么ShellFile

有什么建议么?


这不是重复的因为PresentationFramework.dll是通过引用添加的,并且我正在Framework 4.0中进行构建。

c# wpf windows-api-code-pack

5
推荐指数
2
解决办法
4878
查看次数

C# WindowsApiCodepack PropertySystem AccessViolationException

使用 WindowsAPICodePack 在 Win8/64 位上执行一些资源管理器/shell 操作。使用 x64 平台目标迭代文件属性时,属性系统存在一些问题,导致 AccessViolationException。PropVariant.cs 似乎存在一些问题。切换到 x86 可以解决问题,但会导致目录列表不完整(system32/drivers 中缺少 fe“etc”)。有任何想法吗?

using System;
using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;

namespace ApiCodepackTest
{
    class Program
    {
        const string path = @"c:\windows\system32\drivers";
        static void Main(string[] args)
        {
            var shellObject = (ShellFolder)ShellObject.FromParsingName(path);
            showProperties(shellObject);
            showItems(shellObject);
            Console.ReadLine();
        }

        static void showProperties(ShellFolder folder)
        {
            var sys = folder.Properties.System;
            foreach (var prop in sys.GetType().GetProperties())
            {
                try
                {
                    var shellProperty = prop.GetValue(sys) as IShellProperty;
                    if (shellProperty != null && shellProperty.ValueAsObject != null)
                        Console.WriteLine(shellProperty.CanonicalName + " " + …
Run Code Online (Sandbox Code Playgroud)

c# windows-api-code-pack

5
推荐指数
1
解决办法
1829
查看次数

为什么在控制台应用程序中使用 CommonOpenFileDialog 时会出现此异常?

问题

我正在尝试使用 CommonOpenFileDialog 的文件夹选择器,如本答案中所述。问题是,即使有一个非常精简的示例项目,我在尝试使用 CommonOpenFileDialog 的函数时也会遇到异常ShowDialog()

代码

using Microsoft.WindowsAPICodePack.Dialogs;

namespace DialogTest
{
    class Program
    {
        public static void Main(string[] args)
        {
            CommonOpenFileDialog dialog = new CommonOpenFileDialog();
            dialog.InitialDirectory = "C:\\Users";
            dialog.IsFolderPicker = true;

            CommonFileDialogResult result = dialog.ShowDialog();

            if (result == CommonFileDialogResult.Ok)
            {
                //Do Stuff
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还与作者 Microsoft 一起使用以下 nuget 包:

  • Microsoft.WindowsAPICodePack-核心
  • Microsoft.WindowsAPICodePack-Shell

例外情况

此代码在 处产生以下异常dialog.ShowDialog();

System.Runtime.InteropServices.COMException was unhandled
  ErrorCode=-2147023116
  HResult=-2147023116
  Message=A null reference pointer was passed to the stub. (Exception from HRESULT: …
Run Code Online (Sandbox Code Playgroud)

c# dialog openfiledialog windows-api-code-pack

5
推荐指数
1
解决办法
3425
查看次数