実行中の外部アプリケーションと対話し、特定のキープレスとリリースを送信する必要があります。SendKeys クラスを使用しようとしましたが、キープレスが外部アプリケーションへの即時のキーリリースと共に送信されるため、仕事の半分しか行いません。
外部アプリの「キー押し下げ」をシミュレートできるようにする必要があります。私は今、SendMessage を使おうとしていますが、今のところまったく機能しません :( エラーも発生しません。
実行中の外部アプリケーションと対話し、特定のキープレスとリリースを送信する必要があります。SendKeys クラスを使用しようとしましたが、キープレスが外部アプリケーションへの即時のキーリリースと共に送信されるため、仕事の半分しか行いません。
外部アプリの「キー押し下げ」をシミュレートできるようにする必要があります。私は今、SendMessage を使おうとしていますが、今のところまったく機能しません :( エラーも発生しません。
わかりました、事件は解決しました。実際に VC++ をインストールしてコアの keybd_event() 関数を試してみたところ、機能した後、C#で賢く使用できるようになりました。
これがコードで、驚くべきことに非常に単純です。dll をインポートできるようにするには、これをコードに追加する必要があります。
このコードは、「1」ボタンを 3 秒間押し続けてから、1 秒間離してプロセスを繰り返します。
(コードの強調表示がおかしくなりました :/, 'namespace ...' から最後の括弧 '}' にコピーしてください)
public class Program
{
[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan,
uint dwFlags, UIntPtr dwExtraInfo);
private static void Main(string[] args)
{
while (true)
{
keybd_event((byte)0x31, (byte)0x02, 0, UIntPtr.Zero);
Thread.Sleep(3000);
keybd_event((byte)0x31, (byte)0x82, (uint)0x2, UIntPtr.Zero);
Thread.Sleep(1000);
}
}
}
PostMessageを使用して送信WM_KEYDOWN
してみましたWM_KEYUP
か?
編集
このように使用します (私は C++ で書いていますが、PInvokeと ..NET を簡単に使用できます)。
HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);
公式APIはSendInput
です。