3

私は、(ソース コードなしで) 与えられた MFC アプリケーションを持っています。このアプリケーションは、[更新] ボタンのあるウィンドウを開き、クリックすると非常に長い更新を実行します。

ウィンドウが作成されたとき (または DoModal などの他の場所) にメッセージがプログラムに送信され、ボタンが押されたと認識されるようにプログラムを変更したいと思います。

私はしばらくの間、Ida Pro と OllyDbg でこれをいじっていましたが、役に立ちませんでした。おそらくPumpMessageを使用することを検討しましたが、これは成功しませんでした。

何かアドバイス?

4

4 に答える 4

3

二次的な「マクロ」プログラムを使用するという考えが気に入らない場合は、元のプログラムのバイナリにパッチを適用して、ボタンの BM_CLICK ハンドラを呼び出すことができます。呼び出し用のスペース (引数なしで最小 5 バイト) を見つけることができる場合は、OllyDbg だけでこれを行うことができます (コードを編集した後、それを選択し、右クリックから [実行可能ファイルにコピー] -> [選択] を選択します)。メニュー)。それ以外の場合は、PE エディター (LordPE や PE Tools など) で新しいコード セクションを作成し、そこにコードを追加する必要があります (通常、プログラム内の呼び出しをセクションへのジャンプに変更する必要があります。元の呼び出しとボタンのクリック ハンドラーの呼び出しを実行し、パッチを適用したジャンプの後に元の位置に戻ります)。

于 2009-06-10T17:47:19.073 に答える
1

テスト自動化手法を使用してこれを行う方法はいくつかありますが、最も簡単なのは、必要なボタンのウィンドウ ハンドルを取得してBM_CLICKメッセージを送信することです。これは、Windows での C/C++ の実用的な知識があることを前提としています。そうでない場合は、.NET またはその他のテクノロジを使用する他の手段があります。私は ida-pro や ollydbg に詳しくありません。

于 2009-06-10T17:36:20.593 に答える
0

これを行うには、この perl モジュール win32::guitest を参照してください。これを使用して perl スクリプトを記述し、プログラムに埋め込むことができます。または、必要なニーズをラップして使用する win32 API を使用できます。

于 2009-12-04T10:27:44.290 に答える
-1

それを起動し、 SendInput(...)を使用してマウス クリックを送信する 2 番目のプログラムを作成するだけ です。

于 2009-06-10T17:40:00.697 に答える