2022年5月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

« 2010年10月 | トップページ | 2010年12月 »

2010年11月30日 (火)

「お気に入り」を更新日時の降順に付番する。(その3)

番号のないものだけ更新日時の降順(新しい順))に付番(n 名前)します。番号のあるものは番号の順に振り直します。

preorder.js

var Shell=new ActiveXObject("Shell.Application");
if(WScript.Arguments.Count()){
  var Folder=Shell.NameSpace(WScript.Arguments.Item(0).replace(/\\[^\\]+$/,""));
}else{
  var Folder=Shell.NameSpace(6);
}
var arr=new Array();
var arr2=new Array();
for(var k=0;k<Folder.Items().Count;k++){
  var FolderItem=Folder.Items().Item(k);
  if(FolderItem.Path.match(/\.url$/i)) if(FolderItem.Name.match(/^\d* /)) arr2.push(FolderItem);else arr.push(FolderItem);
}
arr.sort(sortfunc);
function sortfunc(a,b){
  return b.ModifyDate-a.ModifyDate;
}
arr2.sort(sortfunc2);
function sortfunc2(a,b){
  return parseInt(a.Name)-parseInt(b.Name);
}
var k=0;
for(var i in arr){
  var FolderItem=arr[i];
  FolderItem.Name=k + " " + FolderItem.Name;
  k++;
}
for(var i in arr2){
  var FolderItem=arr2[i];
  FolderItem.Name=k + " " + FolderItem.Name.replace(/^\d* /,"");
  k++;
}

2010年11月29日 (月)

「お気に入り」を更新日時の降順に付番する。(その2)

付番したものを戻します。

デフォルトでお気に入りのルートフォルダ、ショートカットなどのファイルをドロップするとその親フォルダ内のショートカットについて、名前に付けた番号(n 名前)を削除します。
お気に入りにjsファイルかそのショートカットを入れて使います。

deorder.js [ファイル]

var Shell=new ActiveXObject("Shell.Application");
if(WScript.Arguments.Count()){
  var Folder=Shell.NameSpace(WScript.Arguments.Item(0).replace(/\\[^\\]+$/,""));
}else{
  var Folder=Shell.NameSpace(6);
}
var arr=new Array();
for(var k=0;k<Folder.Items().Count;k++){
  var FolderItem=Folder.Items().Item(k);
  if(FolderItem.Path.match(/\.url$/i) && FolderItem.Name.match(/^\d* /))  arr.push(FolderItem);
}
for(var i in arr){
  var FolderItem=arr[i];
  FolderItem.Name=FolderItem.Name.replace(/^\d* /,"");
}

2010年11月28日 (日)

「お気に入り」を更新日時の降順に付番する。

デフォルトでお気に入りのルートフォルダ、ショートカットなどのファイルをドロップするとその親フォルダ内のショートカットについて、更新日時の降順(新しい順))に付番(n 名前)します。
お気に入りにjsファイルかそのショートカットを入れて使います。

reorder.js [ファイル]

var Shell=new ActiveXObject("Shell.Application");
if(WScript.Arguments.Count()){
  var Folder=Shell.NameSpace(WScript.Arguments.Item(0).replace(/\\[^\\]+$/,""));
}else{
  var Folder=Shell.NameSpace(6);
}
var arr=new Array();
for(var k=0;k<Folder.Items().Count;k++){
  var FolderItem=Folder.Items().Item(k);
  if(FolderItem.Path.match(/\.url$/i)) arr.push(FolderItem);
}
arr.sort(sortfunc);
function sortfunc(a,b){
  return b.ModifyDate-a.ModifyDate;
}
var k=0;
for(var i in arr){
  var FolderItem=arr[i];
  FolderItem.Name=k + " " + FolderItem.Name.replace(/^\d* /,"");
  k++;
}

昇順にするには、
  return a.ModifyDate-b.ModifyDate;
に変えます。

2010年11月27日 (土)

エクスプローラで「ファイル拡張子」のカラムを表示する。

「ファイル名」のカラムはありますが、「ファイル拡張子」がありません。

そこで検索結果で代替します。

まず、そのフォルダを*で検索して、検索条件を保存します。
そのsearch.msファイルをメモ帳で開いて、
<visibleColumns>
<column viewField="System.ItemNameDisplay"/>
の後ろに、
<column viewField="System.FileExtension"/>
を追加して、保存します。
そのsearch.msファイルをエクスプローラで開いて、「ファイル拡張子」カラムを表示します。

エクスプローラでも、
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags]
"ColInfo"=
に"System.FileExtension"のFMTID+PropIDを追加すれば表示できるのではないかと思いますが。。。

2010年11月24日 (水)

clpファイルをbmpファイルに変換する。

Vista以降にはclipbrd.exeがありません。そのためXP以前に作成したclpファイルが見れません。

そこで、clpファイルからbmpファイルに変換します。

clp2bmp.vbs clpファイル...

Option Explicit
Dim File
For Each File In WScript.Arguments
  clp2bmp File
Next

Sub clp2bmp(File)
Dim src,Buf,FileID,iCount,i,pos,iType,iSize,iOffset,iName,dst,FileSize
Set src=CreateObject("ADODB.Stream")
src.Open
src.Type=1
src.LoadFromFile File
Buf=src.Read(-1)
FileID=IntegerAt(Buf,0)
If FileID <> &H0000C350& Then
  WScript.Echo Hex(FileID)
  WScript.Quit
End If
iCount=IntegerAt(Buf,2)
WScript.Echo iCount
For i=1 to iCount
  pos=4+(2+4+4+79)*(i-1)
  iType=IntegerAt(Buf,pos+0)
  iSize=LongAt(Buf,pos+2)
  iOffset=LongAt(Buf,pos+6)
  iName=StrConv(Midb(Buf,pos+10+1,79))
  WScript.Echo iType,iOffset,iSize,iName
  Select Case iType
  Case 8,17
    Set dst=CreateObject("ADODB.Stream")
    dst.Open
    dst.Type=2
    dst.Charset="latin1"
    FileSize=iSize+14
    dst.WriteText "BM" & ChrW(FileSize Mod 16) & ChrW((FileSize \ 256) Mod 16) & ChrW((FileSize \ 4096) Mod 16) & ChrW(FileSize \ 65536) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0) & ChrW(0)
    dst.Position=0
    dst.Type=1
    dst.Position=14
    src.Position=iOffset
    src.CopyTo dst,iSize
    dst.SaveToFile File & "." & iType & ".bmp",2
  End Select
Next
End Sub

Function LongAt(Buf,Offset)
LongAt=AscB(MidB(Buf,Offset+1,1))+AscB(MidB(Buf,Offset+2,1))*256+AscB(MidB(Buf,Offset+3,1))*256*256+AscB(MidB(Buf,Offset+4,1))*256*256*256
End Function

Function IntegerAt(Buf,Offset)
IntegerAt=AscB(MidB(Buf,Offset+1,1))+AscB(MidB(Buf,Offset+2,1))*256
End Function

Function StrConv(s)
Dim k
For k=1 To LenB(s)
  StrConv=StrConv & ChrW(AscB(MidB(s,k,1)))
Next
End Function

2010年11月21日 (日)

Vista以降でsndrec32.exe/play/close相当は?

WSHで代替する以外に方法はなさそうです。

mplay.vbs ファイル...

For Each file In WScript.arguments
  MPlay file
Next

Sub MPlay(file)
Set mp=CreateObject("MediaPlayer.MediaPlayer.1")
mp.FileName=file
mp.Play
Do While mp.PlayState=3 Or mp.PlayState=2
  WScript.Sleep 1000
Loop
End Sub

wmplay.vbs ファイル...

For Each file In WScript.arguments
  WMPlay file
Next

Sub WMPlay(file)
Set wmp=CreateObject("WMPlayer.OCX")
wmp.URL=file
wmp.Controls.Play
Do While wmp.PlayState=9 Or wmp.PlayState=3
  WScript.Sleep 1000
Loop
End Sub

2010年11月17日 (水)

メモ帳で改行文字を含めて置換する。(その2)

同様のことをブックマークレット(.url)で行うには、

クリップボードの改行文字を~~r~~nに変えます。

enc.url

javascript:void(clipboardData.setData('text',clipboardData.getData('text').replace(/[\r\n]/g,function(s){return(s=='\r'?'~~r':'~~n');})))

クリップボードの~~r~~nを改行文字に戻します。

dec.url

javascript:void(clipboardData.setData('text',clipboardData.getData('text').replace(/~~r|~~n/g,function(s){return(s=='~~r'?'\r':'\n');})))

2010年11月16日 (火)

メモ帳で改行文字を含めて置換する。

メモ帳の置換機能では改行文字を含めて置換することができません。

そこで、クリップボードとショートカット(.lnk)を併用して、先に改行文字を~~r~~nに変えて、それをメモ帳で編集して、後で~~r~~nを改行文字に戻します。

クリップボードの改行文字を~~r~~nに変えます。

enc.lnk

mshta.exe javascript:close(clipboardData.setData('text',clipboardData.getData('text').replace(/[\r\n]/g,function(s){return(s=='\r'?'~~r':'~~n');})))

クリップボードの~~r~~nを改行文字に戻します。

dec.lnk

mshta.exe javascript:close(clipboardData.setData('text',clipboardData.getData('text').replace(/~~r|~~n/g,function(s){return(s=='~~r'?'\r':'\n');})))

※他で使われていないエスケープ法を使っています。

2010年11月15日 (月)

WSHで64/32bitを区別する。起動する。

If InStr(LCase(WScript.FullName),"syswow64") Then
  WScript.Echo "32bit on 64bit"
ElseIf CreateObject("Scripting.FileSystemObject").FileExists(Replace(LCase(WScript.FullName),"system32","syswow64")) Then
  WScript.Echo "64bit on 64bit"
Else
  WScript.Echo "32bit on 32bit"
End If

64bit osで、
If CreateObject("Scripting.FileSystemObject").FileExists(Replace(LCase(WScript.FullName),"system32","syswow64")) Then

32/64bit exeから、32bit exeを起動するには、
%systemroot%\syswow64\wscript.exe

32bit exeから、64bit exeを起動するには、
%systemroot%\sysnative\wscript.exe

64bit exeから、64bit exeを起動するには、
%systemroot%\system32\wscript.exe

32/64bit COMを起動するには、それぞれ32/64bit exeからCreateObject()します。

2010年11月14日 (日)

Vistaのエクスプローラで「最近表示した場所」を開く。

Vistaでは、共通ダイアログの「お気に入りリンク」には「最近表示した場所」があるのに、エクスプローラの「お気に入りリンク」には「最近表示した場所」がありません。

Vistaのエクスプローラで「最近表示した場所」を開くには、アドレスバーや「ファイル名を指定して実行」に、

shell:::{22877A6D-37A1-461A-91B0-DBDA5AAEBC99}

と入れます。

また、Vistaのエクスプローラの「お気に入りリンク」に「最近表示した場所」のショートカットを作るには、

共通ダイアログの「お気に入りリンク」から、あるいは、エクスプローラで開いて、そこからエクスプローラの「お気に入りリンク」にドラッグしてショートカットを作ります。

2010年11月 4日 (木)

64 bit Windows上でIEの32/64 bitを区別する。(その2)

IEのウィンドウタイトルの" - Windows Internet Explorer"の部分を変えます。

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"Window Title"="Windows Internet Explorer (64 bit)"

[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main]
"Window Title"="Windows Internet Explorer (32 bit)"

※ 64 bit pcを持ってないので未確認です。

2010年11月 3日 (水)

64 bit Windows上でIEの32/64 bitを区別する。

ヘルプのバージョン情報を見なくても、見た目で区別できないものでしょうか?

以下のhtmファイルを1つのタブで開いておきます。

ie64or32bit.htm

<!-- saved from url=(0014)about:internet -->
<script language=vbscript>
Sub window_onload
If InStr(navigator.userAgent,"WOW64") Then
  document.title="32 bit"
  document.body.innerText="32 bit"
Else
  document.title="64 bit"
  document.body.innerText="64 bit"
End If
End Sub
</script>

ローカルコンピュータロックダウンでスクリプトがブロックされないよう、MOTWを付加するか、イントラネットのZoneIDを付加するとよいでしょう。

※ 64 bit pcを持ってないので未確認です。

2010年11月 2日 (火)

dirコマンドでフルパス名を出す。

dir /b /sでフルパス名が出ますが、再帰にもなります。dirコマンドで再帰でなく、フルパス名を出す方法は?ありませんね。

dirfullb.cmd フォルダ

@echo off
rem for /d %I in ("%%~1\*") do echo %%~fI
for %I in ("%%~1\*") do echo %%~fI

dirfull.cmd フォルダ

@echo off
rem for /d %I in ("%%~1\*") do echo %%~atzfI
for %I in ("%%~1\*") do echo %%~atzfI

ワイルドカードはファイルだけになるので、ディレクトリを含めるには、for /d行も必要です。

2010年11月 1日 (月)

エクスプローラでファイルとフォルダを区別せずソートする。

エクスプローラではファイルとフォルダに分けてソートされます。
どうも、内部的には、
第1ソートキー:{フォルダ、ファイルの順}
第2ソートキー:指定カラム
でソートされているようです。

そこで、検索バーに?を入れます。

検索結果ではファイルとフォルダの区別なくソートされます。

ただし、
フォルダオプション、検索タブ、検索方法
□検索ボックスで入力するときにサブフォルダも含める(S)
の☑を外して、再帰しないようにします。

« 2010年10月 | トップページ | 2010年12月 »