Когда я пытаюсь вставить текст в текстовое поле другой программы, текст вставляется, но программа не распознает его.Вставка текста с помощью SendMessage
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
const uint WM_SETTEXT = 0x000C;
IntPtr text = Marshal.StringToCoTaskMemUni("100");
IntPtr thisWindow = FindWindow(null, "AnotherWindow");
IntPtr handle = FindWindowEx(thisWindow, IntPtr.Zero, "AnotherTextBox", null);
SendMessage(handle, WM_SETTEXT, IntPtr.Zero, text);
Marshal.FreeCoTaskMem(text);
Возможно, мне следует отправить родительскому сообщению сообщение о том, что текстовое поле обновлено? Как это:
//Wrong code, because I do not know how correctly send a message
SendMessage(handle, WM_COMMAND, EM_SETMODIFY, handle);
Используйте 'System.Windows.Automation', в частности, [' ValuePattern.SetValue'] (http://msdn.microsoft. ком/EN-US/библиотека/ms750582.aspx). –
Microsoft UI Automation доступна в WPF, я использую Windows.Forms. – streamdown
Вы можете использовать автоматизацию пользовательского интерфейса из программы Forms. Черт, я использовал его из консоли. –