【问题标题】:Trying to create a new tab from notepad++ .NET plugin尝试从记事本++ .NET 插件创建一个新选项卡
【发布时间】:2013-05-08 07:10:02
【问题描述】:

我正在编写一个 Notepad++ 插件,并且需要为一个新文件创建一个新选项卡。我无法在文档中找到任何涉及此内容的内容。

我最接近的是:

IntPtr curScintilla = PluginBase.GetCurrentScintilla();
IntPtr documentPtr = Win32.SendMessage(curScintilla, SciMsg.SCI_CREATEDOCUMENT, 1, 1);
Win32.SendMessage(curScintilla, SciMsg.SCI_SETDOCPOINTER, 0, documentPtr);

但这在当前选项卡中起作用(我认为它正在创建一个新文档并将当前选项卡指向那个)。

我正在阅读 http://www.scintilla.org/ScintillaDoc.html 的“多视图”部分,但除了上述内容之外,我无法获得任何进一步的信息。我通常不在 C# 甚至 Windows 中工作,所以我可能会遗漏一些明显的东西。我尝试查看现有插件的示例,但其中大多数似乎是用 C++ 编写的,而不是 C#。

任何指导表示赞赏。

谢谢。

【问题讨论】:

    标签: c# plugins notepad++ scintilla


    【解决方案1】:

    我还没有经历过闪烁。但我使用了简单的方法。我使用它来创建,您可能需要查找更多信息以发送消息。

    如果目录中不存在文件,请在开始之前创建文件。否则它将要求用户确认。

    流程的参数应该与第一个和下一个选项卡不同:

    File.Create(yourNewFile); //or yourNextNewFile in case of second, third, so on..
    Process notepadPlus = new Process();
    
    notepadPlus.StartInfo.FileName = "notepad++.exe";
    

    对于第一个文件,使用 as(带有新会话的新实例 - 没有任何旧选项卡):

    notepadPlus.StartInfo.Arguments = @"-multiInst -nosession yourNewFile";
    

    对于下一个文件使用 as(只会创建新标签):

    notepadPlus.StartInfo.Arguments = @"yourNextNewFile";
    
    /* Start the process */
    notepadPlus.Start();
    

    【讨论】:

    • 您好,感谢您的回复。不过,我不认为这对我有用。我已经运行了一个记事本++ 实例——用户已经在与我的插件进行交互。我需要在现有的 npp 实例中创建新选项卡。
    • 那么你可以只使用第二个选项!即只有文件名选项,所有其他行保持不变。无论如何它只得到实例,对吧?
    • 这对我来说并不“正确”,但它确实有效。为你打勾,谢谢!
    【解决方案2】:

    您必须不向 Scintilla 控件发送消息,而是向记事本本身发送消息。 像这样:

    Win32.SendMessage(PluginBase.nppData._nppHandle, NppMsg.NPPM_MENUCOMMAND, 0, NppMenuCmd.IDM_FILE_NEW);
    

    更多信息here 包括使用的常量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多