6

私は Flash ゲーム用のボットを作成しており、すべてのAutoIt関数を C# コードにインポートする方法を見つけました。

string title = "Minesweeper";
string full = auto.WinGetTitle(title,"");
string handle = auto.WinGetHandle(full, "");
if (auto.WinExists(full, "") == 1)
    textBox1.Text = "window exists";
addressBox.Text = full;

for (int r = 1; r < 40; r++)
{
    auto.ControlClick(full, "", "", "left", 2, r * 10, r * 10);
    //auto.ControlClick(handle, "", "", "left", 2, r * 10, r * 10);
}

(コメントされていないものはハンドル付きのものである必要があり、その逆も同様であると確信していますが、これはMinesweeperで機能します。)

したがって、マインスイーパで機能し、アクティブなウィンドウである必要はありません。Flash ゲームで動作させようとすると、Internet Explorer ウィンドウをアクティブにする必要があります。これは Flash が必要とするものですか、それともゲームが最小化されているときに動作させるためにできることはありますか?

これは、AutoIt インポートを使用して行う必要はありません。ある時点で user32 からのSendMessageも試しましたが、Flash コンテンツではまったく機能しませんでした。

Flash サイトやマインスイーパではなく、ランダムな Web サイトでこれをテストしたところ、何らかの理由で Autoit スクリプト プログラム内から実行するとコードが機能しますが、C# プログラムからは機能しません...

2012 年 6 月 20 日: これは、ハンドルが渡される方法と関係があると確信しています。AutoIt EXE ファイルを呼び出し、C# コードから取得したハンドルを引数として使用していくつかのテストを行いました0x。その場合、インポートされた関数はハンドルの文字列入力に依存しているため、何をすべきかわかりません。

4

2 に答える 2

4

ウィンドウハンドルと変数処理の問題を除外するために試してみたいことがあります。WinGetTitle を使用する必要はありません。「マインスイーパ」ウィンドウ タイトルは正常に動作するはずです。Windows 7 の AutoIt v3 ウィンドウ情報ツールによると、マインスイーパ ウィンドウのタイトルとクラスは両方ともマインスイーパです。ハードコーディング

auto.ControlClick("[TITLE:マインスイーパ; クラス:マインスイーパ], "", "", "左", 2, r * 10, r * 10);

動作する可能性があります。その仕組みの詳細については、AutoIt ヘルプ ファイルの詳細なウィンドウの説明を参照してください。それでもうまくいかない場合は、ヘルプ ファイルでWinTitleMatchModeを調べてください。これにより、ウィンドウ タイトルのマッチングをより簡単にするための寛大なルールを設定できます。

AutoIt X は AutoIt の DLL/COM コントロール バージョンで、DLL/COM をサポートする任意の言語に AutoIt を追加する方法です。C# で AutoIt をどのように使用するのか疑問に思っている人がいる場合に備えて。残念なことに、AutoIt X はメイン言語からの開発とテストにおいてしばしば遅れをとっています。AutoItXプロジェクトの背景を説明するだけで、問題がバグによって引き起こされたと考える理由はありません. まだお持ちでない場合は、この質問のコピーを ActiveX/COM ヘルプとサポート (AutoItX)フォーラムに投稿してください。私の長年の経験で AutoIt の最も優れた点の 1 つは、コミュニティです (ここにはあまり移動していません)。その特定のフォーラム セクションは、言語の開発者の何人かが頻繁に訪れ、喜んで助けてくれます。

6 月 20日のメモに関しては、AutoIt はすべての変数を文字列のように扱い、それが何か特別なものであることを検出します。あなたが言及した0xで始まらない限り、値が16進数であることはわかりません。これは、過去に私にあらゆる種類の奇妙な問題を引き起こしました。AutoIt が変数を正しく評価できるようにするために、変数にゼロを追加する必要が何度かありました。これは AutoIt3 ではあまり起こりませんが、心に留めておくべきことがあります。

AutoIt 参照コードが必要な場合は、AutoIt フォーラムの多くのメンバーが Minesweeper ボットを作成しており、チェックアウトすると役立つ情報が表示される可能性があります。

于 2009-06-21T14:50:43.810 に答える
1

C# プログラムを管理者として実行していることを確認してください。これは、一方の方法が機能していて、もう一方の方法が機能していない場合に私が見ることができる唯一の違いです。

于 2009-06-20T14:23:25.253 に答える