目次
ウィンドウにファイルをドラッグ&ドロップして開きます。第二引数に数値を指定した場合は座標と判断されます。
- 構文
- void = DROPFILE( ID, ディレクトリ, ファイル名, ファイル名, ファイル名, … )
- void = DROPFILE( ID, x, y, ディレクトリ, ファイル名, ファイル名, ファイル名, … )
- 引数
- ID (Integer)必須
- ドロップする相手先
- x, y (Integer)必須
- 第2引数と第3引数が数値であれば ドロップ位置 X, Yと判断(デフォルトは中央)
- ディレクトリ (String)必須
- ファイルのあるディレクトリ
- ファイル名 (String,Array)必須
- ドロップするファイル名(配列変数で渡す事も可)
- 戻り値
使い方
メモ帳を起動し、C:\Program Files (x86)\UWSC\Readme.txtをアプリにドラックします。
DIM ID = EXEC("notepad")
DROPFILE(ID, "C:\Program Files (x86)\UWSC\", "Readme.txt")
DROPFILE関数はディレクトリ名とファイル名を分けて引数に指定する必要があるので、パス名から指定したい場合はFileSystemObject オブジェクトのFSO.GetParentFolderName メソッド(フォルダ名)とFSO.GetFileName メソッド(ファイル名)を使います。
DIM path = "C:\Program Files (x86)\UWSC\Readme.txt"
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM folderspec = FSO.GetParentFolderName(path)
DIM filename = FSO.GetFileName(path)
DIM ID = EXEC("notepad")
DROPFILE(ID, folderspec, filename)
ファイルのドロップ位置
x,yを省略した場合、ウィンドウの中央にファイルがドラッグ&ドロップされます。中央ではない位置にドロップしたい場合は座標を指定する必要があります。
以下のプログラムで現在のカーソル位置を調べることができます。ファイルをドロップする位置を調べるのに使ってください。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
FUKIDASI("x:" + G_MOUSE_X + "<#CR>y:" + G_MOUSE_Y)
SLEEP(0.001)
WEND
またウィンドウのサイズや位置にドロップする位置がうまく指定できない場合があるので、DROPFILE関数の直前、もしくはウィンドウのIDを取得した直後にウィンドウを最大化しておくと良いです。
CTRLWIN(ID, MAX)
DROPFILE(ID, x, y, folderspec, filename)
ウィンドウのサイズや位置から計算する方法もあります。
DIM wx = STATUS(ID, ST_X)
DIM wy = STATUS(ID, ST_Y)
DIM width = STATUS(ID, ST_WIDTH)
DIM height = STATUS(ID, ST_HEIGHT)
DIM x = wx + width * ratioX + offsetX
DIM y = wy + height * ratioY + offsetY
ratioX、ratioYに0~1の範囲の数値を指定することで、ウィンドウ左上からの右下の範囲の位置を割合で指定することができます。ratioXは0でウィンドウの左端、値を大きくしていくと右側に近づいていき1で右端となります。ratioYは0でウィンドウの上端、値を大きくしていくと下側に近づいていき1で下端となります。offsetX、offsetYは微調整したいときに値を指定してください。
ウィンドウ中央はratioX=0.5(50%)、ratioY=0.5(50%)を指定します。
DIM x = wx + width * 0.5
DIM y = wy + height * 0.5
ウィンドウ右端から10px左、縦位置はウィンドウ中央。
DIM x = wx + width - 10
DIM y = wy + height * 0.5
ウィンドウ左端から10px右、上端から20px下。
DIM x = wx + 10
DIM y = wy + 20
ダイアログ
ファイルのドロップ時にダイアログが表示される場合は、処理がDROPFILE関数から先に進まなくなってしまいます。ダイアログを手動で操作するか、指定Windowが現れた時でスケジュール設定を行う必要があります。
以下はFormat FactoryでD:\Music\SamplesにあるファイルをWMA形式に変換するプログラムです。
Format Factoryの起動画面
DIM ID = EXEC("C:\Program Files (x86)\FormatFactory\FormatFactory.exe")
SLEEP(1.000)
DIM x = STATUS(ID, ST_X) + STATUS(ID, ST_WIDTH) * 0.9
DIM y = STATUS(ID, ST_Y) + STATUS(ID, ST_HEIGHT) * 0.5
DIM folderspec = "D:\Music\Samples"
GETDIR(folderspec,,, 0) // folderspecのファイルを取得
DROPFILE(ID, x, y, folderspec, GETDIR_FILES) // ファイルをFormat Factoryにドラッグ&ドロップ
IFB CLKITEM(ID, "開始", CLK_BTN) THEN // 開始ボタンをクリック
FUKIDASI("変換処理が開始されました")
ELSE
FUKIDASI("変換処理を開始できませんでした。")
ENDIF
GETID("", "Afx:000C0000:800:00010003:00000010:00000000", -1) // 処理完了の通知を取得するまで待機
FUKIDASI("変換処理が完了しました。")
SLEEP(3.000)
上に書いたプログラムだけではDROPFILE関数で現れるダイアログ(Class:#32770)によって処理が止まってしまうので、以下のスクリプトをUWSCのスケジュールに設定します。条件は[指定Windowが現れた時]でClassに#32770を指定することで、DROPFILE関数による操作で現れるFormat Factoryのダイアログで処理を止めることなく実行できます。GET_SCEDULE_WINはスケジュール設定で取得したウィンドウを表します。
DIM ID = GETID(GET_SCHEDULE_WIN)
FUKIDASI("ダイアログの処理中です")
IF CLKITEM(ID, "オーディオ\-> WMA", CLK_TREEVIEW) THEN CLKITEM(ID, "OK", CLK_BTN)
DROPFILE関数でファイルをドロップしたときに表示されるダイアログ。オーディオ->WMAを選択し、OKボタンをクリックします。
スケジュールを以下のように設定します。
ファイルが追加されたあとの画面。
完了通知
Format Factoryに追加するファイル。
プログラム実行例
テキストファイルをメモ帳にドロップします
C:\Program Files (x86)\UWSC\Readme.txtをメモ帳にドラッグ&ドロップして開きます。
DIM ID = EXEC("notepad")
DROPFILE(ID, "C:\Program Files (x86)\UWSC\", "Readme.txt")
画像ファイルをペイントにドロップします
D:\Desktop\sample.pngをペイントにドラッグ&ドロップして開きます。
DIM ID = EXEC("mspaint")
DROPFILE(ID, "D:\Desktop\", "sample.png")
ExcelファイルとCSVファイルをExcelにドロップして開く
CREATEOLEOBJで起動したExcelにファイルをドロップするとなぜか落ちるから、EXECで起動。
EXEC("C:\Program Files\Microsoft Office\Office15\EXCEL.EXE")
DIM ID = GETID("Excel", "XLMAIN")
DROPFILE(ID, "D:\Desktop\", "sample.xlsx", "sample.csv")