WinApi/винапи отправка нажатий на клавиатуру.
В случае с Foreground окном достаточно и IntPtr самого окна.
Но в случае Background окна этого недостаточно. Нужно искать IntPtr поля окна, а не самого окна. А потом уже в него делать SendMessage();
Соответственно это и есть причиной неудачи.
using Keyboard;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace TestApp
{
class Program
{
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, String lpWindowName);
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint uMsg, int wParam, string lParam);
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
const int WM_SETTEXT = 0X000C;
static void Main(string[] args)
{
Process.Start("notepad.exe");
Thread.Sleep(5000);//на время этого ожидания сделай другое окно активным
var dialogHWnd = FindWindow(null, "Untitled - Notepad");
IntPtr notepadTextbox = FindWindowEx(dialogHWnd, IntPtr.Zero, "Edit", null);
SendMessage(notepadTextbox, WM_SETTEXT, 0, "This is the new Text!!! прапрао");
Thread.Sleep(1000);
}
}
}
Spy.exeкоторая играется окнами, и поиграйте ею с окнами. – nick_n_a Jan 23 '19 at 08:36