3

実行中の外部アプリケーションと対話し、特定のキープレスとリリースを送信する必要があります。SendKeys クラスを使用しようとしましたが、キープレスが外部アプリケーションへの即時のキーリリースと共に送信されるため、仕事の半分しか行いません。

外部アプリの「キー押し下げ」をシミュレートできるようにする必要があります。私は今、SendMessage を使おうとしていますが、今のところまったく機能しません :( エラーも発生しません。

4

4 に答える 4

3

わかりました、事件は解決しました。実際に 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);
        }
    }
}
于 2009-12-16T22:02:51.637 に答える
2

PostMessageを使用して送信WM_KEYDOWNしてみましたWM_KEYUPか?

編集

このように使用します (私は C++ で書いていますが、PInvokeと ..NET を簡単に使用できます)。

HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);
于 2009-11-21T23:55:04.983 に答える
0

公式APIはSendInputです。

于 2009-11-22T00:23:25.063 に答える