自動化ツール/AutoIt

Last-modified: 2019-02-26 (火) 20:52:12

Mery用構文ファイル

MSBuild用プロジェクトファイルのテンプレート

.au3ファイルをExe化する。

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Aut2Exe.exeのフルパスとオプションの定義 -->
  <Choose>
    <!--
      /p:Platform=x64 または /p:Platform=win64 オプションを指定した場合は64ビットバイナリを、
      それ以外(デフォルト)は32ビットバイナリを生成
    -->
    <When Condition="'$(Platform)'=='x64' Or '$(Platform)'=='win64'">
      <PropertyGroup>
        <AUT2EXE>$(MSBuildProgramFiles32)\AutoIt3\Aut2Exe\Aut2exe_x64.exe</AUT2EXE>
        <BINARY>/x64</BINARY>
      </PropertyGroup>
    </When>
    <Otherwise>
      <PropertyGroup>
        <AUT2EXE>$(MSBuildProgramFiles32)\AutoIt3\Aut2Exe\Aut2Exe.exe</AUT2EXE>
        <BINARY>/x86</BINARY>
      </PropertyGroup>
    </Otherwise>
  </Choose>
  <!-- x86/x64共通オプションの定義 -->
  <PropertyGroup>
    <OPTIONS>/comp 0 /nopack</OPTIONS>
  </PropertyGroup>
  <!-- ソースファイル名;foo.au3→foo.exeとする場合 -->
  <ItemGroup>
    <SOURCE_FILES Include="foo.au3" />
    <!--
    <SOURCE_FILES Include="foo2.au3" />
    <SOURCE_FILES Include="foo3.au3" />
      :
    -->
  </ItemGroup>
  <!-- ソースファイル名;foo.au3→foo.exeとする場合 -->
  <ItemGroup>
    <SOURCE_FILES2 Include="bar.au3">
        <EXE_FILE>baz.exe</EXE_FILE>
    </SOURCE_FILES2>
    <!--
    <SOURCE_FILES2 Include="bar2.au3">
        <EXE_FILE>baz2.exe</EXE_FILE>
    </SOURCE_FILES2>
    <SOURCE_FILES2 Include="bar3.au3">
        <EXE_FILE>baz3.exe</EXE_FILE>
    </SOURCE_FILES2>
      :
    -->
  </ItemGroup>
  <!-- Buildターゲットからビルド後に呼び出されるターゲット -->
  <Target Name="Build" Inputs="@(SOURCE_FILES);@(SOURCE_FILES2)" Outputs="@(SOURCE_FILES->'%(Filename).exe');%(SOURCE_FILES2.EXE_FILE)">
    <Exec Command="%22$(AUT2EXE)%22 /in %22%(SOURCE_FILES.Identity)%22 $(OPTIONS) $(BINARY)" WorkingDirectory="$(MSBuildProjectDirectory)" Condition="'@(SOURCE_FILES->Count())' &gt; 0" />
    <Exec Command="%22$(AUT2EXE)%22 /in %22@(SOURCE_FILES2)%22 /out %22%(EXE_FILE)%22 $(OPTIONS) $(BINARY)" WorkingDirectory="$(MSBuildProjectDirectory)" Condition="'@(SOURCE_FILES2->Count())' &gt; 0" />
  </Target>
</Project>

レーベンシュタイン距離を求める

#include <Math.au3>
; https://nayose.net/$blog/address/246/ をベタ移植
Func lsDist($baseText, $tryText)
    If $baseText = $tryText Then Return 0
    $bl = StringLen($baseText)
    $tl = StringLen($tryText)
    If $bl = 0 Then Return $tl
    If $tl = 0 Then Return $bl
    Local $matrix[$bl+1][$tl+1]
    For $i = 0 To $bl
        $matrix[$i][0] = $i
    Next
    For $j = 0 To $tl
        $matrix[0][$j] = $j
    Next
    For $i = 1 To $bl
        For $j = 1 To $tl
            If StringMid($baseText, $i, 1) = StringMid($tryText, $j, 1) Then
                $cost = 0
            Else
                $cost = 1
            EndIf
            $matrix[$i][$j] = _Min(_Min($matrix[$i-1][$j]+1, $matrix[$i][$j-1]+1), $matrix[$i-1][$j-1]+$cost)
        Next
    Next
    Return $matrix[$bl][$tl]
EndFunc

Outlookで新規メール送信

#include "OutlookEx.au3"  ; https://www.autoitscript.com/forum/files/file/381-outlookex/ からDL
Dim $toAdr = "(送信先メールアドレス)"
Dim $ccAdr = ""
Dim $bccAdr = ""
Dim $subject = "テストメール"
Dim $body = "テストです"
$objOutlook = _OL_Open()
_OL_Wrapper_SendMail($objOutlook, $toAdr, $ccAdr, $bccAdr, $subject, $body)
_OL_Close($objOutlook)

Outlookでメール着信を監視

#include <MsgBoxConstants.au3>
$objOutlook = ObjGet("", "Outlook.Application")
If @error Then Exit
$objEvent = ObjEvent($objOutlook, "OL_")
If @error Then Exit
While 1
  Sleep(500)
WEnd
Func OL_NewMailEx($id)
  MsgBox($MB_OK, "Outlook", "NewMailEx() called.", 3)
EndFunc
Func OL_Quit()
  Exit
EndFunc

sqlite3.dll利用

#include <SQLite.au3>
#include <SQLite.dll.au3>
Local $sqls, $i, $tbl, $row, $col
_SQLite_Startup()
MsgBox(0, "version", _SQLite_LibVersion())
_SQLite_Open(@ScriptDir & "\test.db")
_SQLite_Exec(-1, "CREATE TABLE list(id INTEGER, title TEXT);")
For $i = 1 To 10
  $sqls &= StringReplace("INSERT INTO list VALUES(#, 'test#');", "#", $i)
Next
_SQLite_Exec(-1, "BEGIN TRANSACTION;")
_SQLite_Exec(-1, $sqls)
_SQLite_Exec(-1, "COMMIT TRANSACTION;")
_SQLite_GetTable2d(-1, "SELECT * FROM list WHERE id > 5;", $tbl, $row, $col)
For $i = 0 To $row
  MsgBox(0, "table", $tbl[$i][0] & ": " & $tbl[$i][1])
Next
_SQLite_Close()
_SQLite_Shutdown()

nMail.dll利用

; nMail.dllを使ったメール送信(nMail.dllはhttp://www.nanshiki.co.jp/からDL)
#include <MsgBoxConstants.au3>
Global $NULL = 0
DllCall("nMail.dll", "BOOLEAN", "NMailInitializeWinSock")
;$ret = DllCall("nMail.dll", "int", "NMailGetVersion")
;MsgBox($MB_OK, Default, "NMailGetVersion = " & $ret[0])
$smtp = "SMTPサーバ名"
$to = "送信先メールアドレス"
$cc = $NULL
$bcc = $NULL
$from = "送信元メールアドレス"
$subject = "サブジェクト"
$body = "本文"
$header = $NULL
$path = $NULL
$flag = 0
$port = 25
$ret = DllCall("nMail.dll", "int", "NMailSmtpSendMailPortNoW", "wstr", $smtp, "wstr", $to, ArgType($cc), $cc, ArgType($bcc), $bcc, "wstr", $from, "wstr", $subject, "wstr", $body, ArgType($header), $header, ArgType($path), $path, "int", $flag, "int", $port)
MsgBox($MB_OK, Default, "NMailSmtpSendMailPortNoW = " & $ret[0])
DllCall("nMail.dll", "BOOLEAN", "NMailEndWinSock")
Func ArgType($arg)
    If $arg == $NULL Then
        Return "int"
    Else
        Return "wstr"
    EndIf
EndFunc