>oo さん 2005年 08月 26日 16時 52分 32秒
>luclin さん:
>また、IEを使う方法が、この掲示板のページ先頭の4つ目の★に説明があるFAQにあります。
この方法は、セキュリティレベルによっては動かないことがあるので、
>ばんのしゃーによかばんた さん 2004年 04月 05日 20時 49分 43秒
のほうを推奨します。
mikinyan さん:
別ウィンドウでtelnetを開いて、そこに適当に sleep しながら sendkeys メソッドでキーを送れば操作は出来ると思いますが、途中でエラーになったらお手上げですね。
相手がunix/linuxなら、標準コマンドでやるにしても、telnetでなく、rsh.exe の利用を考えてはいかがでしょうか?
luclin さん:
user32.dllを使う方法はわかりませんが、MSOfficeがインストールされていれば、
ばんのしゃーによかばんた さん 2005年 02月 25日 18時 17分 28秒
の記事に方法が書いてあります。
また、IEを使う方法が、この掲示板のページ先頭の4つ目の★に説明があるFAQにあります。
>管理人むたぐち さん 2005年 08月 25日 00時 01分 12秒
>でもウィンドウは要らないのでWSH用に書き直しちゃいました。
常駐WSHは、終了させたいときに困りませんか?
こちらは、WScript/HTA/IEなどが非表示で残ったときに便利です。
一覧の各RowをクリックするとTerminateします。
――――――――――――――――――――――――――――――――――――――
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>
<title>TaskKill.HTA</title>
<script language=VBScript>
Option Explicit
Dim Items
Sub window_onload()
Dim Process
Dim n
Items=Array(_
"ProcessId",_
"ParentProcessId",_
"Name",_
"ExecutablePath",_
"CommandLine",_
"Priority",_
"ThreadCount",_
"CreationDate",_
"KernelModeTime",_
"UserModeTime",_
"VirtualSize",_
"WorkingSetSize")
Dim Item
Dim oTR
Dim oTD
oStatus.innerText="プロセスの検索中..."
Set oTR=oTable.insertRow
For Each Item In Items
Set oTD=oTR.insertCell
oTD.innerText=Item
Next
For Each Process In GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_Process")
Call Write(Process)
n=n+1
Next
oStatus.innerText=n&" 個のプロセス"
navigate "#bottom"
End Sub
Sub Write(Process)
Dim Values:ReDim Values(UBound(Items))
Dim k:k=-1
Dim oTR
Dim oTD
k=k+1:Values(k)=Process.ProcessId
k=k+1:Values(k)=Process.ParentProcessId
k=k+1:Values(k)=Process.Name
k=k+1:Values(k)=Process.ExecutablePath
k=k+1:Values(k)=Process.CommandLine
k=k+1:Values(k)=Process.Priority
k=k+1:Values(k)=Process.ThreadCount
k=k+1:Values(k)=Left(Process.CreationDate,14)
k=k+1:Values(k)=Process.KernelModeTime
k=k+1:Values(k)=Process.UserModeTime
k=k+1:Values(k)=Process.VirtualSize
k=k+1:Values(k)=Process.WorkingSetSize
For k=0 To UBound(Values)
If IsNull(Values(k)) Then Values(k)=""
Next
Set oTR=oTable.insertRow
oTR.style.cursor="hand"
oTR.title="Kill "&Values(0)&" ?"
Set oTR.onclick=GetRef("Click")
For k=0 To UBound(Values)
If Values(k)="" Then Values(k)=" "
Set oTD=oTR.insertCell
oTD.innerText=Values(k)
Next
End Sub
Sub Click()
Dim PID
PID=Me.Cells(0).innerText
If IsNumeric(PID) Then
If KillProcess(CLng(PID)) Then
Me.bgColor="teal"
End If
End If
End Sub
Function KillProcess(PID)
Dim Process
For Each Process In GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_Process where ProcessID="&PID)
Exit For
Next
If Not IsEmpty(Process) Then
If MsgBox(Process.CommandLine,vbOkCancel+vbDefaultButton2,"Kill "&PID&" ?")=vbOk Then
Process.Terminate
KillProcess=True
End If
End If
End Function
</script>
</head>
<body>
<button name='top' title='ページの末尾に移動します。' onclick='navigate "#bottom"'>ページの末尾</button>
<table id='oTABLE' border=1>
</table>
<span id='oStatus'></span>
<button title='プロセスを検索し直します。' onclick='document.execCommand "refresh"'>再表示</button>
<button title='一覧のHTMLソースをクリップボードにコピ−します。' onclick='clipboardData.setData "text",oTable.outerHTML'>コピ−</button>
<button name='bottom' title='ページの先頭に移動します。'onclick='navigate "#top"'>ページの先頭</button>
</body>
</html>
――――――――――――――――――――――――――――――――――――――
>魔界の仮面弁士 さん 2005年 08月 24日 19時 53分 23秒
>>> http://www.ocv.ne.jp/~oratorio/windev/vb/TypeLibrary/_CreateShortcut.cab
>> これ、Extract.exeが「壊れている」って言うんですが、確認して頂けませんか。
>こちらでは異常を確認できませんでした……。
ということなので、ブラウザを変えて、取り出してみたところ、OKでした。
古いブラウザの障害のようです。cabファイルだけ、おかしかったようです。
どうも、お騒がせしました。
ミミズク さんへ:
エラーが出るのは、start.exe なるものが存在しないからでしょう。start は cmd.exe の組み込みコマンドです。
WshShell.Run "C:\hogehoge.bat " & """" &fname& """",2,True
か、
WshShell.Run "C:\hogehoge.bat " & """" &fname& """",0,True
ではどうでしょうか。
ショートカット関係の「障害」2件or3件です。
「障害-1」
FolderItem.GetLink.Path
が、長いURLを正しく返さない。途中(260バイト)でちょん切って返します。
wShell.CreateShortCut(FolderItem.Path).TargetPath
や、
FolderItem.GetLink.Target.Path
は、長いURLを正しく返します。
では、いつも、
wShell.CreateShortCut(FolderItem.Path).TargetPath
を使えばよいかと言うと、今度は、
「障害-2」
wShell.CreateShortCut(FolderItem.Path).TargetPath
が、FolderItem.Pathに™などの非SJIS文字を含む場合、
正しいTargetPathを返さない。""になる。エラーにもならない。
では、いつも、
FolderItem.GetLink.Target.Path
を使えばよいかと言うと、今度は、
「仕様」で、「障害-3」かも?
FolderItem.GetLink.Path
がfile://...で、しかも、それが存在しないとき、
FolderItem.GetLink.Target
を参照したところで、
---------------------------
エラー: エラーを特定できません
コード: 80004005
ソース: (null)
---------------------------
となります。
結局、これらの「障害」や「仕様」の条件を微妙に避けながら、
複数の方法を組み合わせて使うことになります。:-<
「最近使ったフォルダ」が出来ると、その次に欲しくなるのは、
その無効エントリの削除じゃありませんか?
――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim wShell
Dim Shell
Const ssfBITBUCKET=10
Dim RecycleBinFolder
Dim FolderName
Dim Folder
Dim k
Dim FolderItem
Dim Link
Dim ok:ok=0
Dim ng:ng=0
Dim etc:etc=0
Dim FolderItems:FolderItems=Array()
Dim Rows:Rows=Array()
Dim FileName
Dim Ans
Dim fso
Set wShell=CreateObject("WScript.Shell")
Set Shell=CreateObject("Shell.Application")
Set RecycleBinFolder=Shell.NameSpace(ssfBITBUCKET)
FolderName=wShell.SpecialFolders("Favorites") & "\リンク\最近使ったフォルダ\"
Set Folder=Shell.NameSpace(FolderName)
For k=Folder.Items.Count To 1 Step -1
Set FolderItem=Folder.Items.Item(k-1)
If FolderItem.IsLink Then
Set Link=FolderItem.GetLink
If Target(Link) Then
ok=ok+1
Else
ReDim Preserve FolderItems(UBound(FolderItems)+1)
Set FolderItems(UBound(FolderItems))=FolderItem
FileName=Mid(FolderItem.Path,InStrRev(FolderItem.Path,"\")+1)
ReDim Preserve Rows(UBound(Rows)+1)
Rows(UBound(Rows))=FileName
ng=ng+1
End If
Else
etc=etc+1
End If
Next
If UBound(Rows)=-1 Then
MsgBox "正常"&vbTab&ok&vbLf&"エラー"&vbTab&ng&vbLf&"その他"&vbTab&etc,vbInformation,_
"「最近使ったフォルダ」の無効なショートカット"
Else
Ans=MsgBox("正常"&vbTab&ok&vbLf&"エラー"&vbTab&ng&vbLf&"その他"&vbTab&etc&vbLf&Join(Rows,vbLf),_
vbQuestion+vbYesNoCancel,_
"「最近使ったフォルダ」の無効なショートカット? Yes(ごみ箱) No(削除) Cancel(中止)")
If Ans=vbYes Then
For Each FolderItem In FolderItems
Call Delete(FolderItem)
Next
ElseIf Ans=vbNo Then
Set fso=CreateObject("Scripting.FileSystemObject")
For Each FolderItem In FolderItems
fso.DeleteFile FolderItem.Path
Next
End If
End If
WScript.Quit
Sub Delete(FolderItem)
Dim FileName
FileName=Mid(FolderItem.Path,InStrRev(FolderItem.Path,"\")+1)
RecycleBinFolder.MoveHere FolderItem
Do
Set FolderItem=ParseName(Folder,FileName)
If FolderItem Is Nothing Then Exit Do
WScript.Sleep 100
Loop
End Sub
Function Target(Link)
On Error Resume Next
Target=InStr(TypeName(Link.Target),"FolderItem")
End Function
Function ParseName(Folder,FileName)
Set ParseName=Nothing
On Error Resume Next
Set ParseName=Folder.ParseName(FileName)
End Function
――――――――――――――――――――――――――――――――――――――
>管理人むたぐち さん 2005年 08月 25日 00時 01分 12秒
>でもウィンドウは要らないのでWSH用に書き直しちゃいました。
スクリプトは好みに合わせて自由に変えられるところがいいですね。
しかし、折角の苦労を。。。
苦労その1。
最初はWSHで作ったのですが、WSHだと終了インターフェースがないし、
動いているのが確認できるほうがいいかな、と思ってHTAにしたんですよ。
>リンクフォルダにショートカットを作った方が
>フォルダウィンドウからアクセスしやすいのでパスを変えました。
私の場合、どちらからでもアクセスし易いように、「リンク」に、
「SendTo」
「お気に入り」
「最近使ったファイル」
「履歴」
の「フォルダのショートカット」を置き、「お気に入り」には、
[リンク]
「SendTo」
「お気に入り」
「最近使ったファイル」
「履歴」
などの「ショートカット」(.lnk)を置いています。
なので、「最近使ったフォルダ」は「リンク」のほうがいいですね。
「最近使ったファイル」の隣になります。
>あと、ショートカットのタイトルはie.Document.Folder.Titleから
>取った方が見た目も綺麗なのでそうしました。
>(フルパスはショートカットにマウスポインタを当てると出ますし)
>パスはie.Document.Folder.Self.Pathから取りました。
>マイコンピュータなど特殊フォルダもこれでいけます。
苦労その2。
それだと、同名のケースが困りませんか?
「お気に入り」では、同名を置き換えますかと聞いてきますが、
自動なので、そういう訳にも行かないし。
「最近使ったファイル」では、同名の場合、(n)を付けて作っているくせに、
メニューでは、ひとつに縮約して表示するんです。
私の場合、100,101,102などの同名フォルダがやたらと多くて、
ぱっと見て区別が付くようにフルパス似を採用しました。
「お気に入りの追加」では、
<a href="...">C:\Folder\File</>
<a href="...">file://C:/Folder/File</>
は、CFolderFileに。NG
<a href="..."></>
は、Fileに。NG
<a href="...">C:/Folder/File</>
は、C-Folder-Fileに。これっぽくしました。
>ちゃっぴ さん 2005年 08月 24日 15時 36分 35秒
>FSOでの日本語共有名の文字化けに関する調査の最終報告です。
>5.6.0.6626 IE6, Windows XP nonSP, SP1 ○
>5.6.0.8515 Windows Server 2003 ×化け
>5.6.0.8820 Windows XP SP2 ×
>5.6.0.8825 WSH 5.6.0.8825 ×
>5.6.0.8827 Windows Server 2003 SP1 ×
>というように、Windows Server 2003 Release時点から
>Bugが混入していたようです。
># ということは、2年以上も放置・・・
知ってる会社の話ですが、日本の会社では、障害は一旦、サポート部隊に入って、
既障害なら、サポート部隊から手持ちの修正が折り返し出る。
新規の場合は、開発部隊に転送されて、開発部隊で修正を作ってサポート部隊に渡す。
つまり、フィードバックループがあるので、修正するほど段々良くなります。
なのですが、海外の会社では、製品出荷後は、サポート部隊にソースを渡して、
サポート部隊が修正するんですね。サポートの修正方法は、もともとソースを
熟知している訳ではないので、あれこれソースを変えて現象が消えれば、出来上がり。
後は機械的にテストセットを流して、それが通れば出荷するんですね。
仮令、それに、レベルダウンがあっても、新規障害として別のサポートメンバに
機械的に割り当てられるので、フィードバックループが形成されないんです。
8515は、6626(XPサポート用?)とは別の2003開発用のコードパスかも。開発では、
出荷前に、サポートの作成した他バージョンの修正を一括してソース反映します。
クロスインテグレート。これが、一応は、人間がチェックするのですが、かなり
機械的なんですね。このとき、9x用のコードが2003用ソースに混入したのでしょう。
そしてまた、日本語の共有名のテストセットがあろうはずもなく、統合部隊や、
Quality Assurance部隊のテストもスルーして出荷ってことに。
そのソース管理権がサポート部隊に渡ったところで、XPサポート用コードパスを
オーバライドして統合。XP SP2でばら撒き。と想像。
もし、この通りだったら、修正を大量迅速に出そうとするより、
修正を作成するシステムを変えたほうが、早道だと思いますね。>MS
vbsファイルでクリップボードに値を貼り付けたいのですが、
どうしたらいいのか分かりません。
user32.dllを使うらしいのですが、
VBでの使い方しか調べられませんでした。
どうぞよろしくお願いいたします。
初投稿です、よろしくお願いします。
複数ファイルをドラッグアンドドロップしてhogehoge.batに処理を
行わせようとしています。
hogehoge.batの実行時にコマンドプロンプトを表示させたくないた
め、STARTコマンドでコマンドプロンプトの最小化を指定しているの
ですが次のようなエラーが表示されうまく動きません。
<エラー表示>
スクリプト:**************
行: 18
文字: 4
エラー: 指定されたファイルが見つかりません
コード: 80070002
ソース: (null)
変数 fname にはフォルダ名にスペースを含むフルパスが渡されます。
これがおかしいのかと思い WScript.Echo で表示させて見たのです
が、望みどおりのコマンドを表示します。また表示されたコマンドを
コマンドプロンプトに直接入力すると正常に動作します。
<入力例>
start /min C:\hogehoge.bat "C:\Documents and Settings\foo\デスクトップ\hoge(050811).lzh"
間違いをご指摘願えないでしょうか、よろしくお願いします。
<スクリプト>
--/ここから/----------------------------------------------------------
Dim WshShell
Dim fname
Dim msg
'---------------------------------------------------------------------
If WScript.Arguments.Count<1 Then
msg = "Drag and Drop"&Chr(10)&Chr(10)
msg = msg & "ファイルをこのアイコンにドロップしてください。"&Chr(10)
msg = msg & "複数ファイルをドロップすれば一括処理します。"
MsgBox msg
WScript.Quit
End If
Set WshShell = WScript.CreateObject("WScript.Shell")
For Each fname In WScript.Arguments
WScript.Echo "start /min C:\hogehoge.bat " & """" &fname& """"
WshShell.Run "start.exe /min C:\hogehoge.bat " & """" &fname& """",1,True
Next
--/ここまで/----------------------------------------------------------
To: じゃんぬねっと さん
この前サンプルをお借りさせていただきました。
どうもです。
MSHをやり始めたこともあって.NET Frameworkを真面目に勉強する
必要がでてきたので今後もお世話になると思います。
よろしくお願いします。
To: ばんのしゃーによかばんた さん
おおっ、これは良いですね。
でもウィンドウは要らないのでWSH用に書き直しちゃいました。
リンクフォルダにショートカットを作った方が
フォルダウィンドウからアクセスしやすいのでパスを変えました。
あと、ショートカットのタイトルはie.Document.Folder.Titleから
取った方が見た目も綺麗なのでそうしました。
(フルパスはショートカットにマウスポインタを当てると出ますし)
パスはie.Document.Folder.Self.Pathから取りました。
マイコンピュータなど特殊フォルダもこれでいけます。
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Set Shell = WScript.CreateObject("Shell.Application")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set dic = WScript.CreateObject("Scripting.Dictionary")
sFolderName = WshShell.SpecialFolders("Favorites") & "\リンク\最近使ったフォルダ\"
If Not Fs.FolderExists(sFolderName) Then
Fs.CreateFolder(sFolderName)
End If
Do
Call Patrol()
WScript.Sleep 5000
Loop
Sub Patrol()
For Each ie In Shell.Windows
If Not(ie.Busy Or ie.ReadyState <> 4) Then
If InStr(TypeName(ie.Document),"IShellFolderView") Then
sPath = ie.Document.Folder.Self.Path
sTitle = ie.Document.Folder.Title
If dic.Exists(sPath) Then
Else
dic.Add sPath,1
Call AddHistory(sPath,sTitle)
End If
End If
End If
Next
End Sub
Sub AddHistory(Path,Title)
sFileName = Title
sFileName = Replace(sFileName,":","-")
sFileName = Replace(sFileName,"/","-")
sFileName = Replace(sFileName,"\","-")
Set oLink = WshShell.CreateShortcut(sFolderName & sFileName & ".lnk")
oLink.TargetPath = Path
oLink.Save
End Sub
》ばんのしゃーによかばんた さん 2005年 08月 24日 16時 15分 55秒
>> http://www.ocv.ne.jp/~oratorio/windev/vb/TypeLibrary/_CreateShortcut.cab
> これ、Extract.exeが「壊れている」って言うんですが、確認して頂けませんか。
extract.exe Version 5.00.2134.1 で確認しましたが、
こちらでは異常を確認できませんでした……。
また、 cab32.dll Version 0.98.0.0 でも問題ないようです。
ダウンロードされた cab ファイルは、
ファイルサイズ: 12,584 バイト
MD5ハッシュ: 832cc1541058e49c97d31085c69fb3d3
になっていますでしょうか?
>管理人むたぐち さん 2004年 06月 14日 17時 50分 37秒
>余談ですが、Win2000用に作った、folder.htt(htt2000)の機能の一つに、
>表示したフォルダの履歴をcookieに保存し、常時フォルダ内にリンク表示させる
>というのがあったんですけど、これをXPでWSHを使って再現できないか
>考え中だったりします。自分で言うのも何ですが、どうにもあの機能は捨てがたい…。
こんなのはどうでしょう?
――――――――――――――――――――――――――――――――――――――
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=shift_jis">
<title>「最近使ったフォルダ」の監視中...</title>
<script language=vbscript>
Option Explicit
moveTo 0,0
resizeTo 200,100
Dim FolderName
Sub window_onload()
FolderName=wShell.SpecialFolders("Favorites")
Call Patrol()
setInterval "Patrol",5000
End Sub
Sub Patrol()
Dim ie
Dim URL
For Each ie In ShellWindows
If dic.Exists(ie.LocationURL) Then
Else
dic.Add ie.LocationURL,1
URL=ie.LocationURL
If Left(URL,8)<>"file:///" Then
ElseIf ie.Busy Then
ElseIf ie.ReadyState<>4 Then
ElseIf InStr(TypeName(ie.Document),"IShellFolderView") Then
Call AddHistory(URL)
End If
End If
Next
If document.parentWindow.screenLeft>0 Then
If document.body.scrollwidth<>document.body.clientwidth Then
resizeBy document.body.scrollwidth-document.body.clientwidth,0
End If
End If
End Sub
Sub AddHistory(URL)
Dim Link
Dim FileName
Dim Title
Dim HTML
FileName=Mid(URL,9)
FileName=Replace(FileName,":","-")
FileName=Replace(FileName,"/","-")
FileName=Replace(FileName,"\","-")
FileName=Replace(FileName,"%20"," ")
Set Link=wShell.CreateShortcut(FolderName & "\最近使ったフォルダ\" & FileName & ".url")
Link.TargetPath=URL
Link.Save
Title=Mid(URL,9)
Title=Replace(Title,"/","\")
Title=Replace(Title,"%20"," ")
HTML=" <a href="&URL&">"&Title&"</a><br>"
document.body.insertAdjacentHTML "AfterBegin",HTML
End Sub
</script>
<hta:application innerborder=none windowstate=minimize />
</head>
<body style="background:menu;margin:0" nowrap >
<object id=ShellWindows classid=clsid:9BA05972-F6A8-11CF-A442-00A0C90A8F39></object>
<object id=wShell classid=clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8></object>
<object id=fso classid=clsid:0D43FE01-F093-11CF-8940-00A0C9054228></object>
<object id=dic classid=clsid:EE09B103-97E0-11CF-978F-00A02463E06F></object><br>
</body>
</html>
――――――――――――――――――――――――――――――――――――――
HTAなので、Shell.Applicationでもよいのですが、
折角なので、ShellWindowsを使ってみました。
「お気に入り」の下に「最近使ったフォルダ」を作ってから、実行してください。
魔界の仮面弁士 さん、
>魔界の仮面弁士 さん 2004年 06月 09日 17時 21分 22秒
>標準では、IPersistFile用のタイプライブラリは用意されていないため、私は、
>VB6付属のMKTYPLIB.EXEを使って自作したTLBファイルを参照設定しました。
>http://www.ocv.ne.jp/~oratorio/windev/vb/TypeLibrary/_CreateShortcut.cab
これ、Extract.exeが「壊れている」って言うんですが、確認して頂けませんか。
FSOでの日本語共有名の文字化けに関する調査の最終報告です。
5.6.0.6626 IE6, Windows XP nonSP, SP1 ○
5.6.0.8515 Windows Server 2003 ×化け
5.6.0.8820 Windows XP SP2 ×
5.6.0.8825 WSH 5.6.0.8825 ×
5.6.0.8827 Windows Server 2003 SP1 ×
というように、Windows Server 2003 Release時点から
Bugが混入していたようです。
# ということは、2年以上も放置・・・
ところで、WSHが知らないうちにMinor Version Upしているようですが、
これの変更点ってご存知の人います?
それらしきDocumentは見つからないもので・・・
# Bugだけ混入しているなんてことはいやだな〜
あ、何かあたしのサイトが少し紹介されてる... (^-^*)
To: 管理人むたぐち さん
>MS XML での操作 その1
>http://www.ki.rim.or.jp/~kuro/WebDAV/MSXML01.html
ありがとうございました。
LINUX指向の私ですが、windowsもなんかいろいろと面白そうだなと思いました。
あと、SAMBA共有で試したらうまくいきました。
ありがとうございました。
To: 管理人むたぐち さん
emledit.vbsのバグを直していただいてありがとうございました。
修正版をさっそくDLして試してみました。バッチリです。
Outlook Expressの使い勝手がグンとよくなりました。
私もWSHを勉強したいのでよろしくお願いいたします。
それでは!
To: 管理人むたぐち さん
ご報告していただき、ありがとうございました。
To: ちゃっぴ さん
問題の発生を確認していただき、ありがとうございました。
本件は、Scriptのバージョンの問題ということで閉じたいと思います。
皆様、ありがとうございました。
間違えて「←チェックを入れてください(spam対策)」を消してしまい、掲示板に投稿できない状態になっていました。
先ほど元に戻したので、現在は投稿できるようになりました。
ご迷惑をおかけして申し訳ありませんでした。
To: でで さん
MS XML での操作 その1
http://www.ki.rim.or.jp/~kuro/WebDAV/MSXML01.html
XMLHTTPというコンポーネントを使ったWebDAVアクセスの方法を
見つけました。
個人的にも、こんなのあるんだ〜って感じです
To mikinyan さん (mikinyan@tigers-net.com) 2005年 08月 22日 18時 46分 14秒
Logをあさりましょう。
Win32_Process Create Method あたりで検索してやると見つかるはずです。
To: YZN さん
う〜む・・・こんなものがあったとは・・・
ちなみに
Windows XP SP2 5.6.0.8820
Windows Server 2003 SP1 5.6.0.8827
でも発生しますね。
To: YZN さん
> 一応Microsoftのフィードバック等に上記内容を送信しました。
> # MVPの方って、MS担当者に、
> # この手(っぽい仕様)の連絡とかってできるんでしょうか?(汗
> # もし、そういうコネクションがあれば、伝えていただければと思います。
はい、担当者の方に問題を報告しておきました。
To:管理人むたぐち さん
早速の回答ありがとうございます。
OSの仕様ということであれば仕方ないですね、
SAMBAによる共有を検討してみます。
SCRIPT側としての対応として、http経由でファイルのやり取りなどするにはなにかよい案などあれば教えていただけると幸いです。
SAMBAでの結果はまたご報告させていただきます。
こんばんは、初めまして。
仕事上での質問になりますけど、どなたか教えて頂けませんか?
windowsに標準でついている「telnet」コマンドを使って、とあるサーバーに
自動的にログインして、コマンドを発行するようなことって、可能でしょうか?
標準でないツール(teratermのマクロとか)は利用できない状況です。
VBスクリプトとかでできれば嬉しいのですが、どうでしょうか?
すいませんが、教えて下さい。
>ばんのしゃーによかばんた さん 2005年 08月 21日 17時 47分 51秒
お返事ありがとうございます。
いくつかの日本語(2バイト)共有名で実験を繰り返しましたが、
文字化けする端末は、試した日本語全てが文字化けしました。
以前どこかで聞いた、特定の文字に依存するWindowsのバグでもないようです。
で、しばらく実験して気づいた重要な点があります。
文字化けがおきている端末は、
scrrun.dll : 5.6.0.8825
のバージョンのものでした。
文字化けがおきていないのは、
scrrun.dll : 5.6.0.6626 (... WinXP(SP1))
のバージョンでした。
# それ以外のバージョンについては、サンプルPC不足のため不明です。(汗
## セキュリティが厳しくなって、調査のために自由にいじれる端末が少ない・・・。
バージョン5.6.0.8825はおそらく直近のものと思われます。
問題のPCに対して、強制的に
5.6.0.6626の[scrrnjp.dll],[scrrun.dll]ファイルをコピーして試すと、
文字化けは出ませんでした。
多分、バージョンアップの際に含まれた
仕様という名のバXだと(勝手に)思っています。
# 5.6.0.6626は、もうダウンロードできないみたい・・・。
# 結構バージョンの数字があがっているし・・・。
一応Microsoftのフィードバック等に上記内容を送信しました。
# MVPの方って、MS担当者に、
# この手(っぽい仕様)の連絡とかってできるんでしょうか?(汗
# もし、そういうコネクションがあれば、伝えていただければと思います。
以上、ご報告まで。
Nomu様
>などから察するに、ひょっとして、vbScript(WSH含む)の
>ヘルプファイル(1.7MBくらいのファイル。無償)をお持ちでない???
>もし、そうなら↓からダウンロードしてください。一家に一台必須かと。
>http://www.microsoft.com/japan/msdn/scripting/default.asp
>取り越し苦労なら読み飛ばしてください
恥ずかしながら、仰るとおりでした。
さっそくダウンロードしました。
使えそうなサンプルソースがけっこうありますね!
これは使えそうです。ありがとうございました。
むたぐち様
>このようにWshExecオブジェクトのStatusプロパティの値をみて
>ループを取ってやるのが確実です。
早速試してみます。
ありがとうございます。
僕もいろいろ試してみて
set objShell = WScript.CreateObject("WScript.Shell")
set objExec = objShell.Exec("cscript a.vbs")
str = objExec.stdOut.ReadAll
WScript.Echo(str)
set objExec = objShell.Exec("cscript b.vbs")
str = objExec.stdOut.ReadAll
WScript.Echo(str)
・
・
・
・
の用にやってみたところ、一応順番通りには動いてくれています。
でも確実ではないですね。
しかもこれだと、a.vbsやb.vbsが終了した時点で、ぱっ、と結果が表示され、
進行状態はわかりません。
やはりunixシェルと同じように・・・というのには無理があるのでしょうか・・・
>Runメソッドを使うならば、第三引数にTrueを指定すれば、アプリの実行を
>終了するまでスクリプトは停止します。こちらの方法でも良いでしょう。
こちらは簡単で良いですね!
ばんのしゃーによかばんた さん
>やりたいことは、CurrentDirectory? それともApp.Path? どっち?
お恥ずかしながら、今両方調べてみたのですが、
app.pathかなと思うのですが、両者の違いがよくわかりません・・・
取得したいのは、実行しているvbsと同ディレクトリにあるwarファイルを使いたかったのです。
少しいろいろいじってみます。
>それから、「の用に」は、「のように」と書きましょう。「の様に」は非推奨。
すみません。今後気をつけます。
>このページトップにも書いてあるように、この掲示板は、実は、!!!
>Windows Scripting Host Laboratory
>http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
>の付属なんですね。
大丈夫です!わかっています!!
僕が物わかりが悪いだけです・・・
ついむっときていろいろ書き込んでしまいましたが、
お騒がせしてすみませんでした。
To: おやじ さん
> emledit.lzhでemlファイルを開こうとしたら以下のようなエラーが出ました。
ありがとうございます。
イージーミスをしでかしてました。
本来ならばコンパイルエラーが出るスクリプトなんかを
公開するのは言語道断なんですが、ついうっかり
やってしまったようです、すみませんでした。
修正したスクリプトをアップロードしました。
やっぱりXPからの新しい機能っぽいですね。
http://subversion.bluegate.org/doc/apbs04.html
To: でで さん
エクスプローラ上で\\192.168.0.2\testのようなUNCパスが
見えないのがまさに原因と思われます。
FileSystemObjectはUNCパスをサポートしていますが、
UNCパスを介さないWebDAVアクセスはサポートしていないためです。
(WebDAVに詳しくないため、この表現が正しいかどうかは分かりません)
ここからはScriptの話とは関係なくなりますが…。
手元の環境でいろいろ試してみた結果、UNCパスでアクセスするには
何か条件があるみたいですね。私には分からなかったのですが、
いろいろ試した結果を参考までに書いておきます。
サーバー クライアント Webフォルダ UNCでアクセス
2000 2000 ○ ×(注:ローカル)
2000 XP ○ ○(ただしファイル名が化けるので使えない)
2000 2003 ○ ○(ただしファイル名が化けるので使えない)
XP 2000 ○ ×
XP XP ○ ○(注:ローカル)
XP 2003 × ×
2003 2000 ○ ×
2003 XP ○ ×
2003 2003 × ×(注:ローカル)
※サーバーはそれぞれのOSに付属のバージョンのIISを用いています
※2000はXP上のVPCで動作しています
※2003はwebclientサービスを有効にしています
※「Webフォルダ」はWebフォルダとしてエクスプローラから開けることを示します
この実験結果から、最初の質問に戻って考察してみますと
WindowsXPからはUNCパスでWebDAVアクセスできるのに対し、
Windows2000からはできない理由は、単にサポートしてないだけ
なんじゃないかという気がしてきました。
はじめまして、ででと申します。
windowsからlinuxサーバへログを収集するしくみを検討しています。
Linux上でWebDAVディレクトリを作成してwindowsからファイルをコピーするVBscriptを作ってみました(サイトからの流用ですが・・・)。
で、windowsXPからはうまくいったのですが、windows2Kからは失敗してしまいます。エクスプローラで参照する場合、
XPからは\\192.168.0.2\testで参照しているのですが、
windows2Kではhttp://192.168.0.2/testで参照しているようです。
以下にスクリプトを示します。
-----------------------------------------------------
<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<package>
<job id="MyBackUp">
<?job error="true" debug="true" ?>
<object id="objFs" progid="Scripting.FileSystemObject" />
<resource id="backup_config">
C:\Program Files\app\log.txt
</resource>
<script language="VBScript">
<![CDATA[
On Error Resume Next
Const MYFLD="\\192.168.0.2\test"
Set WshNetwork = WScript.CreateObject("WScript.Network")
WScript.Echo "Computer Name = " & WshNetwork.ComputerName
aryCnf=Split(getResource("backup_config"),Chr(13) & Chr(10))
For i=0 To UBound(aryCnf)
strPth=Trim(aryCnf(i))
If Not IsNull(strPth) And strPth<>"" Then
strDst=objFs.BuildPath(MYFLD,REPLACE(FormatDateTime(Date,2),"/",""))
strDst=objFs.BuildPath(strDst,"\")
WScript.Echo "作成フォルダ名 = " & strDst
If Not objFs.FolderExists(strDst) Then objFs.CreateFolder(strDst)
objFs.CopyFile strPth,strDst,True
WScript.Echo "コピーファイル名 = " & strPth
End If
Next
WScript.Echo("バックアップ処理が完了しました。")
]]>
</script>
</job>
</package>
-----------------------------------------------------
windows2Kの場合FileSystemObjectが使えないのかな?という気がしてます。
ただ、変わりにどのような方法があるのかが知識不足で悩んでいます。
(WSHやVBscriptさわるのも初めてなもので・・・)
解決方法をご指南いただけませんでしょうか?
>YZN さん 2005年 08月 10日 11時 04分 33秒
>Msgbox .GetFolder("\\MyPC\共有\AAA").Path '(2)
>(2)\\MyPC\q(→)\AAA (→)はTAB
s="共有"
For k=1 To Len(s)
c=Mid(s,k,1)
u=AscW(c) 'unicode
If u<0 Then u=u+256*256
hu=u \ 256 '上位
lu=u Mod 256 '下位
j=Chr(hu+lu*256) 'バイトスワップ/SJIS->unicode
WScript.Echo j
Next
"共有"のunicode(little endian)をSJISだと思ってunicodeに変換すると、
"qTAB"に化けます。
>※問題が発生する端末と発生しない端末があるとかないとか・・・。
サーバ側OS(NT系?)が使っているコード系がunicodeで、
クライアント側OS(9x系?)が使っているコード系がShift JISとか?
クライアント側OSが、
>OS:WindowsXP(SP1)
ということは、FSOが変なのか?FSOにunicode/SJISの2系統がある?
よく知りませんが、もし、プロトコルに、文字コードが何かという情報が
載ってないのであれば、同じコード系同士で使うしかないのでしょう。
でなければ、共通なASCII文字セットだけを使う。
しかし、ASCII文字セットのunicode(little endian)がSJISとして読める
というのはどういうことでしょう?
1byte文字と2byte文字の区別だけはあるのかなぁ。
或いは、NUL文字を詰めるとか。
不思議。理解不能。謎です。
ここんとこ、about:blankを表示すると、そのie.LocationNameに、
それと関係ない、XXX.HTMと入るようになりました。
昔は、たしか、about:blankか(無題)のように入っていたと思うのですが、
どうなっているんでしょう。
どこかにキャッシュされた情報でも見ているのかと思うのですが、
レジストリを検索してもXXX.HTMは見つからず、
IEのCacheにもabout:blankやblank.htmは見つかりません。
謎です。
>門外漢 さん 2005年 02月 26日 21時 35分 52秒
>汎用インターネットゾーン。
><!-- saved from url=(0014)about:internet -->
>汎用イントラネットゾーン
><!-- saved from url=(0017)http://localhost/ -->
>汎用制限付きサイトゾーン
><!-- saved from url=(0007)http:// -->
ZoneIDを用いる方法もありますね。
というか、Mark of the Webは、Webサイトによる偽装の危険がある?ので、
ZoneIDは、Mark of the Webの対策後継機能なのかも。
任意のファイルにZoneIDを付けるバッチファイル。
ZoneID3.CMD
――――――――――――――――――――――――――――――――――――――
(
Echo [ZoneTransfer]
Echo ZoneId=3
) > "%~f1:Zone.Identifier"
――――――――――――――――――――――――――――――――――――――
1:イントラネットゾーン
3:インターネットゾーン
4:制限付きサイトゾーン
0や2は、マイコンピュータゾーンになりましたが、
どっちかが本来、信頼済みサイトゾーンなのかも。順に0、2かな。
ファイルの中身をいじらないのでいいかも。
でも、NTFSストーリムが知らぬ間に脱落する危険性がありそう。
プロパティページで外すか、ZIPに入れて戻す。
ただし、どこかにキャッシュが残るのか、変なときも。
一旦、ZIP外のを消して、他のフォルダに戻したほうがよいかも。
emledit.lzhでemlファイルを開こうとしたら以下のようなエラーが出ました。
行 30
文字 29
エラー ステートメントの末尾が不正です
コード 800A0401
ソース Microsoft VBScript コンパイルエラー
OSはWinXP Pro Ver2002 です。
思いますに、
お礼を言われたくて、レスしているひとは、あまりいない、と思います。
また、質問の仕方がよくなくて、一番困るのは本人ですから、
特に、自分が振り回されたとかの実害がない限りは、あまり気にしないことです。
マルチポストも、それ自体は問題ありません。
唯一、問題だと思うのは、一見さんが、過去記事も見ずに、
ちょっとだけ質問して、結果報告もせずに、ぱっと消えることです。
見ているひとには、回答記事の解が有効だったのか、どうか、が分からず、
折角の解の価値を著しく損ないます。
例えば、
>ばんのしゃーによかばんた さん 2005年 06月 28日 19時 28分 37秒
>>管理人むたぐち さん 2005年 06月 27日 18時 10分 29秒
>>To: まどく さん
>>> そのFortranのプログラムは、途中にPauseをかけてあります。
>>> そのPauseしたのを認識して、WSHの次のコマンドラインに移る方法ってありますか?
>>>この方法だと検索にメモリーを取られてしまうので、あまり実用的ではありません。
>どの辺が実用的でないのでしょう?
>監視ループで
>WScript.Sleep 1000
>とかしないで、CPUループしてるのではありませんか?
などです。※
そういうことがある度に、あー、レスなんか付けるんじゃなかった。と後悔します。
なので、通常、意図して亀レスになるよう心掛けてます。気付いてました?
亀レスなら、結果報告がなくても当然だと思えるし、
あれは一体どーなったかな?、とストレス溜めなくて済みます。
問題が一過性のものでなく、普遍的なら、亀レスでも有効なはずです。
また、ちょっと意地悪なようですが、正解は、一見さんには届かず、
常連さんには届きますからね。:-p
※実は、この質問はマルチポストのようで、そっちからの情報によると、
しっかりCPUループしてるんですが、そんなことは、
こっちの掲示板を見てるひとには、知る由もなく、
この質問者には、ばっきゃろー、てな気分です。
>Nomu さん 2005年 08月 19日 00時 30分 12秒
>>すぐにGetParentFolderNameをグーグルで調べたのですが、
>>あまりよい書籍がなくて・・・
>などから察するに、ひょっとして、vbScript(WSH含む)の
>ヘルプファイル(1.7MBくらいのファイル。無償)をお持ちでない???
>もし、そうなら↓からダウンロードしてください。一家に一台必須かと。
>http://www.microsoft.com/japan/msdn/scripting/default.asp
Nomu さんのお勧めに、もうひとつ、補足しますと、
このページトップにも書いてあるように、この掲示板は、実は、!!!
Windows Scripting Host Laboratory
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
の付属なんですね。
その本体のほうに、管理人むたぐちさんによる、入門的な解説やら講座が
あるんですけど、これらはご覧になってますでしょうか?
同様に、
>取り越し苦労なら読み飛ばしてください。
>うに さん (null) 2005年 08月 18日 12時 16分 13秒
>マッチョさん さん 2005年 08月 18日 11時 52分 23秒
>うに さん (null) 2005年 08月 18日 12時 05分 35秒
>これでpwdと同じ機能を実現できました。
pwdなら、
WScript.Echo CreateObject("Scripting.FileSystemObject").GetAbsolutePathName("")
や
WScript.Echo CreateObject("WScript.Shell").CurrentDirectory
でしょう。
やりたいことは、CurrentDirectory? それともApp.Path? どっち?
CurrentDirectoryならヘルプで、
App.Pathなら、これまた、このページ先頭にも書いてある、
Googleサイト内検索:
で過去記事を検索すれば、必要な情報が得られます。
それから、「の用に」は、「のように」と書きましょう。「の様に」は非推奨。
昔、マニュアルを書くときに、社内標準の「技術文書作成基準」で随分、仕込まれました。
これが、とってもよく出来とりまして、一般でも入手出来たらよいのですが、残念。
管理人むたぐちさん、
このページの先頭の「オンラインヘルプを〜」という部分は、
「オンラインでも見れますが、ヘルプファイルをダウンロードすることもできます。」
くらいのほうが、よくないでしょうか。最初、見たときに、?と思ったもので。
用語としては、きっと、定義通りで正しいんでしょう。
たぶん、オンライン〜は、紙媒体でない、電子化されたものを言うのでしょう。
でも、端末時代の用語で、語感がPC/ネットワーク時代には合わないような。
(ネットワークに)オフラインでオンラインヘルプを使う、みたいに。
.HTMファイルで、
Shell.Windows()が「書き込みできません」のエラーで使えない件ですが、
Shell.Applicationを使わず、
直接、ShellWindowsオブジェクトを使えばよいようです。ん、何それ?
これです。
<object id=ShellWindows classid=clsid:9BA05972-F6A8-11CF-A442-00A0C90A8F39>
MSDNの「Scriptable Shell Objects」というタイトルのページを参照。
ここに書いてあるclassidは役立たずばかりと思っていましたが、
そうでもなかったみたい。
Shell.Applicationが使えれば、全く必要のないものですが、
そっちが使えないなら、こっちの出番もあろうというものです。
ところで、
.HTMファイルで、Shell.Applicationが、オブジェクトの生成が可能なくせに、
メソッドの呼び出しで「書き込みできません」のエラーにするような、
訳の分からない仕様は、やめてほしいですね。
こういう仕様の一貫性/統一性の欠如はセキュリティホールの元になるだけです。
もし、それがセキュリティ対策で追加されたものなら、何をかいわんや、です。
セキュリティは原理原則でしか作れないはず。
アドホック/取り敢えずの対策(笊)を幾つ積み重ねても笊は笊です。
決して、鍋にはなりません。
それくらいのこと、MSのソフトウェアアーキテクトも分かってそうなものですが。
To: うに さん (null) 2005年 08月 17日 20時 04分 06秒
> unixのシェルのように順番で実行したいのですが・・・
set objShell = WScript.CreateObject("WScript.Shell")
set objExec = objShell.Exec("cscript count1.vbs")
Do While objExec.Status = 0
WScript.Sleep(100)
Loop
set objExec = objShell.Exec("cscript count2.vbs")
Do While objExec.Status = 0
WScript.Sleep(100)
Loop
このようにWshExecオブジェクトのStatusプロパティの値をみて
ループを取ってやるのが確実です。
Runメソッドを使うならば、第三引数にTrueを指定すれば、アプリの実行を
終了するまでスクリプトは停止します。こちらの方法でも良いでしょう。
---------------------------
ファイルまたはフォルダ名の変更エラー
---------------------------
xxx の名前を変更できません。アクセスできません。
ディスクがいっぱいでないか、書き込み禁止になっていないか、
またはファイルが使用中でないか確認してください。
---------------------------
こういうときに、誰が使っているか、調べる方法はないのでしょうか?
「確認してください」と言いながら、確認する機能を提供してない、
なんてことは、まさか、ないですよね。
unixだとpfile?とかで見れたように思います。
メインフレームだとDISPLAY DSN=ファイル名??? 忘れた。
最初はなかったのでツールを作って公開したような。Q DSN=???
こういうツールはOSに必須ですよね。OS標準機能にない訳ない。
業務システムで、誰が使っているか、分からないので、
システムをリブートしてください、なんて言えませんよね。フツウ。
>すぐにGetParentFolderNameをグーグルで調べたのですが、
>あまりよい書籍がなくて・・・
などから察するに、ひょっとして、vbScript(WSH含む)の
ヘルプファイル(1.7MBくらいのファイル。無償)をお持ちでない???
もし、そうなら↓からダウンロードしてください。一家に一台必須かと。
http://www.microsoft.com/japan/msdn/scripting/default.asp
取り越し苦労なら読み飛ばしてください。
>ななし さん 2005年 08月 18日 09時 56分 39秒
解決したからいいや、などとは全く思っていません。
むしろ後でわからない人が検索をかけたときに
自分の書き込みが役に立てばと、なるべく解決詳細を書き込んでいます。
何度もいいますが、「書き込みをみて」いただけているならわかってもらえると思うのです。
少し前にも、名無しさんは書き込んでいるようですが
指摘している割に回答するでもなく、あなたこそいったいどういうつもりなのでしょうか?
もしかしたら(違ったら大変失礼ですが)回答者のかたのどなたかなのでしょうか?
だとしたら、人の揚げ足を取るようなことをするときばかり、
名前を変えて書き込むなんて卑怯だとおもいます。
後はあなたではなく、管理人のむたぐち殿に判断していただきたいと思います。
私の書き込みが不適切であるのなら、むたぐち様、削除をお願いします。
>マッチョさん さん 2005年 08月 18日 11時 52分 23秒
>WindowsScript(でなくてもいいんですけどね!)を使用して、Cドライブ直下にある、テキストファイルの最下位に「3行」文字を追記したいのですが、どなたかサンプルスクリプトを頂けないでしょうか?修正履歴としてこのファイルの最下位にどんどん追加していくような仕組みがほしいのですが・
「3行」が具体的になにを追記したいかわからないのですが、
'***********************************
'* ファイル書き込みプロシージャ *
'***********************************
sub txtwrite(str)
Set Fs = CreateObject("Scripting.FileSystemObject")
Set objFile = Fs.OpenTextFile("c:\log.txt",8,true)
objFile.write str & vbCrLf
objFile.close
end sub
'************************************
としておいて、
txtwrite(追加したい3行)
これで実現できませんか?
>Nomu様
すぐにGetParentFolderNameをグーグルで調べたのですが、
一瞬どのようにつかったらいいかわからなかったため、後回しにしてしまいました。
大変申し訳ありません。
Set objFS = CreateObject("Scripting.FileSystemObject")
WScript.Echo objFS.GetParentFolderName(WScript.scriptfullname)
これでpwdと同じ機能を実現できました。
(単にpwdだけで良いのと比べるとかなりややこしいですね・・・)