1

管理されていないアプリケーションから関数を挿入および迂回するためのC#ライブラリであるEasyHookを使用しています。GetDlgItemTextAにフックしようとしています。これは、引数を取ります。

UINT WINAPI GetDlgItemText(
  __in   HWND hDlg,
  __in   int nIDDlgItem,
  __out  LPTSTR lpString, 
  __in   int nMaxCount
);`

私のフックでは、私はそれを次のようにキャストしています:

[DllImport("user32.dll",
// CharSet = CharSet.Unicode,
SetLastError = true,
CallingConvention = CallingConvention.StdCall)]
static extern uint GetDlgItemTextA(IntPtr hWin, int nIDDlgItem, StringBuilder text, int MaxCount);

そして私のフックは:

static uint DGetDlgItemText_Hooked(IntPtr hWin, int nIDDlgItem, StringBuilder text, int MaxCount)
{
    // call original API...
    uint ret = GetDlgItemTextA(hWin, nIDDlgItem, text, MaxCount);
    MessageBox.Show(text.ToString());
    return ret;
}

残念ながら、これが呼び出された瞬間に、フックされたアプリケーションがクラッシュします。この関数にうまく接続するために使用できるより良いキャストはありますか?ありがとう!

EasyHookセットアップの動作条件をコンパイル、編集、および確認しました。これは単なるケーシングとフックのみです。

4

1 に答える 1

0

さて、私が行ったコードは機能したようですが、唯一の違いは、不明な理由でtrycatchステートメントをフックに入れなければなりませんでした。StringBuilderはLPCSTRから正しく変換されてLPCSTRに戻され、プログラムはそれを正常に読み取ります。プログラムは今はクラッシュしないので、これを自分の答えとして追加しようと思いました。

于 2010-06-12T16:19:58.090 に答える