私はMicrosoftKB318804の例を見ていましたが、それらは「現在の」アプリケーションのthreadIdを使用しています!!! 動作するC++コードがいくつかありますが、それを書き直す必要があります。そこにいる間にC#で書き直したいと思います。それが行う1つのことは、次のようにターゲットアプリケーションのthreadIdを取得することです。
uint lastId = GetWindowThreadProcessId(targetHandle, IntPtr.Zero);
いいえ、GetCurrentThreadは正しい呼び出しではありません。これは、リモートアプリケーションのスレッドIDを取得しているためです。これは、今日行っていることであり、やりたいことです。targetHandleは、そのリモートアプリケーションへのハンドルです。
このlastIdをintにキャストし、C#コードを接続しようとしましたが、SetWindowsHookExは0を返し、失敗します。AppDomain.GetCurrentThreadId()のみが機能しているようです(非推奨ですが、置換も機能しません)。
それでは、C ++コードを使用する必要がありますか?または、C#で動作させる方法はありますか?
現在、C ++のフックハンドラーを他のアプリケーションに登録し、イベントを取得しています。