【问题标题】:SendMessage to Notepad++ to open a fileSendMessage 到 Notepad++ 打开一个文件
【发布时间】:2019-06-04 19:42:31
【问题描述】:

我正在尝试使用SendMessage 以编程方式在记事本++ 中打开一个文件,但我没有运气。
我想,因为我可以将文件拖放到 Notepad++ 上并且它会打开它,所以 SendMessage 会起作用。

声明:

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("user32.dll", SetLastError = true)]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);

方法:
我使用 Process.Start 启动 Notepad++:

IntPtr cHwnd = FindWindowEx(pDocked.MainWindowHandle, IntPtr.Zero, "Scintilla", null);
SendMessage(cHwnd, WM_SETTEXT, 0, "C:\Users\nelsonj\Desktop\lic.txt");

SendMessage 执行时,它会将我的文本发送到 Notepad++ 的“编辑”部分,而不是打开文件。
任何帮助都会很棒。

【问题讨论】:

  • 据我所知,notepad++ 作为单实例应用程序正常运行。因此,如果您使用 Process.Start 启动 notepad++,应该会打开一个新选项卡。
  • 几个猜测:老式的 DDE(不,我不记得它是如何工作的)。另一种方法是将文件对象放在剪贴板上,然后将拖放消息(或消息序列)发送到 Notepad++
  • 如果您尝试@Pretasoc 的Process.Start 建议,我很确定您需要将UseShellExecute 设置为true(在ProcessStartInfo 中)。但是,话又说回来……
  • Process.Start 应该是正确的方法

标签: c# winapi notepad++ sendmessage


【解决方案1】:

如果你只是想在Notepad++中打开一个文件,你可以新建一个Process

  • 将要打开的文件的路径设置为ProcessStartInfo类的Arguments属性。
  • FileName 属性设置为您要打开的程序的路径。
  • UseShellExecuteCreateNoWindow 在这里无关紧要,保持默认即可。

using System.Diagnostics;

Process process = new Process();
ProcessStartInfo procInfo = new ProcessStartInfo()
{
    FileName = @"C:\Program Files\Notepad++\notepad++.exe",
    Arguments = Path.Combine(Application.StartupPath, "[Some File].txt"),
};
process.StartInfo = procInfo;
process.Start();
if (process != null) process.Dispose();

【讨论】:

  • 感谢您的回复,但这并不能解决我的问题。在我的应用程序开始时,我打开记事本++并将其嵌入到我的表单中。
  • 您在问题的什么地方提到了这一点或表明您正在使用 SetParent?顺便说一句,我不知道你为什么要这样做,但这是一个非常糟糕的主意。 Parenting Top Windows 总是以悲剧告终。使用 RichTextBox。
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
相关资源
最近更新 更多