C# 单击事件打开文件对话框,在 photoshop 中启动文件和 运行 一个动作

C# Click event to open file dialogue, launch files in photoshop and run an action

由于 vb.net 知识库有限,我再次发现自己在 C# 上苦苦挣扎。

我试图在我的应用程序上按下一个按钮,该按钮将打开一个文件对话框并在 photoshop 中打开选定的文件并对它们执行 运行 操作。

在 VB.net 中,我所要做的就是以下...

 Private launchFiles As OpenFileDialog
Private Sub OpenInPS_btn_Click(sender As Object, e As EventArgs) Handles OpenInPS_btn.Click

    launchFiles = New OpenFileDialog
    launchFiles.Title = "Select files"
    launchFiles.CheckFileExists = True
    launchFiles.Multiselect = True
    launchFiles.RestoreDirectory = False
    Dim appRef
    appRef = CreateObject("Photoshop.Application")

    If launchFiles.ShowDialog = Windows.Forms.DialogResult.OK Then
        For Each fl In launchFiles.FileNames
            appRef.Open(fl)
            appRef.DoAction("JDE Brandstore", "Render to Brandstore V3")
    End If

End Sub

但是,当我尝试将其转换为 C# 时...

 private OpenFileDialog launchFiles;


    private void BTN_Photoshop_Click(object sender, EventArgs e)
    {
        launchFiles = new OpenFileDialog();
        launchFiles.Title = "Select files";
        launchFiles.CheckFileExists = true;
        launchFiles.Multiselect = true;
        launchFiles.RestoreDirectory = false;
        object appRef;
        appRef = CreateObject("Photoshop.Application");
        if (launchFiles.ShowDialog == Forms.DialogResult.OK)
        {
            foreach (var fl in launchFiles.FileNames)
            {
                appRef.Open(fl);
                appRef.DoAction("Job1", "CropperSpec");
            }
        }
    }

我遇到了一大堆错误,目前我understand/know无法解决这些错误。

有没有人碰巧知道我哪里出错了,也许(这是一个厚颜无耻的请求......)为我提供一个工作代码块,解释我哪里出错了以及你的代码正在做什么让它工作。

---更新---

感谢 @Mat J 的协助

此处的新版本代码现在可以启动 Photoshop,但无法打开任何文档。

 private OpenFileDialog launchFiles;


    private void BTN_Photoshop_Click(object sender, EventArgs e)
    {
        launchFiles = new OpenFileDialog();
        launchFiles.Title = "Select files";
        launchFiles.CheckFileExists = true;
        launchFiles.Multiselect = true;
        launchFiles.RestoreDirectory = false;

        Type PhotoshopType = Type.GetTypeFromProgID("Photoshop.Application");
        object PhotoshopInst = Activator.CreateInstance(PhotoshopType);
        PhotoshopType.InvokeMember("Visible", BindingFlags.SetProperty, null, PhotoshopInst, new object[1] { true });
        if (launchFiles.ShowDialog() == DialogResult.OK)
        {
            foreach (var fl in launchFiles.FileNames)
            {
                PhotoshopType.open(fl);
            }
        }
    }

非常感谢

如果您使用 .NET 4 或更高版本,您可以将 PhotoshopInst 声明为 dynamic:

dynamic PhotoshopInst = Activator.CreateInstance(PhotoshopType);

然后您将能够调用您知道底层类型支持的方法,而不会引起编译器的抱怨。

PhotoshopInst.Open(fl);