HDDにあるFileList一覧を表示するプログラム

・HDDにあるファイルの一覧を取得するプログラムです。
・このサンプル公開は自分の技術的好奇心、バックアップと他者の開発支援を主に目的としています。
・バックアップ目的の為、設定データなどが存在しない場合など、正常に動作しない場合があります。
・その結果起こった事故、損失などについて作者は責任を追わないものとします ・動作保証はありません
・またこの技術を悪用した悪戯プログラムの作成の一切を禁止します。
・ソースのコピーはサンプル上部のエディタ表示から行って下さい。
・以上のことを理解した上で使用してください。



Script : filelist.hsp

	

	// FileList ソースファイル
	// 					はりー氏



	// 実行モードに関しては実行ファイルのファイル名で決定。efilesearchという文字列が含まれていたらEROMODEとなる。それ以外は通常起動。
	// efilesearchという文字列が含まれている   → EROMODE
	// efilesearchという文字列が含まれていない   → 通常起動

	// メインウィンドゥを非表示に設定してからコンパイルを行って下さい。
	// メインウィンドゥを非表示に設定してからコンパイルを行って下さい。
	// メインウィンドゥを非表示に設定してからコンパイルを行って下さい。

	// コンパイル時のファイル名
	// 		EROMODE  : efilesearch_main
	// 		通常起動 :  filesearch_main



#include "hspda.as"		// ソート命令 sortnote 定義ファイル
#include "hspext.as"	// クリップボード転送命令 clipset 、レジストリ書き換え setreg等 定義ファイル


	// グループボックス群指定用
	#uselib "user32.dll"
	#func  SetWindowLong           "SetWindowLongA"        int,int,int
	#cfunc GetWindowLong           "GetWindowLongA"        int,int

	// ファイル読み込み中の操作を無効にする命令類
	#uselib "user32.dll"
	#func EnableWindow             "EnableWindow"          sptr,sptr			// マウス、キーボード操作 無効/有効 切り替え
	#cfunc LoadCursor              "LoadCursorA"           sptr,sptr			// マウスカーソル切り替え
	#func SetClassLong             "SetClassLongA"         sptr,sptr,sptr		// マウスカーソル反映
	#func SetCursor                "SetCursor"             sptr					// マウスカーソル反映

	// GomPlayer検索、移動用、ログファイル終了用
	#uselib "user32.dll"
	#func global FindWindow        "FindWindowExA"         sptr,sptr,sptr,sptr
	#func global GetClassName      "GetClassNameA"         sptr,sptr,sptr
	#func SetForegroundWindow      "SetForegroundWindow"   sptr

	// リストボックスダブルクリック起動用関数命令類
	#uselib "user32.dll"
	#func ScreenToClient           "ScreenToClient"        int,var
	#func CreatePopupMenu          "CreatePopupMenu"
	#func TrackPopupMenuEx         "TrackPopupMenuEx"      int,int,int,int,int,nullptr
	#func AppendMenu               "AppendMenuA"           int,int,int,sptr
	#func DestroyMenu              "DestroyMenu"           int
	#func ClientToScreen           "ClientToScreen"        int,var
	#cfunc ChildWindowFromPoint    "ChildWindowFromPoint"  int,int,int

	// GomPlayer 起動モニター位置変更用命令類、ログファイル終了用
	#uselib "user32.dll"
	#func global MoveWindow        "MoveWindow"            sptr,sptr,sptr,sptr,sptr,sptr
	#func global SendMessage       "SendMessageA"          sptr,sptr,sptr,sptr

	// GomPlayer 起動位置取得用
	#uselib "user32.dll"
	#func global GetWindowPlacement "GetWindowPlacement"   sptr,sptr

	// 関連付けアプリケーション調査用
	#uselib "shell32.dll"
	#func FindExecutable            "FindExecutableA"      sptr,sptr,int
	#uselib "kernel32.dll"
	#func GetLongPathName           "GetLongPathNameA"     sptr,int,int

	// EXEファイルネーム取得命令類
	#uselib "kernel32.dll"
	#func global GetModuleFileName "GetModuleFileNameA"    sptr,sptr,sptr

	// ショートパス作成用関数命令類
	#uselib "kernel32.dll"
	#func global GetShortPath      "GetShortPathNameA"     var,var,int		// long name,short name,bytes

	// プロセスに残らせない終了用関数
	#uselib "kernel32.dll"
	#func ExitProcess              "ExitProcess"           sptr

	// ログファイルが開かれているかを調査する命令
	#uselib "kernel32.dll"
	#func global CloseHandle       "CloseHandle"           int
	#func global CreateFile        "CreateFileA"           sptr,sptr,sptr,sptr,sptr,sptr,sptr
	#func global GetFileAttributes "GetFileAttributesA"    sptr

	// ログファイル終了用、ウィンドウ表示状態設定命令
	#uselib "user32.dll"
	#func PostMessage              "PostMessageA"          sptr,sptr,sptr,sptr
	#func ShowWindow               "ShowWindow"            sptr,sptr

	// PC電源投入してからの経過時間を取得用
	#uselib "kernel32.dll"
	#cfunc GetTickCount "GetTickCount"



	// 最小化用定数定義
	#define SW_SHOWMINIMIZED 2

	// グループボックス群指定用
	#define WS_GROUP 0x00020000 
	#define StyleAdd(%1,%2=0,%3=0)ujw=((%3)&2)*-2-16 :SetWindowLong %1,ujw,GetWindowLong(%1,ujw)|(%2)^((%3)&1)*(%2)
	#define statictext(%1,%2,%3) :winobj "static",%1,0,$50000000,%2,%3

	// ログファイル終了用命令
	#define WM_GETTEXT         $0000000D
	#define WM_CLOSE           $00000010

	// リストボックス制御用定数値、GomPlayer 起動モニター位置変更用定数類
	#define LB_GETTEXT         0x189
	#define WM_COMMAND         0x111
	#define LB_GETITEMHEIGHT   0x1A1
	#define LB_GETCOUNT        0x18B
	#define LBN_DBLCLK         0x002

	// exec 命令により開ける最大のファイル名長
	#define MAX_PATH            260


#module
	#define GENERIC_READ           $80000000
	#define GENERIC_WRITE          $40000000
	#define OPEN_EXISTING          $00000003
	#define FILE_ATTRIBUTE_NORMAL  $00000080

	#defcfunc writable str fname
		/*
		ファイルが開いているかを確認するwrite命令
		返り値
			-1 : ファイルが存在しない
			 0 : ファイルが存在し、書き込み可能
			 1 : ファイルがexeファイルで実行中
		*/
		GetFileAttributes fname
		if ( stat == -1 ) : return -1
		CreateFile fname,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
	if ( stat == -1 ) {
		return 1
	}else{
		CloseHandle stat
		return 0
	}
#global


#module
	// マルチディスプレイの ハンドルとRECT を取得
	#uselib "kernel32.dll"
	#func VirtualProtect@_xdim "VirtualProtect" var,int,int,var
	#define global xdim(%1,%2) dim %1,%2: VirtualProtect@_xdim %1,%2*4,$40,AZSD@_xdim
	
	#uselib "user32.dll"
	#func  EnumDisplayMonitors "EnumDisplayMonitors" sptr, sptr, sptr, int
	#deffunc GetDisplayMonitors var info
		dim info, 100
		if ( func == 0 ) { xdim func, 14 
			func.0 = $10244c8b, $548b018b, $c06b0424, $04410314, $8b108956, $8b102454, $04708932 
			func.7 = $8904728b, $728b0870, $0c708908, $890c528b, $01ff1050, $5e40c033, $cc0010c2 }
		struct1 = 0, varptr(info)
		EnumDisplayMonitors 0, 0, varptr(func), varptr(struct1)
		if stat : return struct1
		return -1
#global


#module
	// ファイルサイズ取得命令
	#uselib "kernel32.dll"
	#cfunc _GetLastError "GetLastError"
	#cfunc _CreateFile "CreateFileA"    sptr, int, int, int, int, int, int
	#cfunc _GetFileSize "GetFileSize"   int, int
	#func _CloseHandle "CloseHandle"    int

	#define NULL                  $00000000
	#define NO_ERROR              $00000000
	#define INVALID_HANDLE_VALUE  $FFFFFFFF
	#define GENERIC_READ          $80000000
	#define FILE_SHARE_DELETE     $00000004
	#define FILE_SHARE_READ       $00000001
	#define FILE_SHARE_WRITE      $00000002
	#define FILE_SHARE_ALL        (FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE)
	#define OPEN_EXISTING         $00000003
	#define FILE_ATTRIBUTE_NORMAL $00000080
	
	// intではオーバーフローするのでdouble型で返す
	#defcfunc GetFileSize str FILENAME
		// ファイルを読み取りモードで開く
		hFile = _CreateFile(FILENAME, GENERIC_READ, FILE_SHARE_ALL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)
		if ( hFile == INVALID_HANDLE_VALUE ) : return -1.0 // 失敗

		// ファイルサイズを取得してみる
		ldword = _GetFileSize(hFile, varptr(hdword))
		if ( ldword == -1 )&& ( _GetLastError() != NO_ERROR ) : _CloseHandle hFile : return -1.0 // 失敗

		// ハンドル使い終わり
		_CloseHandle hFile

		// 最上位ビットの扱い
		l = 2147483648.0 * (ldword<0) + (ldword&0x7FFFFFFF)
		h = 2147483648.0 * (hdword<0) + (hdword&0x7FFFFFFF)
		s = h * 4294967296.0 + l
	return s
	
	// 計算部分は↓のようにも書いてもいいかも[参考]
	// i64a = ldword, hdword, 1, 0 : dupptr dbl, varptr(i64a), 16, 3 : return dbl.0 / dbl.1
#global


#module
	// 三桁ずつにコンマ(,)等で区切る関数
	#defcfunc sepstr double p1,str p2
		sdim res
		index = 0
		tmp = strf("%.0f",p1)
		len = strlen(tmp)
		if ( len\3 != 0 ) : index = len\3 : res = strmid(tmp,0,index)+p2
		repeat len/3
			res += strmid(tmp,index+cnt*3,3)+p2
		loop
	return strmid(res,0,strlen(res)-1)
#global


#module
	#uselib "kernel32.dll"
	#func global GetUserDefaultLCID "GetUserDefaultLCID"
	#func global LCMapStringA       "LCMapStringA"        int,int,int,int,int,int

	#defcfunc strconv str _word,int option
		/*
							文字列のフォーマット変換関数

			 	 OPTION		動作				例
				    002		ACCENT を削除		ばビぱピ → はヒはヒ	//あまりに対象が長いとバグ有り
				    256		小文字 に変換		ABCdef   → abcdef
				    512		大文字 に変換		ABCdef   → ABCDEF
				1048576		ひらがなに変換		あいウエ → あいうえ
				2097152		カタカナに変換		あいウエ → アイウエ
				4194304		半角文字に変換		ABCD   → ABCD
				8388608		全角文字に変換		ABCD   → ABCD
		*/
		word = _word	// 変数変換
		GetUserDefaultLCID : lcid = stat
		LCMapStringA lcid, option, varptr(word), -1, varptr(retstr), 0 : sz = stat
		sdim retstr, sz
		LCMapStringA lcid, option, varptr(word), -1, varptr(retstr), sz
	return retstr
#global


	#define global ctype round(%1)  double(strf("%%0.0f", %1))
	#define global ctype sjuliusday(%1,%2,%3)  (365.25*%1)+(%1/400)-(%1/100)+(30.59*(%2-2))+%3-678912
	#module
	#deffunc julius var prm1,int prm2,int prm3,int prm4
		;   prm1 : 取得用変数, prm2 : 年(yyyy形式), prm3 : 月(mm), prm4 : 日(dd)
		y = prm2 : if (y<=0)|(y>3000) : y =gettime(0)
		m = prm3 : if (m<=0)|(m>12)   : m =gettime(1)
		d = prm4 : if (d<=0)|(d>31)   : d =gettime(3)
		MJD = sjuliusday(y,m,d)					// 準ユリウス日を計算
		JD=round(MJD+2400002.5) : prm1=int(JD)	// ユリウス日を計算
	return 0
	#global


	// EXEファイル名より、動作モードの選択
	sdim EXENAME,256
	sdim _EXENAME,256
	sdim logo
	GetModuleFileName 0,varptr(_EXENAME),260
	// eromode = (getpath(EXENAME,9)=="efilesearch") * 1		// 旧判断条件式
	EXENAME = _EXENAME
	if ( instr(EXENAME,0,"efilesearch") != -1 ) || ( instr(EXENAME,0,"hsp3") != -1 ) {
		eromode = 1	// efilesearch or Debug用
		logo = "(E) "
	}
	// eromode = 0		// Debug用 強制標準モード化


/*----------------------------------------------------------------------------------------------------------------------------------*/


	// 右クリックメニューの作成
	#define MENUID_OPEN          1
	#define MENUID_FOLDER        2
	#define MENUID_EXPLORER      3
	#define MENUID_COPYNAME      4
	#define MENUID_COPYFULLNAME  5
	#define MENUID_FILESIZE      6
	#define MENUID_PROPERTY      7

	gsel 0,-1

*init
	// 初期設定変数
	xmlpath = "C:\\Program Files\\Utatane0253\\SHARE.XML"		// うたたねの共有フォルダ一覧が載っているxmlファイルのパス
	inipath = "C:\\Program Files\\Utatane0253\\Utatane.ini"		// うたたねの設定データが載っているiniファイルのパス
	#define winx  900							// 画面の横サイズ
	#define winy  665							// 画面の縦サイズ

	#define CSVFNAME dirinfo(0)+"\\runlog.csv"

	brcode = "\n"
	sz_filelist = 65536		// filelist変数の初期メモリ容量
	sdim searchlist
	memexpand_count = 0


	// Version情報、著作権情報
	#define EXENAME "ファイル検索システム"
	#define VERINFO "1.19β"
	#define MAKER   "はりー総合技術研究所"


	exist xmlpath
		if ( strsize == -1 ) : dialog xmlpath+"\nが見つかりません。\nファイルを確認してください。",1,EXENAME+"Ver."+VERINFO : end

	exist inipath
		if ( strsize == -1 ) : dialog inipath+"\nが見つかりません。\nファイルを確認してください。",1,EXENAME+"Ver."+VERINFO : end

	gosub *getdisplays

	wx1 = (ginfo_dispx-winx)/2
	wy1 = (ginfo_dispy-winy)/2
	gosub *check_gom_run
	if ( gomplayer_run ) {
		// GomPlayerが起動している場合
		gosub *get_gom_place			// GomPlayer の起動位置座標とモニターIDが返ってくる
		if ( gom_moniid == 1 ) {
			wx1 = disp(1,3)+(disp(2,3)-disp(2,1)-winx)/2
			wy1 = disp(1,2)+(disp(2,4)-disp(2,2)-winy)/2
		}
	}

	screen 1,winx,winy,4,wx1,wy1
	syscolor 15 : boxf
	sdim showdata,65536
	sdim keyword1
	sdim keyword2

	objsize ginfo_winx
	listbox selindex,600-120,showdata
		listboxid = stat
		hList = objinfo(listboxid,2)
	pos 0,ginfo_cy-15 : input keyword1,ginfo_winx-240,20 : input1id = stat
	pos 0,ginfo_cy    : input keyword2,ginfo_winx-240,20 : input2id = stat
	objsize 40,40
	pos ginfo_winx-240,ginfo_cy-40 : button gosub "クリア",*clear_keyword
	pos ginfo_winx-200,ginfo_cy-40 : button gosub "検索",*search
	objlastid = stat

	// スタティックテキストを作成、その上にラジオボタンを作成
	pos 739,484
	statictext "",160,050
	StyleAdd objinfo_hwnd(objlastid+1),WS_GROUP			// グループの最初のコントロールにWS_GROUPを指定

	pos 765,502 : objsize 055,20 : button gosub "論理和",*dummy : objid_ronriwa = stat   : sendmsg objinfo_hwnd(stat),$f4,9,1 : sendmsg objinfo_hwnd(objid_ronriwa),$f1,1,0
	pos 825,502 : objsize 055,20 : button gosub "論理積",*dummy : objid_ronriseki = stat : sendmsg objinfo_hwnd(stat),$f4,9,1

	// グループボックスの作成
	pos 745,487
	objsize 148,040 : button "検索方法",*dummy
	objlastid = stat
	sendmsg objinfo_hwnd(objlastid),$f4,7,1




	objsize 070,060
	pos 008+070*0,537 : button gosub "開く"                 , *open
	pos 008+070*1,537 : button gosub "前ファイルを\n追加"   , *open_nextfile : objid_before = stat : SetWindowLong objinfo(stat, 2), -16, $50000000|$2000
	pos 008+070*2,537 : button gosub "HDD再読込"            , *loadhdd
	pos 008+070*3,537 : button gosub "MEMORY\n再読込"       , *reloadmem                           : SetWindowLong objinfo(stat, 2), -16, $50000000|$2000
	pos 008+070*4,537 : button gosub "終了"                 , *exit

	pos 008+070*0,597 : button gosub "ランダム起動"         , *random
	pos 008+070*1,597 : button gosub "次ファイルを\n追加"   , *open_nextfile : objid_next = stat   : SetWindowLong objinfo(stat, 2), -16, $50000000|$2000
	pos 008+070*2,597 : button gosub "ファイル出力"         , *save
	pos 008+070*3,597 : button gosub "ログ表示"             , *load_history
	pos 008+070*4,597 : button gosub "新作フォルダ\nを開く" , *open_outfolder
	objlastid = stat
	SetWindowLong objinfo(stat, 2), -16, $50000000|$2000

	// スタティックテキストを作成、その上にラジオボタンを作成
	pos 380,535
	statictext "",320,120
	StyleAdd objinfo_hwnd(objlastid+1),WS_GROUP			// グループの最初のコントロールにWS_GROUPを指定
	objlastid += 2

	pos 400,553
	objsize 165,20 : button gosub "関連付けられたアプリケーション",*dummy : objid_app_s = stat   : sendmsg objinfo_hwnd(stat),$f4,9,1 : sendmsg objinfo_hwnd(objid_app_s),$f1,1,0
	objsize 125,20 : button gosub "WindowsMediaPlayer"            ,*dummy                        : sendmsg objinfo_hwnd(stat),$f4,9,1
	objsize 059,20 : button gosub "WinAmp"                        ,*dummy                        : sendmsg objinfo_hwnd(stat),$f4,9,1
	objsize 079,20 : button gosub "真空波動研"                    ,*dummy                        : sendmsg objinfo_hwnd(stat),$f4,9,1
	objsize 060,20 : button gosub "K2Editor"                      ,*dummy                        : sendmsg objinfo_hwnd(stat),$f4,9,1

	pos 570,553
	objsize 073,20 : button gosub "GomPlayer"                     ,*dummy                        : sendmsg objinfo_hwnd(stat),$f4,9,1
	objsize 098,20 : button gosub "GomPlayer(Add)"                ,*dummy : objid_gom_add = stat : sendmsg objinfo_hwnd(stat),$f4,9,1
	objsize 093,20 : button gosub "KbMediaPlayer"                 ,*dummy                        : sendmsg objinfo_hwnd(stat),$f4,9,1
	objsize 120,20 : button gosub "KbMediaPlayer(Add)"            ,*dummy                        : sendmsg objinfo_hwnd(stat),$f4,9,1
	objsize 060,20 : button gosub "WinRAR"                        ,*dummy : objid_app_e = stat   : sendmsg objinfo_hwnd(stat),$f4,9,1

	// グループボックスの作成
	pos 380,535
	objsize 320,120 : button "起動するアプリケーション",*dummy
	objlastid = stat
	sendmsg objinfo_hwnd(objlastid),$f4,7,1


	// スタティックテキストを作成、その上にラジオボタンを作成
	pos 710,535
	staticid = objlastid + 1	// スタティックテキストを無効化する際に指定するIDを取得
	statictext "",185,120
	StyleAdd objinfo_hwnd(objlastid),WS_GROUP		// グループの最初のコントロールにWS_GROUPを指定

	// GomPlayer起動先モニター選択ボタンの作成
	pos 722,560
	objsize 160,20
	repeat displays,1
		button gosub "[ID:"+disp(cnt,0)+"] ("+strf("%04d",disp(cnt,1))+" , "+disp(cnt,2)+" , "+strf("%04d",disp(cnt,3))+" , "+disp(cnt,4)+")",*setmoni
		if ( cnt == 1 ) : moniid_s = stat
	loop
	numobj = stat+1		// 最終的なオブジェクト個数

	// GomPlayer起動先モニター選択ボタングループボックスの作成
	pos 710,535
	objsize 185,120 : button gosub "GomPlayer起動先モニター",*dummy
	sendmsg objinfo_hwnd(stat),$f4,7,1
	await 2

	gosub *check_logfile	// ログファイルのチェック
	gosub *loadhdd			// HDDを読み出す

	// 右クリックメニューバーの作成
	CreatePopupMenu : hpop = stat
	AppendMenu hpop , 0,MENUID_OPEN,"開く(&O)"
	AppendMenu hpop , $800,,"----"
	AppendMenu hpop , 0,MENUID_FOLDER,"フォルダーを開く(&E)"
	AppendMenu hpop , 0,MENUID_EXPLORER,"エクスプローラで開く(&X)"
	AppendMenu hpop , $800,, "----"
	AppendMenu hpop , 0,MENUID_COPYNAME,"ファイル名をコピー(&C)"
	AppendMenu hpop , 0,MENUID_COPYFULLNAME,"ファイル名をフルパスでコピー(&F)"
	AppendMenu hpop , $800,, "----"
	AppendMenu hpop , 0,MENUID_FILESIZE,"ファイルサイズを確認(&S)"
	AppendMenu hpop , 0,MENUID_PROPERTY,"プロパティーを表示(&R)"

	onkey  gosub *entersearch
	oncmd  gosub *onContextMenu, $7B //WM_CONTEXTMENU
	oncmd  gosub *onParentNotify, $210 //WM_PARENTNOTIFY
	oncmd  gosub *doubleclick,WM_COMMAND
	onexit goto *exit


	// PC電源投入して2分以内なら最小化(Ver.1.10β〜)
	tick = GetTickCount()
	if ( tick/(1000*60) <= 2 ) && ( tick != 0 ) : ShowWindow hwnd,SW_SHOWMINIMIZED
stop


*check_logfile
	title "ログファイルを調査しています... Please wait - " + EXENAME + "Ver." + VERINFO + "  " + MAKER

	// 各月の日にち数データを作成
	num_day = -1,31,28,31,30,31,30,31,31,30,31,30,31
	now_year = gettime(0)
	if ( ( now_year\4 == 0 ) && ( now_year\100 != 0 ) ) || ( now_year\400 == 0 ) : num_day(2) == 29		// 閏年であれば2月の日にちを29日にする

	// 起動日の日にちを取得
	today_y = gettime(0)
	today_m = gettime(1)
	today_d = gettime(3)

	sdim csvdata
	notesel csvdata
	noteload CSVFNAME
	len_csv = strlen(csvdata)
	csv_index = 0

	year_1monago = today_y
	month_1monago = today_m-1
	if ( month_1monago == 0 ) : month_1monago = 12 : year_1monago --
	day_1monago = today_d
	if ( num_day(month_1monago) < day_1monago ) : day_1monago = num_day(month_1monago)
	julius jul_1monago,year_1monago,month_1monago,day_1monago

	repeat notemax
		getstr tmp,csvdata,csv_index
		csv_strsize = strsize
		if ( csv_index == 0 ) : csv_index += csv_strsize : continue
		getstr data_y,tmp,0,','
		index = strsize
		getstr data_m,tmp,index,','
		index += strsize
		getstr data_d,tmp,index,','
		data_y = int(data_y)
		data_m = int(data_m)
		data_d = int(data_d)
		julius jul_data,data_y,data_m,data_d
	
		if ( jul_data < jul_1monago ) {
			// 1ヶ月以上経過
			wpoke csvdata,csv_index-2,0x00
			break
		}
		csv_index += csv_strsize
	loop
	if ( len_csv != strlen(csvdata) ) : notesave CSVFNAME
return


*getdisplays
	// マルチモニターのサイズ、ID を取得
	dim info, 100
	GetDisplayMonitors info : displays = stat
	dim disp,16,5
	repeat displays,1
		c = (cnt-1)*5
		disp(cnt,0) = cnt
		disp(cnt,1) = info(c+1)
		disp(cnt,2) = info(c+2)
		disp(cnt,3) = info(c+3)
		disp(cnt,4) = info(c+4)
	loop

	// disp(ID,1)変数を使ってソート
	repeat displays,1
		_cnt = cnt
		repeat displays,1
			if ( disp(_cnt,1) < disp(cnt,1) ) {
				tmp = disp(_cnt,0) : disp(_cnt,0) = disp(cnt,0) : disp(cnt,0) = tmp
				tmp = disp(_cnt,1) : disp(_cnt,1) = disp(cnt,1) : disp(cnt,1) = tmp
				tmp = disp(_cnt,2) : disp(_cnt,2) = disp(cnt,2) : disp(cnt,2) = tmp
				tmp = disp(_cnt,3) : disp(_cnt,3) = disp(cnt,3) : disp(cnt,3) = tmp
				tmp = disp(_cnt,4) : disp(_cnt,4) = disp(cnt,4) : disp(cnt,4) = tmp
			}
		loop
	loop
return


*dummy
	return

*load_history
	exec dirinfo(0)+"\\runlog.csv",16
return


*random
	// ランダム起動
	if ( showdata == "" ) : return
	notesel showdata
	randomize
	repeat 10
		randomize rnd(256)
		filenum = rnd(notemax)
		noteget temp,filenum
		ext = getpath(temp,18)
		if ( ext != ".rar" ) && ( ext != ".zip" ) && ( ext != ".lzh" ) : break
	loop
	objprm listboxid,filenum
	fileopen = 1
	randomopen = 1
	gosub *_open
	noteunsel
return


*save
	// ファイル出力
	dialog 	"txt",17,"テキスト文書"
		if ( stat == 0 ) : return
	notesel showdata
	_refstr = refstr
	if ( instr(_refstr,0,".txt") == -1  ) : _refstr = refstr + ".txt"
	notesave _refstr
	noteunsel
return


*onParentNotify
	if (wparam&0xFFFF) = $204 { //WM_RBUTTONDOWN
		Point = lParam&0xFFFF, lParam>>16&0xFFFF
		if ChildWindowFromPoint(hWnd, Point, Point.1) = hList {
			ClientToScreen hWnd, Point
			ScreenToClient hList, Point
			SendMsg hList, $201, 1, Point|Point.1<<16 //WM_LBUTTONDOWN
			SendMsg hList, $202, 0, Point|Point.1<<16 //WM_LBUTTONUP
		}
	}
return


*onContextMenu
	// 右クリックされたときの処理
	point = ginfo_mx,ginfo_my
	ScreenToClient hList,point
	if ( wparam == hList ) && ( point.1 <= endline ) {
		TrackPopupMenuEx hpop,$182,ginfo_mx,ginfo_my,hWnd : menuid = stat
		sdim buf,1024 : sendmsg hList,LB_GETTEXT,selindex,varptr(buf)
			// メニュー項目:menuid
			// 項目名	   :buf
			// 項目番号	   :selindex
			// ファイル名  :temp

			// 	MENUID_OPEN          1		開く
			// 	MENUID_FOLDER        2		フォルダーを開く
			// 	MENUID_EXPLORER      3		エクスプローラーで開く
			// 	MENUID_COPYNAME      4		ファイル名をコピー
			// 	MENUID_COPYFULLNAME  5		ファイル名をフルパスでコピー
			// 	MENUID_FILESIZE      6		ファイルサイズを確認
			// 	MENUID_PROPERTY      7		プロパティーを表示

		switch menuid
			case 0 : return : swbreak	// 例外
			case MENUID_OPEN
				// 開く
				//temp = buf
				gosub *open
				swbreak
			case MENUID_FOLDER
				// フォルダを開く
				folopen = 1
				temp = buf
				gosub *_open
				swbreak
			case MENUID_EXPLORER
				// エクスプローラで開く
				expopen = 1
				temp = buf
				gosub *_open
				swbreak
			case MENUID_COPYNAME
				// ファイル名をコピー
				clipset buf
				swbreak
			case MENUID_COPYFULLNAME
				// ファイル名をフルパスでコピー
				fullcopy = 1
				temp = buf
				gosub *_open
				swbreak
			case MENUID_FILESIZE
				// ファイルサイズを確認
				gfilesize = 1
				temp = buf
				gosub *_open
				swbreak
			case MENUID_PROPERTY
				// プロパティーを表示
				property = 1
				temp = buf
				gosub *_open
				swbreak
		swend
	}
return


*loadhdd
	title logo+"HDD Loading... Please wait - " + EXENAME + "Ver." + VERINFO + "  " + MAKER

	loading = 1
	//dialog gomgroupid
	//end
	repeat numobj
		if ( cnt != staticid ) : EnableWindow objinfo(cnt,2),0
	loop
	hcurwnd = LoadCursor(0, 32514)
	SetClassLong hwnd, -12, hcurwnd
	SetCursor hcurwnd

	// 共有ディレクトリ内のファイル名取得
	sdim showdata
	objprm listboxid,showdata
	sdim folderpath
	notesel xmldata
	noteload xmlpath
	repeat notemax-5,3
		noteget tmp,cnt
		if ( eromode == 0 ) {
			// 通常起動時の処理
			folderpath(length(folderpath)) = strmid(tmp,16,instr(tmp,16,"\" priority_upload"))
		} else {
			// EROMODE 起動時の処理
			if ( instr(tmp,0,"\\downloaded\\H") != -1 ) {
				hnextstr = strmid(tmp,instr(tmp,0,"\\downloaded\\H")+13,1)		// downloaded\Hの次の1文字が \ or " であればリストへ登録
				if ( hnextstr == "\"" ) || ( hnextstr == "\\" ) {
					folderpath(length(folderpath)) = strmid(tmp,16,instr(tmp,16,"\" priority_upload"))
				}
			}
		}
		//if ( eromode != 1 ) || ( ( instr(tmp,0,"\\downloaded\\H") != -1 ) && ( instr(tmp,0,"\\Hack") == -1 ) ) {
			//folderpath(length(folderpath)) = strmid(tmp,16,instr(tmp,16,"\" priority_upload"))
		//}
	loop


	sdim filelist,sz_filelist//65536*8
	repeat length(folderpath)-1,1
		dirlist tmp,folderpath(cnt)+"\\*.*",3
			if ( strlen(tmp) == 0 ) : continue cnt+1

		if ( sz_filelist - strlen(filelist) - strlen(tmp) < 2048 ) {
			// filelist変数のメモリ歳確保
			sz_filelist *= 2
			memexpand filelist   , sz_filelist
			memexpand searchlist , sz_filelist
			memexpand_count ++
		}
		memcpy filelist,tmp,strlen(tmp),strlen(filelist)	// filelist += tmp
	loop

	// うたたねの保存先フォルダ名を取得、リストへ追加 [新作]
	sdim inidata
	notesel inidata
	noteload inipath
	getstr outfolder,inidata,instr(inidata,0,"DestinationFolder=")+18
	dirlist tmp,outfolder+"\\*.*",3
	memcpy filelist,tmp,strlen(tmp),strlen(filelist)	// filelist += tmp
	folderpath(length(folderpath)) = outfolder			// 新作フォルダをフォルダリストへ追加
	filelist = strmid(filelist,0,strlen(filelist)-2)	// 最終改行文字列を削除
	sortnote filelist
	showdata = filelist									// 新作フォルダもリストへ追加
	gosub *rewrite

	// マウス、キーボードの操作を有効化&マウスカーソルを標準矢印カーソルへ設定
	loading = 0
	hcurwnd = LoadCursor(0, 32512)
	SetClassLong hwnd, -12, hcurwnd
	SetCursor hcurwnd
	repeat numobj
		EnableWindow objinfo(cnt,2),1
	loop
	objsel input1id

return


*reloadmem
	// keyword = ""
	// objprm input1id,""

	// マウス、キーボードの操作を無効化&マウスカーソルを砂時計へ設定
	loading = 1
	repeat numobj
		if ( cnt != staticid ) : EnableWindow objinfo(cnt,2),0
	loop
	hcurwnd = LoadCursor(0, 32514)
	SetClassLong hwnd, -12, hcurwnd
	SetCursor hcurwnd

	showdata = filelist
	gosub *rewrite			// リストボックスの表示更新

	// マウス、キーボードの操作を有効化&マウスカーソルを標準矢印カーソルへ設定
	loading = 0
	hcurwnd = LoadCursor(0, 32512)
	SetClassLong hwnd, -12, hcurwnd
	SetCursor hcurwnd
	repeat numobj
		EnableWindow objinfo(cnt,2),1
	loop
	objsel input1id
return


*open_nextfile
	notesel showdata
	if ( notemax == 0 ) : return

	if ( stat == objid_before ) {
		// 前ファイルを追加する場合のID値計算
		if ( selindex - 1 < 0 ) {
			id = notemax - 1
		} else {
			id = selindex - 1
		}
	} else {
		// 次ファイルを追加する場合のID値計算
		if ( selindex + 1 >= notemax ) {
			id = 0
		} else {
			id = selindex + 1
		}
	}
	objprm listboxid,id

	// 現在選択されている起動するアプリケーションを取得
	app_objid = -1
	repeat objid_app_e-objid_app_s+1,objid_app_s
		sendmsg objinfo_hwnd(cnt),$f0,0,-1
		if ( stat == 1 ) : app_objid = cnt : break
	loop
	if ( app_objid == -1 ) : dialog "変数app_objidエラー発生!",1,"ERROR"+EXENAME+"Ver."+VERINFO

	// 起動するアプリケーションをGomPlayer(Add)へ一時的に設定
	for id,objid_app_s,objid_app_e
		sendmsg objinfo_hwnd(id),$f1,0,0	// 無効にする
	next
	sendmsg objinfo_hwnd(objid_gom_add),$f1,1,0	// GomPlayer(Add)を有効にする

	gosub *open	// プレイヤーの呼び出し

	// 起動するアプリケーションを一時的設定の前の状態にする
	for id,objid_app_s,objid_app_e
		sendmsg objinfo_hwnd(id),$f1,0,0	// 無効にする
	next
	sendmsg objinfo_hwnd(app_objid),$f1,1,0
return


*open
	notesel showdata
	if ( notemax <= 0 ) : return
	if ( selindex > notemax ) || ( selindex == -1 ) : objprm listboxid,0
	// notesel showdata
	// noteget temp,selindex
	sdim temp,1024
	sendmsg hList,LB_GETTEXT,selindex,varptr(temp)		// 項目番号を頼りにファイル名を取得する
	fileopen = 1


*_open
	// 常にtemp変数にファイル名を代入してここへ送って下さい。フルパスでは指定しないで下さい。
	// ここではtempをフルパス化し、フルパスをfnameへ代入して開きます
	// open_finish_flag = 0
	fileexist = 0
	repeat length(folderpath)-1,1
		fname = folderpath(cnt)+"\\"+temp
		if ( GetFileSize(fname) != -1 ) : fileexist = 1 : break
	loop

	// 見つかったかどうかを確認させる
	if ( fileexist == 0 ) : return		// 見つからない場合は戻す

	repeat 1
		if ( fullcopy ) : fullcopy = 0 : clipset fname : break
		if ( gfilesize ) {
			gfilesize = 0
			sdim s
			filesize = getfilesize(fname)
			if ( filesize >= 1.0                     ) && ( filesize < 1.0*1024                     ) : s = "" + strf("%.2f",filesize)                       + " Byte"
			if ( filesize >= 1.0*1024                ) && ( filesize < 1.0*1024*1024                ) : s = "" + strf("%.2f",(filesize/1024))                + " KByte"
			if ( filesize >= 1.0*1024*1024           ) && ( filesize < 1.0*1024*1024*1024           ) : s = "" + strf("%.2f",(filesize/1024/1024))           + " MByte"
			if ( filesize >= 1.0*1024*1024*1024      ) && ( filesize < 1.0*1024*1024*1024*1024      ) : s = "" + strf("%.2f",(filesize/1024/1024/1024))      + " GByte"
			if ( filesize >= 1.0*1024*1024*1024*1024 ) && ( filesize < 1.0*1024*1024*1024*1024*1024 ) : s = "" + strf("%.2f",(filesize/1024/1024/1024/1024)) + " TByte"
			dialog "FileSize : "+sepstr(filesize," ")+" Byte\n\n             "+s,0,getpath(fname,8)
			break
		}


		// ファイルを開く
		if ( fileopen == 1 ) {
			fileopen = 0
			lastcnt = 0
			logdata = ""+gettime(0)+","+gettime(1)+","+gettime(3)+","+gettime(4)+","+gettime(5)+","+gettime(6)+","
			if ( randomopen == 1 ) : logdata += "RANDOM"
			logdata += ","
			if ( eromode == 1 ) : logdata += "EROMODE"
			logdata += ",\""+fname+"\""
			sdim csvdata
			notesel csvdata
			exist CSVFNAME
			if ( strsize != -1 ) : noteload CSVFNAME	// 既にrunlog.csvが存在する時
			// csvdata += logdata
			noteadd logdata,1,0
			if ( writable(CSVFNAME) == 1 ) {	// 	-1 : ファイルが存在しない	 0 : ファイルが存在し、書き込み可能		 1 : ファイルがexeファイルで実行中
				// ログファイルが開かれている場合
				hparent = 0
				handles = ""
				hw = 0
				repeat 100
					lastcnt = cnt
					// ウィンドウを検索
					FindWindow hparent, hw, 0, 0
					hw = stat
					if ( hw == 0 ) : lastcnt = 99 : break	// 何故か無かった場合
					// ウィンドウタイトルを取得
					sdim caption, 1024
					SendMessage hw,WM_GETTEXT,1024,varptr(caption)
					caption = getpath(caption,16)
					if ( instr(caption,0,"runlog") != -1 ) {
						PostMessage hw,WM_CLOSE,0,0		// CSVファイルの終了を試みる
						hw = 0
						hw_runlog = hw
					}
				loop
			}
			if ( lastcnt == 99 ) {
				ShowWindow hw_runlog, 1
				SetForegroundWindow hw_runlog		// CSVファイルの終了が出来なかった場合最前面へ押し出す
			} else {
				notesave CSVFNAME					// ログデータ保存
			}

			// 以降の処理はexecを使うので長いファイル名はエラーになる為、ファイル名がMAX_PATHより長い場合はショートパスへ変換
			if ( strlen(fname) >= MAX_PATH ) : getshortpath fname,fname,1024
				// どのアプリケーションで開くかを取得
			repeat objid_app_e-objid_app_s+1,objid_app_s
				sendmsg objinfo_hwnd(cnt),$f0,0,-1
				if ( stat == 1 ) : appid = cnt - objid_app_s : break
			loop

			switch appid
				case 0
					// 関連づけられたアプリケーション
					sdim exepath,MAX_PATH
					FindExecutable  fname,0,varptr(exepath) 			// 関連付けを取得
					GetLongPathName exepath,varptr(exepath),MAX_PATH	// フルパスに変換
					exepath = getpath(exepath,16)
					if ( instr(exepath,0,"gom") != -1 ) {
						// GomPlayerが起動する場合
						gosub *check_kb					// KbMediaPlayerを終了させる
						gosub *check_gom_run
						if ( gomplayer_run == 0 ) {
							gosub *setmoni_1st_run		// GomPlayerが起動しておらず、これから新たにGomPlayerを呼び出す場合、GomPlayerの起動先を調整する
						}
					}
					exec fname,16
					swbreak
				case 1
					// WindowsMediaPlayer
					exec "C:\\Program Files\\Windows Media Player\\wmplayer.exe /play \"" + fname + "\""
					swbreak
				case 2
					// WinAmp
					exec "C:\\Program Files\\Winamp\\winamp.exe /play \"" + fname + "\""
					swbreak
				case 3
					// 真空波動研
					exec "C:\\Program Files\\sinkuhadouken\\SinkuHadouken.exe \"" + fname + "\""
					swbreak
				case 4
					// K2Editor
					if ( GetFileSize(fname) >= 1.0 * 1024 * 1024 ) {
						// 1MBよりも大きなファイルをK2Editorで開く際、確認をとる
						dialog "1MBを超えるファイルがK2Editorで開かれようとしています。\n開くまでに時間がかかりますがよろしいですか?",3,"警告 - "+EXENAME+"Ver."+VERINFO
						if ( stat == 7 ) : swbreak
					}
					exec "C:\\Program Files\\K2Editor\\K2Editor.exe \"" + fname + "\""
					swbreak
				case 5
					// GomPlayer
					gosub *check_gom_run
					if ( gomplayer_run == 0 ) : gosub *setmoni_1st_run
					exec "C:\\Program Files\\GRETECH\\GomPlayer\\GOM.exe /play \"" + fname + "\""
					swbreak
				case 6
					// GomPlayer(Add)
					exec "C:\\Program Files\\GRETECH\\GomPlayer\\GOM.exe /add \"" + fname + "\""
					swbreak
				case 7
					// KbMediaPlayer
					exec "C:\\Program Files\\kbmediaplayer\\Kbmplay.exe /play \"" + fname + "\""
					swbreak
				case 8
					// KbMediaPlayer(Add)
					exec "C:\\Program Files\\kbmediaplayer\\Kbmplay.exe /np \"" + fname + "\""
					swbreak
				case 9
					// WinRAR
					exec "C:\\Program Files\\WinRAR\\winrar.exe \"" + fname + "\""
					swbreak
			swend
			//open_finish_flag = 1	// 開き終わりを知らせる変数
			break					// ファイルが見つかった時の条件分岐を終了
		}


		// execを使うので長いファイル名はエラーになる為、ファイル名がMAX_PATHより長い場合はショートパスへ変換
		if ( strlen(fname) >= MAX_PATH ) : getshortpath fname,fname,1024

		if ( folopen  ) : folopen  = 0 : exec "Explorer /Select , \""+fname+"\""	  : break		// フォルダを開く
		if ( expopen  ) : expopen  = 0 : exec "Explorer /Select , \""+fname+"\" , /E" : break		// エクスプローラで開く
		if ( property ) : property = 0 : exec fname,0,"properties"                    : break		// プロパティーを開く


		// 開き終わった後の無駄なルーチンを省略させる
		//if ( open_finish_flag == 1 ) {
			//open_finish_flag = 0	// 念のため初期化処理
			//break					// ファイルが見つかるまで繰り返す繰り返し処理を終了後、return
		//}
	loop


	// 開き終わった後に関連付けられたアプリケーションを選択させる [ 未 実 装 ]
	// repeat objid_app_e-objid_app_s,objid_app_s+1
		// sendmsg objinfo_hwnd(cnt),$f1,0,0
	// loop
	// sendmsg objinfo_hwnd(objid_app_s),$f1,1,0
return


*check_kb
	// KbMediaPlayer が起動していたら終了させる
	hparent = 0
	hwnd_kb = 0
	repeat
		//ウィンドウを検索
		FindWindow hparent, hwnd_kb, 0, 0
		hwnd_kb = stat
		if ( hwnd_kb == 0 ) {
			// KbMediaPlayerが起動していない場合
			break
		}
		//クラス名を取得
		//ウィンドウタイトルを取得
		sdim caption, 1024
		SendMessage hwnd_kb, $0000000D/*WM_GETTEXT*/, 1024, varptr(caption)
		if ( instr(caption,0,"KbMedia Player") != -1 ) {
			// クラス名にKbMedia Playerという文字列が入っていた場合
			// PostMessage hwnd_kb,WM_CLOSE,0,0								// KbMediaPlayer に 終了     コマンドを送信 [〜1.18]
			exec "C:\\Program Files\\kbmediaplayer\\kbmplay.exe /stop"		// KbMediaPlayer に 演奏停止 コマンドを送信 [〜1.19]
			break
		}
	loop
return


*check_gom_run
	// GomPlayer が起動しているか確認
	hparent  = 0
	hwnd_gom = 0
	repeat
		//ウィンドウを検索
		FindWindow hparent, hwnd_gom, 0, 0
		hwnd_gom = stat
		if ( hwnd_gom == 0 ) {
			// GomPlayerが起動していない場合
			gomplayer_run = 0
			break
		}
		//クラス名を取得
		sdim class, 1024
		GetClassName hwnd_gom, varptr(class), 1024
			if ( instr(class,0,"GomPlayer") != -1 ) : gomplayer_run = 1 : break		// クラス名にGomPlayerという文字列が入っていた場合
	loop
return


*setmoni
	hparent     = 0
	hwnd_target = 0
	moniid = stat - moniid_s + 1
	// if ( eromode ) : moniid = 1
	repeat
		//ウィンドウを検索
		FindWindow hparent, hwnd_target, 0, 0
		hwnd_target = stat
		if ( hwnd_target == 0 ) {
			// GomPlayerが起動していない場合、レジストリを書き換える
				// GomPlayer レジストリ情報
				// 		nWDPMainWnd・・・・プライマリディスプレイなら3、それ以外なら2を入れるようだ。(確証無し)
				// 		posMainWnd2.x・・・GomPlayerの起動先X座標
				// 		posMainWnd2.y・・・GomPlayerの起動先Y座標
			regkey 0,"Software\\GRETECH\\GomPlayer\\OPTION",0
			setreg disp(moniid,1),"posMainWnd2.x"
			setreg disp(moniid,2),"posMainWnd2.y"
			if ( moniid == 1 ) : nWDPMainWnd = 3 : else : nWDPMainWnd = 2
			setreg nWDPMainWnd,"nWDPMainWnd"
			break
		}
		//クラス名を取得
		sdim class, 1024
		GetClassName hwnd_target, varptr(class), 1024
			if ( instr(class,0,"GomPlayer") != -1 ) {
				// GomPlayerが起動している場合、指定モニターへ移動させる
				SendMessage hwnd_target,WM_COMMAND,32798,0							// サイズ100%に設定して移動させる
				MoveWindow  hwnd_target,disp(moniid,1),disp(moniid,2),640,480,1		// 指定ウィンドウへ移動
				SendMessage hwnd_target,WM_COMMAND,32716,0							// 全画面に設定して移動させる

				// GomPlayerの移動先とファイル検索システムのウィンドウが重なる場合、ファイル検索システムのウィンドウを移動させる
				if ( disp(moniid,1) <= ginfo_wx1 ) && ( disp(moniid,3) >= ginfo_wx1 ) && ( disp(moniid,2) <= ginfo_wy1 ) && ( disp(moniid,4) >= ginfo_wy1 ) {
					if ( moniid == 1 ) : moniid = 2 : else : moniid = 1
					width ginfo_winx,ginfo_winy,disp(moniid,1)+(disp(moniid,3)-disp(moniid,1)-ginfo_winx)/2,disp(moniid,2)+(disp(moniid,4)-disp(moniid,2)-ginfo_winy)/2
					SetForegroundWindow hwnd_target
				}
			}
	loop
return


*setmoni_1st_run
	// ファイル検索システム(FSS) の現在起動モニター位置を取得
	fss_moniid = 0
	repeat displays,1
		if ( ginfo_wx1 >= disp(cnt,1) ) && ( ginfo_wy1 >= disp(cnt,2) ) && ( ginfo_wx1 < disp(cnt,3) ) && ( ginfo_wy1 < disp(cnt,4) ) : fss_moniid = cnt : break
	loop

	// GomPlayer の起動先モニターをレジストリより取得
	gom_moniid = 0
	regkey 0,"Software\\GRETECH\\GomPlayer\\OPTION",0
	getreg posgomwndx,"posMainWnd2.x"
	getreg posgomwndy,"posMainWnd2.y"
	repeat displays,1
		if ( posgomwndx >= disp(cnt,1) ) && ( posgomwndy >= disp(cnt,2) ) && ( posgomwndx < disp(cnt,3) ) && ( posgomwndy < disp(cnt,4) ) : gom_moniid = cnt : break
	loop

	// データのチェック[デバッグ時に活躍したが今は過去の遺産的存在]
	if ( fss_moniid == 0 ) : dialog "ERROR.fss_moniid=0",1 : return
	if ( gom_moniid == 0 ) : dialog "ERROR.gom_moniid=0",1 : return

	// ファイル検索システム(FSS) のモニター位置 と GomPlayerの起動予定モニターが重なる時は離す
		// GomPlayer レジストリ情報
		// 		nWDPMainWnd・・・・プライマリディスプレイなら3、それ以外なら2を入れるようだ。(確証無し)
		// 		posMainWnd2.x・・・GomPlayerの起動先X座標
		// 		posMainWnd2.y・・・GomPlayerの起動先Y座標
	if ( fss_moniid == gom_moniid ) {
		if ( fss_moniid == 1 ) {
			moniid = 2
			nWDPMainWnd = 2
		}else {
			moniid = 1
			nWDPMainWnd = 3
		}
		setreg disp(moniid,1),"posMainWnd2.x"
		setreg disp(moniid,2),"posMainWnd2.y"
		setreg nWDPMainWnd,"nWDPMainWnd"
	}
return


*get_gom_place
	dim _gomplace,16
	dim gomplace , 5
	dim gom_moniid
	if ( hwnd_gom == 0 ) : dialog "hwnd_gomにハンドルが入っていません。",1,EXENAME+"Ver."+VERINFO : goto *exit
	GetWindowPlacement hwnd_gom,varptr(_gomplace)		// gomplace(7)〜gomplace(10)にそれぞれGomPlayerのx1,y1,x2,y2座標が代入される、その後変数整頓
	gomplace(0) = -1
	gomplace(1) = _gomplace(07)			// GomPlayer の 起動中左上X座標
	gomplace(2) = _gomplace(08)			// GomPlayer の 起動中左上Y座標
	gomplace(3) = _gomplace(09)			// GomPlayer の 起動中右下X座標
	gomplace(4) = _gomplace(10)			// GomPlayer の 起動中右下Y座標

/*
	dialog ""+disp(1,1)
	dialog ""+gomplace(1)+" | "+disp(1,1)
	dialog ""+gomplace(2)+" | "+disp(1,2)
	dialog ""+gomplace(3)+" | "+disp(1,3)
	dialog ""+gomplace(4)+" | "+disp(1,4)
*/

	repeat displays,1
		if ( gomplace(1) >= disp(cnt,1) ) && ( gomplace(2) >= disp(cnt,2) ) && ( gomplace(3) <= disp(cnt,3) ) && ( gomplace(4) <= disp(cnt,4) ) : gom_moniid = cnt : break
	loop
return


*clear_keyword
	objprm input1id,""
	objprm input2id,""
	objsel input1id
return


*entersearch
	objsel -1
	if ( iparam != 13 ) || ( ( stat != input1id ) && ( stat != input2id ) ) : return

*search
	if ( keyword1 == "" ) && ( keyword2 == "" ) : gosub *reloadmem : return

	// 検索のタイプを論理和、論理積の二種類から取得
	sendmsg objinfo_hwnd(objid_ronriwa),$f0,0,-1   : ronriwa = stat
	sendmsg objinfo_hwnd(objid_ronriseki),$f0,0,-1 : ronriseki = stat

	// 検索キーワードを半角小文字へ統一 keyword変数は表示用として加工せず保存
	_keyword1 = strconv(keyword1,4194304+256)
	_keyword2 = strconv(keyword2,4194304+256)

	sdim searchlist,sz_filelist
	if ( _keyword1 == "" ) || ( _keyword2 == "" ) {
		// 単一条件検索
		if ( _keyword1 == "" ) {
			keyword = _keyword2
		} else : if ( _keyword2 == "" ) {
			keyword = _keyword1
		}
		index = 0
		repeat
			getstr tmp,filelist,index
			if ( strsize == 0 ) : break
			index += strsize
			_tmp = strconv(tmp,4194304+256)		// 調査対象のファイル名を半角小文字へ統一
			if ( instr(_tmp,0,keyword) != -1 ) {
				// リストへ追加
				// searchlist += tmp + "\n"
				memcpy searchlist,tmp,strlen(tmp),strlen(searchlist)
				memcpy searchlist,brcode,2,strlen(searchlist)
			}
		loop
	} else : if ( ronriwa ) {
		// 論理和
		index = 0
		repeat
			getstr tmp,filelist,index
			if ( strsize == 0 ) : break
			index += strsize
			_tmp = strconv(tmp,4194304+256)		// 調査対象のファイル名を半角小文字へ統一
			if ( instr(_tmp,0,_keyword1) != -1 ) || ( instr(_tmp,0,_keyword2) != -1 ) {
				// リストへ追加
				// searchlist += tmp + "\n"
				memcpy searchlist,tmp,strlen(tmp),strlen(searchlist)
				memcpy searchlist,brcode,2,strlen(searchlist)
			}
		loop
	} else : if ( ronriseki ) {
		// 論理積
		index = 0
		repeat
			getstr tmp,filelist,index
			if ( strsize == 0 ) : break
			index += strsize
			_tmp = strconv(tmp,4194304+256)		// 調査対象のファイル名を半角小文字へ統一
			if ( instr(_tmp,0,_keyword1) != -1 ) && ( instr(_tmp,0,_keyword2) != -1 ) {
				// リストへ追加
				// searchlist += tmp + "\n"
				memcpy searchlist,tmp,strlen(tmp),strlen(searchlist)
				memcpy searchlist,brcode,2,strlen(searchlist)
			}
		loop
	}

	searchlist = strmid(searchlist,0,strlen(searchlist)-2)
	// if ( searchlist != "" ) : sortnote searchlist
	sdim showdata,strlen(searchlist)+1
	memcpy showdata,searchlist,strlen(searchlist)
	gosub *rewrite
return


*open_outfolder
	exec outfolder,16,"explore"
return

*rewrite
		// リストボックスに表示されている文字列を書き換える。
		// showdata変数の内容に書き換えるのでshowdataに表示したい文字列を代入しておく。
		// そのとき必ずendlineを計算させる。
	objprm listboxid,showdata								// リストボックスへデータを書き換え
	await													// postされたフォント設定メッセージがリストボックスに適用されるのを待つためメッセージループを回しておく。しないと常にheight=18
	sendmsg hList, LB_GETITEMHEIGHT, 0,0 : height = stat	// 一つの項目が何ピクセルかを取得
	sendmsg hList, LB_GETCOUNT, 0,0 : items = stat			// いくつの項目数が使われているかを取得
	endline = height * items-1								// 最終行のピクセル値を演算[-1は最終ピクセルを無効にさせる為]
	if ( showdata != "" ) {
		notesel showdata
		title logo+notemax+"個のファイル - "+EXENAME+"Ver."+VERINFO+"   "+MAKER+"   (MemExp:"+memexpand_count+")"
	} else {
		if ( keyword1 == "" ) || ( keyword2 == "" ) {
				// 単一条件検索の時の条件を文字列化
				if ( keyword1 == "" ) : keyword_title = keyword2 : else : keyword_title = keyword1
		} else {
			// 複数条件検索の時の条件を文字列化
			if ( ronriwa ) : search_type = "論理和" : else : if ( ronriseki ) : search_type = "論理積"
			keyword_title = "\""+keyword1+"\" と \""+keyword2+"\" の "+search_type
		}
		title logo+keyword_title+" を含むファイルは見つかりませんでした - "+EXENAME+"Ver."+VERINFO+"   "+MAKER+"   (MemExp:"+memexpand_count+")"
	}
	//objprm listboxid,0	// 試験実装(0.16β〜)
	selindex = 0			// 試験実装(0.17β〜)
return


*doubleclick
	wNotifyCode=(wParam>>16)&0xFFFF
	hwndControl=lParam
	point = ginfo_mx,ginfo_my
	ScreenToClient hlist,point
	if ( hwndControl == hList ) && ( wNotifyCode == LBN_DBLCLK ) && ( point.1 <= endline ) {
		// sdim temp,1024
		// sendmsg hList,LB_GETTEXT,selindex,varptr(temp)		// 項目番号を頼りにファイル名を取得する
		gosub *open
	}
return


*exit
	// oncmd を多用しているせいかプロセスに残ってしまう為、ExitProcess関数と終了命令end二回実行を行って確実に終了させる。
	DestroyMenu hpop
	ExitProcess 0
end