質問

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);
}

(コメントされていないものがハンドル付きのものであるべきであり、その逆も同様であると確信していますが、これは次の場合に機能します マインスイーパ.)

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

これは、AutoIt インポートを使用して行う必要はありません。私は試した メッセージを送る ある時点では user32 からもアクセスできましたが、Flash コンテンツではまったく機能しませんでした。

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

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

役に立ちましたか?

解決

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

auto.ControlClick("[タイトル:マインスイーパー;クラス:Minesweeper]、 ""、 ""、 "left"、2、r * 10、r * 10);

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

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

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

AutoIt リファレンス コードが必要な場合は、 AutoIt フォーラムがマインスイーパー ボットを作成しました チェックしてみると、役立つものが見つかるかもしれません。

他のヒント

あなたは管理者として、あなたのC#のプログラムを実行していることを確認してください。これは、私は1つの方法の作業や他のではないために見ることができる唯一の違いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top