2016-06-19 10 views
0

私はPostMessageの仕組みを理解するのに本当に苦労しています。私はウェブ開発者のバックグラウンドから来ています。私はサードパーティのアプリケーションに1つの "a"チャーターを送信しようとしています。私はspy ++を使用してPostMessage(以下のパラメータ)が必要ですが、LparamとWparamの使い方を理解できません。これらのPostMessage LparamとWparamはどのように使用しますか?

これまで私がこれまで行ってきたことです。私は00000041(とspy ++からの他のもの)は実際には16進数であると仮定していますが、フォントの0xを置くのは正しいですか?

私にアルゴリズムのオーバーフローを与える
[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; 

PostMessage(WindowHandle, WM_KEYDOWN, (IntPtr)(0x00000041), (IntPtr)(0x001E0001)); 
PostMessage(WindowHandle, WM_CHAR, (IntPtr)(0x00000061), (IntPtr)(0x001E0001)); 
PostMessage(WindowHandle, WM_KEYUP, (IntPtr)(0x00000041), (IntPtr)(0xC01E0001)); 

...

そして誰もが、これは

+0

ご指定ください。 PostMessage(WindowHandle、WM_KEYUP、(IntPtr)(0x00000061)、(IntPtr)(0xC01E0001)); – jamie

+0

'0xC01E0001'は意図的で、最後のPostMessageの' 0x0'の代わりに '0xC'ですか? – AEonAX

答えて

1

:-PフォーカスでのウィンドウではないためにあなたがWM_CHARを送信しないされsendinputを使用するように私に指示する前に、 WM_CHARは、TranslateMessageのアプリケーションによって合成されます。つまり、アプリケーションはそれをそれ自身に送信します。 WM_CHARのみを送信するか、WM_KEYDOWNとWM_KEYUPのみを送信します。 KEYUPを送信する場合は、KEYDOWNを送信する前にアプリケーションがWM_CHARを合成できるようにするために遅延が必要です。そうでない場合、処理が順不同です。それでも非同期キーの状態に問題があります。しかし、長短は:PostMessageを使用してキーボード入力を合成することはできません。ここで

は、いくつかの背景の読書です:

あなたの最善の策は、アプリケーションのトンを置くために、おそらくですo前景を使用し、SendInputを使用します。

関連する問題