・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
|