メモ AutoItで画像認識

OS Win10Pro(64bit)

AutoItのFull Instrationをダウンロードしてインストール(x86のほう)

Visual Studio 2019 Community のインストール(C++のやつ)

https://github.com/MyBotRun/Libraries のをダウンロードして展開

上で展開したファイルにつき

 ImageSearchDLL.slnがあるフォルダ(ImageSearchDLLフォルダ)をC:\にコピー

 ImageSearch.au3をAutoIt3のIncludeフォルダにコピー

C:\ImageSearchDLL\ImageSearchDLL.slnをVS2019で開く

 アップグレードメッセージが出るので従う

レッツコンパイルで出来上がるC:\ImageSearchDLL\Release\ImageSearchDLL.dllをC:\Windowsフォルダにコピー

 

で、ダブルクリックしたい画像ファイルを作成して同じフォルダにスクリプト書き書き

#include <ImageSearch.au3>
$x=0
$y=0
$result = _ImageSearch(@ScriptDir & "\" & "test.png",1,$x,$y,0)
if $result = 1 Then
   MouseClick("Primary",$x,$y,2)
EndIf

実行するとめでたくダブルクリックしてくれましたとさ。

 

雑多なメモおしまい。

 

 

 

 

 

 

 

 

 

 

 

AutoIt by VisualStudioCode C#

かっこいいタイトルつけたけど中身はどろくさいです。

C#でAutoItを使うコードをVisualStudioCode( not VisualStudio )で書いて実行させましょうということでございます。

 

Visual Studio Codeのコンソールでdotnet new console -o [プロジェクト名]

  例:dotnet new console -o AutoItByCSharp

②プロジェクトのフォルダのbin\Debug\netcoreapp3.0(一度ビルドしないと作成されない)にAutoItX3.Assembly.dllとAutoItX3_x64.dllをコピペ

③.csprojファイルのProjectタグの下に以下のようにItemGroupタグを追加

 例:AutoItByCSharp.csprojに赤字部分追加

 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <TargetFramework>netcoreapp3.0</TargetFramework>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="AutoItX3.Assembly">
       <HintPath>C:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.Assembly.dll</HintPath>
     </Reference>
   </ItemGroup>
 </Project>

④Program.csにAutoItを使ったコードを書いてみるみる

        static void Main(string[] args)
        {
            AutoIt.AutoItX.Run("notepad.exe","");
        }

⑤[F5]で実行するなり

 

AutoItXを動かすまで

個人メモ

 

よんどころなき事情にてAutoItでスクリプトを書いている。

付属のSciTE Script Editorは全角文字の対応が怪しい。

 ・新規作成したファイルに全角文字を入力しようとすると文字化け

 ・ConsoleWriteで全角文字を出力すると文字化け

f:id:turkey_pc:20191102162120p:plain

VSCodeのExtentionでAutoItのがあったのでそっちで入力した

 ・VSCodeから実行はできなかったので実行はSciTE Script Editorでやることにした

 

この後ひたすらAutoItのスクリプトを書いて所期の目的はなんとか達成できた。

 

んが、今後AutoItのスクリプトを保守していくにあたり

 ・VSCodeから実行できない

 ・スクリプトでClassが使えない

 ・AutoItの文法を他の人に学んでもらわないと保守できるのが私しかいない

というのは今後のことを考えると若干困ったなと。

 

C#からAutoIt動かせねーの?とググったらAutoItにAutoItXというのが付属していたことが判明。COMとかいうらしいのだがなんかdllを参照したりコピーしたら動いたので手順書いておく。

 

①VisualStudioでC#のConsoleプロジェクトを作る
②C:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.Assembly.dllを参照追加
③Mainメソッドに適当にスクリプトを入れる

  例)AutoIt.AutoItX.Run("notepad.exe", "");
④プロジェクトのbin\DebugフォルダにC:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.dllをコピー

 

で、AutoItのスクリプトでやれることがC#でできそうな感じである。

 

 

 

 

 

AutoItやってみた。

AutoItてのがあります。

何をするのかはググればすぐ見つかることですが、ざっくりいうとマウスやらキー操作の手順(スクリプト)を書いたら手順どおりにマウスやらキー操作をしてくださるありがたいものです。

www.autoitscript.com

 

弊現場にて開発中のソフトの動作確認を要求されているのですが、これが結構めんどくさいし同じことの繰り返しでイラッとするので自動化してみようと思って導入した次第です。

 

まずはAutoItをインストロールしないことには始まりません。

あ、以下、PCの環境は以下

・OS:Windows10 日本語のやつ。

・VisualStudioCodeインストール済

 

ではAutoItのインストール開始。

www.autoitscript.com

 

↑の

"AutoIt Full Installation. Includes x86 and x64 components, and:"

をDownloadして馬鹿インストール(インストールウィザードにひたすら[OK])

 

 

 

 

インストールしたらば、AutoItに付属のエディタでスクリプトを入力・・・と思ったのですが、こいつが日本語対応できてない。

しかたなくスクリプトの入力にはVisualStudioCodeを使う。AutoIt用の拡張があるのでインストールよろしくです。で、スクリプトを入力。

f:id:turkey_pc:20190607145926p:plain

 

スクリプトを入力したら即実行[F5]・・・

f:id:turkey_pc:20190607150140p:plain

あら動かないわ。なんかメッセージ書いてあるけど気にしない。AutoItに付属のエディタで開きなおす。

 

f:id:turkey_pc:20190607150343p:plain

で、ここから[F5]で無事にスクリプトを起動することができました\(^o^)/

VisualStudioCodeで編集&保存→AutoIt付属のエディタで[F5]という見事(?)な連携である。

ちなみに上のスクリプト

「メモ帳を起動してHello,Worldと入力しマイドキュメントのHello,World.txtに保存する」

というものです(※マイドキュメントにHello,World.txtがすでにある場合は上書確認で止まってしまいます)

 

本来の目的である開発中のソフトの動作確認の自動化はもうちょっとマシなスクリプトを書き上げれば達成・・・ということになります(※実物はモロにソフトの名称が入っているので公開できまへん)。

 

VisualStudioCodeで編集・gitで管理という環境にしておけばスクリプト改善が安心して行えます。頑張って自動化をめざすぞい・・・

 

<顛末>

スクリプト書くよりも、自分の手で動作確認したほうが早かった。

AutoItに慣れてないもんね。仕方ないか。また次回チャレンジだわ。

 

 

 

 

Visual Studio 2010 to Visual Studio 2019(続き)

turkey-pc.hatenablog.com

 

の、続き。

 

VS2010で識別子(変数名・プロパティ名・メソッド名など)に’・'(カタカナ中点)を使ってるとそのままではVS2019ではビルドエラーになるので、エラーになる箇所を一つずつ変更していくか。かったりーなー・・・・とツイッタランドで呟いてたら

などという啓示が。ツイッタランドには神がいた。

ブログ主が理解浅きゆえに

 などと呟こうものなら、

さっさと神自ら解決の道具までおつくり下さいました(かんしゃー

 

神の作りし道具に弊現場で使われているアセンブリを全部投げ込めばカタカナ中点を使っている識別子を網羅してくれるので、ソースコード中の該当箇所を文字列置換してしまえばOK・・・と。

 

ちょっと見えてきた。

 

 

 

 

Visual Studio 2010 to Visual Studio 2019

弊現場(ブログ主が働いているところ)ではVisual Studio 2010(以下VS2010)を使ってC#でWinFormsのアプリ(以下弊アプリ)を開発しています。

f:id:turkey_pc:20190520225505p:plain

弊現場のソリューション(嘘んこ)

 

ある日、天(弊アプリの販売元)より「VS2010ってのも古いんやろ。元号変わったことやさかいにVisual Studio 2019(以下VS2019)にしよか?」という啓示を頂きました。

 

はいはーい。VS2019をインストールしてslnファイルをダブルクリックしてビルドしたらおk・・・ありり??

f:id:turkey_pc:20190520230951p:plain

 

過去の資産を継承は難しいのかとガッカリしたが、とりあえずエラーをなんとかできないかと考えてみた。どうやら一番最初の「予期しない文字'・'」ってのが諸悪の根源のようなので、該当箇所を見た。

f:id:turkey_pc:20190520231450p:plain

 

ここである。たしかに'・'である。VS2019はこれを予期できないというのか?なぜだ?わからないときはGoogleの出番である。

[C# ユニコード][検索]

 

ktkr

 

ufcpp.net

 

 

'・'は「カタカナ中点」っていうのか・・・じゃなくて!識別子に使えないってか!!

 

じゃ、しかたね。VS2019でエラーになってる識別子をVS2010で変数名の変更しておくかー・・・・

 

以下、眠いので明日に続く(はず)。

 

 

 あ、わすれてた。

VS2010ではビルドできるけどVS2019ではビルドできない状態のを

github.com

に乗せてみた。もちろんエラー再現用に作ったサンプルでありんす。実際のコード上げたらえらいことになる(法律的にも倫理的にもサイズ的にも)

 

 

Head Firstオブジェクト指向分析設計 ――頭とからだで覚えるオブジェクト指向の基本を読み始めた

芸事を学ぶのは「守破離」と申しますが、プログラミングという大いなる芸事におきまして「守」の段階が終わりませぬ。

というわけで、↓を読み始めました。

 

www.oreilly.co.jp

 

まずは手を動かそうとサンプルコードを読み・・・おっとJavaだ。

読めるけど自分がメインとしているC#に引き込んでみよう。

というわけで、まずはギター在庫検索システム<Rickが顧客を失い始めたバージョン>のコードをGitHubに上げてみました。

github.com

 

ここからバグ取りとコード改善が始まるのですが、さてどこまでできることやら。

 

<追記 C#に移植してみて>

JavaからC#ですからほぼまるまるコピーして少々編集で済みそうなものですが、余計な気持ちだしてC#らしくなるよういじっています。

①Guitar.cs

 getter,setterはプロパティにしました。

②Inventory.cs

 getGuitarメソッドの中身はLINQのFirstOrDefaultメソッドにしました。

 文字列の空文字判定はstring.IsNullOrEmptyメソッドにしました。

 searchメソッドのループ処理をforからforeachにしました。

  ※判定部分をFuncに切り出したらLINQのFirstOrDefaultになりそうですが、どうせ後の展開でGuitarメソッドに移すのでここは放置しました。

③FindGuitarTester.cs

 Mainメソッドの文字列生成に書式指定項目({0}~{5})とやらを使っています。この部分はGuitarクラスに移すべきものか否かわかりません。

 

<追記 文字列比較の放棄 の実装>

stringをenumに置き換えるというだけ。C#ではenumにメソッドを配置できないんでそこは除外しているがToStringしたら勝手にenumの文字にしてくれるのでとりあえずはそれでOKにしておく。本では全大文字から先頭大文字に変換しているがめんどくさいので省略(どうしてもというならenumのほうを先頭大文字にすればOK)。