==================================================================================================== WindowController Ver 1.0.2.0 ==================================================================================================== ■説明  ウィンドウにマウスやキーボード操作等のメッセージを送って制御するツール及び.NET用ライブラリ。  キーボード操作・マウス操作を記録し、C#コードを生成する機能もあります。  また、ウィンドウに関する様々な情報を取得できますので、ソフトの解析などにも役立つかもしれません。    このツールはGUI部分とDLL部分に分かれています。  GUIから行えるほとんどの操作は、.Net用のDLLで実装されていますので、  このDLLを利用することで、他のソフトにWindowControllerの機能を組み込むことも可能です。  また、GUIにはDLLを利用するためのC#コードを生成する機能がありますので、効率的に作業できます。  生成したコードはGUI上からコンパイル・実行できます。(.NET Frameworkにコンパイラも含まれています)    このソフトのGUI又はDLLが提供する主な機能は下記の通りです。  ・マウス入力送信  ・キーボード入力送信  ・ウィンドウメッセージ送信  ・ウィンドウテキスト取得・設定  ・ウィンドウ操作(閉じる・最小化…)  ・ウィンドウ位置・大きさ取得・設定  ・ウィンドウスタイル取得・設定  ・ウィンドウ透過状態取得・設定(取得はWindowsXP以上)  ・ウィンドウ画像取得(全体のBitmap, 指定された座標のColor)  ・メニュー項目の取得・設定・選択・テキスト保存  ・コンボボックス項目の取得・設定・選択・テキスト保存  ・リストボックス項目の取得・設定・選択・テキスト保存  ・リストビュー項目の取得・設定・選択・テキスト保存  ・タブ項目の取得・設定・選択・テキスト保存  ・ツリービュー項目の取得・設定・選択・テキスト保存  ・ボタン・チェックボックスの状態取得・設定  ・ウィンドウに枠を表示する  ・マウス・キーボード操作をブロックする  ・マウス・キーボード操作の記録・C#コード生成(DLL側にはありません) ■動作環境  ・Microsoft Windows xpでのみ動作確認しています。(2000でも動くようです、Me/98は動きません、Vistaは不明です)  ・Microsoft .NET Framework 2.0を利用しています。(Windows Updateからインストールできます)  ・WindowController.dllの利用はVisual C# 2005でのみ確認しています。 ■インストール・アンインストール  インストーラはありません。適当なフォルダに全てのファイルを展開して下さい。  起動するには「WindowControllerGUI.exe」を実行して下さい。  また、アンインストールはフォルダごと削除して下さい。 ■使用方法(GUI)  詳細については、画面上の各項目にマウスをあわせるとヒントが表示されますので、  そちらを参考にして下さい。以下は利用の大まかな流れです。    【操作対象ウィンドウの選択】   (a)ウィンドウ一覧から選択    画面左側に表示されているウィンドウ一覧ツリーから、目的のウィンドウを選択して下さい。    赤く表示されているウィンドウは、GetChild系で得られる子と、GetParentで得られる親が    一致しないウィンドウです。(PG作成しないなら気にする必要ないです)       (b)ファインダその1    画面左上に表示されている「FinderA」を目的のウィンドウまでドラッグ&ドロップして下さい。       (c)ファインダその2    画面左上に表示されている「FinderB」をクリックすると、選択モードに入り赤枠が表示されますので、    目的のウィンドウまで移動した後、SHIFTキーを押すか、赤枠中央の赤い点をクリックして下さい。    こちらを使えば、クリックによって画面遷移しないと現れないウィンドウも取得できます。    【ウィンドウの情報取得・設定】   画面中央のタブより、目的の項目を選択して下さい。   詳細については、マウスをあわせると説明が表示されますので、そちらを参考にして下さい。    【コードの生成・コンパイル】   マウス/キーボード/メッセージ/Menuタブには、コード生成機能があります。   設定を選択した後、「ソースに追加」ボタンを押下すると、画面下側のソースコード欄に追加されます。   画面右下の「コンパイル」ボタンを押下するとソースがコンパイルされます。   出力ファイル名は「Output.exe」です。このexeの動作には「WindowController.dll」が必要です。   コンパイルする際の参照設定・オプションは、「設定」タブにあります。   ファイル(*.cs)を画面上へドラッグ&ドロップすることでソースを読み込めます。 ■使用方法(キーボード操作・マウス操作記録)  このソフトの操作記録機能は、完全なものではありません。  記録後に、利用者側で適切に修正しなければ、正しく再生できません。  以下に利用の大まかな流れを示します。    【記録開始】   画面上部の「記録」ボタンを押下したあと、記録したい操作を行って下さい。    【記録終了】   ディスプレイ左上の「END」ボタンを押下して下さい。    【記録内容編集】   必要に応じて記録内容を編集して下さい。   編集を開始する前に「Save」ボタンで記録内容を保存しておく事をお勧めします。   以下に編集の流れの例を示しながら機能を説明します。      [1]不要な操作の削除    記録機能では、マウス操作とキーボード操作を全て記録しています。    そのため、関係の無いウィンドウへのマウス移動なども記録されてしまいます。    ですので、まずは関係のない操作を削除します。        (a)「関連Process設定」ボタン     操作に関わったプロセスの一覧が表示されますので、     関係の無いプロセスを選択して削除ボタンを押下して下さい。        (b)「マウス移動全削除」ボタン     マウス移動が全て削除されます。     マウス移動だけで画面遷移する部分(メニューやポップアップ等)があると、     正しく動作しなくなりますのでご注意下さい。        (c)「マウス移動統合」ボタン     マウス移動が連続している場合、連続している中で最後の移動を残して、     他は全て削除し、最後の移動位置まで徐々に移動するように変更します。     こちらも、マウス移動だけで画面遷移する部分にご注意下さい。        (d)「最適化?」ボタン     マウス操作・キーボード操作をまとめます。     −マウスのUp/Down操作が短時間で行われた場合、Click・DblClickにする。     −マウスのホイール操作が短時間で連続した場合、一つの行にする。     −キーボードのUp/Down操作が短時間で行われた場合、Clickにする。     −キーボードの同じ操作が短時間で行われた場合、一つの行にする。        (e)個別削除     操作一覧リストから削除したい操作を選択し、     Delキー又は右クリックのポップアップより削除を選択して下さい。       [2]操作と操作の間隔の編集     操作と操作の間隔は、記録した時点での間隔のままになっています。     間隔を編集することで、無駄な時間を省ける場合があります。     操作一覧リストから間隔を設定したい操作を選択し、     画面右上の間隔テキストボックスの値を修正し、ENTERキーを押して下さい。        [3]ウィンドウ取得設定の編集     このソフトでは、親子関係の階層構造と、Class/Text/SameNumで、     ウィンドウを識別しています。(詳しくは注意・補足などをご覧下さい)     操作対象ウィンドウと、その祖先ウィンドウについても、     Class/Text/SameNumを正しく設定する必要があります。     「Window一覧」タブを開き、ウィンドウのツリービューから、     対象のウィンドウを選択し、画面左下の各項目を設定して下さい。      [4]PointMode設定     このソフトでは、マウス操作を、各ウィンドウ内の座標で表します。     ですので、ウィンドウの表示位置が変わっても動作しますが、     ウィンドウのサイズが変わると、ウィンドウ領域内の表示も変わるので、     意図した座標と違う座標に対して操作してしまう場合があります。     各ウィンドウのPointModeを適切に設定することで、     ウィンドウのサイズ変更にも対応できる場合があります。     画面上部の「PointMode設定」ボタンを押下すると、設定画面が表示されます。     マウス操作に関わったウィンドウの一覧が表示されますので、     ウィンドウを選択し、右上のリストから適切なPointModeを選択して下さい。       【ソース生成】   記録内容画面上部の「ソース生成」ボタンを押下して下さい。   確認ダイアログが表示されますので、適宜選択して下さい。   生成されるソースは下記のようになっています。   ・ESCキーで中断する   ・操作対象のプロセス名が複数存在する場合最初のプロセスが対象となる   ・例外発生時にメッセージボックスを表示する ■使用方法(DLL)  Visual Studio 2005(C#)でご利用下さい。  「WindowController.dll」と「WindowController.xml」を同じフォルダに置き、  Visual Studioから、「WindowController.dll」を参照設定して下さい。  このDLLが提供する機能は、「FNF.WindowController」名前空間配下に存在します。  各メンバの詳細については、IntelliSenseで説明が見れますのでそちらを参考にして下さい。  また、添付のサンプルプログラム(Demo-*.cs)を参考にして下さい。 ■サンプルについての説明  サンプルのソースと実行ファイルも同梱してありますので参考にして下さい。    ・Demo-HelloWorld.cs   ペイントを起動し、ペンで「HELLO WORLD」と描きます。   お約束のHello Worldですが、ちょっと複雑です。。   30秒ぐらいの間、キー入力もマウス入力もできない状態になりますのでご注意下さい。     ・Demo-MineSweeperSpy.cs   マインスイーパーを起動し、ハイスコアを取得して画面に表示します。     ・Demo-CalcDestroyer.cs   電卓を起動し、ボタンを無効化したり左右逆にしたり消したりします。   電卓を再起動すれば元に戻ります。     ・Demo-StartButtonXP.cs   ウィンドウズの「スタート」ボタンを「START」に変更します。   WindowsXPしか対応していません。   OSを再起動すれば元に戻ります。    ・Demo-ControlReader.cs   各種コントロールの内容をテキストで取得するアプリケーションです。   対応しているのはComboBox/ListBox/ListView/TreeView/Tab/Menuです。   それ以外のコントロールの場合Textを取得します。   起動すると赤い枠が表示されますので、取得したいコントロールにマウスをあわせ、   SHIFTかESCキーを押してください。内容がテキストボックスで表示されます。    ・Demo-OpacitySetting.cs   ウィンドウの透明度を設定するアプリケーションです。   フォアグラウンドのウィンドウの透明度をスライダーで設定できます。    ・Demo-AutoMineSweeper.cs   マインスイーパを自動処理するプログラムです。   TrueColorでのみ動作します。HighColorや256色では動作しません。(色で判定している為)   複雑な推理はできません(^^; ■注意・補足など  ・Windowオブジェクト取得時の識別方法(Class/Text/SameNum)   このソフトは、Windowオブジェクトを取得する際に、ウィンドウの親子関係の階層構造を利用します。   同じ階層内にある複数のウィンドウの中から一つを選ぶ際に、Class/Text/SameNum設定を利用します。   Class/Textについては、完全一致と正規表現で文字列を比較します。   SameNumは、Class/Textが複数のウィンドウに一致した場合に何番目を選択するかを指定します。   ソフトによっては、それらの条件が変化していく場合がありますので、適切に設定して下さい。   また、この仕組みではどう設定しても正しく識別できない場合もあると思います。。ごめんなさい。    ・Windowオブジェクト取得以降の識別方法(HWND)   一度Windowオブジェクトを取得した後は、前述の階層構造はもう関係ありません。   各種操作の際には、オブジェクト取得時に得たウィンドウハンドル(HWND)を利用します。   よって、オブジェクト取得以降にText等が変化しても問題ありません。   ですが、オブジェクト取得後に対象のウィンドウが閉じてHWNDが開放され、   そのあと別のウィンドウ生成時に以前と同じHWNDが再利用されてしまった場合、   HWNDが同じなので同じウィンドウと誤認識してしまうものと思われます。。ご注意ください。    ・MouseE/MouseM, KeyE/KeyMについて   マウスとキーボードの操作については、2種類の方法を用意しています。対象により使い分けて下さい。   MouseM/KeyMについては、対象ウィンドウがバックグラウンド・無効状態でも動作する場合があります。   MouseE/KeyEについては、対象ウィンドウがフォアグラウンド・有効状態でないと動作しません。   (強制的にフォアグラウンドになります)    ・不確実性について   マウスやキーボード操作を初めとして、各種処理は成功したり失敗したりします。。   テストを10回連続で成功しても、それが絶対に確実だとは限りません。   ユーザの入力・他ウィンドウのポップアップ・CPU使用率など様々なものの影響を受けます。   入力ブロック(BlockStart/BlockStop)を利用して、ユーザ入力を遮断したり、   マウス・キーボードイベントの代わりに、メッセージを直接送ったり、   リトライ処理を入れたりなどして、より確実な手段を検討してください。。   また、クリティカルな処理に利用するのはやめておいたほうがいいです。    ・「ウィンドウ」という呼び方について   「ウィンドウ」「Window」と表記していますが「コントロール」と読み替えた方がいいかもしれません。   WindowsのAPIでは、フォームもボタンもリストビューも全てWindowなのでこのようにしています。。    ・正直なところ・・・   ろくにテストしていませんので、バグが沢山あると思います。。ご注意下さい。   ご連絡頂ければ、今後のバージョンアップに反映されるかもしれませんが、期待しないで下さい。。 ■更新履歴など  ・2006/12/20 Ver1.0.0.0   −公開開始    ・2007/02/09 Ver1.0.1.0   −機能追加(DLL):画像取得機能追加(GetImage, GetPixel)   −機能追加(GUI):画像取得機能を呼び出す機能を追加([その他]TABの[画像取得]BUTTON)   −サンプル追加 :Demo-AutoMineSweeper(画像取得のサンプル)   −バグ修正(GUI):バージョン情報表示の修正(どうでもいいこだわり^^; )    ・2007/08/07 Ver1.0.2.0   −機能追加(DLL):画像取得機能の拡充(GetImage2など)   −機能追加(DLL):ルートウィンドウを取得する機能を追加(GetRoot)   −機能追加(DLL):ウィンドウ最小化等のアニメーションの有効・無効を取得・設定する機能を追加(GetAnimation, SetAnimation)   −仕様変更(DLL):StyleExでWS_EX_TOPMOSTを指定した際に最前面に移動するように修正   −仕様変更(DLL):ファイル名変更(WindowController.dll→FNF.WindowController.dll)   −バグ修正(GUI):マウスが離れてもタイミングによってToolTip表示が消えないバグを修正 ■著作権・再頒布など  ・本ソフトウェアの著作権は ☆ちあき が所有します。  ・本ソフトウェアはフリーソフトです。(寄付大歓迎です!)  ・本ソフトウェアやドキュメントの内容を改変して配布することは許可しません。  ・本ソフトウェアの再頒布については、自由に行って頂いて構いませんが、   事後でも構いませんので、ご連絡頂けると嬉しいです。。  ・本ソフトウェアを悪意のあるソフト作成に利用しないで下さい。  ・本ソフトウェアのDLLを利用したソフトを公開する場合、下記の場合に限り当方の許可は不要です。   −利益の伴わないソフト作成への利用 ■免責事項・利用規約など  ・本ソフトウェアにより損害が生じても、作者はいかなる責任も負わないものとします。  ・本ソフトウェアに不備があった場合、作者は必ずしも修正する義務は負わないものとします。  ・上記に同意して頂ける方にのみ、本ソフトウェアの利用を認めます。 ==================================================================================================== 作成者  HN : ☆ちあき  HP : http://chi.usamimi.info  E-Mail : chiaki1978@gmail.com ====================================================================================================