DROPFILEドロップファイル関数

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

ウィンドウにファイルをドラッグ&ドロップして開きます。第二引数に数値を指定した場合は座標と判断されます。

構文
  1. void = DROPFILE( ID, ディレクトリ, ファイル名, ファイル名, ファイル名, … )
  2. void = DROPFILE( ID, x, y, ディレクトリ, ファイル名, ファイル名, ファイル名, … )
引数
ID (Integer)必須
ドロップする相手先
x, y (Integer)必須
第2引数と第3引数が数値であれば ドロップ位置 X, Yと判断(デフォルトは中央)
ディレクトリ (String)必須
ファイルのあるディレクトリ
ファイル名 (String,Array)必須
ドロップするファイル名(配列変数で渡す事も可)
戻り値

使い方

メモ帳を起動し、C:\Program Files (x86)\UWSC\Readme.txtをアプリにドラックします。

UWSC
DIM ID = EXEC("notepad")
DROPFILE(ID, "C:\Program Files (x86)\UWSC\", "Readme.txt")

DROPFILE関数はディレクトリ名とファイル名を分けて引数に指定する必要があるので、パス名から指定したい場合はFileSystemObject オブジェクトFSO.GetParentFolderName メソッド(フォルダ名)とFSO.GetFileName メソッド(ファイル名)を使います。

UWSC
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を省略した場合、ウィンドウの中央にファイルがドラッグ&ドロップされます。中央ではない位置にドロップしたい場合は座標を指定する必要があります。

以下のプログラムで現在のカーソル位置を調べることができます。ファイルをドロップする位置を調べるのに使ってください。

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

WHILE TRUE
	FUKIDASI("x:" + G_MOUSE_X + "<#CR>y:" + G_MOUSE_Y)
	SLEEP(0.001)
WEND

またウィンドウのサイズや位置にドロップする位置がうまく指定できない場合があるので、DROPFILE関数の直前、もしくはウィンドウのIDを取得した直後にウィンドウを最大化しておくと良いです。

UWSC
CTRLWIN(ID, MAX)

DROPFILE(ID, x, y, folderspec, filename)

ウィンドウのサイズや位置から計算する方法もあります。

UWSC
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

ratioXratioY01の範囲の数値を指定することで、ウィンドウ左上からの右下の範囲の位置を割合で指定することができます。ratioX0でウィンドウの左端、値を大きくしていくと右側に近づいていき1で右端となります。ratioY0でウィンドウの上端、値を大きくしていくと下側に近づいていき1で下端となります。offsetXoffsetYは微調整したいときに値を指定してください。

ウィンドウ中央はratioX=0.5(50%)、ratioY=0.5(50%)を指定します。

UWSC
DIM x = wx + width * 0.5
DIM y = wy + height * 0.5

ウィンドウ右端から10px左、縦位置はウィンドウ中央。

UWSC
DIM x = wx + width - 10
DIM y = wy + height * 0.5

ウィンドウ左端から10px右、上端から20px下。

UWSC
DIM x = wx + 10
DIM y = wy + 20

ダイアログ

ファイルのドロップ時にダイアログが表示される場合は、処理がDROPFILE関数から先に進まなくなってしまいます。ダイアログを手動で操作するか、指定Windowが現れた時でスケジュール設定を行う必要があります。

以下はFormat FactoryD:\Music\SamplesにあるファイルをWMA形式に変換するプログラムです。

Format Factoryの起動画面

Format Factory.png Format Factory_ファイルをドロップする位置.png
UWSC
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はスケジュール設定で取得したウィンドウを表します。

UWSC
DIM ID = GETID(GET_SCHEDULE_WIN)

FUKIDASI("ダイアログの処理中です")

IF CLKITEM(ID, "オーディオ\-> WMA", CLK_TREEVIEW) THEN CLKITEM(ID, "OK", CLK_BTN)

DROPFILE関数でファイルをドロップしたときに表示されるダイアログ。オーディオ->WMAを選択し、OKボタンをクリックします。

Format Factory_ダイアログ.png

スケジュールを以下のように設定します。

Format Factory_スケジュール設定.png

ファイルが追加されたあとの画面。

Format Factory_ファイル追加後.png

完了通知

Format Factory_完了通知.png

Format Factoryに追加するファイル。

Format Factory_追加するファイル.png

プログラム実行例

テキストファイルをメモ帳にドロップします

C:\Program Files (x86)\UWSC\Readme.txtをメモ帳にドラッグ&ドロップして開きます。

UWSC
DIM ID = EXEC("notepad")
DROPFILE(ID, "C:\Program Files (x86)\UWSC\", "Readme.txt")
使用関数

画像ファイルをペイントにドロップします

D:\Desktop\sample.pngをペイントにドラッグ&ドロップして開きます。

UWSC
DIM ID = EXEC("mspaint")
DROPFILE(ID, "D:\Desktop\", "sample.png")
使用関数

ExcelファイルとCSVファイルをExcelにドロップして開く

CREATEOLEOBJで起動したExcelにファイルをドロップするとなぜか落ちるから、EXECで起動。

UWSC
EXEC("C:\Program Files\Microsoft Office\Office15\EXCEL.EXE")
DIM ID = GETID("Excel", "XLMAIN")
DROPFILE(ID, "D:\Desktop\", "sample.xlsx", "sample.csv")