SENDSTRセンドストリング関数

本ページには広告が含まれています。

指定したIDのウィンドウに文字列を送信します。キー入力をする場合はKBD関数を使います。

構文
  1. void = SENDSTR( ID, 文字列, 番号, 送信モード, ACC指定 )
引数
ID (Integer)必須
Windowを識別するID
文字列 (String)必須
送りたい文字列
番号 (Integer = 0)省略可
左上から数えたエディトコントロールの順番 (1から指定、マイナスを付けた場合にはDisable状態のものもカウント) (0:デフォルトはフォーカスを持ったエディトコントロール)
送信モード (Integer = False)省略可
FALSE
追加(デフォルト)
TRUE
置き換え
2
一文字ずつ送信(PostMessage,WM_CHAR)
ACC指定 (Integer = False)省略可
FALSE
API もしくは UIA インターフェースを使用(デフォルト)
TRUE
アクセシビリティ用インターフェースを利用
2
アクセシビリティ用インターフェースを利用(ウィンドウをアクティブ化しない)
STR_ACC_CELL(5)
DataGridView内のCell値の変更
戻り値

使い方

メモ帳の置換ウィンドウを開き、各入力ボックスに入力ボックスの番号を入力します。

GETITEM関数の種別(第二引数)にITM_EDIT、番号(第三引数)に-1を指定することで入力ボックスが何個あるかを取得しています。

UWSC
DIM ID = EXEC("notepad")
CLKITEM(ID, "編集\置換", ITM_MENU)
 
DIM ID2 = GETID("置換", "#32770")

FOR i = 0 TO GETITEM(ID2, ITM_EDIT, -1)
	SENDSTR(ID2, i, i, TRUE)
NEXT

SendMessageAを使ってメモ帳にメッセージを送る方法

UWSC
DEF_DLL FindWindowA(string, string): long: user32.dll
DEF_DLL FindWindowExA(long, long, string, string): long: user32.dll
DEF_DLL SendMessageA(long, long, long, string): long: user32.dll

EXEC("notepad")

hNotePad = FindWindowA("Notepad", NULL)
hEdit = FindWindowExA(hNotePad, 0, "Edit", NULL)
PRINT SendMessageA(hEdit, 12, 0, "送信するメッセージ")

プログラム実行例

ファイル名を指定して実行で「ごみ箱」を開く

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.FileRun

DIM ID = GETID("ファイル名を指定して実行", "#32770")
SENDSTR(ID, "shell:RecycleBinFolder")
CLKITEM(ID, "OK", CLK_BTN)
使用関数

メモ帳に本文を入力し[名前を付けて保存]ダイアログボックスを開いて保存する

UWSC
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = "D:\Desktop\sample.txt"
DIM folderspec = FSO.GetParentFolderName(path)
DIM filename = FSO.GetFileName(path)

EXEC("notepad")
DIM ID = GETID("メモ帳", "Notepad")
SENDSTR(ID, "内容", 0)
CLKITEM(ID, "ファイル\名前を付けて保存", CLK_MENU)

IFB FSO.FolderExists(folderspec) THEN
	DIM ID2 = GETID("名前を付けて保存", "#32770")

	CTRLWIN(ID2, ACTIVATE)
	SLEEP(0.500)

	SCKEY(ID2, VK_F4)
	SENDSTR(ID2, folderspec, 1, TRUE)
	SCKEY(ID2, VK_RETURN)
	SLEEP(0.500)

	SCKEY(ID2, VK_ALT, VK_N)
	SENDSTR(ID2, filename, 1, TRUE)
	SLEEP(0.500)

	CLKITEM(ID, "保存", CLK_BTN)
ELSE
	PRINT "フォルダが存在しません。"
ENDIF
使用関数

クリップボードの文字列を小文字にして返す

UWSC
DIM str = STRCONV(GETSTR(0), SC_LOWERCASE)
SENDSTR(0, str)
PRINT str
使用関数

クリップボードの文字列を大文字にして返す

UWSC
DIM str = STRCONV(GETSTR(0), SC_UPPERCASE)
SENDSTR(0, str)
PRINT str
使用関数

csvファイルをHTMLのテーブルデータにする(csvToHTML)

CSVのデータをHTML(テーブル)に変換します。

クリップボードにcsvファイルのパスをコピーして実行します。

UWSC
CONST TemporaryFolder = 2

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM Folder = FSO.GetSpecialFolder(TemporaryFolder)
DIM folderspec = Folder.Path
DIM name = FSO.GetTempName
DIM TempPath = FSO.BuildPath(folderspec, name)

DIM path = GETSTR(0)
DIM FID = FOPEN(path, F_READ)
DIM FID2 = FOPEN(TempPath, F_READ OR F_WRITE)
FPUT(FID2, "<table>", F_ALLTEXT)

FOR row = 1 TO FGET(FID, F_LINECOUNT)
	DIM col = 1
	FPUT(FID2, "<#TAB><tr>", 0)
	WHILE FGET(FID, row, col) <> ""
		FPUT(FID2, "<#TAB><#TAB><td>" + (FGET(FID, row, col)) + "</td>", 0)
		col = col + 1
	WEND
	FPUT(FID2, "<#TAB></tr>", 0)
NEXT
FPUT(FID2,"</table>", 0)

FCLOSE(FID)
FCLOSE(FID2)

FID = FOPEN(TempPath, F_READ)
SENDSTR(0, FGET(FID, F_ALLTEXT))
PRINT FGET(FID, F_ALLTEXT)
FCLOSE(FID)
使用関数

ファイルを開いているプロセスを調べる

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

CONST TemporaryFolder = 2

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

WITH FSO
	DIM Folder = .GetSpecialFolder(TemporaryFolder)
	DIM folderspec = Folder.Path
	DIM filename = .GetTempName
	DIM path = .BuildPath(folderspec, filename)
ENDWITH

DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.FileRun()

DIM ID = GETID("ファイル名を指定して実行", "#32770")

SENDSTR(ID, "cmd /c openfiles /query /fo CSV > " + path)
CLKITEM(ID, "OK", CLK_BTN)
SLEEP(0.500)

REPEAT
	SLEEP(0.100)
UNTIL GETID("C:\WINDOWS\system32\cmd.exe", "ConsoleWindowClass") = -1

DIM FID = FOPEN(path, F_READ)

TRY
	DIM ID2 = GETID("使用中", "OperationStatusWindow")

	GETITEM(ID2, ITM_ACCTXT, 1)
	DIM str = ALL_ITEM_LIST[1]
	
	DIM sep = IIF(POS("フォルダー", STATUS(ID2, ST_TITLE)) <> 0, "\", "")
	DIM msg = "■" + str + "<#CR>"
	
	FOR r = 5 TO FGET(FID, F_LINECOUNT)
		IF POS("\" + str + sep,  FGET(FID, r, 3)) <> 0 THEN
			msg = msg + "ID:" + FGET(FID, r, 1) + ", プロセス名:" + FGET(FID, r, 2) + "<#CR>"
		ENDIF
	NEXT
	FCLOSE(FID)

	REPEAT
		FUKIDASI(TRIM(msg))
		SLEEP(0.100)
	UNTIL GETID("使用中", "OperationStatusWindow") = -1
FINALLY
	FSO.DeleteFile(path)
ENDTRY

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND

//////////////////////////////////////////////////
// 【引数】
//   expr : 評価する式 
//   truepart : 評価した式がTrueのときに返す値 
//   falsepart : 評価した式がFalseのときに返す値 
// 【戻り値】
//   truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき 
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND
使用関数

関連記事

ACW関数 (スクリプト関数)
ウィンドウの状態を変更、またはアクティブにします。
CTRLWIN関数 (スクリプト関数)
ウィンドウの状態を制御します。
GETCTLHND関数 (スクリプト関数)
ボタン等、オブジェクトのハンドルを取得します。
GETSLIDER関数 (スクリプト関数)
スライダー(トラックバー、スクロールバー)の値を取得します。
HNDTOID関数 (スクリプト関数)
ハンドル値をIDに変換します。
IDTOHND関数 (スクリプト関数)
IDをハンドル値に変換します。
CHKBTN関数 (スクリプト関数)
ボタン類(ボタン、チェックボックス、ラジオボタン)の状態を返します。
CLKITEM関数 (スクリプト関数)
アイテムをクリックします。
GETID関数 (スクリプト関数)
指定したウィンドウのIDを取得します。第一引数に取得したいウィンドウのタイトル(一部でも可)を指定します。
GETITEM関数 (スクリプト関数)
キャプション文字やリスト等をすべて取得します。