Autoit自動化:「dll」何? 「dll」はどうやって使うの

AutoitでDLL操作

DLL初心者のサムです。
この記事あくまでも、私の理解してることなので、間違って理解していることミスも多々あると思いますのでご指摘ください。

「DLL」とは ダイナミックリンクライブラリの略=なにそれ

実行ファイルの構造は:

(1)EXEファイルのみで実行するもの
(2)EXEファイル+Dllファイル セットで動くもの

がある。

dllとは

DLLは使い回しができる、共通部品として他のアプリも使うことができる。

 

User2.Dllを使うには、「DllCall ()」関数を使う。

とにかく、引数(パラメータ)難しい

DllCall ( “dll”, “return type”, “function” [, type1, param1 [, type n, param n]] )
アルファベット文字列は、””で囲まないといけない。
例) int > “int”

MessageBox  説明サイトにあるMsgBoxを表示するコード:

DllCall("user32.dll", "int", "MessageBox", _  ;intではない "int"
    "hwnd", 0, _  ;NULL を指定すると、オーナーウィンドウを持たないメッセージボックス
    "str", "sam", _  ;表示したいメッセージ
    "str", "555", _  ;タイトル
    "int", 0)  ;MsgBoxのスタイル(Flag) 0=OKボタンだけ

* AutoitでNullは「0」

シンプルなMsgBox

スタイル(Flag)の説明サイト:

結局、user32.dllの詳細を調べそれが理解できなければ、初心者には使えそうにない。

CloseWindow  ウィンドウを最小化

DllCall("user32.dll", "int", "CloseWindow", _
    "hwnd", 0x000000000004099E)  ;ウィンドウのハンドル

最小化したいウィンドウのハンドルは、Autoitに付属してる「Au3Info_x64」で取得できます。

ハンドルを取得する

赤枠内、ダブルクリックすれば内容コピーできます。

Autoitでは、戻り値にすべてのパラメータの値が配列で戻るようです。

#include <array.au3>
$arrResult = DllCall("user32.dll", "int", "CloseWindow", _
    "hwnd", 0x000000000004099E)  ;ウィンドウのハンドル
_ArrayDisplay($arrResult)

パラメータ配列表示

GetWindowText (Windowのタイトルを取得) user32.dll

#include <array.au3>
$arrResult = DllCall("user32.dll", "int", "GetWindowText", _
     "hwnd", 0x0000000000030956, _ ;ハンドル
     "str", "", _      ;タイトルが入る
     "int", 32768)  ;??
If @error <> 0 Then
    MsgBox("","",@error)
EndIf
_ArrayDisplay($arrResult)

wingettitleタイトル取得

DllCall 使い方間違っていても、エラーを返してくれない

#include <array.au3>
$arrResult = DllCall("user32.dl", "int", "GetWindowText", _
     "hwnd", 0x0000000000030956, _
     "str", "", _
     "int", 32768)
_ArrayDisplay($arrResult)

DLL名間違えているのに、何も言ってくれません。動いてすぐに終わるだけ

DllCall()の次に次のコードを入れて下さい。
If @error <> 0 Then
    MsgBox("","",@error)
EndIf
@error: 1 = DLLファイルを使用できません、
2 =不明な「戻り値の型」、
3 = DLLファイルに「関数」が見つかりません、
4 =パラメータの数が正しくありません、
5 =パラメータが正しくありません。

この場合: 1が表示されます。

エラー 1

Kernel32.Dllを使うには

GetCurrentProcessId   現在のプロセスID

プロセスID 何?

$result = DllCall("Kernel32.dll", "Dword", "GetCurrentProcessId")
If @error <> 0 Then
    MsgBox("","",@error)
EndIf
MsgBox("","",$result[0])

コメント

タイトルとURLをコピーしました