Я застрял на очень простой операции: копирование кода из MetaEditor. Уже 2 дня пытаюсь победить, только, по-видемому, это сильнее меня. Хотя мой вопрос и не относится к MQL5, ответ на него будет ценнен всем пользователям продуктов MetaQuotes для Windows. Я использую функциональность Windows SDK для открытия файла в MetaEditor. Запускаю процесс metaeditor64.exe в C#, посылаю команду "-open" с именем файла, посылаю комбинацию клавиш Ctrl+A для выделения текста. Все работает как часы. Дальше труба. MetaEditor не воспринимает комбинацию Ctrl+C. Если пальцами с клавы, то работает. С помощью кода нет. Что я уже испробовал:
1. Импортирую user32.dll. С помощью функции GetForgroundWindow() нахожу активное окно MetaEditor. Находит без проблем. Так же без проблем могу найти заголовок окна с помощью GetWindowText(). Затем с помощю keybd_event симулирую Ctrl down, C down, C up, Ctrl up - эквивалент Ctrl+C. Файл открыт, текст выделен, буфер обмена ПУСТ. Также пробовал InputSimulator, что то же самое и что также неифективно.
2. Пробовал посылать Windows Messages вот так:
string copied;
StringBuilder sb = new StringBuilder(10000);
constint WM_GETTEXT = 13;
// Find foreground window
IntPtr hWnd = GetForegroundWindow();
uint processId;
// Bring focus to active controluint activeThreadId = GetWindowThreadProcessId(hWnd, out processId);
uint currentThreadId = GetCurrentThreadId();
AttachThreadInput(activeThreadId, currentThreadId, true);
IntPtr focusedHandle = GetFocus();
AttachThreadInput(activeThreadId, currentThreadId, false);
//Get the text from the active window into the stringbuilder
SendMessage(focusedHandle, WM_GETTEXT, sb.Capacity, sb);
copied = sb.ToString();
return copied;
Этот код фокусирует handle на активный элемент программы. Так как текст выделен в файле, этим элементом должен быть Edit Control или Rich Edit Control. Код прекрасно работает с блокнотом, возвращая написанное. С MetaEditor тот же код возвращает string.Empty. Напомню, все функции в коде, родные члены Windows API.
Вопросы к разработчикам: возможна ли работа внутренностей MetaEditor с Windows API? Понимает ли MetaEditor стандартные сообщения от Windows, такие как WM_GETTEXT? Как MetaEditor работает с буфером обмена? Возможна ли кодовая операция копирования выделенного из MetaEditor?
Я начинающий, так что возможно какие-то из моих вопросов отдают глупостью. Это от неопытности и незнания. Помогите, пожалуйста!
Здравствуйте, MQL5 Community!
Я застрял на очень простой операции: копирование кода из MetaEditor. Уже 2 дня пытаюсь победить, только, по-видемому, это сильнее меня. Хотя мой вопрос и не относится к MQL5, ответ на него будет ценнен всем пользователям продуктов MetaQuotes для Windows. Я использую функциональность Windows SDK для открытия файла в MetaEditor. Запускаю процесс metaeditor64.exe в C#, посылаю команду "-open" с именем файла, посылаю комбинацию клавиш Ctrl+A для выделения текста. Все работает как часы. Дальше труба. MetaEditor не воспринимает комбинацию Ctrl+C. Если пальцами с клавы, то работает. С помощью кода нет. Что я уже испробовал:
1. Импортирую user32.dll. С помощью функции GetForgroundWindow() нахожу активное окно MetaEditor. Находит без проблем. Так же без проблем могу найти заголовок окна с помощью GetWindowText(). Затем с помощю keybd_event симулирую Ctrl down, C down, C up, Ctrl up - эквивалент Ctrl+C. Файл открыт, текст выделен, буфер обмена ПУСТ. Также пробовал InputSimulator, что то же самое и что также неифективно.
2. Пробовал посылать Windows Messages вот так:
Этот код фокусирует handle на активный элемент программы. Так как текст выделен в файле, этим элементом должен быть Edit Control или Rich Edit Control. Код прекрасно работает с блокнотом, возвращая написанное. С MetaEditor тот же код возвращает string.Empty. Напомню, все функции в коде, родные члены Windows API.
Вопросы к разработчикам: возможна ли работа внутренностей MetaEditor с Windows API? Понимает ли MetaEditor стандартные сообщения от Windows, такие как WM_GETTEXT? Как MetaEditor работает с буфером обмена? Возможна ли кодовая операция копирования выделенного из MetaEditor?
Я начинающий, так что возможно какие-то из моих вопросов отдают глупостью. Это от неопытности и незнания. Помогите, пожалуйста!