全てのアプリで使える訳ではありませんが、こんな感じでしょうか。
#include "hspext.as"
#define NULL 0
#define FALSE 0
#define PROCESS_ALL_ACCESS 0x001F0FFF
#define INFINITE 0xFFFFFFFF
#uselib "user32.dll"
#cfunc FindWindow "FindWindowA" sptr, sptr
#func GetWindowThreadProcessId "GetWindowThreadProcessId" sptr, sptr
#cfunc WaitForInputIdle "WaitForInputIdle" sptr, sptr
#uselib "kernel32.dll"
#cfunc OpenProcess "OpenProcess" sptr, sptr, sptr
#func CloseHandle "CloseHandle" sptr
sdim caption, 256;
// 起動待機
title "起動待機中";
repeat
aplsel "ウィンドウタイトル"; // ここは任意の文字列にしてください。(メモ帳なら 無題 - )
if(stat == 0) {
break;
}
wait 100;
loop
caption = refstr; // ウィンドウの正確なタイトル取得
WhWnd = FindWindow(NULL, caption); // タイトルからウィンドウハンドル取得
GetWindowThreadProcessId WhWnd, varptr(ProcessId); // ウィンドウハンドルからプロセスID取得
PhWnd = OpenProcess( PROCESS_ALL_ACCESS, FALSE, ProcessId); // プロセスIDからプロセスハンドル取得
// 入力可能になるまで待機
title "入力待機中";
repeat
rc = WaitForInputIdle(PhWnd, INFINITE); // プロセスの状態取得
if( rc == 0 ) {
CloseHandle PhWnd; // プロセスハンドルが不要になったら閉じる
break;
}
wait 100;
loop
aplobj "EDIT";
aplstr "送信完了";
title "入力完了";
メモ帳やサクラエディタでは使えましたが、
LibreOfficeで試したら見事に入力すらされずフリーズしてくれました;;