|
Escキーで中断することもできるように、今後のバージョンを検討しようとして
いましたが、現状のバージョンでもできることがわかりました。
GetKeyStateの第二パラメータに2を指定すると非同期に取得できるようになって
いました。
1000フォルダの上限は付けず、以下のようなスクリプトのほうがよかったです。
fAbort = 0;
fso = new ActiveXObject("Scripting.FileSystemObject");
var strDir = GetDirectory();
if( strDir ) {
SetClipboard( GetFileListContents( strDir ) );
Open( strDir );
}
if( fAbort ) {
Message( "中断しました" );
}
function GetFileListContents( strTarget ) {
if( CheckAbort() ) return "";
var s = "";
Open( strTarget );
s += strTarget + "\r\n";
var cItem=GetItemCount();
var cCol=GetColumnCount();
for(iCol=0;iCol<cCol;iCol++){
s+=GetColumnText(iCol);
if(iCol<cCol-1)s+="\t";
}
s+="\r\n";
for(iItem=0;iItem<cItem;iItem++){
if( CheckAbort() ) return "";
for(iCol=0;iCol<cCol;iCol++){
s+=GetItemText(iItem,iCol);
if(iCol<cCol-1)s+="\t";
}
s+="\t"+GetItemPath(iItem);
s+="\r\n";
}
s+="\r\n";
//
var objFolder = fso.GetFolder(strTarget);
var col = new Enumerator(objFolder.SubFolders);
for (col.moveFirst(); !col.atEnd(); col.moveNext()) {
s+=GetFileListContents( fso.BuildPath( strTarget, col.item().Name )
);
}
s += "\r\n";
return s;
}
function CheckAbort() {
if( fAbort ) return 1;
if( (GetKeyState( 0x1b, 2 ) & 0x8000) != 0 ) {
Message("");
fAbort = 1;
return 1;
}
if( (GetKeyState( 0x01, 2 ) & 0x8000) != 0 ) {
fAbort = 1;
return 1;
}
return 0;
}
|
|