Windows版Dishに限っては外部DLLが読めるので、
Win32API経由でファイル選択ダイアログを起動するとか。
小ワザ/ファイル選択ダイアログ
https://wiki.hsp.moe/%E5%B0%8F%E3%83%AF%E3%82%B6%EF%BC%8F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E9%81%B8%E6%8A%9E%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0.html#x00971fe
より引用
#include "hgimg4.as"
#uselib "Comdlg32.DLL"
#func GetOpenFileName "GetOpenFileNameA" int
#define BUFSIZE 260
#define FILTERSIZE 512
#define ALLTYPE "ALL files (*.*)@*.*@"
#define PICTURE "画像ファイル (*.bmp;*.mag;*.jpg)@*.bmp;*.mag;*.jpg@"
#define SOUND "音楽ファイル (*.mid;*.mp3;*.wav)@*.mid;*.mp3;*.wav@"
#define DOCUMENT "文書ファイル (*.txt)@*.txt@"
#define OFN_FILEMUSTEXIST $00001000
dim ofn , 22
sdim aplFilter , FILTERSIZE+1
sdim usrFilter , FILTERSIZE+1
sdim filename , BUFSIZE+1
aplFilter = PICTURE + SOUND + DOCUMENT + ALLTYPE + "@"
usrFilter = "ユーザ選択フィルタ (*.*)@*.*@" + "@"
repeat
await 0
mutch=instr(aplFilter,start,"@")
if mutch = -1 : break
poke aplFilter , start + mutch , $00
start += mutch + 1
loop
start = 0
repeat
await 0
mutch=instr(usrFilter,start,"@")
if mutch = -1 : break
poke usrFilter , start + mutch , $00
start += mutch + 1
loop
ofn.0 = 88 ; lStructSize
ofn.1 = hwnd ; hwndOwner
ofn.2 = hinstance ; hInstance
ofn.3=varptr(aplFilter) ; lpstrFilter
ofn.4=varptr(usrFilter) ; lpstrCustomFilter
ofn.5 = FILTERSIZE ; nMaxCustFilter
ofn.6 = 1 ; nFilterIndex
ofn.7=varptr(filename) ; lpstrFile
ofn.8 = BUFSIZE ; nMaxFile
ofn.9 = 0 ; lpstrFileTitle
ofn.10 = 0 ; nMaxFileTitle
ofn.11 = 0 ; lpstrInitialDir
ofn.12 = 0 ; lpstrTitle
ofn.13 = OFN_FILEMUSTEXIST ; Flags
prm=varptr(ofn)
GetOpenFileName prm
if stat = 0{
dialog "失敗" , 0 , "終了確認" : end
}
title filename
stop