【问题标题】:How to reference the Paint.NET assemblies directly using C#如何使用 C# 直接引用 Paint.NET 程序集
【发布时间】:2014-10-09 20:44:39
【问题描述】:

我想直接引用 Paint.NET 程序集并以这种方式使用它的功能。我不知道如何使用 .dll 文件 PaintDotNet.Core.dll 并在 C# Visual Studio 中使用它的功能有任何帮助。请

想要引用这些程序集:C:\Program Files\Paint.NET\PaintDotNet.*.dll 然后在这些命名空间中查找类。

代码:-

  private void button2_Click(object sender, EventArgs e)
{
    OpenFileDialog ofd = new OpenFileDialog();
    string filename = "";

    if (ofd.ShowDialog() == DialogResult.OK)
    {
        filename = System.IO.Path.GetFullPath(ofd.FileName);
    }
   // MessageBox.Show(filename, "file");
    pictureBox1.ImageLocation = filename;
    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

    DialogResult result = MessageBox.Show("Do you wish to continue?", "Save Changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (result == DialogResult.Yes)
    {
        System.Diagnostics.Process.Start(@"C:\Program Files\Paint.NET\PaintDotNet.exe");
       // here i need to perform the function like
       //Open + O`
       //ctrl + Shift + L)` then `
       //(ctrl + Shift + G)`. then save 
       //`ctrl + Shift + S`
    }
    else
    {
        return;
    }
}

【问题讨论】:

  • 您发布的代码似乎没有使用参考。您是否尝试在 Visual Studio 解决方案->项目中引用它?如果您想自动化程序,您可以尝试使用 Assembly.Load() 将程序加载到您的程序中,然后运行 ​​MainModule 的入口点。不过我对 Paint.NET 一无所知。
  • 据我所知,paintdotnet 没有供外部使用的 API。他们只提供在主要paintdotnet应用程序范围内工作的插件开发。
  • 对于这样的宏(用于进行一些自动操作的键序列),您不需要 C#。只需使用一些专用工具,例如AutoHotKey
  • @KonradKokosa 好的,我看到了这个.. 但是我如何使用这些打开图像.. 使用此自动热键转换为 bmp 文件
  • @KonradKokosa 实际上我检查了自动热键..我们需要按任意键来激活这个权利..我不喜欢按任何键..它被激活的那一刻..它应该开始做..似乎很疯狂的仪式..我知道..但我需要这种方式..

标签: c# visual-studio dll dll-reference paint.net


【解决方案1】:

只需按照说明将快捷键发送到另一个应用程序

将此命名空间添加到类中

using System.Runtime.InteropServices;

然后用DllImport 语句声明SetForegroundWindow 函数。这将创建在 User32.dll 中创建的该方法的对象

[DllImport ("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);

并将以下代码添加到您的按钮单击或项目中的任何位置。此代码将导航 OpenFileDialog 以打开 Paint.NET 应用程序中的现有文件。

private void button1_Click(object sender, EventArgs e)
{
    Process p = Process.GetProcessesByName("PaintDotNet").FirstOrDefault();
    if (p != null)
    {
        SetForegroundWindow(p.MainWindowHandle); //Set the Paint.NET application at front
        SendKeys.SendWait("^(o)"); //^(o) will sends the Ctrl+O key to the application. 
    }
}

大多数程序员在Ctrl+OCtrl+o 之间犯的错误看起来很相似,但是两个键的ascii 值不同。因此,请确保关键字符不是大写的。您还可以在msdn 上阅读有关SendKey 方法的完整信息。您可以进行任意组合键并通过SendWait() 方法发送。

【讨论】:

    【解决方案2】:

    只需将一个或部分或全部库添加到您的项目中。作为测量状态,然后使用对象资源管理器。

    注意:不要介意 .xaml 的东西或我试图在 wpf 应用程序中渲染 SharpDX D3D11 以制作地图编辑器的实际项目(并且没有工具包(不要问我为什么。我疯了))。

    我发誓我昨晚有代码你想自动化paint.net吗? 您将不得不制作一个插件,这将使流程比启动第二个应用程序更加简化。

    【讨论】:

    • 我已经添加了引用..告诉我如何激活.. .net paint 的这些功能.. 没有人说:-(
    • 我怀疑你会找到合适的文档。但你可以猜到你的余生。将库引用到项目后,using somenamespace 命名空间列在您看到 PaintDotNet.Base 的位置下方。现在尝试实例化任何你能得到的东西。现在意识到你在叫错树。你真正想做的是模拟一个键盘,向任何有焦点的东西发送命令。但也许它会首先检查paintdotnet是否有焦点。如果真实。键盘模拟器只发送操作系统输入。正如康拉德在你的问题中所说的那样 cmets 12
    • 您是否有指向 GRF 文件规范的链接。坦率地说,我没有听说过。但是 PNG 很容易通过调用 SharpDX.Direct3D11.Texture2D.FromFile 加载到内存中。
    • @StacyKebler 这就是你说的 GRF 吗? GRAPH
    • @StacyKebler 你见过这个吗? zebra question
    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 2017-06-02
    • 2014-02-26
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2011-03-05
    相关资源
    最近更新 更多