Отправить сообщение в Notepad ++, чтобы открыть файл - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь программно открыть файл в блокноте ++, используя 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);

Метод:
Я запускаю Notepad ++, используя Process.Start:

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

При выполнении SendMessage он отправит мой текст в раздел «Редактирование» Notepad ++ вместо открытия файла.
Любая помощь будет великолепна.

1 Ответ

0 голосов
/ 10 января 2019

Если вы просто хотите открыть файл в Notepad ++, вы можете просто запустить новый Процесс :

  • задайте путь к файлу, который вы хотите открыть, свойству Arguments класса ProcessStartInfo .
  • свойство FileName установлено на путь к программе, которую вы хотите открыть.
  • UseShellExecute и CreateNoWindow здесь не имеют значения, оставьте значение по умолчанию.

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();
...