| ■No5861 (れい さん) に返信
> せっかく皆さんがアドバイスしているのですから、 > どのアドバイスを適用しチェックを行ったのか、きちんと書かないと > 問題と症状と解決案がぐちゃぐちゃです。
大変申し訳ありません. 反省し,現在の状況を纏めて見たいと思います.
■lparamの型に関して lparamの型をintにして実行してみました.
=== [DllImport("user32.dll", CharSet=CharSet.Auto)] private extern static int SendMessage(IntPtr hwnd, IntPtr wMsg, IntPtr wParam, int lParam);
private const int VK_F8 = 0x77;
public void SendKey(int handle) { int param = 0; SendMessage((IntPtr)handle, (IntPtr)WM_KEYDOWN, (IntPtr)VK_F8, param); SendMessage((IntPtr)handle, (IntPtr)WM_KEYUP, (IntPtr)VK_F8, param); } ===
この様にしましたところ,環境実行・exe実行共に受信アプリ側では全く反応がありません. ただし,自分で適当なアプリをVB6で作成して受信してみたところ,正しい値が来ているようには見えました.
■WM_SYSKEYDOWNの利用 === private const int WM_SYSKEYDOWN = 0x104; private const int WM_SYSKEYUP = 0x105; ===
上記のように宣言を行って,WM_KEYDOWNとWM_KEYUPの代わりに用いてみました. その他のコードは先に記述したものです. そうしても,症状は変わらず.なにも反応がないままでした.
■SendInputの利用 SendInputを利用すると,環境実行,exe実行に関わらず正しく動作しました. ただし,受信側画面内のテキスト入力可能な部分にフォーカスが当たっている時のみで, そこからフォーカスを外すと,反応がなくなります.
これは,私が期待している動作とは異なってしまっております. どちらかといえば,テキスト入力可能部分にフォーカスが無い時にこそ,反応が起こって欲しいと 考えております.
■現状で起こる症状 ・lparamの型をref int もしくは ref IntPtrにした場合 環境実行からだと,正しく送信される. exeを作成してそれを起動すると何を送信しても「e」が飛んだ時の動作になってしまう. (ただし,ビルドしなおすを違う文字になることがある(現在起きたのは「ESC」「r」)
環境実行からでも,デバッグオプションで,Visual Studioホスティングプロセスを有効にする,のチェックをはずすと exe実行と同じ症状になる.
間違っているとのご指摘をいただいておりますが,現状確認のために記載してあります.
・lparamの型をintもしくはIntPtrにした場合 送信側では送信したことになっているが,受信側では全く反応がない(誤作動すらありません). ただし,VB6で適当なアプリを作って受信してみると正しく送信されている.
以上拙い部分が多いと思いますが,よろしくお願いします.
|