2
私はPostMessage
を使って、最小化されたfirefoxインスタンスに鍵を送信しています。以下のコードは大文字ではうまく動作しますが、Lowercaseを送信すると送信された各文字のうち3文字を送信するようです。小文字キーを送信するときにPostMessageが複数のキーを送信するのはなぜですか?
これは、「c」文字を送信するためのカットダウンの例です。私はそれがメモ帳で同じことをするので、Firefoxではないことを知っています。
これは私が手動でウィンドウ
<000001> 000204B6 P WM_KEYDOWN nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000002> 000204B6 P WM_CHAR chCharCode:'99' (99) cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000003> 000204B6 P WM_KEYUP nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:1 fUp:1
に入力を送信するときのためspy++
出力は、この私のコードは、それを送信するときのためspy++
出力が
<000001> 000906D4 P WM_KEYDOWN nVirtKey:'C' cRepeat:0 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000002> 000906D4 P WM_CHAR chCharCode:'99' (99) cRepeat:0 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000003> 000906D4 P WM_KEYUP nVirtKey:'C' cRepeat:0 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000004> 000906D4 P WM_CHAR chCharCode:'99' (99) cRepeat:0 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000005> 000906D4 P WM_CHAR chCharCode:'99' (99) cRepeat:0 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
私がここで間違って何をしていているのですか?
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
const int WM_KEYDOWN = 0x100;
const int WM_KEYUP = 0x101;
const Int32 WM_CHAR = 0x0102;
IntPtr val = new IntPtr((Int32)'c');
PostMessage(WindowHandle, WM_KEYDOWN, (IntPtr)(val - 0x020), new IntPtr(0));
PostMessage(WindowHandle, WM_CHAR, (IntPtr)val, new IntPtr(0));
PostMessage(WindowHandle, WM_KEYUP, (IntPtr)(val - 0x020), new IntPtr(0));
「cc」が送信され、spy ++出力が間違って表示されます。私はlParamを正しく理解する必要があります。それは私がC#/デスクトップ開発の初心者として私には全く外国人だと思います。 – jamie
私はSpy ++のLparamとWparamを持っていますが、それらの使い方はわかりません! PostMessage(WindowHandle、WM_KEYDOWN、(IntPtr)(00000041)、(IntPtr)(001E0001)); PostMessage(WindowHandle、WM_CHAR、(IntPtr)(00000061)、(IntPtr)(001E0001)); PostMessage(WindowHandle、WM_KEYUP、(IntPtr)(00000061)、(IntPtr)(C01E0001)); – jamie
PostMessage(WindowHandle、WM_KEYDOWN、(IntPtr)(0x00000041)、(IntPtr)(0x001E0001)); PostMessage(WindowHandle、WM_CHAR、(IntPtr)(0x00000061)、(IntPtr)(0x001E0001)); PostMessage(WindowHandle、WM_KEYUP、(IntPtr)(0x00000061)、(IntPtr)(0xC01E0001)); これは私にアルゴリズムのオーバーフローをもたらします。 – jamie