テスト・ステップでの Windows API の使用

関連:GUI アクション,スクリプト GUI コンポーネント,関数ライブラリ

  1. MSDN で,使用する関数を検索します。

  2. 資料を読んで必要なパラメータと戻り値を把握します。

  3. Windows API 関数の場所を書き留めます。Windows API 関数は Windows の DLL に含まれています。要求する関数が含まれている .dll の名前は通常,関数の説明の「Import Library」のセクションに記載してある名前と同じです。たとえば,説明ドキュメントの中で User32.lib と記載してあれば,関数は User32.dll という名前の .dll に含まれています。この DLL は通常,System32 ライブラリに含まれています。

  4. UFT One Extern オブジェクトを使用して外部関数を宣言します。

    次の例では,user32.dll にある GetForegroundWindow という関数への呼び出しを宣言しています。

    extern.declare micHwnd, "GetForegroundWindow", "user32.dll", "GetForegroundWindow"
  5. 宣言した関数を呼び出し,必要な引数を渡します。次に例を示します。

    hwnd = extern.GetForegroundWindow()

    この例では,前面にあるウィンドウのハンドルが取得されます。これは,前面のウィンドウがオブジェクト・リポジトリにない場合や,あらかじめ知ることができない場合(たとえば,動的なタイトルを持つウィンドウなど)に有効です。このハンドルを,次のように,ウィンドウのプログラム的記述の一部として使用することも可能です。

    Window("HWND:="&hWnd).Close

状況によっては,あらかじめ定義されている定数値を関数の引数として使用しなければならない場合があります。そうした定数は,アクション,スクリプト・コンポーネント,関数内で定義されていないため,呼び出し先の関数に渡すためにはそれらの値を調べる必要があります。こうした定数の値は通常,使用する関数に対応するヘッダ・ファイルに宣言されています。ヘッダ・ファイルに関する記述も,各関数の説明ドキュメントの「Header」セクションに記載されています。使用しているコンピュータに Microsoft Visual Studio がインストールされていれば,ヘッダ・ファイルは通常,X:\Program Files\Microsoft Visual Studio\VC98\Include の下に格納されています。

たとえば,GetWindow 関数では,指定されたウィンドウとハンドルを取得するウィンドウとの関係を表す数値を受け取ることが想定されています。MSDN の説明ドキュメントには次の定数が記載されています。GW_CHILD, GW_ENABLEDPOPUP, GW_HWNDFIRST, GW_HWNDLAST, GW_HWNDNEXT, GW_HWNDPREV, GW_HWNDPREV

GetWindow のドキュメントに記載されている WINUSER.H ファイルを開くと,次のフラグ値が設定されているのがわかります。

/*
 * GetWindow() Constants
 */
#define GW_HWNDFIRST	0
#define GW_HWNDLAST	 1
#define GW_HWNDNEXT	2
#define GW_HWNDPREV	 3
#define GW_OWNER	 4
#define GW_CHILD	 5
#define GW_ENABLEDPOPUP	 6
#define GW_MAX	 6

例: 次の例では,「メモ帳」アプリケーションの特定のメニュー項目を取得しています。

' 定数値:
const MF_BYPOSITION = 1024
'Windows API 関数の宣言
Extern.Declare micHwnd,"GetMenu","user32.dll","GetMenu",micHwnd
Extern.Declare micInteger,"GetMenuItemCount","user32.dll","GetMenuItemCount",micHwnd
Extern.Declare micHwnd,"GetSubMenu","user32.dll","GetSubMenu",micHwnd,micInteger
Extern.Declare micInteger,"GetMenuString","user32.dll","GetMenuString",micHwnd,micInteger, micString+micByRef,micInteger,micInteger
' Notepad.exe
hwin = Window("Notepad").GetROProperty ("hwnd")' Get Window's handle
MsgBox hwin
'Windows API 関数を使用する
men_hwnd = Extern.GetMenu(hwin)' ウィンドウのメイン・メニューのハンドルを取得
MsgBox men_hwnd
item_cnt = Extern.GetMenuItemCount(men_hwnd)
MsgBox item_cnt
hSubm = Extern.GetSubMenu(men_hwnd,0)
MsgBox hSubm
rc = Extern.GetMenuString(hSubm,0,value,64,MF_BYPOSITION)
MsgBox value