問題
これは、バックグラウンドでキーストロークを送信する私の機能です。
class SendMessage
{
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
public static void sendKeystroke(string appName)
{
const int WM_KEYDOWN = 0x100;
IntPtr hWnd = FindWindow(null, appName);
IntPtr editx = FindWindowEx(hWnd, IntPtr.Zero, "edit", null);
PostMessage(editx, WM_KEYDOWN, (IntPtr)Keys.A, (IntPtr)0);
}
}
このコードはnotepad
、たとえば let appName = "notepad" の場合に正常に機能します。
でも、他のアプリではなんとかできるので、LINEアプリで練習中です。
写真でわかるようにlpszClass variable
= "edit" (小さな赤い丸) はメモ帳用です。
LINEアプリで検索する必要があるので、WinSpy++
それらのクラス名を取得するために使用します。
そのクラス名は「ATL:00B53BE8」(大きな赤い丸) で、メッセージを入力できることがわかりました。
WinSpy++ で入力すると、Line テキストボックス (青い丸) に表示されます。
結論は
キャプチャクラス名を「編集」に置き換えようとしましたが、希望はありません。
キャプチャ クラス名が使用できない理由がわかりません。ヘルプまたはヒントを教えてください。
システムアプリの階層が違うのかどうかはわかりません(ピンクのやつ)
FindWindowEx のどのパラメーターがそれほど意味があるのか わかりません。
私の最終的な目標は、他のアプリケーションに集中することなく、キーストロークを他のアプリケーションに送信することです。