お前ら、wsh使ってますか? Part4

このエントリーをはてなブックマークに追加
1名無し~3.EXE
前スレ
#1 http://pc.2ch.net/test/read.cgi/win/1009175619/
#2 http://pc2.2ch.net/test/read.cgi/win/1022248379/
#3 http://pc5.2ch.net/test/read.cgi/win/1058829737/
こんなことコンピュータにやらせろよ。そう思ったことはありませんか?
簡易的な実行環境も含めて普通のOSだったら当たり前に備わっている自動実行。
Windowsの標準に備わっているそれがWSH(Windows Script Host)です。
また、ここではWSHだけに限らずWMI、ADSIなどのネタもOKです。

掲示板一般の注意は包括の上、その他諸注意。

・煽りや荒らしは基本的に無視の方針でお願いしますが、ウイルス、ワーム等の投稿は拒めません。
この板はWindows板であって、プログラム一般に知識のない方も見る可能性があります。
ローカルおよびネットワーク等に害が加わるコードを発見しましたら、その投稿者を騙って何をするものなのかとか、無害化、有益化等の解説を加えて頂ければありがたいです。

・また、一レスに収まりきれないコード(30行以上)はソースアップ板でどうぞ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1022248177
ソースをアップ出来ましたら、そこの個別リンクを張り、それを元に話を進めていただけると便利かもです。

・ここでヒントを得て完成したスクリプトは皆さんにお披露目してください。
 同じことで悩んでいる人のためになります。

・質問する際は、OS及び使用するコンポーネントのバージョンもまず先に告げることをお忘れなく。

基本的にsage進行で、プログラムのことよりも「これが出来る」便利さを語るスレになったらいいなと思います。

また関連の>>1-4も見てください
2名無し~3.EXE:04/11/15 12:29:35 ID:fMIpDoUD
                   /ヽ       /ヽ
                  /  ヽ      /  ヽ
                  /     ヽ__/     ヽ
   ┏┓  ┏━━┓     /               \   .┏━┓
 ┏┛┗┓┃┏┓┃    /       \     /   |   .┃  ┃
 ┗┓┏┛┃┗┛┃┏━|      >      < |━┓┃  ┃
 ┏┛┗┓┃┏┓┃┃  |.         (__人__)   |  ┃┃  ┃
 ┗┓┏┛┗┛┃┃┗━ヽ         \/   / ━┛┗━┛
   ┃┃      ┃┃   /               \   ┏━┓
   ┗┛      ┗┛  /         ̄ ̄ヽ / ̄  ヽ .┗━┛
               .ヽ_______/ \__/
3名無し~3.EXE:04/11/15 12:34:57 ID:bIVnwp3z
【基本】
MSDN Online Japan ホーム
http://www.microsoft.com/japan/msdn/default.asp

【その他】
Tips - ステップアップWSH
http://www1.u-netsurf.ne.jp/~tomo_c/tips/Scr003.html
Tips - (小技にも満たない)微ワザ集
http://www1.u-netsurf.ne.jp/~tomo_c/tips/Scr002.html
Nacelle - WSH「自動」
http://nacelle.info/wsh/index.php
4名無し~3.EXE:04/11/15 12:39:41 ID:AI0M2q6V
以下のコードをa.jsとして保存して実行すると、

var WShell = WScript.CreateObject("WScript.Shell");
var oExec = WShell.Exec("notepad.exe");


こんなエラーが出ます。


スクリプト:C:\a.js
行:2
文字:1
エラー:ライブラリは登録されていません。
コード:8002801D
ソース:(null)

何が原因なのでしょうか?Runは使えるのですが、Execが使えません。
ご教示願います。

環境:WindowsXp SP2
5名無し~3.EXE:04/11/15 12:45:00 ID:bIVnwp3z
Dim originaldatestr , yearstr , monthstr , datestr , weekstr , originaltimestr , hourstr , minutestr
Dim ye , mo , da , we , ho , mi
originaldatestr = Date
yearstr = Year(originaldatestr)
monthstr = "0" & Month(originaldatestr)
datestr = "0"& Day(originaldatestr)
weekstr = Weekday(originaldatestr)
IF weekstr = 1 Then
we = "Sun."
ElseIF weekstr = 2 Then
we = "Mon."
ElseIf weekstr = 3 Then
we = "Tue."
ElseIf weekstr = 4 Then
we = "Wed."
ElseIf weekstr = 5 Then
we = "Thu."
ElseIf weekstr = 6 Then
we = "Fri."
ElseIf weekstr = 7 Then
we = "Sat."
End If
ye = Right(yearstr ,2)
mo = Right(monthstr ,2)
da = Right(datestr ,2)
originaltimestr = Time
hourstr = "0" & Hour(originaltimestr)
minutestr = "0" & Minute(originaltimestr)
ho = Right(hourstr ,2)
mi = Right(minutestr ,2)
65:04/11/15 12:45:56 ID:bIVnwp3z
日付に関する話が多かった気がするので
昔作ったのをはっとく。
7名無し~3.EXE:04/11/15 12:50:52 ID:bIVnwp3z
>>4
同じ環境だが、俺のところじゃ動く。
8名無し~3.EXE:04/11/15 16:13:27 ID:bIVnwp3z
マウスの動きを再現するときはAutoItX。
REM AutoItXインストールアンインストールバッチforXP
REM ↓AutoItX配布元↓
REM http://www.hiddensoft.com/AutoIt/
REM 解凍したフォルダ内で実行すること
PAUSE
IF EXIST %SystemRoot%\System\AutoItX.dll (GOTO:uninstall) ELSE GOTO:install
:install
COPY AutoItX.dll %SystemRoot%\System\AutoItX.dll
CD %SystemRoot%
regsvr32 autoitx.dll
GOTO:EOF
:uninstall
CD %SystemRoot%
regsvr32 /u autoitx.dll
DEL system\AutoItX.dll
9名無し~3.EXE:04/11/15 16:48:08 ID:bIVnwp3z
>>8
×AutoItX
○AutoItX.dll
座標を取得のしかたがわからんのでちょっとメモ。
「五秒後に座標を取得して、座標をクリップボードに送るスクリプト。」

Option Explicit
Dim oAutoIt
Dim x , y , pos
Set oAutoIt = CreateObject("AutoItX.Control")
x = oAutoIt.MouseGetPosX()
y = oAutoIt.MouseGetPosY()
pos = "[" & x & "," & y & "]"
WScript.Sleep 5000
Wscript.Echo pos
oAutoIt.ClipPut pos
10名無し~3.EXE:04/11/15 17:05:26 ID:bIVnwp3z
前スレhttp://pc5.2ch.net/test/read.cgi/win/1058829737/279へのぶっ細工なレス
ゴミ箱の位置は調整しなければならない。

Option Explicit
Dim oAutoIt
Set oAutoIt = CreateObject("AutoItX.Control")
oAutoIt.WinMinimizeAll()
oAutoIt.RightClick 38,178
Wscript.Sleep 100
oAutoIt.Send "b"
Wscript.Sleep 100
oAutoIt.Send "y"
oAutoIt.WinMinimizeAllUndo()
11名無し~3.EXE:04/11/15 17:17:22 ID:bIVnwp3z
'AutoItのマウス操作の実演ということで大目に。
Option Explicit
Dim oAutoIt , x , y
Set oAutoIt = CreateObject("AutoItX.Control")
oAutoIt.WinMinimizeAll()
x = oAutoIt.MouseGetPosX()
y = oAutoIt.MouseGetPosY()
oAutoIt.RightClick 38,178 'ゴミ箱の位置。>>9のスクリプトで確認
Wscript.Sleep 50
oAutoIt.Send "b"
Wscript.Sleep 50
oAutoIt.Send "y"
oAutoIt.WinMinimizeAllUndo()
oAutoIt.MouseMove x,y
12名無し~3.EXE:04/11/16 12:24:46 ID:LHLZDmux
Windows Script 5.6 ドキュメント ダウンロード (exe 形式; 1.67 MB)
http://www.microsoft.com/japan/msdn/scripting/default.asp
ヘルプファイル直リン
http://download.microsoft.com/download/winscript56/Install/5.6/W98NT42KMe/JA/scd56jp.exe
13名無し~3.EXE:04/11/16 14:58:49 ID:6tEDSq95
レジストリを削除しようとしているのですが、
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Regdelete "HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache\C:\WINDOWS\notepad.exe"
Wscript.Quit

では失敗してしまいます。メモ帳は開いていませんし管理者権限です。
なぜでしょうか?コードが間違っているのでしたら教えてください。
14名無し~3.EXE:04/11/16 15:09:00 ID:LHLZDmux
>>13
最後の行を
Wscript.Echo "おしまい"
に変える。
15名無し~3.EXE:04/11/16 16:32:41 ID:vuEhNtEj
>>14
やってみましたが、駄目でした。
レジストリキー"hoge"は削除できません、のエラーメッセージが出ます。
エラーコードは80070002です。
16名無し~3.EXE:04/11/16 17:23:17 ID:LHLZDmux
>>15
本当にやるとおもわなんだ。

¥だか:だかをつかっちゃいかんということじゃないかとおうもうが。
17名無し~3.EXE:04/11/16 17:30:00 ID:LHLZDmux
たぶんその値に含まれてる¥が階層の¥と誤読されてる。
ためしにそこにfffというのをつくってそのスクリプトで消してみたら消えた。
18テンプレ1:04/11/16 21:54:43 ID:LHLZDmux
便利なリンク集(前スレより、404は排除)
【WSH本体】
http://www.microsoft.com/japan/msdn/scripting/default.asp
【オンラインドキュメント】
http://www.microsoft.com/japan/msdn/library/default.asp
【Windows Script 5.6 ドキュメント ダウンロード (exe 形式; 1.67 MB)】
http://download.microsoft.com/download/winscript56/Install/5.6/W98NT42KMe/JA/scd56jp.exe
【オブジェクト内のメソッドプロパティがわからないときはVB、Officeがあるならオブジェクトブラウザを見ること。
持ってない人はOLE/COM Object Viewerを使う。】
http://www.microsoft.com/com/default.mspx

WindowsXPには、コマンドラインツールとして、VBSファイルが結構あるみたいですね。
http://www.atmarkit.co.jp/fwin2k/xp_feature/013commandtool/commandtool.html
【ADSIの特集全文(?)が再掲されています。】
http://www.galliver.co.jp/writing/nikkei_tokushu/wad002/index.html

【個人サイト】
趣味のJavaScriptなページ
ttp://homepage3.nifty.com/aya_js/
Windows Scripting Host Laboratory
ttp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
Tips - (小技にも満たない)微ワザ集
ttp://www1.u-netsurf.ne.jp/~tomo_c/tips/Scr002.html
Nacelle - WSH「自動」
ttp://nacelle.info/wsh/index.php
19名無し~3.EXE:04/11/16 21:58:53 ID:LHLZDmux
コンポーネント関連リンク
外部コンポーネント(MS)
DCOM(98/Me)
http://www.microsoft.com/japan/com/dcom/dcom98/dcom13.asp
DCOM(95)
http://www.microsoft.com/japan/com/dcom/dcom95/dcom13.asp

MDAC - データベース・メールボックス・WebDAV・バイナリの操作
http://www.microsoft.com/data/download.htm
WMI(95/98/NT4.0) - 統一されたコンピュータオブジェクト化モデルを提供するスクリプティングAPI、リモート管理
http://www.microsoft.com/downloads/release.asp?releaseid=23142
ADSI - Active Dictoryの機能を操作
http://www.microsoft.com/downloads/release.asp?releaseid=11093
SOAP - 非集中/分散環境におけるシステム間の構造化され型付けされた情報の交換
http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/580/msdncompositedoc.xml
MSXML - XMLパーサ、SAX・DOM API、XSLT変換、POST/HTTPダウンロード
http://msdn.microsoft.com/library/default.asp?url=/downloads/list/xmlgeneral.asp

外部コンポーネント(MS社製以外)
BASP21 - メール、ファイルエンコード、文字コード変換、FTP/HTTPアップ、その他
ttp://www.hi-ho.ne.jp/babaq/basp21.html
Doodle2 - グラフィック変換、操作、描画
http://www.vector.co.jp/soft/winnt/prog/se219120.html
DynaCall - Win32APIコール
http://www.borncity.com/WSHBazaar/WSHDynaCall.htm
AutoItX - マウス・キーボード・クリップボード操作
http://www.hiddensoft.com/AutoIt/
20テンプレ2:04/11/16 22:06:37 ID:LHLZDmux
WSH(COM)参考書籍
「はじめてのWindows Scripting Host」 (株)アンク著 技術評論社
http://www.esbooks.co.jp/books/detail?accd=30456199

「VBScriptポケットリファレンス」
http://www.esbooks.co.jp/books/detail?accd=30567925

「使いながら覚えるWindowsScriptingHost プログラミング入門」 竹田英雄著 エーアイ出版
http://www.ai-pub.co.jp/contents/book/os/win_scr_host.html

「Windows Scripting Host入門 with VBScript」 毎日コミュニケーションズ
http://www.esbooks.co.jp/books/detail?accd=30446339

「WSHで楽しむWindows95/98/NT4.0版 ウィンドウズ・スクリプティング入門 VBScript編」 メディアテック出版
http://www.esbooks.co.jp/books/detail?accd=30421885

「WSHクイックリファレンス」 羽山博著 オライリー・ジャパン
http://www.esbooks.co.jp/books/detail?accd=30609520

「Rubyを256倍使う本 邪道編」 arton著 ASCII
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3603-6.html

「ADSIスクリプトによるWindows2000システム管理 Windows2000管理者ガイドブック」ピアソン・エデュケーション トーマス・エック 著
http://www.pearsoned.co.jp/washo/win/wa_win70-j.html (どちらかというとVBによる操作本?)

「標準ASPテクニカルリファレンス」山田祥寛著 SOFTBANK
http://books.softbank.co.jp/bm_detail.asp?sku=4797314001
21テンプレ終:04/11/16 22:08:17 ID:LHLZDmux
22追加:04/11/16 22:15:43 ID:LHLZDmux
23名無し~3.EXE:04/11/16 22:35:13 ID:LHLZDmux
テンプレ貼るの失敗したって理由で削除依頼通るかな?
24名無し~3.EXE:04/11/16 22:50:33 ID:SPzaAsjn
11が11を取るのを失敗したって理由で(ry

冗談です。
25名無し~3.EXE:04/11/17 00:54:28 ID:XCVkA3pd
>>17
はい、私も確認しました。
どうも:が入っていると駄目みたいです。
これってどうしようもないのでしょうか?
回避策をご存知でしたらどなたか教えてください。
2625:04/11/17 00:58:12 ID:XCVkA3pd
連続ですみません。
>>25に書いたような禁則処理みたいなことってMSDNに書いてますか?
どうしても見つからないのですが回避策は載って無くてもいいので、
このキャラクターは使えないってのがもし書いてあるページがありましたら
教えてください。
27名無し~3.EXE:04/11/17 01:11:01 ID:gxkxixC1
\を前につけるとか""や''で囲むとか
28名無し~3.EXE:04/11/17 01:25:36 ID:mtak2SdD
しつもん。
http://www.microsoft.com/japan/technet/scriptcenter/schedule/scrsch04.mspx
みたいに、WMIのWin32_ScheduledJobでタスクを追加する場合、
実行アカウントとパスワードは設定できないんでしょうか?
あと、タスクの名前ってどうやって設定すればいいの?
2925:04/11/17 02:03:59 ID:XCVkA3pd
>>27
すべてやりましたが駄目でした。
30名無し~3.EXE:04/11/17 02:25:00 ID:IbKMZ0CR
>>28
>  実行アカウントとパスワードは設定できないんでしょうか?
できない

>  あと、タスクの名前ってどうやって設定すればいいの?
エクスプローラでリネーム
//WMIからは無理ってこと
31名無し~3.EXE:04/11/17 23:49:40 ID:jhuNJyNP
WSHでバイナリーファイルの操作って出来ませんか?
バイナリーファイルを開いて数ビットだけいじって閉じるってのをやりたいのですけど。
32名無し~3.EXE:04/11/18 00:03:57 ID:y6AHheWV
>>31
ADO.Stream
33名無し~3.EXE:04/11/18 11:58:53 ID:YXIW4Z12
なんかファイルがらみの質問が続いていますが私もファイル絡みで教えてください。
もしc:\hoge.exeがあったら削除するってコマンドはどうしたらいいのでしょうか?

on errorは他にも影響するので使いたくありません。
34名無し~3.EXE:04/11/18 12:03:26 ID:gGsFIgLN
FileSystemObjectのFileExistsで確認。
35名無し~3.EXE:04/11/18 12:06:29 ID:hMDXS50r
>>33
他にも影響しないようにつかえよ。
on error以外では完璧にやる方法は無い。

FileExistsを使ったところでファイルがあると判定した後に
別プロセスがファイル消すこともある。
36名無し~3.EXE:04/11/18 14:38:51 ID:jsl4/cdt
俺もファイル絡みで。
WSHのファイルに引数としてデータを渡すことはできる?
もしできるんだったらその引数の読み方を教えて。
37名無し~3.EXE:04/11/18 14:54:20 ID:dOL1rwig
>>36
Arguments プロパティでできるよ。
>>12のドキュメント、もし入れてないなら入れとくと便利かも。
38名無し~3.EXE:04/11/18 14:55:07 ID:gGsFIgLN
>>36
WScriptオブジェクトのArgumentsプロパティ。

>33
ファイルを他のプロセスが使用中で削除不能とかもあるしな。
39名無し~3.EXE:04/11/18 18:05:22 ID:hGvoS14o
36です。回答ありがとう。
40名無し~3.EXE:04/11/19 00:26:57 ID:9S6TZMyu
質問です。
wshで、あるファイルへのURL(http〜.zip等)から、
そのファイルをローカルにダウンロードする方法を教えて下さい。
41名無し~3.EXE:04/11/19 00:37:47 ID:ndCCjmKe
>40
前スレにPOSTの方法があったからそれをベースに。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1022248177&res=60
42名無し~3.EXE:04/11/19 00:55:52 ID:9S6TZMyu
>>41
ソースを貼ってくれたのですね。ありがとうございます!
今試してみたら希望どおりの動作でした。助かりました。
43名無し~3.EXE:04/11/19 12:15:56 ID:e7EzWhQN
WSH実行時、タスクマネージャーでのプロセス名がwscript.exeと表示されますが、
これを別の任意の名前(hoge.exe等)にすることは出来ないのでしょうか。
44名無し~3.EXE:04/11/19 17:05:08 ID:+vZvHkgC
>43
どんな悪事を企んでるんですか?
45名無し~3.EXE:04/11/19 17:11:24 ID:4h72HsB8
質問なのですが
wshで、zipファイルを(できればOS標準機能で)解凍する方法ってありますか?
もしあれば教えてくださいませ。
46名無し~3.EXE:04/11/19 17:14:38 ID:SZI2b+FT
>>45
標準では無い。
http://www.csdinc.co.jp/archiver/
こことかを参考にすれ
47名無し~3.EXE:04/11/19 17:26:06 ID:4h72HsB8
>>46
迅速なレスありがとうございます。標準では無理ですか。
とりあえず、リンク先のVB関係あたりから見てみます。
48名無し~3.EXE:04/11/23 09:28:35 ID:eKT8yZ49
msgboxを押すのが面倒なので、一定時間経つと消える
もしくは何らかの方法でメッセージを一定時間表示する方法ってないでしょうか
49名無し~3.EXE:04/11/23 09:48:01 ID:PDBJc0vh
>48
WScript.ShellのPopup
50名無し~3.EXE:04/11/23 09:53:56 ID:eKT8yZ49
>>49
これです。感涙ものです。ありがとうございました
51 :04/11/23 16:21:00 ID:hNxVhF++
Excelでパスワードつきのブックを保存したい
マクロで記録すると

ActiveWorkbook.SaveAs Filename:="File.XLS", FileFormat:=xlNormal, Password:="hogehoge", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:
な一行になったんで、WSHにコピペすればいいじゃんと思ったが、うまくいかんざき
誰か教えてたもれ
エラーメッセージ「ステートメントがありません」

ここまではできたんだけどパスワードをつけたり、有無をいわせず上書き保存したりができぬ

Set xl = CreateObject("Excel.Application")
xl.workbooks.Open(obj)
xl.ActiveWorkbook.SaveAs "File.XLS"
52名無し~3.EXE:04/11/24 16:09:04 ID:VApcNP7t
Vbscriptでファイルを開くのダイアログを使う方法って無いでしょうか?
Inputboxでいちいちファイルをフルパスで入力するのはめんどくさいので。
53名無し~3.EXE:04/11/24 16:13:41 ID:wTB3/ZFT
>>52
IEオブジェクトを使うとか。これだと複数選択できないようだが。

JScriptだけどサンプルコード。

var ie = WScript.CreateObject("InternetExplorer.Application");
ie.Navigate2('about:<html><body><input type="file" id="fileDialog"></body></html>');
while (ie.Busy || (ie.ReadyState != 4)) WScript.Sleep(10);
ie.Document.all.fileDialog.click();
WScript.Echo(ie.Document.all.fileDialog.value);
ie.Quit();
54名無し~3.EXE:04/11/24 16:42:04 ID:jaMTUZhV
Excelを使うという手もある。やっぱり複数選択出来ないっぽいが。

Set ObjXL = CreateObject("Excel.Application")
str = ObjXL.GetOpenFilename("テキスト ファイル,*.txt,JPEG ファイル,*.jpg;*.jpeg")
If str <> False Then
MsgBox(str)
End If
ObjXL.Quit
Set ObjXL = Nothing

あるいはSeraphyScriptToolsあたりを使うほうが良いかもね。
http://www.seraphyware.jp/dev/
55名無し~3.EXE:04/11/24 18:04:55 ID:kwRD/pLP
vbsで2004/11/24 10:00:00みたいなフォーマットの日時を
Mon, 24 Nov 2004 00:00:00 GMT
に変換する方法は無い?
UTCだけは何とか調べて分かったのですが他は分かりませんでした。
56yara ◆SSLypP3Luo :04/11/24 19:25:30 ID:uhitqTch
>>55
Mon, 24 Nov 2004 01:00:00 GMT
日本は(GMT+09:00)ね。
57名無し~3.EXE:04/11/24 20:01:24 ID:MsYprlEo
ゴミ箱を空にしたり、最近使ったファイルを空にしたり、モデムを削除する方法は
無いでしょうか?

キーを押したことにしてやることは出来そうなのですけど、誤動作しそうなので、
できたらレジストリやファイルを操作してやれないかな?と思って色々と試して
いますが、どうしても駄目でして。クッキーだけはシステムファイルじゃないみたいで
削除できたのですけど。

よろしくお願いします。
58名無し~3.EXE:04/11/24 22:32:04 ID:Lm2hW0IA
WSH(VBS)でファイルのアップロードを実現する方法わかる方いらっしゃいますか?
↓に望んでるっぽいソースがあるんですが、使い方がいまいちわからない・・・。
http://www.motobit.com/tips/detpg_uploadvbsie.htm
59名無し~3.EXE:04/11/24 22:38:10 ID:wTB3/ZFT
60名無し~3.EXE:04/11/24 23:25:14 ID:Lm2hW0IA
>>59
すいません、もう少し詳しく説明すると今、下のようなフォームがあります。
<form name="form1" enctype="multipart/form-data" method="post" action="">
<input type="file" name="file" value="">
<input type="submit" name="Submit" value="送信">
</form>

で、VBSを使ってファイル名を設定して、送信ボタンを押せれば簡単なのですが、
セキュリティ上、input type="file"の場合は、アップロードするファイルを
ボックスに入力することができないようなので、下のような感じでやるしかないのかなあ
と思ったわけです。しかしファイルのアップロードはどのようにしたらよいのか
わからなのです・・・。

Set xmlHttpRequest = CreateObject("MSXML2.XMLHTTP.4.0")
xmlHttpRequest.Open "POST", "https://192.168.1.1/uploader.php", False
xmlHttpRequest.setRequestHeader "Referer", referUrl
xmlHttpRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlHttpRequest.send sendTxt & "&Submit=%8E%C0%8Ds"

sendkey使えばできるんですが、できれば使いたくないのです。

61名無し~3.EXE:04/11/25 00:19:00 ID:/smL99mA
またキンタマ?
62名無し~3.EXE:04/11/25 00:36:50 ID:nTM/No5u
>60
>41を参考にがんがれ。
63名無し~3.EXE:04/11/25 13:42:38 ID:i6sYfV9h
55です。
>>56
時間は手打ちで入力したのでめちゃくちゃだと思います。すみません。
ただ、>>55に書いたようなフォーマットの変換はどのようにすればできるのでしょうか?
64名無し~3.EXE:04/11/25 13:48:15 ID:phs7jw//
>>63
1) 手で変換する。
  SetLocale関数でen-USにすればMonthName関数やWeekdayName関数で3文字の英名を取得できるようになる。
  ただし現在のロケールにおける標準時との時差を取得する手段がないようなので、
  決めうちか長いSelect文を使うかする必要があるようだ。

2) JScriptを利用する。
  JScriptのDateオブジェクトとそのgetUTCStringメソッドを使えば容易に取得できる。
  .wsfでの運用を検討してはどうか。
65名無し~3.EXE:04/11/25 14:05:57 ID:7vyuPqi3
Windows XPだったら、SWbemDateTimeでやれないかな。
GMT+9とかはこれでも無理か…

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/swbemdatetime.asp
66名無し~3.EXE:04/11/25 14:43:59 ID:W9MpRnMU
()の中が長くなったので改行したいんですけどそうするとエラーがでます
どうすればいいんですか?
67名無し~3.EXE:04/11/25 14:50:59 ID:phs7jw//
>>66
改行直前にアンダースコア(_)を入れる。

>>65
WMIを忘れてた。
UTCTimeクラスとLocaleTimeクラスのHourプロパティの差を見れば時差も計算できるかな。
68名無し~3.EXE:04/11/25 15:02:27 ID:W9MpRnMU
>>67
ありがとうございました
69名無し~3.EXE:04/11/25 15:35:23 ID:OHJCf8Am
指定したURLのテキストデータをファイルに保存する方法は無いでしょうか?
xmlhttpのresponsebodyを使ってもソースしか取れません。
ソースをいじってテキストファイルを作成しようとしてもテキストファイルの本文内に
<br>などの制御コードがまじっているとどうしようもないです。
何か良い方法は無いでしょうか?
IEをバックグラウンドで起動して該当のURLを立ち上げてその後にCtrl+A,Ctrl+Cを送信
なんて出来ればクリップボードからいくらでもファイルに落とせるのですが、
どうしてもやり方が分かりません。
これもきちんと表示できたかどうかがこちら側で分からないと厳しい面がありますが。

色々やったのですがどうしても分からないので良い方法があったら教えてください。
70名無し~3.EXE:04/11/25 15:55:10 ID:phs7jw//
>>69
var ie = new ActiveXObject("InternetExplorer.Application");
ie.Navigate("ttp://www.google.com/index.html");
while (ie.Busy)
   WScript.Sleep(100);
WScript.Echo(ie.document.body.innerText);
ie.Quit();
71名無し~3.EXE:04/11/25 16:26:01 ID:hYq3JT2j
D&Dしたり送るでファイルを開くスクリプトってどうやって書いたらよろしいんでしょうか?
たとえば、txtファイルを関連付けしていない普通のプログラムで開く、ような
72名無し~3.EXE:04/11/25 16:27:55 ID:T4ybMLJG
ウシュフ
73名無し~3.EXE:04/11/25 16:31:43 ID:phs7jw//
>>71
スクリプトにファイルパスが引数として与えられ、WScript.Argumentsで取得できる。
あとはWshShellのRunメソッドとか使ったり。
74名無し~3.EXE:04/11/25 16:34:56 ID:ZJHrJJs2
>>64-65
ありがとうございました。
75名無し~3.EXE:04/11/25 16:58:18 ID:hYq3JT2j
(´・ω・`)
7669:04/11/25 17:20:22 ID:RElYbooW
>>70
教えて君ですみませんが、VBSで出来ないでしょうか?
拡張子をjsにしたらきちんと動作したのですが、VBSのファイルに組み込んで
利用したいので。

教えて君でほんとすみません。
;を抜いたり色々とやったのですがjsは初めてでまったく分かりませんでした。

あと、どなたか前のスレのログをすべてお持ちでしたらどこかにミラーして
もらえないでしょうか。お願いします。
77名無し~3.EXE:04/11/25 17:37:04 ID:JVgKqwFa
>>76
JSとそんなに変わらんよ。

Dim ie
Set ie = WScript.CreateObject("InternetExplorer.Application")
ie.Navigate("http://www.google.com/index.html")
Do While ie.Busy
WScript.Sleep 100
Loop
MsgBox(ie.document.body.innerText)
ie.Quit
Set ie = Nothing
78名無し~3.EXE:04/11/25 17:58:49 ID:HfdRc9ua
スクリプトにD&Dして別のプログラムで開くのではなく
別のプログラムにD&Dして開くという行為そのものを記述する方法を…
7969:04/11/25 18:25:25 ID:dMPv8ZB7
>>77
ActiveXでばかり検索していました。
何から何までありがとうございました。
80名無し~3.EXE:04/11/25 19:13:30 ID:+RuVt7DK
>>78
ごめんね。言ってる意味がわからない
81名無し~3.EXE:04/11/25 20:50:27 ID:3k6IL0UA
ファイルを開いて、ファイル内に"名無し~3.EXE"などの特定の文字列がいくつあるか
カウントする方法はないですか?
82名無し~3.EXE:04/11/25 20:54:39 ID:FRTVFSB/
>>81
何が分からないのかがわからない。
83名無し~3.EXE:04/11/25 21:06:36 ID:Z5LZk3Pg
きっとそのファイルは未知の暗号鍵に堅く閉ざされたファイルなんだよ。
84名無し~3.EXE:04/11/25 21:11:40 ID:BEiq9nwQ
>>78
パス渡せ
>>81
string.match(/regexpression/g).length
8581:04/11/25 22:37:20 ID:3k6IL0UA
>>84
出来なかった。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/vsobjmatch.asp
を参考に書いたんだけどどこが間違ってますか?
文字列aの数を数えるだけのを作ったのですが。

a = "abcabcabcabcabc"
set a.match(/a/g).length
b=0
for Each b in a
b=b+1
Next
MsgBox(b)
86名無し~3.EXE:04/11/25 23:01:03 ID:Qyk4wkfI
1970-1- 1からの経過秒数を計算する方法はないでしょうか。
87名無し~3.EXE:04/11/25 23:02:49 ID:phs7jw//
>>85
目の付け所は良いのにコードに全く反映されてないのはどういう訳だ。

84が挙げたのはJScript用で、VBScriptならそのサンプルの通り。
patrnは/.../じゃなくて""でくくった普通の文字列、/.../gのgはregex.Global = Trueのこと。
Executeで返されるMatchesコレクションの総数(=ヒットした数)はMatchesコレクションのCountプロパティ(このプロパティ、ドキュメントに見つからないけど)
88名無し~3.EXE:04/11/25 23:22:35 ID:k3T6UCUT
フォルダを開く時に左側のエクスプローラーバーを表示させた状態で開くことは出来ますか?
8981:04/11/25 23:37:45 ID:3k6IL0UA
>>87
出来ました。ありがとうございました。
90名無し~3.EXE:04/11/26 00:18:58 ID:pn+1L0Cn
>>86
function GetUnixTime(datetime) {
   var date = (datetime) ? new Date(datetime) : new Date();
   return Math.floor(new Date(date - new Date(1, 1, 1) + Date.UTC(1, 1, 1)) / 1000);
}

VBScriptだと多分実現不可能だと思うので、メインをVBScriptで書きたいのなら.wsfで。
91名無し~3.EXE:04/11/26 00:34:21 ID:pn+1L0Cn
補足。
引数なしなら現在の時刻のUnixTimeを返す。
特定の日時の場合 yyyy/mm/dd hh:mm:ss 形式の文字列を指定する。
92前スレ11:04/11/26 00:53:14 ID:TQyfdKvI
>>86
ではVBS版を。

Function DateToUNIXSec(dDate)
DateToUNIXSec=DateDiff("s",DateSerial(1970,1,1),dDate)-9*3600
End Function
93名無し~3.EXE:04/11/26 01:21:42 ID:pn+1L0Cn
>>92
う。 普通にできたか……。

いい加減な事言って悪かった。
9486:04/11/26 10:39:48 ID:CW0yZokp
>>90>>92
神と呼ばせていただきます。
95名無し~3.EXE:04/11/26 22:33:12 ID:2marJuaE
>>88
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("explorer /e, C:\")
96名無し~3.EXE:04/11/26 23:38:41 ID:1Sfvp5ks
WSHでグループポリシーの変更をスクリプト化
することはできる?

多くのマシンに同じ設定を仕込みたいのだけど、
ドメイン敷いてないので各マシンごとに作業が
必要。なんとか自動化したいのだが…。
97名無し~3.EXE:04/11/26 23:51:21 ID:4G4zP2aA
>>95
ありがとうございます
忘れられてるかと思った…
98名無し~3.EXE:04/11/28 18:58:57 ID:pXtV435D
WSHでAPIを利用することは出来ますか?

SHEmptyRecycleBinを使いたいのですが。
99名無し~3.EXE:04/11/28 19:08:54 ID:0ydQzWng
>>98
>>19

//あーもー誰だスレ建てたくせにテンプレを張らなかった奴は。

がまあゴミ箱を空にするだけなら
ttp://www.google.co.jp/search?num=100&hl=ja&inlang=ja&c2coff=1&q=WSH+%E3%81%94%E3%81%BF%E7%AE%B1%E3%82%92%E7%A9%BA&lr=lang_ja
100名無し~3.EXE:04/11/28 20:56:31 ID:pXtV435D
>>99
ありがと。
101名無し~3.EXE:04/11/29 11:58:49 ID:VVsYv4ey
ごみ箱を空にしようとしているのですが、どうしてもexplorerの確認画面が
表示されてしまいます。これを回避する方法は無いでしょうか?

Set Win = WScript.CreateObject("Shell.Application")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Const ssfBITBUCKET = 10
Win.NameSpace(ssfBITBUCKET).Items.Item.InvokeVerb "ごみ箱を空にする(&B)"
WScript.sleep(500)
WshShell.AppActivate "複数ファイルの削除の確認"
WSHShell.SendKeys "%Y"
WScript.sleep(500)
WshShell.AppActivate "ファイルの削除の確認"
WSHShell.SendKeys "%Y"


Recentなど色々とやってみたのですが、駄目でした。
ごみ箱をいちいち開けば出来るのですが、開かないでスマートに消したいのです。

最近使ったファイルについては開くことすら出来ませんでした。
102名無し~3.EXE:04/11/29 13:12:22 ID:622oyatx
コマンドの終了を確実に待つ方法って無いですか?
ZIP32を使って圧縮をしているのですが、圧縮ファイルの作成が終わらないうちに
そのファイルを操作しようとしてエラーになってしまいます。
fileexsistsで確認しようとしても圧縮が終わらないうちにファイルが出来ているので、
今はsleepで逃げています。
良い方法があったらアドバイスください。
103名無し~3.EXE:04/11/29 14:04:29 ID:poiWySjm
>>102
RUNメソッドの第3引数をTrueじゃだめなの?
104名無し~3.EXE:04/11/29 19:43:08 ID:VqwdD3lY
>>101
めんどくさいから C:\RECYCLER\ (または C:\Recycled\) ごと消しちゃぇよ!
105名無し~3.EXE:04/11/29 20:09:54 ID:OAx8vUwK
>>102

Do Until objShell.AppActivate("ウィンドウのタイトル")
  WScript.Sleep 100
Loop

……てか、ZIP32ってDLL?
106名無し~3.EXE:04/11/30 06:20:51 ID:N/WDPxG2
日曜に@ITの管理者のためのwsh入門を見つけて、MSDNのオンラインドキュメントを
読みながら始めた者です。

ひとつ教えてください。ダブルクオート文字列中のダブルクオートをエスケープしたい
のですが、エスケープキャラクターはなんでしょう。ググったりperlやawkの経験から、
「¥」や「^」を試しましたが、エラーになります。

エスケープする代わりに「¥042」も試しましたが、ダブルクオートの中はリテラルなようで
期待はずれでした。

間違いなくFAQなのですが、見つけられませんでした。お願いします。
107名無し~3.EXE:04/11/30 06:28:13 ID:mrvByYIS
JSなら「\"」
VBSなら「""」
108名無し~3.EXE:04/11/30 07:10:36 ID:N/WDPxG2
>>107
朝早くにどうもありがとうございます。vbsで作っているので、「""」でうまくいきました。
二時間はまっていましたが、これでもう少し進みそうです。
109名無し~3.EXE:04/11/30 12:45:12 ID:wnUehlQf
遠い昔へのレス。
Shift-JisからUTF-8への変換はBasp21でできた。
110名無し~3.EXE:04/11/30 12:53:57 ID:wnUehlQf
このスレ便利だよな。
「チラシの裏にでも書いとけ」とか言われそうだけど、
全スレ保存して検索かけるとやりたいことが実例つきで出てくるし。
111102:04/11/30 13:07:01 ID:ql73JYid
>>103
首吊ってきます。
112名無し~3.EXE:04/11/30 13:07:42 ID:PO29oTOz
最近このスレを知ったのだけれどどなたか前スレのdatを上げてくれませんか?
1スレ目、2スレ目はHTML化済みだったので見れるのですが
前スレはみみずんやにくちゃんねるを漁ってもダメでした
113名無し~3.EXE:04/11/30 14:25:32 ID:2dgDEBFa
114名無し~3.EXE:04/11/30 14:55:53 ID:PO29oTOz
>>113
サンクス
115前スレ11:04/11/30 16:40:07 ID:ufsqza58
>>112
うちでもミラーしておきました。

お前ら、WindowsScripting使ってますか? Part3
http://winscript.s41.xrea.com/mirror/1058829737.html
http://winscript.s41.xrea.com/mirror/1058829737.dat
116名無し~3.EXE:04/11/30 22:29:21 ID:bOy37ggy
VBScriptでファイルが使われているかどうかが分かる方法はないでしょうか?

自分で開いたプログラムだとPIDで検索できますけど、そうじゃないファイルの場合、
調べようが無くて。
117名無し~3.EXE:04/11/30 23:18:58 ID:sqcbNVxV
>107
"hogehoge" & chr(34) & "hogehoge"
↑こんな風にしかできないと思ってた俺。
118名無し~3.EXE:04/11/30 23:22:18 ID:hdCCTbII
>  "hogehoge" & chr(34) & "hogehoge"

どっかのサイトに堂々と挙げられてたな(w
119名無し~3.EXE:04/12/01 00:20:43 ID:N3cptCjM
ドジの多いところでは、そう書いたほうがトラブルが少ないです。
MakeQuoteStringなんていう、""で囲んだテキストを返すだけの関数を用意したりもします。
120名無し~3.EXE:04/12/01 00:30:58 ID:8Qs5IzO7
"のエスケープが"っていう仕様はやっぱかっこわるいよなあ。

Function MakeQuoteString(ByVal strValue)
 MakeQuoteString = """" & strValue & """"
End Function

なんだよ""""って……
121名無し~3.EXE:04/12/01 11:46:56 ID:RiJqYmRv
""""=ぃぃぃぃ=(・∀・)イイ!!(・∀・)イイ!!
122名無し~3.EXE:04/12/02 14:27:38 ID:X9caKwAA
VBScriptなんですが、ダブルクリックして実行した後
1分後にある処理をしたいのですが、タイマーあたりを
見てみたのですが分かりません
ヒントお願いできませんでしょうか
123名無し~3.EXE:04/12/02 14:58:46 ID:jESTBXD1
>>122
WScript.Sleep 60000
124名無し~3.EXE:04/12/02 16:42:59 ID:RqIQHMVl
>>120
javascriptの\"とどっちがカコワルイ?
125名無し~3.EXE:04/12/02 20:22:11 ID:KpFf+EUx
\"は普通だろ。
126名無し~3.EXE:04/12/02 20:44:33 ID:rLjtD9kZ
>124
jsの\はタブ・改行等々汎用に使うから「エスケープ文字は\だ」だけでいい
これは憶えやすいし、リファレンスを引かなくても大体予想がつく。
vbの"のエスケープに"を使うのは他に類似例がないから煩雑で憶えにくい。
いわゆるバッドノウハウの部類。
127名無し~3.EXE:04/12/03 22:19:04 ID:OVjP0Mmt
ところで、wsfで
<Job id="hoge">
<Script Language="VBScript">
Dim
x = "ここで定義した変数"
</Script>
<Script Language="PerlScript">
ここで使いたい。
</Script>
</Job>
ときにはどうしましょう? ARGVが関係ありそうなのはなんとなく
分かるんですが。
128名無し~3.EXE:04/12/03 22:23:40 ID:2Yd5Sz2b
PerlScriptを知らないからアレだが、普通にそのまま使えないの?
VBScriptとJScriptなら普通にグローバル変数を定義してそのまま使用できるんだけど。
129名無し~3.EXE:04/12/03 22:28:16 ID:OVjP0Mmt
>>128
ええ、わたくしもよく分かってないもんですからなんとも。

グローバル変数というやつに何らかの可能性があるというわけですね。
やってみます。
130名無し~3.EXE:04/12/04 00:48:56 ID:qxQTk4jS
>>127
$x と x は同一視されないらしい。
関数は呼び出せるのでgetterでも作ればいいかと。

<Job id="hoge">
<Script Language="VBScript">
' 受け渡しする変数
Dim x
' getter
Function getX
getX = x
End Function
' ロジック
x = "hoge"
</Script>
<Script Language="PerlScript">
print '$x = "'. $x ."\"\n";
print '&getX() = "'. &getX() ."\"\n";
</Script>
</Job>
131名無し~3.EXE:04/12/04 06:14:38 ID:D1g/zfEF
>>130
キタ━━━━(゚∀゚)━━━━ッ!!
いやいや、聞いてみるものです。
どうもでした。
キタ━━━━(゚∀゚)━━━━ッ!!
132名無し~3.EXE:04/12/04 18:01:23 ID:9DKW6wO+
Function DBinfo(str)〜End Function
で、戻り値を利用している者ですが、教えて下さい。

関数の戻り値が3個在るのですが、戻り値DBinfo
の中には、1個しか値が入りません。

今の所、3個をDBinfoの中にまとめて突っ込んで、
あとで、Splitで分解してるのですが、この方法より
も良い方法は在るのでしょうか?

(Part1&2 は、書き込み頻度が少なかったのに、3からは
勢い付いて来ましたね、このスレ。)
133名無し~3.EXE:04/12/04 18:04:46 ID:q6mHoJap
配列にすれば?
クラスにするほどでもないだろし。
134132:04/12/04 18:08:26 ID:9DKW6wO+
>>133
できないのかと思っていました。
参照渡しが必要とか、そんなんじゃなかったんですね。
ありがとうございました。
135名無し~3.EXE:04/12/04 18:11:00 ID:D1g/zfEF
>>133
横からサンクス。
これで、検索と置換をまとめられる……。
検索結果のブール値が欲しかったのだよ。
136名無し~3.EXE:04/12/05 00:24:45 ID:lnQkQ94R
削除するファイルをHDから完全に消すことってVBSで出来る?
ファイルを一度開いてすべて"00h"で埋めて上書きするなんて出来るの?

ファイルの完全削除ツールを使ってHDは奇麗にしたんだけど、毎回このソフトを起動すると
200Gすべて奇麗にするのにすごく時間がかかるから次から削除するファイルはすべて
完全削除したいんだけど、D&Dにしか対応してないソフトが多いから自分で作りたくて。

ちなみに1Mぐらいの特定のファイルいくつかだけを完全に削除したいだけです。
137名無し~3.EXE:04/12/05 00:58:44 ID:uHr33Cxd
>>132
正統的な方法: クラスか構造体を返す。
邪道な方法: ByRef引数を書き換える。
中道の方法: 配列を返す。
前世紀に置き去りにしたい方法: 複数の戻り値を結合して1つにして返す。
138名無し~3.EXE:04/12/05 01:26:55 ID:NdYi5apZ
>136
できることはできると思うが、毎回そんなことしてたらHDDの寿命が縮むぞ。
139名無し~3.EXE:04/12/05 01:28:47 ID:NdYi5apZ
>137
前世紀モノだが、グローバル変数を書き換えるんじゃあかんのかなぁ。
140名無し~3.EXE:04/12/05 05:35:08 ID:ydeOeP++
ドメインに参加しているPCに、ログオンスクリプトでPC利用許諾を表示させています。
(msgbox利用、対象OS:Win2000,XPPro)

OKボタンを押すまでは何も出来ないようにしたいのですが、システムモーダル
にしていても、スタートボタンを押下できたり、Officeを起動できたりします。

ユーザがOKボタンを押すまでは、PCリソースをまったく利用させたくないのですが、
良い方法はないでしょうか?
141名無し~3.EXE:04/12/05 07:13:41 ID:8X7wdQox
>>139
それはCOBOL脳的発想でない?
かく言う漏れもこぼらだったんだけどね。(ニガワラ
でも戻り値を複数返す方法の話はすごく役に立った。ありがとう!
142名無し~3.EXE:04/12/05 14:13:49 ID:NdYi5apZ
>141
FORTRAN脳ですw
143名無し~3.EXE:04/12/05 20:33:25 ID:/pkwO2rB
>>130
なんかすごく今更だが、手元に環境があったので試してみた。

他の言語で x と宣言されたグローバル変数は、PerlScript内でも x (!= $x) でアクセスできる。

<job>
   <script language="VBScript">
      Dim x
      x = "hoge"
   </script>
   <script Language="PerlScript">
      $WScript->Echo(x);
   </script>
</job>

Perlerから見たらありえない変数名だろうが。
144130:04/12/05 21:29:53 ID:16W013AI
>>143
うわぁぁぁ。
思いつかなかった・・・頭固いな、俺 orz
145名無し~3.EXE:04/12/06 18:20:02 ID:bXNgtf6E
>>140
wshでできるかなぁ…つーかwshのmsgboxでできるかなぁ…
146名無し~3.EXE:04/12/06 22:20:43 ID:Gfe+H1ZE
>>138
どうやったら出来ますか?ちなみに一日一回しか使わない予定なのでHDには
負担はかけないと思います。
147名無し~3.EXE:04/12/06 22:40:13 ID:IlFfQ9lL
>146
ADODB.Streamで対象ファイルと同じサイズのバイナリストリームを作って
0x00で埋めたあと上書き保存して、ファイルを削除すれば良いんじゃない?たぶん。

まぁ、廃棄時以外でよっぽどの理由がなければここまでする理由がみつからんけど。
148140:04/12/07 01:18:11 ID:PZzz0RzN
>>145
自社のネットワーク上に接続されているPCを、外部のユーザに使用させます。
この際に、グループポリシーでがちがちにセキュリティを固めたアカウントを利用してもらうんです。

初回起動時に「このパソコン使ってネットワークに被害を与えたら賠償しる!」っていう
メッセージボックスを出して、OKを押すまでは何もリソースを使わせたくないんです。。。

wshだけではムリポですか。。。?いろいろ調べてみたところWin32ではシステムモーダル
に出来ないようですし、ADの機能を使うべし?
149名無し~3.EXE:04/12/07 01:25:53 ID:jGkQApJA
ttp://www.dr-pc.jp/17.htm
ドメインには詳しくないが、こういう手法はどうなの?
150名無し~3.EXE:04/12/07 02:47:42 ID:z8AuZmQc
>>148
全然モーダルじゃないんだけど、

Set objIE = CreateObject("InternetExplorer.Application")
objIE.FullScreen = True
objIE.Navigate "c:\warning.html"
objIE.Visible = True
Set objIE = Nothing

c:\warning.htmlに警告文とOKボタンを記述しておく、
ってのはどう?
メニューバーもツールバーも出ないでIEが全画面で表示されて、
タスクバーとかOfficeのショートカットバーとか全部が隠れるから
閉じるまでマウスで操作されることはない。

問題は、Alt-F4を押されたらダメ、ってことと、IEが既に開いてる
場合は前面に出てこないこと。もっとも、ログオンスクリプトの中
なら後者は問題にならないよね。

安易な解決なのは認めるけど、モーダルで悩むより手っ取り早いと
思う。
151名無し~3.EXE:04/12/08 00:33:44 ID:1/p4DSvy
vbsのFilesコレクションの取得がうまくいかず悩んでいます。環境はW2Kproで
インストール直後なので、バージョン5.1.0だと思います。

切り詰めたスクリプトを書いてみました。C:¥WINNT以下のファイル一覧を表示する
ことを意図していますが、「エラー: オブジェクトがありません。: 'C:¥WINNT'」と
実行時エラーになります。どう直したらいいでしょうか。よろしくおねがいします。

dim foldero, file, filecol, path
dim fso, wsh

set fso = CreateObject("Scripting.FileSystemObject")
set wsh = CreateObject("WScript.Shell")

path = "C:¥winnt¥"
if fso.FolderExists(path) then
 foldero = fso.GetFolder(path)
 filecol = foldero.Files      '<- この行で「Microsoft VBScript 実行時エラー」
 for each file in filecol
  msgbox file.name
 next
else
 msgbox path & "dose not exist."
endif
152名無し~3.EXE:04/12/08 01:16:17 ID:MAKjUJ19
>>151
Setで代入しないと。
Filesプロパティのサンプル見るといいよ。
153151:04/12/08 01:51:56 ID:1/p4DSvy
>>152
レスありがとうございます。5.6用のものですが、Windows Script V5.6ドキュメント
(Script56.CHM)のFilesコレクションおよびFilesプロパティの部分も参照して書いて
います。

アドバイス通り、スクリプト中のfolderoとfilecol変数に代入するところでsetが抜けて
いたので書き足したところ、順次ファイルがmsgboxで表示されるようになりました。
ありがとうございます。

派生してひとつ質問を。setステートメントは「オブジェクトへの参照を変数または
プロパティーに代入するか、プロシージャへの参照をイベントに関連づける」と上記CHM
ファイルには書かれています。

>151の中の「foldero = fso.GetFolder(path)」で、foldero変数にFolderオブジェクトを
代入しているつもりになっているわけですが、set文がなくても実行時にエラーになりません。
foldero変数にはこのとき何が代入されたのでしょう。そもそもエラーにならないのはなぜ
でしょうか。教えていただけませんか。
154名無し~3.EXE:04/12/08 03:15:21 ID:c7Ts79pB
>>153
パス文字列らしきものが入ってるね。
デフォルトのプロパティがPathなのかな?
155151:04/12/08 06:00:24 ID:1/p4DSvy
>>154 遅い時間にありがとうございます。
はい、以下のようにすると、foldero変数への代入にsetステートメントが有る無しに
関わらず、「msgbox foldero」文ではpath変数に代入した文字列がそのまま得られますね。

そもそも正式にsetステートメントを使ってfoldero変数にフォルダーオブジェクトを
代入したのなら、msgboxが期待する文字列ではないはずなので、型違いでエラーに
なりそうなものなのにエラーになりません。

私はvbsを初めて間もないので(>106です)、他言語の少ない経験から想像をすると、暗黙の
型変換が行われているのかとも思いますが確認するすべがありません。この動作は言語の
仕様なのかもしれませんが、このまま確認できないで進むのは気持ちが悪いです。

-->つづく
156151:04/12/08 06:01:24 ID:1/p4DSvy
つづき

変数に何が代入されているか確認したいのですが、vbsではtypeofは用意されていない
ようです。setステートメントの有無でfoldero変数に何が入ったか確認する方法はおわかりに
なりますか?。

dim foldero, file, filecol, path
dim fso, wsh

set fso = CreateObject("Scripting.FileSystemObject")
set wsh = CreateObject("WScript.Shell")

path = "C:¥winnt¥"
if fso.FolderExists(path) then
 set foldero = fso.GetFolder(path)  '<---(setステートメントあり)
 ' foldero = fso.GetFolder(path)    '<---(setステートメント無し)
 msgbox foldero   ' <---ここで確認
 set filecol = foldero.Files
 for each file in filecol
  msgbox file.name
 next
else
 msgbox path & "dose not exist."
end if
157名無し~3.EXE:04/12/08 06:40:10 ID:c7Ts79pB
158151:04/12/08 06:51:17 ID:1/p4DSvy
>>157
大感謝です。でかける直前なので短く。以下の結果でした。
set foldero = fso.GetFolder(path) ならFolder型
foldero = fso.GetFolder(path) ならString型

デフォルトプロパティーの方は、のちほどじっくり読みます。
どうもありがとうございました。
159名無し~3.EXE:04/12/08 09:43:38 ID:Dy+DN02U
>>158
vbsは変数宣言時に型宣言無くて全部Variant型で処理されているからです。
foldero = fso.GetFolder(path) の時点で文字列入れても
set foldero = fso.GetFolder(path) でオブジェクト参照しても
エラーが出ないのは構文見てwsh側で勝手に判断してるから。

逆にキッチリ文字列として処理したいならCstr関数とか使って
明示してやらないとはまることもある罠。
160名無し~3.EXE:04/12/10 20:49:07 ID:6FM+NJLc
ページ内の語句の検索および標準合わせ、
要はCtrl+Fで検索することをWSHにさせたいのですが、どのようにすればいいのでしょうか。
IE.document.NavigateAndFind("ほげ",true);
では動かなかったです。
161名無し~3.EXE:04/12/10 22:39:28 ID:V88ReGMT
VBSとかHTAでプログレスバーなんて実現できませんかのぅ・・・
162名無し~3.EXE:04/12/11 00:55:52 ID:xVM/frfE
>>160
困ったときの妥協案、SendKeys()
163名無し~3.EXE:04/12/13 11:14:51 ID:00DynMB0
>>162
ありがとうございます。
WShell.Sendkeys("^F");では検索窓が現れてくれなかったので、別を考えてみます・・・
164名無し~3.EXE:04/12/13 17:10:48 ID:poRr0ovf
>>163
Do Until Wshell.AppActivate("Internet Explorer")
Wscript.Sleep 1000
Loop 'を入れたら動くかも。Jscriptでの書き方は知らない。

ところで、インターネットオプションのユーザースタイルシートの適用を
スクリプトでやりたいんだけど、今は
Dim objWSH
Set objWSH = Wscript.CreateObject("Wscript.Shell")
Do Until objWSH.AppActivate("Internet Explorer")
Wscript.Sleep 1000
Loop
objWSH.SendKeys "%t"
Wscript.Sleep 100
objWSH.SendKeys "o"
Do Until objWSH.AppActivate("インターネット オプション")
Wscript.Sleep 1000
Loop
objWSH.SendKeys "%e"
Do Until objWSH.AppActivate("ユーザー補助")
Wscript.Sleep 1000
Loop
objWSH.SendKeys "%d"
objWSH.SendKeys "~"
objWSH.SendKeys "%a"
objWSH.SendKeys "%{F4}"
Set objWSH = nothing

を使ってます。Use My StyleSheetというレジストリの値をRegWriteで変えても
結果が反映されません。誰か同じようなことをやったことがある人いませんか?
165名無し~3.EXE:04/12/13 17:12:41 ID:poRr0ovf
>>164
すみません。Jscriptでは、
「Do Until 〜〜
〜〜〜
Loop」
が使えなかったというのを
今思い出しました。
166名無し~3.EXE:04/12/13 18:45:51 ID:E1nEN/CS
>>163
SendKeys("^F")でなくて、SendKeys("%ef")だとどう?
167166:04/12/13 18:47:35 ID:E1nEN/CS
連投スマン。SendKeys("^f")でも通るね。
168名無し~3.EXE:04/12/13 19:22:52 ID:00DynMB0
>>167
WShell.Sendkeys("^f");
WScript.Sleep(1000);
WShell.Sendkeys("word~");
でいけました。日本語を扱うにはクリップボードを経由しなければいけないようですが、
とりあえず解決しそうです。ありがとうございました。
169名無し~3.EXE:04/12/14 07:07:11 ID:YgPxwzeF
>>168
AutoItX
170名無し~3.EXE:04/12/14 20:12:12 ID:XXufsZcY
自作アプリにsendkeysを使わないで
apl.textbox1.value="test"
のようにに確実に値を入れられないでしょうか
171名無し~3.EXE:04/12/14 20:42:31 ID:FPQad6lP
>>170
(1)自作アプリにCOM実装
(2)自作アプリのインターフェースをWebアプリ化、またはOfficeアプリ化
(3)DynaCall + Win32APIでがんがる
(4)ロケットマウスに送金

#UWSCでもいけるんだっけ?
172名無し~3.EXE:04/12/14 20:48:31 ID:UZBpd6MR
>>171
ありがとうございました。微妙に難しいのでこれからいろいろ調べてみます
173164:04/12/16 16:07:26 ID:npRIAzd4
'*********************************
Option Explicit
Dim objWSH , key
Set objWSH = WScript.CreateObject("WScript.Shell")
'現在の設定↓
key = objWSH.RegRead("HKCU\Software\Microsoft\Internet Explorer\Styles\Use My Stylesheet")
'設定のオンオフで切り替え↓
If key = 0 Then
objWSH.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Styles\Use My Stylesheet" , 1 , "REG_DWORD"
Wscript.Echo "ユーザースタイルシートを適用"
Else
objWSH.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Styles\Use My Stylesheet" , 0 , "REG_DWORD"
Wscript.Echo "ユーザースタイルシートを無効化"
End If
'*********************************
VBSです。これを実行すると、
インターネットオプション>ユーザー補助>ユーザースタイルシート
のチェックボックスのオンオフは切り替わるのですが、その結果は適用されません。
結果を読み込むにはどうしたらばよいでしょうか?
174164:04/12/16 16:16:16 ID:npRIAzd4
objWSH.SendKeys "%t"
Wscript.Sleep 100
objWSH.SendKeys "o"
Do Until objWSH.AppActivate("インターネット オプション")
Wscript.Sleep 100
Loop
Wscript.Sleep 100
objWSH.SendKeys "~"
Set objWSH = nothing
'*********************************

今は>>173の後ろにこれをつけて使ってます。>>173でレジストリに書き込んだ情報を
InternetExplorerに再読み込みさせればよいようですが、
その方法が分かりません。お願いします。
175名無し~3.EXE:04/12/17 00:21:59 ID:IYGWp/eL
バッチファイルからWSHへ
ttp://www.h5.dion.ne.jp/~quick100/wsh/index.html

入門にはいいんじゃないかな。
176名無し~3.EXE:04/12/17 15:05:25 ID:0mYTCxjN
ファイル名を受け取ったら
その拡張子部分(ドット以下3文字〜4文字)を書き換えるvbサンプルください。
(ファイル変換でなく名前の変更機能だけでOK)

具体的には、SendToフォルダに置いて

 送る. ─┬─ (*.zip)→(*.wsz)
       ├─ (*.txt)→(*.vbs)
       ├─ (*.txt)→(*.html)

こんな感じで使いたいので
必要に応じて手前で簡単に増やしていきたいので
特定の拡張子から特定の拡張子へ名前を変えるやつお願いします。
177名無し~3.EXE:04/12/17 16:01:46 ID:uPjR+w4d
> サンプルください

いきなりこれだもんな
178名無し~3.EXE:04/12/17 16:11:13 ID:Na0xt4BX
>>176
自分が試した例を書いておけば
答えてもらいやすくなりますよ
179名無し~3.EXE:04/12/17 17:25:40 ID:+GyG7n2j
シェルに任せてファイルを実行させるにはどうすればよいでしょうか?
(ex: *.txtの場合、メモ帳で開く)
180名無し~3.EXE:04/12/17 17:53:14 ID:xZ9u4pUj
>>176
VBSを書かなくてもプログラムへのパスが"Command /c ren *.zip. *.wsz"のようになっているショートカットをSendToに必要な数だけ置けばいいだけじゃないか?
181名無し~3.EXE:04/12/17 18:07:16 ID:l4Hbaic9
バッチが書けるなら >>175 が参考になるけど……。

バッチすら書けないとなると……('A`)
182名無し~3.EXE:04/12/17 18:26:17 ID:0mYTCxjN
>>181
Σハッ!図星・・・ 適当にネットをさまよって来ますわ
183名無し~3.EXE:04/12/17 19:19:39 ID:E3RuCigl
>>182
いや、帰って来なよ。
184名無し~3.EXE:04/12/17 22:33:21 ID:BgwIHjnG
>>179
WshShellオブジェクトのRunメソッドにファイル名を渡せばいい。

var WShell = WScript.CreateObject("Wscript.Shell");
WShell.Run( "c:\\hoge.txt" );
185名無し~3.EXE:04/12/17 23:39:22 ID:E3RuCigl
>>176
Option Explicit
Dim objArgs , objFS , objFile
Set objArgs = WScript.Arguments
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile(objArgs(0))
'検索置換関数
Function RegReplace(targetstring, pattern, replacestring)
Dim regEx
dim retVal
Set regEx = New RegExp
regEx.Pattern = pattern
regEx.IgnoreCase = True
regEx.Global = true
retVal = regEx.Test(targetstring)
If retVal then
RegReplace = regEx.Replace(targetstring , replacestring)
End If
End Function
'↓この行を増やせば何種類でも対応↓
objFile.Name = RegReplace(objFile.Name , "\.hoge$" , ".hage")
objFile.Name = RegReplace(objFile.Name , "\.hage$" , ".hige")
186名無し~3.EXE:04/12/17 23:41:13 ID:E3RuCigl
>>185
.hogeを.hageに
.hageを.higeに変えてる。
187名無し~3.EXE:04/12/17 23:46:14 ID:E3RuCigl
>>185
すまん、これ実際やってみたら動かなかった。
188185:04/12/17 23:52:07 ID:E3RuCigl
Option Explicit
Dim objArgs , objFS , objFile
Set objArgs = WScript.Arguments
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile(objArgs(0))
'検索置換関数、検索結果のブール値を返す。
Function RegReplace(targetstring, pattern, replacestring)
Dim regEx
dim retVal
Set regEx = New RegExp
regEx.Pattern = pattern
regEx.IgnoreCase = True
regEx.Global = true
retVal = regEx.Test(targetstring)
If retVal then
RegReplace = regEx.Replace(targetstring , replacestring)
Else
RegReplace = targetstring
End If
End Function
'↓この行を増やせば何種類でも対応↓
If objFile.Name <> RegReplace(objFile.Name , "\.hoge$" , ".hage") Then
objFile.Name = RegReplace(objFile.Name , "\.hoge$" , ".hage")
Wscript.Quit
ElseIf objFile.Name <> RegReplace(objFile.Name , "\.hage$" , ".hige") Then
objFile.Name = RegReplace(objFile.Name , "\.hage$" , ".hige")
Wscript.Quit
End If
'多分完成。
189名無し~3.EXE:04/12/17 23:58:42 ID:+GyG7n2j
>>184
ありがとうございました(__)
190名無し~3.EXE:04/12/18 00:14:59 ID:/SozSipr
てすとむ
191名無し~3.EXE:04/12/18 00:53:29 ID:AbVkVawn
ここは親切なインターネットですね
192名無し~3.EXE:04/12/18 02:58:30 ID:0c3zK+bC
>>176 俺も書いてみた。複数ドロップ可。フォルダがあったらサブフォルダも含めて処理。
var fso = new ActiveXObject("Scripting.FileSystemObject");
var Argu = WScript.Arguments; var i;
var extList = new Object();
extList["zip"] = "wsz";
extList["hoge"] = "fuga";
// ↑対応する拡張子を増やすにはここに書き足す
for ( i = 0; i < Argu.length; i++ ) {
getFiles( Argu.Item(i) );
}
function Replace( file ) {
var reg = /[^\\\.]*$/; var ext = file.match( reg );
if ( extList[ ext ] ) {
var f = fso.GetFile( file );
f.Name = f.Name.replace( reg, extList[ext] );
}
}
function getFiles( item ) {
if ( !fso.FolderExists( item ) ) {
Replace( item );
} else {
var fld = fso.GetFolder( item );
var fldColle = new Enumerator( fld.SubFolders );
for ( ; !fldColle.atEnd(); fldColle.moveNext() ) {
getFiles( fldColle.item().Path );
}
var fColle = new Enumerator( fld.files );
for ( ; !fColle.atEnd(); fColle.moveNext() ) {
Replace( fColle.item().Path );
}
}
}
193192:04/12/18 03:07:15 ID:0c3zK+bC
あー。
最初は全てのファイルを取得してから置き換えしてたので
getFiles関数はファイル名リストを返してたんだけど
ファイルを見つける度に置き換えするように変更したので
関数名が適当じゃないね。どうでも良いけど。
194185:04/12/18 08:25:19 ID:RkH3jJ0K
うん。負けた。
195名無し~3.EXE:04/12/18 11:05:30 ID:/P689hmG
閲覧してるページのソースを取得する方法はありませんか?
よろしくおねがいします。
196名無し~3.EXE:04/12/18 11:30:45 ID:RkH3jJ0K
>>195
InternetExplorer.Applicationでぐぐるとわさわさ。
197名無し~3.EXE:04/12/18 12:00:49 ID:RkH3jJ0K
>>196
でてこなかった。っていうか、当該ページをダウンロードしろということだよな。
つまり。
IEも”Ctrl+s”で保存できたような気がするけど。
198名無し~3.EXE:04/12/18 12:09:30 ID:/P689hmG
>>195
情報thx
自動化したいんで「Ctrl+s」では保存ダイアログ出るしちょいキツイな
199名無し~3.EXE:04/12/18 12:14:49 ID:Co12RwN/
フリーのツールで充分できるレベルじゃないのか?
200名無し~3.EXE:04/12/18 12:32:07 ID:mOyx6Y+h
>>195
samurizeのweb情報取得して表示する系のスクリプト見るのが早いと思う。
(天気表示とかのスクリプトとか)
アレはソースとってきて必要な情報抜き出してテキスト化してるものだから。
201名無し~3.EXE:04/12/18 15:13:34 ID:0c3zK+bC
>>198 本当にソースだけで画像等は保存できないし、ファイル2つになるけど。
IEMenuExtあたりでsaveHtml.htmlをieの右クリックメニューに登録。

// saveHtml.html
<script language="JavaScript">
var script = "c:\\saveHtml.js"; // 適当に書き換える
var url = new String( external.menuArguments.document.URL );
var Shell = new ActiveXObject( "WScript.Shell" );
Shell.Exec( "cscript.exe" + " " + script + " " + url );
</script>

// saveHtml.js
var adSaveCreateOverWrite = 2;
var directly = "c:\\htmldoc\\"; // 適当に書き換える
var url = WScript.Arguments.Item(0);
var fileName = (
directly +
url.replace( /\//g, "/" ).replace( /\:/g, ":").replace( /\?/g, "?" )
// .replace( /\\/g, "¥" ).replace( /\|/g, "¥" ).replace( /\*/g, "*" )
// .replace( /\</g, "<" ).replace( /\>/g, ">" )
);
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
var adoStream = new ActiveXObject( "ADODB.Stream" );
xmlhttp.Open( "GET", url , false );
xmlhttp.Send();
adoStream.Type = 1;
adoStream.Open();
adoStream.Write( xmlhttp.ResponseBody );
adoStream.SaveToFile( fileName, adSaveCreateOverWrite );
adoStream.Close();
202名無し~3.EXE:04/12/18 18:53:14 ID:grX5g94f
すいません。自分も教えて君で申し訳ないのですが、
HTTPの事が良く判らないので調べたりしてみました。
RFC文書の説明サイトでリクエストを書き換えれば色々出来る事を知りましたが
激しく意味不明になりました(鬱

xml:httpでソースを保存する際に
更新していない条件を満たさないので
304ステータスを返して終わりとさせたいので
304ステータスを返すようなheaderを付記したいのですが
うまくいきません。

経験豊富な方に条件付や部分的GETのリクエストの
書き方サンプルをxml:httpのGETの前に付記して頂けたら幸いです。
203202:04/12/18 19:04:36 ID:grX5g94f
該当すると思うのが適当で無いのですいません
書式も書いてあるのですが、なんか
微妙にxml:httpの書き方とずれてる様で
お手上げでした(泣)

STUDY:http ttp://www.studyinghttp.net/
---以下説明文---
リクエストメッセージにIf-Modified-Since , If-Unmodified-Since ,
If-Match , If-None-Match , If-Rangeのいずれかのヘッダフィールドを
含んでいる場合、GETメソッドのセマンティクスは条件付きGETに変わる。
条件付きGETメソッドは、エンティティがその条件付きヘッダフィールド
によって表される状況下でのみ転送されるようにリクエストする。条件
付きGETメソッドは、キャッシュされるエンティティに複数のリクエスト
を要求する事や、クライアントによってすでに保持されているデータを
転送する事無く清新できるようにする事で、不必要なネットワークの使
用を減らそうというものである。
リクエストヘッダにIf-Modified-Since等の時間指定ヘッダを加える事で、
GETは条件付きGETになります。条件付きGETは、キャッシュを上手に活用
する事で、不必要なネットワークの使用を減らす狙いがあります。
リクエストメッセージにRangeヘッダフィールドを含んでいる場合、GET
メソッドのセマンティクスは "部分的GET " に変わる。部分的GETは、
section 14.35で示されるように、転送されるエンティティの一部のみを
要求する。部分的GETメソッドは、クライアントによって既に保持されて
いるデータを転送する事無くエンティティを部分的に取得させて、完全
なものにできるようにする事で、不必要なネットワークの使用を減らそ
うというものである。
リクエストヘッダにRangeという範囲指定ヘッダを加える事で、GETは部
分的GETになります。部分的GETは、クライアントが既に所有している部
分の転送をやめる事で、不必要なネットワークの使用を減らす狙いがあ
ります。
204名無し~3.EXE:04/12/18 19:40:13 ID:Fab/ZHxh
>>202
open した後で setRequestHeader(ヘッダ名, 内容)
send した後、status でステータスコードを確認。

If-Modified-Sinceは
Sat, 18 Dec 2004 10:30:20 GMT
という形式だが、これに関してはこのスレで出てた。

ちなみにIf-Modified-Sinceなどを設定したからって必ずしも最新確認される訳じゃないぞ。
サーバの設定次第。
205202:04/12/18 19:42:47 ID:grX5g94f
204>ありがとうです。試してみます。
206名無し~3.EXE:04/12/18 20:36:43 ID:0c3zK+bC
>>1のソースアップ板消えてるんだけど、
誰かうpされてたサンプルとか保存してる?
207名無し~3.EXE:04/12/19 07:14:17 ID:df5WbkXO
そういえば移動するといっていた。
どこへ行ったんだか。
208名無し~3.EXE:04/12/21 00:32:45 ID:eAY9ftjc
jsだけでプログレスバーオブジェクト作ってみた。
利用サンプルも入れて150行ぐらいなので書き込めない。

個人サイトを利用して申し訳ないが、
>>18 Windows Scripting Host Laboratory ttp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
にあるWikiのアップローダにUpさせてもらった。probar.zip 1.9KB。

自分のPCでしかチェックできなかったので
他の環境でも動くかチェック希望。
209名無し~3.EXE:04/12/21 00:53:43 ID:e51pDPiA
>>208
試してみた。WinXPSP2のノートPC。

起動しない? と思ったら激しく左上に埋まってた。
既定のデスクトップが何故か2つあって、取得ループが2回回って2回目でdeskTopWidth/Heightにnullが入ってるのが原因だった。
ループの最後に
if (deskTopWidth != null) break;
を追加すれば解決。

起動が遅いのはWMIとIE使う以上仕方ないかな。

後は問題なかった。
210名無し~3.EXE:04/12/21 13:21:39 ID:iIkEh9O+
BASP21とかを使ったスクリプトを、それがインストールされてない環境で
使う方法とかありますか? 
211名無し~3.EXE:04/12/21 17:45:46 ID:xBAdymTs
>>208
Win2KSP4で試してみた。
>>209の修正を適用してもしなくても動いた。

どうせIE使うんだからIE.document.parentWindow.screen.[Width||Height]でスクリーンサイズを取得したほうがお得だと思う。
212208:04/12/21 21:59:38 ID:bmHBIWhb
>>209, >>211
動作チェックありー。

WMI使うと重いよね。
でもまぁプログレスバー自体はWMI使ってないので。

> どうせIE使うんだからIE.document.parentWindow.screen.[Width||Height]でスクリーンサイズを取得したほうがお得だと思う。
parentWindow == デスクトップなんだ。気がつかなかった。
プログレスバー側でデフォの表示位置を画面中央にした方が良いかな。

最初、FullScreen = trueしてウィンドウサイズを取得してたんだけど
起動時に余分な描画があるので止めたのよね。
213名無し~3.EXE:04/12/24 15:39:23 ID:7N6asuPm
Part2のレス番325〜327(登録しておいたアプリケーションを強制終了させる)
スクリプトをお持ちでしたら、どなたか上げていただけないでしょうか

あとWMIをJavascriptで使いたいのですが、参考になるページはないのでしょうか
VBSで書かれた解説ページなどはたくさんあるのですが・・・
214名無し~3.EXE:04/12/26 23:34:45 ID:vdoZ3cqY
>>213
当該スクリプトじゃないけど、wmiを使ってプロセスを殺すのはこんな感じ。

var prc = GetObject("winmgmts:{impersonationLevel=impersonate}")
.ExecQuery("SELECT * FROM Win32_Process");

for ( var e = new Enumerator(prc); !e.atEnd(); e.moveNext() ) {
var pf = e.item();
if ( pf.Caption == "explorer.exe" ) {
pf.Terminate();
}
}

wmiの解説は、最終的にはMSDNになるんじゃない?
215名無し~3.EXE:04/12/27 09:22:06 ID:0QPNJLT2
お答え有難うございます。頂いたスクリプトは無事に動きました。
MSDNのWMIの解説・TipsもVBSCRIPTで書かれているものばかりなので、
やっぱりVBSCRIPTをかじるしか無いようです・・・
216名無し~3.EXE:04/12/28 19:42:03 ID:MtqZe32k
現在開いているIEのウィンドウのURLを取得するにはどのようにすればいいのでしょうか?
217名無し~3.EXE:04/12/29 00:20:48 ID:GCAy0B7Z
>>216
タブブラウザなんかだと無理だけど。

var objWins = new ActiveXObject("Shell.Application").Windows();
for ( var i = 0; i < objWins.Count; i++ ) {
var ie = objWins.Item(i);
if ( ie.FullName.match( /\\iexplore\.exe$/i ) ) {
WScript.Echo( ie.LocationName + " : " + ie.LocationURL );
}
}
218712:04/12/29 00:49:27 ID:Y+nWSpvN
Dim IEApp
For Each IEApp In CreateObject("Shell.Application").Windows()
WScript.Echo IEApp.LocationURL
Next

ちゃんとやるなら>>217さん同様
Dim IEApp
For Each IEApp In CreateObject("Shell.Application").Windows()
If IEApp.FullName.match "iexplore.exe" Then
WScript.Echo IEApp.LocationURL
End If
Next
219218:04/12/29 00:53:41 ID:Y+nWSpvN
712じゃないってばorz

Dim IEApp
For Each IEApp In CreateObject("Shell.Application").Windows()
If IEApp.FullName.match "iexplore.exe" Then
WScript.Echo IEApp.LocationURL
End If
Next

VBScriptにmatchはないですよね…直してる最中のを書き込んでしまいました。吊ってきますorz
220218:04/12/29 00:54:51 ID:Y+nWSpvN
また間違えてるし…今度こそ

Dim IEApp
For Each IEApp In CreateObject("Shell.Application").Windows()
If Instr(IEApp.FullName, "iexplore.exe") <> 0 Then
WScript.Echo IEApp.LocationURL
End If
Next

無線LANで首吊ってきます………
221名無し~3.EXE:04/12/29 06:35:16 ID:Gxtisgl9
RegReadで読み出す値がないことを事前または事後に検出することは出来ますか?
普通に書くと値がない場合に終了してしまいます。
222名無し~3.EXE:04/12/29 15:51:53 ID:GCAy0B7Z
>>221
JSならtry...catch、VBSならOn Errorかな?
223名無し~3.EXE:04/12/29 17:14:45 ID:hDjqVvfg
>>217-220
thxです。劇的に環境が良くなりました。
こういう手法はどこで調べればいいんでしょうか?
224名無し~3.EXE:04/12/31 16:08:43 ID:SETIb6S+
<package>
<job id="DoneInRS">
<script language="VBScript">

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "tekitou.txt"

</script>
</job>
</package>

.wsfで保存して、スクリプトファイルに、適当なファイルをD&Dしてみると
指定されたファイルが見つかりません となるのは、自分だけでしょうか。
理由もわかりません。

スクリプトファイルを普通にクリックすれば、メモ帳でファイルが開きます。
>>73のようなことがしたいのですが
225名無し~3.EXE:04/12/31 16:15:57 ID:SETIb6S+
D&Dしても、tekitou.txtが開くはずと思うんですが。。。
226名無し~3.EXE:04/12/31 16:26:49 ID:WpxUa7CX
>>224
カレントディレクトリはドロップしたファイル側になるよ。
227名無し~3.EXE:04/12/31 17:42:18 ID:Ax3C6fu4
>>226
スクリプトと、tekitou.txtと、ドロップしたファイルは
同一ディレクトリにあります。
228名無し~3.EXE:04/12/31 18:02:10 ID:WpxUa7CX
あう、勘違い。
D&Dしたときはカレントディレクトリはユーザディレクトリ(XPだとc:\Documents and Settings\ユーザ名)になるね。

ま、カレントディレクトリ依存なコードは書かない方が良い。
スクリプトファイルの位置はWScript.ScriptFullNameで。

で、>73とは関係無くないか。
229名無し~3.EXE:04/12/31 18:44:39 ID:Eeai0cDU
>>73では、こうしろということだと思ったのですが、同じエラーが出ます
224は、原因箇所をしぼりました。

<package>
<job id="DoneInRS">
<script language="VBScript">

Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
WScript.Echo objArgs(I)
shell.Run objArgs(I)
Next

</script>
</job>
</package>

D&Dしたときはカレントディレクトリはユーザディレクトリという情報は
どこで得られるのでしょうか
230名無し~3.EXE:04/12/31 23:05:53 ID:vLSeARIN
>>229
パスに空白文字が含まれているのが問題。
shell.Runに渡す際 "で囲む。

Dim shell
set shell = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
WScript.Echo objArgs(I)
shell.Run """" & objArgs(I) & """"
Next
231名無し~3.EXE:04/12/31 23:18:52 ID:vLSeARIN
>>223
googleとmsdn。
(wsh |vbs|jscript|javascript) ie (実行中|起動中) 操作
こんな感じでやれば
"Shell.Application"を使うことがわかるから、
今度はこれを検索したり、msdnで調べたりする。

途中、直接関係なくても面白そうな情報を見つけたらメモしておく。
「確かこれは情報があったな」と思い出せるだけで検索しやすくなるから。
232名無し~3.EXE:04/12/31 23:45:43 ID:B5zK8zpP
>>230
ありがとうございました。
"""" なんて・・・

よいお年を
233名無し~3.EXE:05/01/01 00:15:59 ID:bm5HRtDR
あけましておめでとうございます。

今年最初の質問で恐縮ですが、自分のIPアドレスが分かる方法はないでしょうか?
よろしくお願いします。
234名無し~3.EXE:05/01/01 00:24:21 ID:sM0xIt01
それがグローバルなIPだと言うのなら、統一的な手法としては外部に問い合わせるしかないと思う。
235名無し~3.EXE:05/01/01 00:53:35 ID:CV+PUdGb
確認君
診断君
236名無し~3.EXE:05/01/02 10:10:51 ID:4gHdFaJ7
いちど>>235にあくせすしてそーすを見てどのえれめんとにIPが入っているかをはあくしておく。
それで、いんた〜ねっとえくすぷろ〜らおぶじぇくとをつくって、>>235のURIになびげーとしてやる。
しゅとくしたどきゅめんとおぶじぇくとのえれめんとの中のてきすとをしゅとくして、
ぽっぷあっぷさせたり、てきすとを吐かせたりしてしゅつりょくしてあげるといいよ。
あいいーのうぃんどぅはみえないままでもだいじょうぶだよ。
237名無し~3.EXE:05/01/02 15:08:45 ID:3JDlLmnf
一度>>235にアクセスしてソースを見て、
どのエレメントにIPが入っているかを把握しておく。
それで、インターネットエクスプローラオブジェクトを作って、
>>235のURIにナビゲートしてやる。
取得したドキュメントオブジェクトのエレメントの中のテキストを取得して、
ポップアップさせたり、テキストを吐かせたりして出力してあげるといいよ。
IEのウィンドゥは見えないままでも大丈夫だよ。
238名無し~3.EXE:05/01/04 05:29:24 ID:i+6wB7Ob
クリップボード中の画像をBMPとして保存したいのですが、どうもうまくいきません
このスレのPart1の最初の頃にあったCreateTextFileを参考に、BitmapFileと
書き換えたら、あっさり怒られました。
239238:05/01/04 05:35:21 ID:i+6wB7Ob
すみません、書き忘れました
VBSをちょっとかじっただけで、Jなんとかは全然分かりません
240名無し~3.EXE:05/01/04 07:02:50 ID:KiEG6yIf
>>238
>>19で紹介されている Doodle2 を使うと楽。
Doodle2にサンプルがついているので必要ない気もするけど、
以下、クリップボードからロードしてファイルに保存する部分だけ抜き出し。

Dim doodle, ret, filename
Set doodle = CreateObject( "Doodle2.MyCanvas" )
filename = ".\out.bmp"

ret = doodle.LoadFromClipBoard()
If ret = 0 Then
WScript.Echo "クリップボードからのロード成功"
ElseIf ret = -1 Then
WScript.Echo "クリップボードに画像がない"
End If

ret = doodle.SaveToFile( filename )
If ret = 0 Then
WScript.Echo "ファイルへの保存成功"
ElseIf ret = -1 Then
WScript.Echo "キャンバスが空"
ElseIf ret = -2 Then
WScript.Echo "ファイル名の拡張子が対象以外"
End If
241238:05/01/04 22:16:02 ID:PMneG5Oe
>>240
ありがとうございます
はじめ上記のコードだけ丸写ししたら怒られまして
特注Dllファイルが必要だったんですね。
Doodle入れて試したら成功しました。
ただ、パソコンのスペック不足のせいか、何か全体に動きが鈍くなりますね
(メモリ、足そっかな・・・)

242名無し~3.EXE:05/01/07 00:04:34 ID:3kEucsVO
ところで、JScript より VBScript のほうが速いんでしょうか? 実行速度。
243名無し~3.EXE:05/01/07 00:38:26 ID:Yyr6633H
>>242
場合による。
VBでごちゃごちゃ書いた部分がJだと関数一つですむこともあるし、
逆もある。
ごちゃごちゃやっているほうが当然遅い。
244名無し~3.EXE:05/01/07 14:20:07 ID:X5G57gM4
>>242
エラトステネスのふるいで1,000,000以下の素数を求めてみた。
対象はJScript、VBScript、Perl、C++。

c:\>timeit cscript c:\bench.js
Elapsed Time: 0:01:01.538
Process Time: 0:00:56.341

c:\>timeit cscript c:\bench.vbs
Elapsed Time: 0:00:17.865
Process Time: 0:00:14.851

c:\>timeit perl c:\bench2.pl
Elapsed Time: 0:00:11.186
Process Time: 0:00:09.083

c:\>timeit c:\bench.exe
Elapsed Time: 0:00:00.530
Process Time: 0:00:00.410

JScript好きとしては悲しい結果。配列操作やループが遅いんかな。
普段のスクリプトではactiveXオブジェクトの操作や
入出力時間の方が長いから気にしないけど。
245名無し~3.EXE:05/01/08 01:02:19 ID:s4NQpU88
C >> Perl > VBS >> js なわけか。
これはちょっとショッキングだなあ。
まさかVBSとjsで4倍も差が出るとは。
246名無し~3.EXE:05/01/08 01:27:59 ID:CCBYrvS9
JScriptは配列もオブジェクトだから、そのせいが大きいだろうね。
しかしそのままで連想配列も(キーも文字列に限らず)利用可能なわけで。
利便性と速度のトレードオフと言ったところかな。
247名無し~3.EXE:05/01/09 11:01:07 ID:jwYgyftX
「速さはオブジェクトの数による」がふぁいなるあんさー?
248名無し~3.EXE:05/01/09 12:43:54 ID:2T6BULOU
>245 >224での4倍の差はかなり極端な場合でした。

>224と同じ素数を求めるスクリプトの最大値を変えてやってみた。
vbsの方が速いことに変わりはないんだけど、10,000まではたいした差はない。
jsは10万と100万とでタイムが20倍以上になってるのが気になる。vbsはほぼ10倍。

ちなみに各タイムはプロセスタイムで、数回走らせて一番速かったヤツ。

____________JScript_______VBScript____
100________0:00:00.140____0:00:00.130

1,000______0:00:00.150____0:00:00.140

10,000_____0:00:00.350____0:00:00.240

100,000____0:00:02.934____0:00:01.502

1,000,000__0:00:49.851____0:00:14.971
249名無し~3.EXE:05/01/09 12:44:40 ID:2T6BULOU
ループと加算の速度を比較。

空のforループを100万回
vbs
Process Time: 0:00:00.781
js
Process Time: 0:00:01.562

n=10+10 を10万回
vbs
Process Time: 0:00:01.121
js
Process Time: 0:00:01.131

n=n+1 を100万回
vbs
Process Time: 0:00:10.775
js(n=n+1)
Process Time: 0:00:11.927
js(n++)
Process Time: 0:00:06.118

ieオブジェクトを50個作ってみた。ポイントはElapsed Time。
オブジェクトを作ったりといった部分が時間がかかるので
結果としてどちらもほぼ同タイム。

vbs
Elapsed Time: 0:00:11.216
Process Time: 0:00:00.630
js
Elapsed Time: 0:00:11.226
Process Time: 0:00:00.560
250名無し~3.EXE:05/01/09 12:50:08 ID:2T6BULOU
こうしてみるとvbsの方が速いのは間違いないけど、
極端に多いループ処理が無ければvbsとjsにそれほど差はない。
また、普段のスクリプトではほぼ100%comオブジェクトを作り、
その部分に時間がかかるので両者の速度差は気にならなくなる。

よって、>>247の通りかな。
251名無し~3.EXE:05/01/12 17:42:32 ID:HH8JivOG
テープドライブにメディアが挿入されているかどうか検出したいのですが
何かうまい方法はないものでしょうか?
252名無し~3.EXE:05/01/12 19:06:26 ID:wddn5/Pb
DriveExists メソッドはどうだろう?
253名無し~3.EXE:05/01/12 19:12:21 ID:yNQGV2JX
>DriveExists メソッド
>
>リムーバブル メディアのドライブの場合は、メディアがセットされていなくても真 (true) が返されます。
>ドライブの準備ができているかどうかを調べるには、Drive オブジェクトの IsReady プロパティを使用してください。

だそうだけど。
254名無し~3.EXE:05/01/12 19:26:32 ID:YOpjzqA+
255名無し~3.EXE:05/01/12 19:32:46 ID:wddn5/Pb
リムーバルじゃなきゃ使えた。

Function ReportDriveStatus(drv)
Dim fso, msg
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.DriveExists(drv) Then
msg = ("ドライブ " & UCase(drv) & " は、存在します。")
Else
msg = ("ドライブ " & UCase(drv) & " は、存在しません。")
End If
ReportDriveStatus = msg
End Function
256名無し~3.EXE:05/01/13 12:26:51 ID:9U3gM5tU
テープの場合どうなんだろう…ランダムアクセス可能な「ディスクドライブ」には
見えてないしドライブレターも割り当てられないよね?

…あとで職場のサーバでやってみよう。
257名無し~3.EXE:05/01/13 12:40:40 ID:cpeR4uxp
っていうか、俺はテープメディアと言うものを見たことがないよ。
便利なのかね?
258名無し~3.EXE:05/01/13 12:45:51 ID:N9o8UCtI
>>256
RSMが提供しているAPIを直接叩かないとダメっぽい
259名無し~3.EXE:05/01/13 13:12:52 ID:Bci+f7vx
>>251 >>256
WMIに Win32_TapeDrive ってのがある。
driveオブジェクトのIsRedyみたいなのはなさそうだけど
メディアが入っていなければnullや0を返すプロパティをチェックするってのでどう?
260名無し~3.EXE:05/01/13 16:14:30 ID:N9o8UCtI
ttp://www.wbem.dk/Root/WMI/MSTapeDriveParam.asp
このスクリプトでテープデバイスの情報は得られるらしいけど
MSTapeDriveParam
なんてウチの環境には無いぞ?
261名無し~3.EXE:05/01/13 16:19:39 ID:z5vpbuxz
>>251
貴社のバックアップツール(ARCServeとかBackupExecとか)に
マウント状況表示するコマンドってない? なかったらスマソ。

# サーバを直接触れない条件下の場合
# 普通は管理用端末にリモート操作できるツール入れるんちゃうんかと
262前スレ11:05/01/13 23:24:46 ID:F4mN6Btq
>>208
Wikiの管理者です。
管理不行き届きで、probar.zipが削除されてしまいました。
申し訳ありませんが、もう一度アップロードをお願いいただけますでしょうか。

管理者以外はファイルを削除されないようにしましたので(今更で申し訳ないのですが…)、
他の方も是非ご利用ください。
http://winscript.s41.xrea.com/wiki/index.php
263名無し~3.EXE:05/01/14 14:14:54 ID:AbofZvgR
>>262
264名無し~3.EXE:05/01/14 16:12:24 ID:xNY9tpGh
>>70を参考にしてサイトから文字列を取り出して検索するスクリプトを作っているのですが、MsgBoxでは表示できても
Instrを使おうとするとどうしてもエラーが出てしまいます。この回避方法があったら教えてください。

Dim ie,ss,sss
Set ie = WScript.CreateObject("InternetExplorer.Application")
Set WSHShell = WScript.CreateObject("WScript.Shell")

ie.Navigate("hoge.htm")
Do While ie.Busy
WScript.Sleep 100
Loop

sss="hogehoge"
ss=ie.document.body.innertext
s = instr(ss,sss,1)     ここでエラー
以下略

別件ですが、VBSってヘルプには正規表現検索時のMatches.valueとか書いてるけど使えないんですね。
Countとかヘルプに書いてないのは使えるのに・・・
265名無し~3.EXE:05/01/14 16:50:39 ID:w78upObX
>>264
>InStr 関数
>  引数
>    start
>      省略可能です。
...
>      引数 compare を指定した場合は、引数 start も必ず指定します。



> 別件ですが、VBSってヘルプには正規表現検索時のMatches.valueとか書いてるけど使えないんですね。
> Countとかヘルプに書いてないのは使えるのに・・・

Matches.Valueなんてあったっけ?
それぞれのアイテム(Matchオブジェクト)のValueプロパティはあるけど。
266名無し~3.EXE:05/01/14 16:51:38 ID:XSIVHfa7
引数 compare を指定した場合は、引数 start も必ず指定します。
…とヘルプに書いてありますので、(頭から検索するなら)
s = instr(1,ss,sss,1)
ですね。

ところで、CreateObject("MSXML2.XMLHTTP")を使ってhtmlソースを取得したい場合に、
取得できるページと取得できない(MsgBoxで表示すると文字化けしている)ページとが
あるようですが、これの原因や回避方法などありましたら教えて下さい。
例えばinfoseekのトップは取得できますが、Exciteは化けてしまいます。
前スレ57に
>…それより、XMLHTTPが日本語テキストのレスポンスをまともに
>デコードしてくれないという問題があることを忘れてた(w
とさらりとは書いてあるのですが…
267名無し~3.EXE:05/01/14 17:58:56 ID:w78upObX
>>266
結局
> >…それより、XMLHTTPが日本語テキストのレスポンスをまともに
> >デコードしてくれないという問題があることを忘れてた(w
に尽きる。

ResponseBodyをBASP21辺りで妥当なコードに変換するとか。
268名無し~3.EXE:05/01/14 18:05:38 ID:9T4dULKO
それって別に問題じゃないだろ。
ドキュメントにもそう書いてあるんだし。
269名無し~3.EXE:05/01/14 22:04:18 ID:9FAifjvD
>>262 ちょっと手直ししたヤツをアップし直しました。

>>266
たしか、ResponseBodyはUTF-16BEになってると思う。

>>262のwikiのアップローダに「exciteで翻訳HAT.zip」ってのをUpしたんだけど
このスクリプトの中でADODB.Streamを使って文字コードを変換してるので
良ければご参考に。
270名無し~3.EXE:05/01/15 01:42:23 ID:h2gdifI1
>>269
redyというプロパティ名は直した方がいいかと。
271名無し~3.EXE:05/01/15 01:45:20 ID:3eyFGLkj
>>270
むひょー〜!!はずかしぃー!
272名無し~3.EXE:05/01/22 21:46:52 ID:hThQwzqI
保守。
273名無し~3.EXE:05/01/22 21:57:58 ID:Ys8bO+Tn
うしゅふ
274名無し~3.EXE:05/01/24 02:59:22 ID:sYqD/+Vg
Option Explicit
Dim objWSH , objArgs , min
Set objWSH = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
min = InputBox("何分後?", "終了までの時間",60)
min = min*60*1000
Else
min = objArgs(0)
min = min*60*1000
End If
Wscript.Sleep min
objWSH.Run "Shutdown -s -t 5"

'クラフトランチでつかってる。引数で何分後に終了するかを与えられる。
'そうでないときはインプットボックスが出る。
275名無し~3.EXE:05/01/24 03:07:09 ID:sYqD/+Vg
Option Explicit
Dim objWSH , objArgs , min , strcmdline
Set objWSH = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
min = InputBox("何分後?", "終了までの時間",60)
min = min*60*1000
Else
min = objArgs(0)
min = min*60*1000
End If
strcmdline = """Shutdown -s -t" & " " & min & """"
objWSH.Run strcmdline

'「保守」とだけ書くのもどうかと思ったので貼ってみた次第。
'Sleepを使ってない分こっちの方がタイト……か? 
276名無し~3.EXE:05/01/24 03:09:06 ID:sYqD/+Vg
今、ふと気づいたのは。
Shutdownのコマンドを直接、Craftlaunchに登録しておけばいいじゃないかということ。






おやすみ。
277名無し~3.EXE:05/01/24 04:00:20 ID:sYqD/+Vg
'>>275じゃ動かなかったので。
'だんだん日記帳と化してきたな……。
'ついでに改変。引数にxを渡すと止まる。

Option Explicit
Dim objWSH , objArgs , min , strcmdline
Set objWSH = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
min = InputBox("何分後?", "終了までの時間",60)
ElseIf objArgs(0) = "x" Then
objWSH.Run "Shutdown -a"
Set objArgs = nothing
Set objWSH = nothing
Wscript.Quit
Else
min = objArgs(0)
End If
strcmdline = "Shutdown -s -t " & min*60
objWSH.Run strcmdline
Set objArgs = nothing
Set objWSH = nothing
Wscript.Quit
278名無し~3.EXE:05/01/31 23:08:32 ID:ypV+ULbT
ネットワーク接続でブリッジに追加したり外したりって、wshで実現できますか?
OpenVPNのTAPデバイスを使うときだけ有効→ブリッジに追加ってやりたいんですが…
279名無し~3.EXE:05/02/01 01:42:20 ID:zUjo5to/
>>278
↓にネットワーク有効無効切り替えスクリプトがあった。
ttp://ntweb.sc.niigata-u.ac.jp/~hisato/win/network.html

このスクリプトを弄ればブリッジ追加削除も出来そう。
280名無し~3.EXE:05/02/01 20:50:19 ID:WJ2F69zj
IMEのオンオフって、スクリプトじゃ無理ですか?
今はショートカットを割り当てててSendKeysしてるんですが。
281名無し~3.EXE:05/02/01 22:19:12 ID:f0qiABgM
愛と勇気と根性とDynaCallでWin32API::ImmSetOpenStatus()
するぐらいしかないんじゃ。
282名無し~3.EXE:05/02/01 22:30:06 ID:WJ2F69zj
>>281
どうも。がんばってみます。

愛と勇気だけがトモダチです。
283名無し~3.EXE:05/02/02 01:19:58 ID:LdBcigFL
いっそ.Netに逝ってみるとか
C#なら簡単そうだ
284名無し~3.EXE:05/02/02 01:24:43 ID:AGXq4EVx
IMEは.NETのライブラリからは操作できんよ。
285名無し~3.EXE:05/02/02 19:38:23 ID:Oa1GXnsg
あるいはIMEをオンオフしないで済むように見直すとか
286現物:05/02/02 20:30:10 ID:cf1lXF2e
Option Explicit
Dim objWSH
Set objWSH = CreateObject("WScript.Shell")'センドキーに使う
objWSH.SendKeys "^c"
objWSH.Run "C:\WINDOWS\ime\IMJP8_1\imjpdct.exe"
Do Until objWSH.AppActivate("単語/用例の登録")'起動するまで待機
WScript.Sleep 100'起動するまで待機
LOOP
objWSH.SendKeys "{TAB}"
WScript.Sleep 100
objWSH.SendKeys "^v"
WScript.Sleep 100
objWSH.SendKeys "+{TAB}"
WScript.Sleep 100
objWSH.SendKeys "{F4}"'IMEをOn(ユーザー設定ショートカットキー)
Set objWSH = nothing
287名無し~3.EXE:05/02/02 20:35:56 ID:cf1lXF2e
>>281
>>283
>>284
>>285
しかし、考えてみれば、ユーザー設定ショートカットキーで十分ですね。
色々とどうも。

TeraPadのツールとして引数に選択テキストのパラメータを取って
やってたんですが、>>247の実験でオブジェクトが増えるのは?らしいので
センドケーでがんばることにします。重ね重ね、どうも。
288名無し~3.EXE:05/02/04 03:11:28 ID:FP+Em+xV
IEの中で、鯖上のcsvファイルがexcel経由で開かれた後
それをローカルのデスクトップに保存したいんですが…
認証鯖を越えて、ファイルを表示させる所まで来たんですが、
ここからどうアクセスしたらいいものか知恵を貸して下さい。

excelをアンインストールしたら、保存ダイアログが開くだろうけど、
それは業務的に不可だし。
289名無し~3.EXE:05/02/04 03:48:36 ID:QFLvbO7P
>>288
開かれた「後」でないといけないのかな。
開かれる「前」に、そこのURLがわかっていれば


Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2

Set HTTP = WScript.CreateObject("Microsoft.XMLHTTP")
Set Stream = WScript.CreateObject("Adodb.Stream")

としておいて、

HTTP.Open "GET", csvUrl, False
HTTP.Send

Stream.Type = adTypeBinary
Stream.Open
Stream.Write HTTP.responseBody
Stream.SaveToFile sPath, adSaveCreateOverWrite
Stream.Close

てな感じでダウンロードしてしまえばいいと思うんだけど。

ん、今開いているファイルだったら今のURLはわかってるんだから
同じロジックでいけるか。URLを取ってくるのは>>217->>220あたりの
コードが使える。
290名無し~3.EXE:05/02/05 00:38:00 ID:4Eg31V1o
>>289
ヒントサンクスでした。

動的にcsvを生成するんですが、http://IP/dir/fileヘッダ+日付+セッションID.csv
みたいなのが、最初どうしてもDocumentURLとかでは取れませんでしたが、
結局ウェイトをかけて取れるようになりました。

さて、次はこのURLを>289のJS版を書けるどうかですが…
ちょっと参考になるところが出てこない…むぅ
もうちょっと調べないと…
291名無し~3.EXE:05/02/06 16:41:24 ID:/9E7+Jse
Win2k serverで単位時間当たりのネットワークI/Fの送受信パケット数を
取得するうんまい方法はないでしょうか…
M$のスクリプトセンターにはXP/2003用のサンプルスクリプトしか無いし。
292名無し~3.EXE:05/02/06 17:14:03 ID:QeCDdctf
>>291
Win32_PerfFormattedData_Tcpip_TCPの代わりにWin32_PerfRawData_Tcpip_TCPクラスを使えばいけるかも知れない。
293289:05/02/06 23:24:42 ID:Or1ExaiQ
>>290

単純にJScript化しただけですが

adTypeBinary = 1;
adSaveCreateOverWrite = 2;

var HTTP = WScript.CreateObject("Microsoft.XMLHTTP");
var Stream = WScript.CreateObject("Adodb.Stream");

HTTP.Open("GET", csvURL, 0);
HTTP.Send();

Stream.Type = adTypeBinary;
Stream.Open();
Stream.Write(HTTP.responseBody);
Stream.SaveToFile(sPath, adSaveCreateOverWrite);
Stream.Close();

sPathとcsvURLに適当な値を代入してチェックしてみましたが
とりあえず動作はしてます(Windows 2000 SP4)。
294名無し~3.EXE:05/02/07 21:18:40 ID:OTaSv/fq
>>293
おおっ、どうもありがとうございます!
このスレの1スレ目のログにもJS版があったのに後で気がついたりして、
過去ログ嫁よ俺!とか思いながら何とか完成いたしました。
295名無し~3.EXE:05/02/07 23:02:58 ID:4xXWSZam
IEを使わずにclipboardを扱う方法に心当たりのある人いる?
AutoItXも無しで。ちなみに↓がIEでclipboard使う方法。

Dim objIE, dummy, str
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
Do While objIE.Busy = True
WScript.Sleep 100
Loop
str = objIE.Document.parentWindow.clipboardData.getData("Text")
'クリップボードからデータを取得
dummy = objIE.Document.parentWindow.clipboardData.setData("Text","ほげ。")
'クリップボードへデータを送る。"ほげ。"に送る内容。
'dummyには結果のブール値がはいる。
objIE.Quit
296名無し~3.EXE:05/02/08 01:01:35 ID:wni6jRBP
>>295
perlならIE要らず。
297名無し~3.EXE:05/02/08 02:45:36 ID:goAah7b9
ExcelやWordつかってもいい?

だめならメモ帳にsendkey連発で・・・
298名無し~3.EXE:05/02/08 13:38:39 ID:+B/+AK+Q
>>296-297
どうもです。
WIN環境でならどこでも使えるスクリプトを書こうとするとき
perlでといとのはどうしても使える環境が限られてきますし、
Excel、Wordが使えるならばもちろんIEも使えるでしょうし…、
notepadだと2バイト文字が扱えません。

純粋にwshだけを用いて……というのは無さげですね。
299名無し~3.EXE:05/02/08 14:28:49 ID:8j2jRo0t
JScript.NET使え
300名無し~3.EXE:05/02/08 15:05:01 ID:UusJhEaJ
>>299
「WIN環境でならどこでも使えるスクリプト」
と言っているからまた文句を言われるよ。
助言するだけ無駄。
301名無し~3.EXE:05/02/08 17:15:35 ID:cQ2bqcAu
スレ違いだが、AutoHotkeyなら簡単に操作できるしコンパイルすりゃどこでも動くよ。
コンパイルしてもクリップボード処理程度なら200kb以下のサイズ。
302名無し~3.EXE:05/02/08 17:41:12 ID:aFrs5eAJ
コンパイラ又はコンパイラ済みファイルが必要だから、また(ry

WSHエンジンがあってIEがないなぞという超限定的状況に気を遣いたくないな。
clipboardDataを持つIHTMLWindow3をサポートするのがIE4.0からってことはWin98なら問題ないわけだし、
Win95にはWSHそのものがデフォルトでは入ってないようだし。
303名無し~3.EXE:05/02/08 17:47:11 ID:+B/+AK+Q
>>299
単純にクリップボード操作のみ行うものをスクリプトに添付する
という方法でできそうですね。

>>301
便利ですね、これ。
304295:05/02/08 17:54:34 ID:+B/+AK+Q
色々調べたんですが、

「VBA の機能で VBScript に含まれていない機能」
http://www.microsoft.com/japan/msdn/library/ja/script56/html/vsgrpNonFeatures.asp

とのことなので、まぁ、IE使う以外にはないんでしょーなー。
最近のメーカーPCのスペックを考えるとこの重さもそれほど気にしなくても
いいかと考え直したところです。お邪魔しました。
305名無し~3.EXE:05/02/08 18:46:36 ID:0dtNKMY+
ツマンネー('A`)オチ
306名無し~3.EXE:05/02/08 19:51:42 ID:g5brcH5Z
まあ何でこの質問がきたか知ってる俺としては
特におかしな質問だとは思わないが
307名無し~3.EXE:05/02/08 20:36:43 ID:BaQOSBU6
Samurizeとかの方面ですか
308名無し~3.EXE:05/02/08 20:43:54 ID:+B/+AK+Q
>>307
Sleipnirです。Sleipnirから、
IEのFavoritesフォルダにブックマークを入れるスクリプトを書いてまして。
結局、そのスクリプトではclipboardを使う必要は無かったんですがね。
他でもclipboardを使うことが多いものですから、ここでお尋ねした次第です。
309名無し~3.EXE:05/02/08 20:48:15 ID:aFrs5eAJ
Sleipnirのスクリプトなら新しくIEオブジェクト作るまでもなくwindow使えるじゃん……。
310名無し~3.EXE:05/02/08 21:06:09 ID:+B/+AK+Q
>>309
できました。説明書はよく読まなきゃいけませんな。

成果のほどはSleipnirスレにはっときます。
311名無し~3.EXE:05/02/08 21:13:20 ID:UusJhEaJ
>>310
なんだ、結局天然荒らしのプニル厨だったのか。
もう二度と来るなよ。
312名無し~3.EXE:05/02/08 21:22:14 ID:+B/+AK+Q
>>311
ありがとう。
このスレのお陰で幅が広がりそうです。
313名無し~3.EXE:05/02/09 20:07:49 ID:0Oupl2bq
>>296
プニルはともかく、Perlでクリップボードってどうやるの?
314名無し~3.EXE:05/02/09 20:16:24 ID:yjm9h304
315名無し~3.EXE:05/02/09 20:30:16 ID:Qkl6Yu3f
316名無し~3.EXE:05/02/11 05:28:27 ID:RFX2J+yu
よろしければ教えて下さい。Windows98です。

1. 52にもありますが、標準の?ファイル選択ダイアログを出すのにはどのオブジェクトを使うのでしょうか?
メモ帳などで「ファイル(F)->開く(O)」とすると出てくるやつですが・・・
53でのIEオブジェクトを使うと、そっくりなものが出てきますが、これってIEオブジェクトが標準?オブジェクトを呼び出してるのかな・・・?

2. いくつかの選択肢から選択するようなテキストボックスはどんなオブジェクトを使うのでしょうか?
例えばワードパッドでフォントを選択する時のようなものがやりたいのですが・・・できればIEコンポーネント以外で・・・

3. SendKeysがなぜか使えません。WScript.exeが古いせいかと思いますが、SendKeysはWscript.exeのどのバージョンから使えるようになったのでしょうか・・・?(私のはファイルバージョン5.0.531.7。日付98/06/12 20:01:02)
それとも何かコンポーネントが足りないのかな・・・?

エラーメッセージ↓
オブジェクトでサポートされていないプロパティまたはメソッドです。: 'WshShell.SendKeys'
317名無し~3.EXE:05/02/11 06:13:24 ID:DcySQrF1
VB6.0を買ってしまったほうが幸せになれそうに見えるな・・・
318名無し~3.EXE:05/02/11 07:52:42 ID:94b+maNK
或いは.NETか。
SDKだけなら無料だし。
スクリプトの主眼は操作の自動化であって、GUIは基本的に埒外。
SendKeysはWSH2.0からサポートされてる。
319名無し~3.EXE:05/02/11 08:07:09 ID:DcySQrF1
Win9xで.NETは無理だと思われ。
320名無し~3.EXE:05/02/11 08:16:00 ID:94b+maNK
あー、確かにSDKやVSは無理だな。

でもWin98なら実行環境はインストールできるし、実行環境にコンパイラもついてくるから、
スクリプト代わり程度ならなんとか。
321名無し~3.EXE:05/02/11 09:32:45 ID:y7RqPJCT
>>316
1. (標準で)そんなものはない。なんで面倒なIEオブジェクトから呼んでいるのかを考えるべし。
2. GUIは苦手。
3. ver 5.6 ダウソ汁。
322316:05/02/14 01:30:49 ID:iV2Gz2qP
どうもありがとうございます。

1. ないですか・・・
不思議なのは、Shell.ApplicationのBrowseForFolder()みたいなのが存在しているのに、ファイル選択するものがない、ということ。Shell.Application内にあってもよさそうな気がするんですが・・・

2. なにかWSHから使えるGUIのフリーライブラリで、便利なものとかはあるでしょうか・・・GUIはやめとけ、とのことですが・・・

3. 私のWSCRIPT.EXEは結局「WSH 1.0」と呼ばれるものらしいのですが、このような区分けと「ファイルバージョン」との対応はどこかに発表されているのでしょうか・・・?
5.6からは一致しているようですが・・・

WindowsXPのCDを持っているので(インストールしていませんが・・・)、WSCRIPT.EXEをEXPANDしたら、これが「5.6.0.6626」になっていました。
試しにこれを元のWSCRIPT.EXEに置き換えて実行してみたら、やっぱりSendKeysは同じエラーになりました。WSCRIPT.EXEだけではダメなようです。
WSCRIPT.EXE以外にはどんなファイルを置き換えるといいでしょうか・・・?
(ただ置き換えてもレジストリ修正しないとダメかとも思われ。おとなしく落として入れるか・・・)

ちなみにファイルバージョンは、
Win98 -> 5.0.531.7
Win98SE -> 5.0.531.7
WinME -> 5.1.0.4711
Win2000 -> 5.1.0.4615
WinXP -> 5.6.0.6626
になってました。あくまで私の持ってるやつですが・・・
323名無し~3.EXE:05/02/14 01:50:54 ID:CSfbd6QJ
>>322
Shell.Application はWSHとは関係ないし。
Win98用インストーラが用意されているのにわざわざXPからCopyするなんてどうかしてる
324名無し~3.EXE:05/02/14 09:53:56 ID:wYtkAhTc
>>322 (>316)
大サービス。
ttp://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=0A8A18F6-249C-4A72-BFCF-FC6AF26DC390

最低限、MSが出してる情報見てから質問しようや。
325名無し~3.EXE:05/02/14 16:57:33 ID:RWcMm7dD
>322
GUIをどうしてもっていうなら、htaにするという手もある。
ただし、お勧めはしない。
326名無し~3.EXE:05/02/14 20:20:31 ID:Q/XXBcIZ
Dim objArgs, objWSH
Set objArgs = WScript.Arguments
Set objWSH = WScript.CreateObject("WScript.Shell")
    If objArgs.Length = 0 Then
        WScript.Quit
    End If
Dim line, i, objExec
line = "cscript.exe " & objArgs(0)
i = 0
Set objExec = objWSH.Exec(line)
    Do While objExec.Status = 0
        WScript.Sleep 10
        i = i + 1
    Loop
i = (i*10)/1000 & "秒"
WScript.Echo i
327名無し~3.EXE:05/02/14 20:22:28 ID:Q/XXBcIZ
>>326
測るスクリプトをドラッグアンドドロップすると、実行時間が
でるスクリプトを書いたつもりなんですが、
これで正確にスクリプトの実行時間を測れてますかね?
328名無し~3.EXE:05/02/14 23:15:35 ID:gHW6LloF
>>322
GUI使いたいならこんなのがあるが。
ttp://www.seraphyware.jp/dev/
使いこなせればWSHの幅が広がるとは思うが、記述がめんどい。
漏れは挫折した。
329名無し~3.EXE:05/02/14 23:25:45 ID:6v12ifuE
>>328
いじったことはないが、こういうのならいっそHSPとかを使った方が手っ取り早いのではないだろうか、と思えるな……。
330名無し~3.EXE:05/02/14 23:50:02 ID:wYtkAhTc
>>327
変数への代入や加算、ループでのStatusチェックの間にも
処理時間を喰ってるわけだから、ミリ秒単位計測としては不正確かも。

そもそも、11ミリ秒で終わっても20ミリ秒になるんだから
ミリ秒単位にせず、秒単位で十分じゃない?
で、その場合は開始時と終了時にNow関数かな。

JScriptならミリ秒単位の時刻を取得できるけど
実行時間を計りたいだけなら>>244も使ってるtimeitコマンドを使った方が良い。

標準コマンドではないので
Windows Server 2003用リソースキットをダウンロード&インストール。
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&displaylang=en
331330:05/02/14 23:57:01 ID:wYtkAhTc
と思いながら、WScript.Sleep( 30000 ) だけのスクリプトを計測してみたら
vbs版は23.xx.秒とか25.xx秒とかなった。
なぜだ。

ちなみにjs版(始めと終わりに new Date() して引く )だと、ちゃんと30秒ちょい。
timeitでも30秒ちょっと。
332名無し~3.EXE:05/02/15 00:27:52 ID:Z+xNUcLF
そこでwsfですよ。取りあえず10ミリ秒がJScriptのDateオブジェクトの精度の限界のようだけど。OSにも影響されるかな?<精度
.js/.vbsに対応。一度文字列として読み込んで直に評価させる事でcscript.exeの起動時間などの誤差をできる限り排除。
ところで特定文字列で指定した長さまで埋める関数・メソッドって標準では存在しないのかな?
<job>
<script language="vbscript">
Sub ExecuteVBS(script)
   Execute script
End Sub
</script>
<script language="jscript">
function PadZero(value, length) {
   var zero = "", text = value.toString();
   for (var i = 0; i < length - text.length; i++)
      zero += "0";
   return zero + text;
}
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (WScript.Arguments.length == 0) WScript.Quit();
var file = fso.OpenTextFile(WScript.Arguments(0));
var script = file.ReadAll();
file.Close();
var ext = fso.GetExtensionName(WScript.Arguments(0)), start = new Date();
if (ext == "js")
   eval(script);
else if (ext == "vbs")
   ExecuteVBS(script);
var total = new Date(new Date() - start);
WScript.Echo(total.getMinutes() + "分" + total.getSeconds() + "秒" + PadZero(total.getMilliseconds(), 3));
</script>
</job>
333326:05/02/15 02:19:55 ID:SQw/j9KV
やっぱり、>>326だと駄目なんですね。
代入に要する時間までは思い至りませんでした。
>>332を使いながら試行錯誤してみます。
ありがとうございました。

>ところで特定文字列で指定した長さまで埋める関数・メソッドって標準では存在しないのかな?
これはタブの変換のことですか?
334名無し~3.EXE:05/02/15 02:24:19 ID:SQw/j9KV
だとしたら、私は↓を使ってます。
Dim oAutoIt, String
Set oAutoIt = WScript.CreateObject("AutoItX.Control")
String = oAutoIt.ClipGet
        Function Repl(strTarget, strPattern, strRep)
                Dim regEx
                Set regEx = New RegExp
                        regEx.Pattern = strPattern
                        regEx.IgnoreCase = True
                        regEx.Global = True
                strTarget = regEx.Replace(strTarget, strRep)
                Repl = strTarget
        End Function
String = Repl(String, "\t","&nbsp;&nbsp;&nbsp;&nbsp;")
oAutoIt.ClipPut String
335名無し~3.EXE:05/02/15 02:40:30 ID:Z+xNUcLF
>>334
じゃなくて>>332でJScriptで定義してるPadZeroみたいなの。
長さがlengthになるまで左(または右)に指定した文字を埋めるって言う。

VBSなら
Function PadLeft(str, length, character)
  PadZero = String(length - Len(str), character) & str
End Function
Function PadRight(str, length, character)
  PadZero = str & String(length - Len(str), character)
End Function
こんな感じかな。

JScriptにはどうも或る文字を指定数並べた文字列を取得するようなメソッドが見あたらない……。
336名無し~3.EXE:05/02/15 15:14:19 ID:M+9V0m7p
>>335
標準ではないけど、sprintf関数を公開してるサイトがあった。
ただ、でかいのよね。
wsfにしてインクルードすれば良いんだろうけど。

sprintf関数
js : http://homepage1.nifty.com/aok2/004/js06.html
vbs : http://homepage1.nifty.com/aok2/004/vbs01.html


>>334
それだと、行頭タブの場合はいいけど
文の途中のタブは位置がずれない?
337名無し~3.EXE:05/02/15 18:17:14 ID:SQw/j9KV
>>335
なるほど。無さげですねこれは。


>>336
タブ文字"\t"を、実態参照の半角スペース"&nbsp;"
に変換しているだけですので、ずれっぱなしです。
338名無し~3.EXE:05/02/15 20:11:55 ID:0Rgjq2/k
実体参照を使うなら、アンパサンドが&amp;で表せることぐらい知っとこうな
339名無し~3.EXE:05/02/17 16:02:36 ID:61uVFixa
1→001
10→010

などと変換したいのですが、うまくいきません。

For I = 0 To 2
'a = Format(5,"##0")
a = str$(I)
b = right$(a, len(a)-1)

c = len(b)
If c < 3 Then
b = "0" + b
End If
If c < 3 Then
b = "0" + b
End If

WScript.Echo b
Next

などという状態です。WSH初心者向けの本でも買った方がいいのかなぁ…
340名無し~3.EXE:05/02/17 16:03:59 ID:61uVFixa
あ、質問したので、ageときます。
341名無し~3.EXE:05/02/17 16:11:46 ID:4Le0LRqM
左に"00"足して、文字列操作で右側3文字だけ抜き出す
342名無し~3.EXE:05/02/17 16:14:01 ID:ruJSikx+
ていうか>>335
343名無し~3.EXE:05/02/17 16:22:58 ID:61uVFixa
Set objShell = WScript.CreateObject("WScript.Shell")

Function PadLeft(str, length, character)
PadZero = String(length - Len(str), character) & str
End Function

For I = 0 To 2
z = str(I)
x = len(z)
z = right(z, x-1)
a = PadLeft(z, 3, "0")
WScript.Echo a
Next

と書いてみると、z = str(I)の行で「型が一致しません」というエラーが出ます。
VBSに型なんてあるんですか?

PasLeft関数に、Iをそのままつっこむと文字列になりません。
344名無し~3.EXE:05/02/17 16:25:26 ID:61uVFixa
あ、OSはWinXP SP2です。
345名無し~3.EXE:05/02/17 16:37:36 ID:ruJSikx+
2行目はPadLeft = の間違いだな。
で、直接数値を放り込んでもいけたんだけど。
ついでに、VBSにStr関数はないようだぞ。
346名無し~3.EXE:05/02/17 16:40:40 ID:ruJSikx+
あ、PadLeft関数の2行目ね。
返値が返値になってないってことで335のミスだ。
ていうか私のミスだ。ごめん。

正式版:

Function PadLeft(str, length, character)
  PadLeft = String(length - Len(str), character) & str
End Function
Function PadRight(str, length, character)
  PadRight = str & String(length - Len(str), character)
End Function
347名無し~3.EXE:05/02/17 16:48:43 ID:61uVFixa
For I = 0 To 10
z = "00" & I
z = right(z,3)
WScript.Echo z
Next

という感じで、うまく行きました。ありがとうございました。

VBにはあるけどVBSには無いとかいう、微妙な仕様の違いって、何を見れば分かるんですかねぇ。
ちなみに、str(I)はI & ""で代用できそうでした。
348名無し~3.EXE:05/02/17 16:53:38 ID:8wKTfS+l
WshShell.RunでCmd.exeを起動させてクリップボード上の
文字列を貼り付けたいんですがどうすれば良いんでしょうか?

ペーストのショートカットをSendkeysで送ろうかと思ったんだけど
探しても見つけられませんでした。orz
349名無し~3.EXE:05/02/17 18:57:46 ID:mR2+2335
VBのキャストって CStr みたいに「C」がつかなかったっけ?
350名無し~3.EXE:05/02/17 19:13:48 ID:61uVFixa
>>349
そのようですね。
古典BASICのかすかな記憶が邪魔をしたようですorz
351名無し~3.EXE:05/02/17 19:29:27 ID:ruJSikx+
352名無し~3.EXE:05/02/17 20:01:24 ID:8wKTfS+l
>351
おぉ、そんな手があったんですね。
有り難うございます。がんばって実装してみます。
353名無し~3.EXE:05/02/17 20:09:04 ID:RWYSRbSo
>>352
バッチファイルならば、
引数を与えてcmd.exeを起動して、
%1を使うのはどうだろう?
354名無し~3.EXE:05/02/17 20:24:49 ID:8wKTfS+l
>353
バッチファイルではないんですよ。

実は今独習JAVAを1からやっているんです。
普段エディタにはEmeditorを使っているのでマクロを使って
簡単にコンパイルできたらなぁって思って聞いてみたんです。

WshShell.Sendkeys("% ")って送ってみているんですが
プロンプトにスルーされてまいます。これじゃ無理なのかしら。
355名無し~3.EXE:05/02/17 20:32:10 ID:ruJSikx+
直接javac.exeだっけ、コンパイラを起動させるわけにはいかんの?
356名無し~3.EXE:05/02/17 20:44:19 ID:8wKTfS+l
>355
ぐふっ、一番簡単な方法を忘れてました。
希望のことはできました。ありがとうございます。
357名無し~3.EXE:05/02/17 22:35:21 ID:5o31Ua1s
ていうか、 [Fn]キーをエミュレーションする SendKey は どうすりゃいいんだ?

おしえてくださいませ。
358名無し~3.EXE:05/02/17 22:51:52 ID:qp8Z/Tkt
>>357
(・ヮ・)つ ヘルプ
359名無し~3.EXE:05/02/18 01:24:44 ID:bTzT8RAp
>>354
もう解決してるみたいなので、今更だけど
EmEditorで編集中のjavaファイルをコンパイル&実行するスクリプト。

var wshShell = new ActiveXObject( "WScript.Shell" );
var fso = new ActiveXObject("Scripting.FileSystemObject");
var docPath = editor.ActiveDocument.Path;
var sauceFile = editor.ActiveDocument.FullName;
var classFile = editor.ActiveDocument.Name.replace( /\.java$/, "" );
var objExec = wshShell.Exec( "javac \"" + sauceFile + "\"" );
while ( objExec.Status == 0 ) Sleep( 100 );
if ( fso.FileExists( "\"" + docPath + "\\" + classFile + ".class\"" ) )
wshShell.Run( "cmd /K cd \"" + docPath + "\" & java " + classFile );

360gooじしょ:05/02/18 01:40:33 ID:tVzoj5di
>>359
ひょっとして: saucer saute saucy
361322:05/02/18 09:02:38 ID:u+bUMv2U
>>324他諸氏
申し訳無い。落とせることは知ってます。ただ、そんなこと(XPからの抜き出し)をやってみたかったのです・・・
362名無し~3.EXE:05/02/18 09:04:06 ID:cHfGVkOZ
ライセンス違反になるような気がするがね。
363名無し~3.EXE:05/02/18 12:30:07 ID:E/37rGvX
>354
わざわざソース有り難うございます。
自分が作ったモノは単純すぎるコードなので今後
スクリプトを作る際に参考にさせていただきます。
364名無し~3.EXE:05/02/18 23:10:13 ID:vQ1k38cF
>>357
Fnキーはキーボードコントローラー(だっけ?)で制御してるから無理だと思ふ。
365名無し~3.EXE:05/02/18 23:56:15 ID:U/CB/yvB
FNでなにやりたいか書くと吉。
366名無し~3.EXE:05/02/19 05:26:30 ID:5E0bL9lX
中国語のHTMLテキストを整形しているのですが、ReadLineやReadAllを使うと一部の中国語が勝手に変換されてしまいます。
どのような対策が考えられるでしょうか?
367名無し~3.EXE:05/02/19 09:06:43 ID:PxBwsUtK
>>366
対象のhtmlファイルの文字コードと、
どう元ファイルを開いてるか、保存ファイルをどう作ってるかのコードを。

UTF16/UTF8なら、OpenTextFileの第4引数に-1、CreateTextFileの第3引数にTrueを入れればいけると思うけど。
//UTF8をUTF8のままで保存してくれるのは良いけど、なんでUTF16用のBOM付きなんだ……? >FileSystemObject
368名無し~3.EXE:05/02/19 09:49:03 ID:NfPVlRpo
>367
いっそバイナリストリームで、ってのは手間かかりすぎだろうな・・・。
369名無し~3.EXE:05/02/21 02:45:57 ID:pUaGODAE
IEに表示されているテキストを[すべて選択]して[コピー]するにはどうしたらいいのでしょうか・・・?
370366:05/02/21 03:19:16 ID:y0/zN+N5
コード = gb2312

例えば、
ttp://www.eg365.com/disp.asp?boardid=12&typeid=237
をIEからファイル保存して、Q237.HTMという名前を付ける。

以下VBS。

IN_FNAME = "Q237.HTM"
set FS = CreateObject("Scripting.FileSystemObject")
set in_file = FS.GetFile(IN_FNAME)
set in_text_file = in_file.OpenAsTextStream(1) ''' 1 = for read
str = in_text_file.ReadAll
in_text_file.Close

OUT_FNAME = "Q237X.HTM"
FS.CreateTextFile OUT_FNAME
set out_file = FS.GetFile(OUT_FNAME)
set out_text_file = out_file.OpenAsTextStream(2) ''' 2 = for write
out_text_file.Write(str)
out_text_file.Close

VBSおわり。

"FC Q237.HTM Q237X.HTM"などすると違っている。(Windows98)
371名無し~3.EXE:05/02/21 21:45:25 ID:b9yE3ynJ
>>370
Adodb.Stream使えばコード指定できるよ
372名無し~3.EXE:05/02/23 18:16:55 ID:H2Zgk7uq
COMやDDEを使って既に開いているIEにURLを渡す事は可能でしょうか?
宜しくお願いします。
373名無し~3.EXE:05/02/23 18:44:40 ID:gskvZr5x
374名無し~3.EXE:05/02/23 19:38:39 ID:H2Zgk7uq
>>373
レスありがとうございます。
もう一つお願いします。
WSHで作成したCOMオブジェクトをレジストリに登録して他のアプリケーションから利用する事はできるでしょうか?
375名無し~3.EXE:05/02/23 19:45:39 ID:gskvZr5x
376名無し~3.EXE:05/02/23 22:42:20 ID:H2Zgk7uq
>>373
MSDN英語版も一通り見たのですが、DDEのように最前面のウィンドウに送るのはどうすればいいんでしょうか?
377名無し~3.EXE:05/02/24 11:13:14 ID:pDFgQ54p
>>376
DynaCallでも使えば?
378名無し~3.EXE:05/02/25 00:12:32 ID:YV1G4tsr
下記はPC(OS)の起動時間を算出するためのscriptなのですが、
昨日は普通に動作していたのに、本日PCを立ち上げて実行してみると、
0ばかり吐き出されて、正確な数値が吐き出されません。原因は何なのでしょうか?

OS:Windows XP sp1a、 wsh 5.6

Server = "."
Function UptimeFunc()

Set objLocator = CreateObject( "WbemScripting.SWbemLocator" )
Set objService = objLocator.ConnectServer( Server , "root/cimv2" )
Set objSystem = objService.ExecQuery( "Select * from Win32_PerfRawData_PerfOS_System" )

For Each obj In objSystem
Timestamp = obj.properties_("Timestamp_Object").value
UpTime = obj.properties_("SystemUpTime").value
Next

    tmp = Int( (Timestamp - UpTime) / 10000000 )
    UptimeFunc = tmp

End Function

379名無し~3.EXE:05/02/25 21:06:17 ID:03WT6pw3
DynaCallで、文字列をByRefで渡そうと思っていますが、上手くいきません。
具体的には、GetClassName APIを使おうと思っているのですが、

Set UserWrap = CreateObject("DynamicWrapper")
UserWrap.Register "user32.dll", "GetClassNameA", "i=hrl", "f=s", "r=l"

Dim sData
sData = Space(20)
Call UserWrap.GetClassNameA(hwnd, sData, 20)

とやっても、空白が返るだけです。
この方法をご存知の方、助言頂けないでしょうか。
380369:05/02/26 07:17:04 ID:Y3dREWig
一応IEオブジェクトのマニュアルを見たんですが、英語のこともあってさっぱりわかりません。
当たり前かもしれませんが、clipboardDataオブジェクトはclearとgetとsetの3つしか無いですし・・・
どのオブジェクトでやるんでしょうか・・・?
381名無し~3.EXE:05/02/26 09:16:55 ID:tjf+VlVh
>>380
document.body ?
382名無し~3.EXE:05/02/26 13:18:42 ID:i+c+fF2l
OLE/COM Object ViewerのDLページがなくなってる・・・
2000用のはあるがIVIEWERS.DLLが添付されてない(´・ω・`)
383名無し~3.EXE:05/02/26 16:54:29 ID:agiWsNnk
BASP21等の外部コンポーネントを使わずにバイナリ操作(読み書き)。
ttp://www002.upp.so-net.ne.jp/eral/_branch/script/
384名無し~3.EXE:05/02/26 17:21:23 ID:2q5edlGS
ADODB.Streamじゃねーか。
385名無し~3.EXE:05/02/26 22:45:58 ID:oZF+phpH
386名無し~3.EXE:05/02/26 23:17:18 ID:i+c+fF2l
>>385
レスサンクス
上のほうリンクにおいてあるのをDLしたんがDLLが入ってなかったんだよ
んでぐぐってたらDiectory of NTReskitっていう名前のサイトみつけて
そこで無事IVIEWERS.DLLげとできました(`・ω・´)
ためしに下のほうのWindows Server 2003 Resource Kit ToolsもDL
しようとしたが95%くらいでダウソちゅうだんされたので諦めた
387名無し~3.EXE:05/02/26 23:26:28 ID:RmnHcQ8H
Win32APIって呼べないの?
388名無し~3.EXE:05/02/26 23:31:59 ID:Vne2I3J6
WSHエンジンだけで呼ぶ事はできない。
>>19のDynaCallなど使う必要がある。
389名無し~3.EXE:05/02/28 11:58:58 ID:bdjFrM2f
すません、WHSで立ち上げたバッチファイルにパラメータを渡すにはどうすればよいのか
教えてください。

具体的には、
Dim str
str=InputBox ("番号を入力してください。")

//と番号(例えば777)を入力させて

Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "c:\hoge.BAT"
//          ↑このバッチファイルに、上記で入力されたパラメータを渡したいんです。

コマンドラインの実行だと
hoge.BAT 777
で、バッチファイルが実行されるのですけど、スクリプトでやろうとすると上手くいかないんです。
Googleや過去ログ見たつもりですが、よくわからないので識者の方々、ご指導お願いします。
390名無し~3.EXE:05/02/28 12:02:07 ID:f4j+mFJj
>>389
WSHShell.Run "c:\hoge.BAT パラメータ"
391名無し~3.EXE:05/02/28 12:02:40 ID:f4j+mFJj
あ、
WSHShell.Run "c:\hoge.BAT " & str
の方が分かりやすい?
392389:05/02/28 13:16:32 ID:S3uawuGi
>390, 391氏
レスありがとうございます。
結果、何故か以下のようなエラーを出して上手く動きません。

スクリプト:C:\test\hoge.vbs
行:   6行目  // 「WSHShell.Run "c:\hoge.BAT " & str 」のことです。
エラー: 指定されたファイルが見つかりません。
ソース: (null)

>389の2行目にあたる「str=InputBox ("番号を入力してください。")」で何も入力しなければ
バッチファイルが実行されます。しかし、ここで数字が入力されると上記のエラーで止まります。

ホント、クレクレで申し訳ないのですが、もし原因に心当たりがありましたら
教えて頂けないでしょうか。
393名無し~3.EXE:05/02/28 13:31:57 ID:f4j+mFJj
hoge.batの後ろのスペースがないくらいしか考えられないが。
394389:05/02/28 13:39:32 ID:8vqrlmMi
神様、仏様、393様、ありがとうございました。

いま、まったくその通りでございました。
この問題で3日悩んでたアフォな自分を笑ってください。

重ね重ねありがとうございました!!!!!!!!。
他の皆様、スレ汚してすみませんでした。
395名無し~3.EXE:05/02/28 19:22:55 ID:/iTDAauH
Microsoft.XMLHTTP を使って特定のページを保存するプログラムをwshで作ったのですが,
リクエストをクッキー情報をのせて送信したいのですが,どのようにしたら良いのでしょうか?
IEで保存されているクッキー情報では無く,特定のクッキー(○○=△△)を送信できればOKです.

現在はこうです.
---
(前略)
Set objHTTP = WScript.CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", sSource, False
objHTTP.Send
Set Stream = WScript.CreateObject("Adodb.Stream")
Const adTypeBinary = 1
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
Stream.Type = adTypeBinary
Stream.Open
Stream.Write objHTTP.responseBody
Stream.Savetofile sDest, adSaveCreateOverWrite
---

宜しくお願い致します.
396名無し~3.EXE:05/02/28 19:31:23 ID:f4j+mFJj
>>395
objHTTP.SetRequestHeader "Cookie", "Name=Value; Id=****"
objHTTP.Send
397名無し~3.EXE:05/02/28 19:56:45 ID:f4j+mFJj
と書いてから試したけど、無視されちゃうな。ごめん。
なんか代替手段は無いかなっと。
398名無し~3.EXE:05/02/28 21:39:06 ID:f4j+mFJj
Webのサンプルを見るとXMLHTTPでもsetRequestHeaderでCookieを設定してる例があるな〜。

NT4.0withIE5.01以降限定らしいけど、私の環境(XP Home SP2)では
"msxml2.ServerXMLHTTP"を使えばsetRequestHeaderでCookieの設定が有効になった。
399名無し~3.EXE:05/02/28 22:03:05 ID:/iTDAauH
>>396 で書いて頂いた内容で解決しました.
ありがとうございました.
Microsoft.XMLHTTPでもmsxml2.ServerXMLHTTPでも解決できました.
ありがとうございました.
400399:05/02/28 22:08:42 ID:/iTDAauH
399の内容は間違いでした.
Microsoft.XMLHTTPでもmsxml2.ServerXMLHTTPでも,IEが保存したクッキー情報が優先され.
IEが保存したクッキー情報が無い場合には,Microsoft.XMLHTTPならsetRequestHeaderでCookieを設定しても無視され,
しかしmsxml2.ServerXMLHTTPではsetRequestHeaderでCookieを設定すれば無視されませんでした.
401名無し~3.EXE:05/03/02 16:01:02 ID:V7Kl1OO1
perlscript入れる(藁
402名無し~3.EXE:05/03/04 03:51:29 ID:h3dabNAc
メモ帳に、SendKeys使わずにクリップボード内容を貼り付けることってできますか?
403名無し~3.EXE:05/03/04 03:56:03 ID:cbbJfWDy
WM_PASTE
404402:05/03/04 05:10:16 ID:h3dabNAc
あのう、これって検索したらSendMessage - USER32.DLLって出てきたんですけど、どうやって使うんでしょうか?Dynawrapperでしょうか?
405名無し~3.EXE:05/03/04 05:21:17 ID:h3dabNAc
以前から気になってたんだけど、MSDNにいくと左側に表示される検索ウィンドウがウザイ。
これってどうにかならんモンですか?
406名無し~3.EXE:05/03/04 09:27:51 ID:5Yx42wZ+
スクリプトオフ
407名無し~3.EXE:05/03/05 01:17:23 ID:6fcysyW1
>>405 ×ボタンあるだろ。
408名無し~3.EXE:05/03/05 06:07:02 ID:oOiuD9Vp
EmptyとNullの違いって何でしょうか?
409名無し~3.EXE:05/03/05 13:09:31 ID:3Kdua9EI
Empty 器があるけどカラ
Null 器すらない
410名無し~3.EXE:05/03/05 20:35:14 ID:QZTsQGjA
空と無
411名無し~3.EXE:05/03/05 21:30:57 ID:U+zC3TKL
伽藍と涅槃。
412名無し~3.EXE:05/03/05 22:41:25 ID:/AE3LZ+0
カルロストシキとオメガトライブ
413408:05/03/06 05:41:15 ID:Pd9hJVeH
ごめんなさい。よくわかりません・・・
1. 値が代入されていない変数はどちら?
2. ヌルストリング""は?
414名無し~3.EXE:05/03/06 06:12:02 ID:ii20l3jo
http://www.microsoft.com/japan/msdn/library/ja/script56/html/vbsdatatype.asp
VBScriptの変数は何でも入れられる「Variant型」しかないが、
内部的な変数の値には「整数型」や「文字列型」や「オブジェクト型」などがある。
まずはこの型の概念を把握すること。

""は文字列型の値。
長さは0だが"hoge"や"fuga"などの文字列と同じ扱い。

EmptyはVariant型の初期値。
初期化されていないことを表し、数値として評価すると0に、文字列として評価すると""に見える。

Nullは無効なデータであることを示すVariant型の特別な値。
明示的に変数にNullを代入したり、Nullを含む式を評価したりするとNullになる。
用途はよくわからない。エラーを発生させたいときにでも使うのか?

CやJavaでいうところのNullはVBScriptではNothingという。
Nothingはオブジェクト参照を持たないことを表す、オブジェクト型の特別な値。
オブジェクトを参照していた変数が全てNothingになると、オブジェクトが開放される。
オブジェクトの扱い(概念とかSetとかIsとか)は別途学習すべし。
415408:05/03/06 14:38:36 ID:INEqsex6
ありがとうございました。m(_ _)m
416名無し~3.EXE:05/03/06 15:26:16 ID:8FLUxMgD
つまりNothingはCのポインタでいうとぬru
417405:05/03/06 16:47:03 ID:hOyCvLoE
>>406,>>407
わかってるんだけど、問題がある。

>>406
切っても出てしまうページがあるんだよね。
例えば、
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/move.asp
なんかは切ると出なくなるんだけど、
http://msdn.microsoft.com/library/en-us/com/htm/oen_a2z_22sk.asp
は切っても出ちゃう。

>>407
オレはEscキー使うんだけど、その場合タイミングが難しい。ずっと表示を見つめていなければならない。逃がすとやり直しになる。しかもTemporary Internet Filesを削除しなきゃならず、かなり面倒い。
上のJavaScript切っても出るページ、いきなり最初からフレームが表示されて×ボタンもクソもない。
418名無し~3.EXE:05/03/06 17:36:11 ID:5nlgRpKR
>>409
が分かりやすい喩えをだし、
>>410
がウパニシャッドにひねり、
>>411
が大乗仏教的にねじった。

でだ。>>412。お前だよ。>>412
何だよ、カルロストシキとオメガドライブって?
分からんでもないが、それだったらそこは菊池桃子とラ・ムーじゃねーのか?
419名無し~3.EXE:05/03/07 00:05:19 ID:uD3HY5eo
>>418
菊地桃子はラ・ムーのメンバーだろう。
カルロストシキはオメガトライブのメンバーじゃない。
420名無し~3.EXE:05/03/07 00:11:03 ID:Sai6Letm
だいたいオメガトライブって何?
omega tribe ── オメガ部族?
421名無し~3.EXE:05/03/07 02:06:58 ID:l2I/kYip
>>419
なるほど。
つまり「杉山清隆とオメガトライブ」の杉山清隆が脱退して
から「カルロストシキとオメガトライブ」になったって流れを踏まえれば、
>>412は「杉山清隆とオメガトライブ」から見た場合の
「カルロストシキ」と「オメガトライブ」だってことか。
422名無し~3.EXE:05/03/07 02:32:47 ID:uD3HY5eo
>>421
1986オメガトライブと混同してないか?
423名無し~3.EXE:05/03/07 02:54:16 ID:a4V+QSiG
そろそろスレ違いが許容範囲を超えると思うのだが。
424名無し~3.EXE:05/03/07 04:00:58 ID:fXCRWfzm
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objLinks = objFso.CreateTextFile("hp.html")
For i = 1 to 9
objLinks.WriteLine("<a href=""http://www.warchildsworld.com/gallery/mgp43hp0" & i & ".html"">0" & i & "</a>")
Next
For i = 10 to 45
objLinks.WriteLine("<a href=""http://www.warchildsworld.com/gallery/mgp43hp" & i & ".html"">" & i & "</a>")
Next
425名無し~3.EXE:05/03/07 09:52:11 ID:iOmJsgRT
WSH ファイルを編集するのに便利なエディタって何でしょうか?
いまはメモ帳でやっているんですが、できれば Visual Studio .NET 2003
の IntelliSense のような機能が欲しいのですが。
426名無し~3.EXE:05/03/07 10:48:58 ID:MrsIeohC
俺もインテリセンスほしい。
けど、VBSとかJSみたいな型なし言語だと原理的に無理だと思う。

function f(x){
 x.??? ← xにどんなメソッドがあるかなんてわかったもんじゃない
}

ちなみにTeraPad使いです。キーワードが太字になるだけ。
427名無し~3.EXE:05/03/07 10:59:25 ID:9rDebZRX
WSH補完クンでも使っとけ。
ttp://www.geocities.co.jp/SiliconValley-Oakland/4672/
428名無し~3.EXE:05/03/07 11:27:18 ID:MrsIeohC
>>427
お。便利そう。thanks.
429名無し~3.EXE:05/03/07 16:39:43 ID:hrokG3hG
クンをタンに脳内変換してる件
430名無し~3.EXE:05/03/07 17:39:37 ID:Oi76K5sx
補完タン(*´Д`)ハァハァ
431405:05/03/08 03:48:53 ID:untOpnSV
なんかいいアイディアないかな?マジで。

一応おみとろんスレで聞いたら一蹴されちゃったよ。

WSHでもできるとは思うんだが。
432名無し~3.EXE:05/03/08 04:17:06 ID:untOpnSV
コレクションの要素数はどうやって得るのでしょうか?
Count = 0
for each Elem in Collection
Count = Count + 1
next
だといくらなんでもバカですよね・・・
433名無し~3.EXE:05/03/08 04:37:52 ID:1lrDUF/f
むう、タンのほうが良かったかな?
434名無し~3.EXE:05/03/08 04:56:12 ID:FF00A+Ee
>432
Countプロパティを使う。

lngCount = Collection.Count
435名無し~3.EXE:05/03/09 01:35:34 ID:1/+po9rH
バッチファイル的にいくつかコマンドをループさせて実行するスクリプトを
書きたいのですが、以下のところで引っ掛かっています

var wssh = WScript.CreateObject("WScript.Shell");
var oexec = WShell.Exec("COMMAND");
while(oexec.Status == 0)
WScript.Sleep(100);

DOS窓上で上記のように、ExecしCOMMANDを実行したときに
COMMANDの標準出力が見られない。どうしたらよいのでしょうか?
436名無し~3.EXE:05/03/09 03:06:50 ID:3eOBO4fJ
>435
oExec.StdOut.ReadAllを使うのかな。DOS窓では見えないけど。
437名無し~3.EXE:05/03/09 14:04:35 ID:sSS/1C52
>>435
oexecのStdOutを読み込んで明示的に書き出せば見えるはず。
438名無し~3.EXE:05/03/09 16:21:52 ID:gVLgMuAw
RealOnePlayerからRealPlayerに更新したらActiveXがHTMLでしか動作しなくなったっぽい。
全環境でそうなるのか確かめたいので、誰か以下のソースをHTAで実行してActiveXが生きてるか教えてくれないか?

<HTML><HEAD><TITLE>RealPlayer</TITLE></HEAD><BODY>
<OBJECT ID=RVOCX CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" WIDTH=320 HEIGHT=240>
<PARAM NAME="SRC" VALUE="plugin.rpm">
<PARAM NAME="CONTROLS" VALUE="ImageWindow">
<PARAM NAME="CONSOLE" VALUE="one">
<PARAM NAME="AUTOSTART" VALUE="true">
</OBJECT>
</BODY></HTML>
439435:05/03/10 01:02:13 ID:wq80rOZY
>>436,437
thx.
簡単にできると思ったが調べてみると意外と難しい。StdOut.ReadAll()あたりを使えば
いいとのことだが単純に考えてこんな風にしてみた。

var stream = oexec.stdout;
var errstream = oexec.stderr;
while (oexec.Status == 0) {
WScript.echo(stream.ReadAll());
WScript.echo(errstream.ReadAll());
WScript.Sleep(100);
}

単純な出力ならこれで結果は表示されるようだが、リアルタイムで書き換える出力は
無理みたい
440名無し~3.EXE:05/03/10 01:07:24 ID:ROXdX8IO
そりゃReadAllはEOFが返ってくるまでブロックするからね。
ReadLineメソッド辺りで一行ずつ読み込むとか。
441名無し~3.EXE:05/03/10 02:19:05 ID:wq80rOZY
いろんなサイトを回って参考になりそうなコード見たけどめんどくさそう
また機会があったらいろいろと試してみます・・・
442名無し~3.EXE:05/03/12 08:28:16 ID:cyCgTG9Z
DynamicWrapperを使ってWIN32を勉強中です。
しかし、どうもうまくいきません。
以下のコードでメモ帳にペーストをしようとしたのですが、できません。
閉じることはできたのですが・・・
なぜなのでしょうか・・・?

set dwFindWindow = createObject("DynamicWrapper")
dwFindWindow.Register "user32.dll", "FindWindow", "i=ss", "f=s", "r=l"

set dwSendMessage = createObject("DynamicWrapper")
dwSendMessage.Register "user32.dll", "SendMessage", "i=llll", "f=s", "r=l"

const WM_CLOSE = &h10
const WM_PASTE = &h302

set ws = CreateObject("WScript.Shell")

ws.Run "NOTEPAD"
WScript.Sleep 500

handle = dwFindWindow.FindWindow("Notepad", "無題 - メモ帳")

MsgBox "START?"

result = dwSendMessage.SendMessage(handle, WM_PASTE, 0, 0)
''result = dwSendMessage.SendMessage(handle, WM_CLOSE, 0, 0)
443名無し~3.EXE:05/03/12 09:44:34 ID:Q2bbkOtN
>>442
WM_PASTEを送る相手が間違ってる。
あと、DynamicWrapperオブジェクトは一つ作ればおk。

set DynaWrap = createObject("DynamicWrapper")
DynaWrap.Register "user32.dll", "FindWindow", "i=ss", "f=s", "r=h"
DynaWrap.Register "user32.dll", "FindWindowEx", "i=hhss", "f=s", "r=h"
DynaWrap.Register "user32.dll", "SendMessage", "i=huuu", "f=s", "r=l"
const WM_CLOSE = &h10
const WM_PASTE = &h302
set ws = CreateObject("WScript.Shell")
ws.Run "NOTEPAD"
WScript.Sleep 500
hwndParent = DynaWrap.FindWindow("Notepad", "無題 - メモ帳")
hWnd = DynaWrap.FindWindowEx( hwndParent, 0, "Edit", "" )
result = DynaWrap.SendMessage(hWnd, WM_PASTE, 0, 0)
'' result = DynaWrap.SendMessage(hwndParent, WM_CLOSE, 0, 0)
444442:05/03/13 08:27:30 ID:daYHwnOm
どうもありがとうございます。
なるほど。理解しました。コントロールに貼り付けねばダメだということなのですね・・・基本がわかっていませんでした。

DynamicWrapperオブジェクトなのですが、なぜか私の環境では1つのオブジェクトでRegisterを2回実行するとエラーが出てしまいます。

エラー 引数の数が一致していません。または不正なプロパティを指定しています。:'DynaWrap.Register'
コード 800A01C2

以下の記事でも同じことをやっている人がいるので、たぶん何か原因があるのでしょう。
http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list39.shtml

私は、Windows98(1st)です。WSHが古いせいかもしれません。

ところで、
handle = dwFindWindow.FindWindow("Edit", "")
とやると0しか返ってこないのですが、なぜなのでしょうか・・・?

それとWin32関数がWindows95で未実装かどうかわかるページはご存知ないでしょうか?
445名無し~3.EXE:05/03/13 20:42:17 ID:85wi9lXf
ビットマップオブジェクトのハッシュ比較をしたいのですが、WSHにそういう機能はありますか?
DLL作ってUWSC(というマクロスクリプトがある)から呼び出すのがいいのかな?
446名無し~3.EXE:05/03/13 21:13:49 ID:JSug8o01
>>444
> 私は、Windows98(1st)です。WSHが古いせいかもしれません。
とりあえず、MSのサイトから最新版をDLしてインストールして試してみるとか。

> handle = dwFindWindow.FindWindow("Edit", "")
> とやると0しか返ってこないのですが、なぜなのでしょうか・・・?
"Edit"が"Notepad"の子ウィンドウだから。
FindWindowはトップレベルウィンドウしか調べられない。
だから443はFindWindowExを使ってる。
MSDNでFindWindowとFindWindowExを調べると詳しく書いてある。

> それとWin32関数がWindows95で未実装かどうかわかるページはご存知ないでしょうか?
MSDNの各APIページの下部に書いてある。
447名無し~3.EXE:05/03/13 21:22:10 ID:JSug8o01
>>445
>>19で紹介されている「BASP21」でMD5算出できる。

vbsかjsだけでやるなら↓こんなページも。
ttp://www.geocities.co.jp/SiliconValley/4334/unibon/asp/md5.html
448名無し~3.EXE:05/03/14 00:09:33 ID:ccQI/ZHP
リストボックスを含んだダイアログを作って選択させたいのですが、
GUIを組み立てられるCOMコンポーネントってありますか?
449名無し~3.EXE:05/03/14 00:17:13 ID:cLVDKD9A
>>448
>>328
個人的にはスクリプトでやる事じゃないと思う。
//あ、HTAとか?
450名無し~3.EXE:05/03/14 00:27:33 ID:ccQI/ZHP
>>449
thanx
いちおうやりたいことはできそうです。
戻り値をスクリプトで処理したいので、
HTAでは無理かも
451名無し~3.EXE:05/03/14 07:14:25 ID:o+OcsCN8
452名無し~3.EXE:05/03/16 23:16:16 ID:TvcZa49t
Windows標準のCOMだけで、窓操作をマクロしきることって可能ですか?
453名無し~3.EXE:05/03/16 23:21:54 ID:nCuH95Hg
アプリによるけどsendkey多用しても厳しいと思う
454名無し~3.EXE:05/03/19 01:08:41 ID:L4H5Dxge
IEで表示中の画像やCSSファイルは
「Temporary Internet Files」フォルダに保存されていますが、
file:///C:/Temporary%20Internet%20Files/Content.IE5/EDK3E4SG/1.css
file:///C:/Temporary%20Internet%20Files/Content.IE5/EDK3E4SG/1.jpg
のように各種ファイルのローカルパスを取得する方法ってありませんか?

「file:///」じゃなくても普通に「C:\〜」でもかまいません。
アドバイスお願いしますm(_ _)m
455444:05/03/19 04:55:13 ID:sTacJ62o
>>446
どうもありがとうございました。よくわかりました。

WM_CLOSEでいろいろ閉じるのをやってみたのですが、なぜかIEとエクスプローラは閉じれませんでした。メインウィンドウだけでなく、IEが開くとできるあらゆるウィンドウをやってみましたが、やはりできません。なぜでしょうか?よろしければお教え下さい。

それとWM_ACTIVATEでアクティブにしようとしたのですが、メモ帳でさえアクティブにすることができません。WM_ACTIVATEAPPやWM_ENABLEなども子ウィンドウにも試して見ましたがダメです。AppActivate()とは意味が違うのでしょうか?

というか、ここで聞くべきじゃないですか・・・?
456名無し~3.EXE:05/03/19 09:31:35 ID:9/a2fGYV
>>455
Win32APIスレの方が良いかもね。

WM_CLOSEみたいないつ終わるか分からないのはPostMessageで送る。
WM_ACTIVATEはアクティブに「なった時」にシステムから送られるメッセージ。
アクティブにするためのメッセージじゃない。
アクティブにするならSetForegroundWindowとかを使う。
457名無し~3.EXE:05/03/19 09:48:52 ID:IihISgfI
>>455
ム板にWin32APIスレがあるけどね。

> WM_CLOSEでIEが閉じられない。
SendMessageではなくて、PostMessageを使う。

> WM_ACTIVATEでアクティブにならない。
SetForegroundWindowを使う。


var WM_CLOSE = 0x0010;
var hWnd;
var UserWrap = new ActiveXObject("DynamicWrapper");
UserWrap.Register( "USER32.DLL", "FindWindow", "i=ss", "f=s", "r=h" );
// UserWrap.Register( "USER32.DLL", "SendMessage", "i=huuu", "f=s", "r=l" );
UserWrap.Register( "USER32.DLL", "PostMessage", "i=huuu", "f=s", "r=l" );
UserWrap.Register( "USER32.DLL", "SetForegroundWindow", "i=h", "f=s", "r=l" );
hWnd = UserWrap.FindWindow( "IEFrame", 0 );
UserWrap.SetForegroundWindow( hWnd );
WScript.Sleep( 5000 );
UserWrap.PostMessage( hWnd, WM_CLOSE, 0, 0 );
458457:05/03/19 09:50:18 ID:IihISgfI
リロードすればよかった。メチャメチャかぶっとる…
459名無し~3.EXE:05/03/19 13:21:19 ID:WwFVmnjY
んで、SetForegroundWindow が言うこと聞いてくれないのでドツボにはまっていく・・・と。
460名無し~3.EXE:05/03/20 00:41:34 ID:I9Jli5/J
うちの零細職場のLAN
PC00, PC01, PC02, ・・・で、現在5台
このうちPC00が、サーバというか親機というか、とりあえずこいつが
目を覚ましていないと仕事が始まらないという役割。
そいでもって問題は時刻合わせ。
どいつもこいつも時計狂いすぎ。
各PCからクリック一発でPC00の時計に合わせてくれるとか、
さらに理想をいえば、各PC起動時にPC00の時計に合わせてくれるとか
そんなVBSがあったら教えてください
461460:05/03/20 00:43:55 ID:I9Jli5/J
情報出し忘れ
5台ともWin2000です
462名無し~3.EXE:05/03/20 01:22:18 ID:kGx7DszW
NET TIME \\PC00 /YES
だろ。
463名無し~3.EXE:05/03/20 01:22:54 ID:kGx7DszW
NET TIME \\PC00 /SET /YES
だろ。
464460:05/03/20 01:31:56 ID:I9Jli5/J
>>462,463さん
ありがとうございます
というか、
バカまる出しの質問でごめんなさい、これってVBSなんですか
この1行だけじゃダメですよね
465名無し~3.EXE:05/03/20 01:33:43 ID:78HHC5mE
アチャー
466名無し~3.EXE:05/03/20 01:37:14 ID:sDc2mS86
>>119
二千六百年かけてようやく手に入れたものを無にしようというわけですか。
そーですか。
467名無し~3.EXE:05/03/20 06:12:45 ID:jv/ls/Co
>>464
超マジレス。
>>462-463の人が例に出したのはコマンドライン。
VBSではない。その1行でOK。
これをバッチファイルにしてタスクスケジューラに仕掛ければ
毎起動時や一定時間ごとに時刻同期できる。

だがインターネットにつながる環境だったら
PC毎にTClockか桜時計を仕掛けて
自動的に日本標準時に合わせる方が何かといいと思うよ。
NET TIMEはインターネットにつながらない社内LANで
時刻同期のために仕方なく使うコマンドだから。
468名無し~3.EXE:05/03/20 11:49:04 ID:C5g87yI+
>>467さん
感謝です
現在職場で実験中

バッチファイルというのは聞いたことがあるようなないような
で、とりあえずBatという拡張子をつけてみたらそれらしいファイルができました
自分の机のPCの時計をわざと何時間も狂わせた後こいつをクリックしたら、
みごと親機と時刻が合いました。
こいつはクリック以外の方法でどうやって呼び出せばいいのかと、
ためしにMsAccessからVBAでCallShellしたら、これもみごと成功
各PCは毎朝確実にAccessのアプリを立ち上げるので、これで行きます。
(インターネットにはつながってません。僕のPCだけはその気になれば
つなげられますけど、これも必要なときだけ、それもいちどLANとの接続を
切ってから)
469468:05/03/20 12:01:45 ID:u0JXbc11
って、いま気づいた
VBAで出来るならVBSでもいけそう
VBSでCall Shellして、そのVBSファイルを
スタートアップに置いてもいいか
(こういうやりかたってダサいのかな)
470名無し~3.EXE:05/03/20 12:03:35 ID:XpSksxdO
いやさ、.batをスタートアップに入れればいいんじゃね?
471名無し~3.EXE:05/03/20 12:19:15 ID:qZ6DQrzs
プゲラ
472名無し~3.EXE:05/03/20 12:21:33 ID:sDTnmYBV
こんなんが管理者なのか
473名無し~3.EXE:05/03/20 12:52:11 ID:hQt94z3r
まぁそう言うな。
VBAが使えてDOSがわからんってのは
典型的なユーザー部の人間じゃないか。
恐らく若いって理由だけで社内のPCを任されてるんだろう。
探究心旺盛なのはいい事だ。

>>468
こっちも覗いてみるといい。君の業務に役立つだろう。

初心者〜管理者まで必読!コマンドライン(DOS Pt.3)
http://pc5.2ch.net/test/read.cgi/win/1062775949/
474460:05/03/20 22:55:18 ID:A/THPFRb
>>470
まったく
おっしゃるとおりでした
でも手遅れ、各PCのスタートアップにVBSファイル放り込んできてしまいました
僕は明日から3連休 (・∀・)

>>472
管理者というか何というか・・・
管理者なのかな
専任はいません
とりあえずのところは、みたいな感じ

>>473
フォロー感謝です
リンク先、ちょっと面白そうなので連休中いろいろいじってみます


475名無し~3.EXE:05/03/21 01:06:02 ID:gsPfoLVb
IEの右クリックメニューに、画像を外部エディタで開く
コマンドを追加しようと思っているのですが、つまずいています。

画像のURLは
set parentwin = external.menuArguments
set doc = parentwin.document
set srcImg = parentwin.event.srcElement
Set shell = CreateObject("Wscript.shell")
Dim url
url = srcImg.href
で取得でき、外部エディタ(irfanview)はshell.runで起動できるのですが
irfanviewはコマンドラインオプションでURLを指定しても開いてくれないので
いったん画像を一時的に保存し、ローカルファイルをirfanviewに渡したいのです。

set ie = CreateObject("InternetExplorer.Application")
ie.Navigate(url)
Do
Loop While (ie.busy)
Do
Loop While (ie.Document.readyState <> "complete")
ie.ExecWB 4,0
として、ローカルファイルに保存しようとすると、セーブのダイアログボックスが
開いてしまいます。

ダイアログボックスなしでURLをローカルファイルにダウンロードし
かつその保存ファイル名を取得する方法はないでしょうか?
476名無し~3.EXE:2005/03/21(月) 06:19:30 ID:/oBsfC95
>>475
>>289が参考になるんでは。
477名無し~3.EXE:2005/03/21(月) 12:45:56 ID:DojGtT3a
>>467
全部インターネットへというのはあまりよくないのでは
478名無し~3.EXE:2005/03/21(月) 13:38:20 ID:NL04fbp3
PC00だけNTPに問い合わせさせて。
残りはPC00にお伺い立てるようにすればいいんでないの。
擬似的にNTP鯖見たく出来ればいいわけだし。
479名無し~3.EXE:2005/03/21(月) 14:39:31 ID:XKjliLdM
それだと結局は同じだがや
480名無し~3.EXE:2005/03/21(月) 18:09:14 ID:oLmj/0Ym
>>476

ありがとうございました!

試してみたんですが、
Set Stream = WScript.CreateObject("Adodb.Stream")
のところで「エラー:オブジェクトがありません 'Wscript'」
というエラーが出て実行できません。

Adodb.Streamってなんのアプリケーションですか?
481名無し~3.EXE:2005/03/21(月) 18:18:29 ID:6jyCZRHe
>>480
WScript.CreateObject("Adodb.Stream")
の代わりに
CreateObject("Adodb.Stream")

//XMLHTTPの方は通ったとでも言うのか?

> Adodb.Streamってなんのアプリケーションですか?

ActiveX Data Objecctと言ってデータベースとやりとりするためのCOM。
Streamクラスは様々なエンコーディングやバイナリを利用できるので、WSHでデータベースとは無関係に利用される。
482名無し~3.EXE:2005/03/21(月) 21:42:01 ID:oLmj/0Ym
>>481

すみません、adodb.streamの問題じゃなくて
>>289のURLを自分の変数に書き換えるのを
忘れていただけでした。

ちゃんと完成しますた!どうもありがとうございました。
<HTML>
<SCRIPT LANGUAGE="VBScript">
set parentwin = external.menuArguments
set doc = parentwin.document
set srcImg = parentwin.event.srcElement
Set shell = CreateObject("Wscript.shell")
Dim url
Dim sPath
url = srcImg.href
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Set HTTP = CreateObject("Microsoft.XMLHTTP")
Set Stream = CreateObject("Adodb.Stream")
HTTP.Open "GET", url, False
HTTP.Send
Stream.Type = adTypeBinary
Stream.Open
Stream.Write HTTP.responseBody
sPath = "d:\sagyou\temp.jpg"
Stream.SaveToFile sPath, adSaveCreateOverWrite
Stream.Close
shell.Run ("""c:\progra~1\irfanview\i_view32.exe""" & " " & chr(34) & sPath & chr(34))
</SCRIPT>
</HTML>
483名無し~3.EXE:2005/03/21(月) 22:08:12 ID:cejDalAu
>>477-478
5台ならどっちでも大差ないと思われ。
台数が増えたら特定鯖以外は外に向かわせない、
という事については禿同。
484名無し~3.EXE:2005/03/25(金) 16:33:40 ID:1CJaWAhr
vbsファイル単体でインクルードファイルみたいなのが仕えないのがウンコすぎ
485名無し~3.EXE:2005/03/25(金) 16:56:02 ID:RvDluTH9
>>484
そっすね

やるとしたら、Script ComponentにしてCOM経由で利用するとか。
あるいはFile System Objectで読んでevalでもいいかもしれませんがw
486名無し~3.EXE:2005/03/25(金) 17:25:06 ID:gdGjCOY7
wsfファイルの知名度が全くない上に使用が何故か忌避される件について
487名無し~3.EXE:2005/03/25(金) 22:03:40 ID:l7RWFjv3
すみません、教えてください。

フォルダをまるごとコピーするのは、以下のようにやればいいとわかったのですが、

Option Explicit
Dim objFS, objFolder
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("c:\test")
objFolder.Copy "c:\test2", True

ちょっとちがって、
現在日時が「2005年3月25日22時1分だとすると」
D:\★★★バックアップ\20050325-2201\ というフォルダを作成し、
その直下に「c:\test」というフォルダをコピーしたいのですが、
どうすればいいのでしょうか?
488名無し~3.EXE:2005/03/25(金) 22:13:34 ID:iRpRhFAB
>>487
誤爆?
WSHスレに逝け。ここでサポさせんじゃねーよ。
489名無し~3.EXE:2005/03/25(金) 22:19:18 ID:sHXKES6m
ん?誤爆?いいんじゃね、ここで聞いても
490名無し~3.EXE:2005/03/25(金) 22:26:21 ID:gdGjCOY7
というかここがその逝けと言う先のWSHスレなんだがな。

>>487
そう言う風に書けとしか。
FileSystemObjectのFolderExistsメソッド、CreateFolderメソッド。
VBの日付関数は良くわからんが、Now関数、Year関数、Month関数、Day関数以下略。
日付のフォーマットってできたっけ?
491名無し~3.EXE:2005/03/25(金) 22:43:26 ID:H2gYG0BY
Dim week(7)
week(1) = "Sun.": week(2) = "Mon.": week(3) = "Tue."
week(4) = "Wed.": week(5) = "Thu.": week(6) = "Fri."
week(7) = "Sat."
Dim theDate, ye, mo, da, we
theDate = Date
ye = Right(Year(theDate),2)
mo = Right("0" & Month(theDate),2)
da = Right("0" & Day(theDate),2)
we = week(Weekday(theDate))
Dim theTime, ho, mi
theTime = Time
ho = Right("0" & Hour(theTime),2)
mi = Right("0" & Minute(theTime),2)
492487:2005/03/25(金) 23:20:26 ID:l7RWFjv3
>>491さん
ありがとうございます。
引用して、作成させていただきました。ありがとうございます。
以下ソース。どもです。
//-----------------------------------------------------------
Option Explicit

Dim week(7)
week(1) = "Sun.": week(2) = "Mon.": week(3) = "Tue."
week(4) = "Wed.": week(5) = "Thu.": week(6) = "Fri."
week(7) = "Sat."
Dim theDate, ye, mo, da, we
theDate = Date
ye = Right(Year(theDate),2)
mo = Right("0" & Month(theDate),2)
da = Right("0" & Day(theDate),2)
we = week(Weekday(theDate))
Dim theTime, ho, mi
theTime = Time
ho = Right("0" & Hour(theTime),2)
mi = Right("0" & Minute(theTime),2)

Dim objFS, objFolder , strNewFolder

strNewFolder = "D:\★★★バックアップ\" & "20" & ye & mo & da & we & "-" & ho & mi
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("C:\Documents and Settings\daisuke\My Documents\tmp_12345\")
objFolder.Copy strNewFolder , True
MsgBox ("finished")
493名無し~3.EXE:2005/03/25(金) 23:22:22 ID:AcTjV5Rd
daisuke
494487:2005/03/26(土) 00:09:07 ID:rE2V6/PA
>>493

あい。ちなみに、wshのスレって2chの中でここだけなんでしょうか?
スレッド検索であれこれ検索してみたものの、ここしかひっかからず(過去ログはひっかかりましたが)
495名無し~3.EXE:2005/03/26(土) 00:14:46 ID:hKPy5ose
一応プログラム板にもあるが、ここ以上に過疎ってるな。
496487:2005/03/26(土) 00:16:52 ID:rE2V6/PA
あ、
WSH(・∀・)スレッド!
http://pc8.2ch.net/test/read.cgi/tech/1055075469/
すね。板一覧を更新してなかったから、気付かなかった。。。
497名無し~3.EXE:2005/03/26(土) 17:11:39 ID:tz5of6ZX
素VBSで"tail -f"を作った香具師いる?

tail動作だけならいいんだが、リアルタイムログ監視に
「割り込み終了されるまで、ループして"cmd /k type %OutFile%"に出力し続ける」方法が思いつかない..orz

shell.execで前に開いてたcmd /kを狙い打ちして落たうえでcmd /kを作り直すぐらいしか思いつかないけど、
これやるとcmd窓を生成して閉じたりで落ち着かなすぎる。。ヽ(`ε´)ノシ
498名無し~3.EXE:2005/03/26(土) 17:32:25 ID:HHlvm/iV
>>497
cmd /c
499名無し~3.EXE:2005/03/26(土) 17:52:44 ID:IykbS86T
ところで、VectorにVBS登録しすぎな吉岡 照雄って人どうよ
500名無し~3.EXE:2005/03/26(土) 18:12:02 ID:tz5of6ZX
>>498
いや、cmd /cしたらtype %OutFile%した後即落ちるだけで、
リアルタイムログ監視になんねぇって..orz

表示更新されるまではtype %OutFile%は表示しっぱなしにしておきたいんだyo。。
501名無し~3.EXE:2005/03/26(土) 18:19:22 ID:HHlvm/iV
>>500
邪道で
SendKeys "type "
SendKeys "~"
502名無し~3.EXE:2005/03/26(土) 18:25:03 ID:HHlvm/iV
>>499
なんというか、ソースみると、いろいろなものがこみ上げてくるyo!
503名無し~3.EXE:2005/03/26(土) 19:03:54 ID:ymp4Pyiy
すいません。
wsfファイルにフォルダーをD&Dして、そのフォルダーのフォルダーアイテムを得ていろいろ処理させるプログラムを書いて、それは一応動くのですが。
D&Dさせるのがフォルダーやファイルの時はWScript.Argumentsで引数を得ることが出きますが、
D&Dさせるのがドライブの時はWScript.Argumentsでは引数を得られない感じなんだけど。
D&Dさせるのがドライブの時は引数を得るやり方ってどうやんの?
504名無し~3.EXE:2005/03/26(土) 19:37:44 ID:aaJhyy63
>>503
はて? ふつうに取得できるが・・・
OSによって違うのかな? 家はXP
505名無し~3.EXE:2005/03/26(土) 19:39:30 ID:hKPy5ose
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fold = fso.GetFolder(WScript.Arguments(0));
WScript.Echo(fold.Path);

でC:\をD&DしたらちゃんとC:\が表示されたよ?
//引数に"C:"を与えると何故かスクリプトファイルのディレクトリが返ってくるな……。
506名無し~3.EXE:2005/03/27(日) 01:45:27 ID:jfpNXAQn
>>505
カレントディレクトリ (作業ディレクトリ)
507503:2005/03/27(日) 14:36:21 ID:BIm9S0iQ
やっぱり動かないです。
505さんの書かれたのでも、フォルダーの時は表示されるのですけど、ドライブだと何の反応もありません。
wsfだけでなくjsファイルにしても同じです。
wshのバージョンは5.6(ie6を入れた時に入ってくる奴)でOSは2kと98seどちらもダメでした。
.Net frameworkを入れてないけど、それは関係ないよね? はて、なにが原因なんだろ?

// a.wsf
<package>
<comment>
</comment>
<job>
<script language="jscript">
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fold = fso.GetFolder(WScript.Arguments(0));
WScript.Echo(fold.Path);
</script>
</job>
</package>
508名無し~3.EXE:2005/03/27(日) 14:40:55 ID:vsDoGgJO
GetDrive メソッド
があるじゃないか
509名無し~3.EXE:2005/03/27(日) 15:02:30 ID:spNL7mMc
どうも507が言うドライブと私の考えるドライブが違う気がする。
私の言うドライブはマイコンピュータのハードディスクドライブカテゴリの中のアイコンなんだが。

コマンドラインからc:\を引数に与えたらどうなるの?
しかし反応がないってエラーも出さないって事?
510名無し~3.EXE:2005/03/27(日) 22:05:33 ID:jfpNXAQn
>>507
ドライブレターだけの時は後に¥をつければいいだろ?
511名無し~3.EXE:2005/03/27(日) 22:19:43 ID:jfpNXAQn
そゆ問題じゃなかったね。
512名無し~3.EXE:2005/03/27(日) 23:00:34 ID:jfpNXAQn
ドライブアイコンをドロップしてもスクリプト実行されない。
513503:2005/03/27(日) 23:19:47 ID:BIm9S0iQ
ども
ドライブってのは、C:\やD:\などを指して使っています。コントロールパネルなどの仮想フォルダーの事を指している訳でもありません。
D&Dは、例えば、エクスプロラーを開いて横のツリーバーからドライブをクリックした状態のをそのままwsfファイルに落す、という事をしています。
動作は無反応という感じでポップアップもなにも出ません。
タスクマネージャーを開いたまま行なうと、
マウスクリックと開始と共にdragと表示され、離すことによりdragが消え、そのまま何も起こりません。
(フォルダーの時はdragが消えた後、ちゃんとwindows script hostと表示されていきます。)
514名無し~3.EXE:2005/03/27(日) 23:38:20 ID:yccwxAJL
>>513
drag って何だ〜〜?
変なソフト入れてんじゃねーの?
515名無し~3.EXE:2005/03/28(月) 00:22:23 ID:t9MumsMh
>>513
無反応じゃなくて、.wsfにドロップしようとすると進入禁止アイコンになって
ドロップできないんじゃないか?うちではそう(Windows 2000 SP4)。

>>514
タスクマネージャで見てると確かにそうなるよ。俺も初めて知ったけど。
516503:2005/03/28(月) 00:45:33 ID:NNtwNvBg
気付かなかったけど、ほんと進入禁止マークが出てる。orz
ってことは、基本的に出来ないということか…。

いろいろお騒がせしました。どもありがとです。
517名無し~3.EXE:2005/03/28(月) 01:07:22 ID:+EiU9/s/
'a.cmd
@echo off
wscript.exe a.js "%1"


//a.js
WScript.Echo(WScript.Arguments(0));

バッチをつかう。
518名無し~3.EXE:2005/03/30(水) 21:09:26 ID:1MT8HTF4
>>497って、わざわざcmdを叩かなくても
cscriptで実行すれば済む話なんじゃないの?
519名無し~3.EXE:皇紀2665/04/01(金) 03:59:28 ID:2VX7sbhD
ファイル名を取得して、ファイル名の一番後ろが
2Byte文字であるかどうかで、特定のフォルダに振り分けたいのですが
良い知恵が有れば貸して頂けませんか?
520名無し~3.EXE:Windows暦21/04/01(金) 12:38:49 ID:lo8qScF5
var filespec;
var moveto;

if(isZenkaku(filespec.length-5)){
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.MoveFile(filespec,moveto);
}

function isZenkaku(char){
var re=/[\u3000-\u9FFF\uF900-\uFDFF\uFF10-\uFF19]/;
if(re.exec(char)){
return true;
}else{
return false;
}
}

全角がすべて判定できるか不明
拡張子は 3 文字に決めうち

やっつけなんでこんなとこで。あとは自分でやり
521名無し~3.EXE:Windows暦21/04/01(金) 13:43:15 ID:9/Fu7UbO
FileSystemObjectのGetBaseName
522名無し~3.EXE:Windows暦21/04/01(金) 13:50:29 ID:5+EvFLRC
なんでFileオブジェクトにはBaseNameプロパティがないんだろうね?
523名無し~3.EXE:Windows暦21/04/01(金) 23:00:27 ID:2VX7sbhD
>>520 有難う御座います。
Fileオブジェクトを渡すのかなと分かりましたが以下のコードでは
Lengthプロパティが無いとエラーになってしまいました。
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FO = FSO.GetFile("D:\test.txt")
MsgBox(FO.Length)

WScript.Arguments とかを使わないと駄目なのでしょうか?
524名無し~3.EXE:Windows暦21/04/01(金) 23:24:02 ID:5+EvFLRC
filespecはfso.MoveFileの第一引数でも使ってるだろう?
MoveFileの引数の解説を見てみたら?

……VBSじゃそもそもlengthプロパティがないんだよな。Len関数か。
いやそもそもfso.GetBaseNameを使えば必要ないな。
後はRight関数?
reはVBSだとRegExpオブジェクトを使う事になるな。


Function LastIsZenkaku(text)
  LastIsZenkaku = IsZenkaku(text, Len(text))
End Function
Function IsZenkaku(char, index)
  Dim regex
  Set regex = New RegExp
  regex.Pattern = "[\u3000-\u9FFF\uF900-\uFDFF\uFF10-\uFF19]"
  IsZenkaku = regex.Test(Mid(text, index))
End Function

//ん〜、IndexOf的な実装にすべきだったかも知れない。
525名無し~3.EXE:Windows暦21/04/01(金) 23:51:55 ID:1sAIN0Te
人が作ったスクリプトから抜き出してみただけだけど…こんなのどう?


If (Asc(c) And &HFF00) = 0 Then
'1バイト文字だった場合
Else
'2バイトだった場合
End If
526520:Windows暦21/04/01(金) 23:57:56 ID:ETotfrdY
そもそも
if(isZenkaku(filespec.charAt(filespec.length-5))){
}

なのでした。
指摘されてるように getBaseNama を使うのがよさげですね。

キモは正規表現だけだと思ったんで他の部分をおろそかにしてた。すまん。
527455:Windows暦21/04/02(土) 03:45:24 ID:SIGWnUSt
>>456,>>457,>>459
どうもありがとうございました。
おかげでかなり便利になりました。マウスでなければフォーカスできない場所にフォーカスしたりもできるようになりました。まだまだできない事が多いですが・・・

アドバイスの中でいくつかわからない点があったのですが・・・
>WM_CLOSEみたいないつ終わるか分からないのはPostMessageで送る
の「いつ終わるか分からない」ってどういうことなんですか?
MSDNでPostMessageを調べたところ、「スレッドがメッセージを処理するのを待たずに制御を返します」と書いてありました。
SendMessageだと「メッセージを処理し終わった後で制御を返します」と書いてあるのですが、それだとSendMessageの方こそ間違いなく閉じれるような気が・・・?
また、いつ終わるか分からないメッセージというのは他にどんなものがあるのでしょうか?それとメモ帳や電卓なんかはSendMessageでやってもちゃんと閉じれたのは何でなんでしょう?

>>459
>んで、SetForegroundWindow が言うこと聞いてくれないのでドツボにはまっていく・・・と。
非常に気になるんですが、これってどういう事なんですか?
私が試した限りではまだ大丈夫みたいなんですが、例えばどういう状況で実行するとちゃんと動作しなくなるのでしょうか・・・?

あと、IUnknownさんのページを拝見しましたが、9x系ではやはりRegisterで2度登録ができないんだそうです。IUnknownさんはdynwrapのソースを改造して修正できたそうですが・・・
528名無し~3.EXE:Windows暦21/04/02(土) 14:24:23 ID:SILxWLY6
Postmessageは命令投げっぱなし。
SendMessageは命令なげて、処理が終わったかどうかを待ってその結果を得られる。

命令が伝わって処理がなされたかどうかが分かるかどうかの違い。
どっちでも命令を受け取った窓で何らかの処理が行われるかはその窓次第。
529519:2005/04/03(日) 02:57:29 ID:CjIormjr
>>520,521,522,524,525,526
色々と有難う御座いました。
仕様について考えてみるとファイル名は固定長で、2Byte文字が入るときは
コメントなので文字数をカウントすれば良い事が分かりました。
逆に難しい事を言ってしまってすみませんでした。有難う御座いました!

Set FSO = CreateObject("Scripting.FileSystemObject")
Set SRC = FSO.GetFolder("D:\test\")
For Each FileName In src.Files
FileEx = FSO.GetExtensionName(FileName)
If LCase(FileEx) = "txt" Then
tmpMsg = tmpMsg & "ファイル名:" & FSO.getBaseName(FileName) & " :" & Len(FSO.GetBaseName(FileName)) & vbnewline
Set SRC = FSO.GetFile(FileName)
If Len(FSO.GetBaseName(FileName)) = 9 Then
SRC.Move("D:\test\comp\")
End If
If Len(FSO.GetBaseName(FileName)) >= 10 Then
SRC.Move("D:\test\incomp\")
End If
End If
Next
MsgBox(tmpMsg)
530名無し~3.EXE:2005/04/03(日) 03:54:22 ID:CjIormjr
ステップアップWSHに有るファイル名変更についてですが
そのまま行ってもエラーになってしまいます。
メソッドの名前が違ったりしますか?

Set fso = CreateObject("Scripting.FileSystemObject")
Set src = fso.GetFile("c:\work\test.xls")
src.Name "test2.xls"
531名無し~3.EXE:2005/04/03(日) 04:02:21 ID:XpZnnAs7
>>530

src.Name = "test2.xls"
532530:2005/04/03(日) 04:15:54 ID:CjIormjr
>>531
こんな時間に有難う御座います。
もう少しスマートな方法が有るかも知れないですが、以下で出来ました。

SRC.Name = Left(FSO.GetBaseName(FileName),9) & "." & FSO.GetExtensionName(FileName)
533名無し~3.EXE:2005/04/04(月) 22:36:03 ID:sQd8caAk
クリップボードから取得してPINGを打とうと書いてみたのですが
取得する行で不明なエラーが出てきてしまいます・・・。

Dim WshShell, oExec, regEx
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objIE = CreateObject("InternetExplorer.Application")
Set regEx = New RegExp

Function Ping(vIPAddress)
For i = 0 To 10
Set oExec = WshShell.Exec("ping -n 1 " & vIPAddress)
Do While oExec.Status <> 1: WScript.Sleep 100: Loop
res = oExec.StdOut.ReadAll
regEx.Pattern = "Reply .* time.*"
regEx.IgnoreCase = True
Set Matches = regEx.Execute(res)
tmpMsg = tmpMsg & Matches(0).Value

Next
WScript.Echo tmpMsg
End Function
clip = objIE.Document.ParentWindow.ClipboardData.GetData("Text")
Ping(clip)

何か分かる教えて貰えませんか?
534名無し~3.EXE:2005/04/04(月) 22:41:29 ID:7Lzw6Z5u
>>533
取得前に
objIE.Navigate "about:blank"
535名無し~3.EXE:2005/04/04(月) 22:50:31 ID:sQd8caAk
>>534 出来ました。有難う御座います。
IEインスタンス?を生成した後にIEを起動?しないと駄目なんですね。
536名無し~3.EXE:2005/04/05(火) 21:17:09 ID:EeZvy05P
すいません。
>>454ってスクリプトの範囲じゃ無理なんでしょうか?
537名無し~3.EXE:2005/04/05(火) 21:40:59 ID:InrlFiZ/
538名無し~3.EXE:2005/04/05(火) 23:11:35 ID:+IHZ+J2r
定期的に実行して、txtに結果を吐き出すってような
スクリプトをJSで作っていて、処理自体は出来たのですが、
ある名前のファイルが存在してるかどうかを条件にフラグを
セットしたい、という所で詰まっています。

一応tryで読み出しを試みて、失敗したらcatch…で、それっぽく
動くのですが、ここの皆さんならもっとスマートなやり方を
知っているかと思った次第ですが、どんなもんでしょうか。
539名無し~3.EXE:2005/04/05(火) 23:17:50 ID:xKbpozuB
>>538
FileSystemObjectのFileExists
実際に読み出したりする必要がある場合はtry-catchしないといけないけどね。
(FileExistsで確認してから実際に開くまでにファイルが消されたりする可能性がある)
540名無し~3.EXE:2005/04/05(火) 23:36:20 ID:+IHZ+J2r
>>539
こんな便利でスマートなメソッドがあるのですね…勉強になりました。
ありがとうございます。
541名無し~3.EXE:2005/04/06(水) 03:16:20 ID:b16a9ER+
ある既存のプロセスが実行された時のカレントディレクトリ取得できませんか?
そのプロセスの作業ディレクトリをスクリプトでいじりたいんですが。
ショートカットの「作業ディレクトリ」がいろいろなんで困ってます。
542名無し~3.EXE:2005/04/06(水) 03:25:16 ID:mjDO/Vvc
>>541
ショートカットの作業ディレクトリなら、
WshShellのCreateShortcutで既存ショートカットへの参照を作成>
WorkingDirectoryプロパティをいじってSave
543名無し~3.EXE:2005/04/06(水) 06:50:51 ID:b16a9ER+
>>542
ありがとうございます。
でも違うんです。
動いているプログラムのカレントディレクトリが知りたいんです。
どうやって起動されたかは判らないと言う前提なんです。
SysInternalのProcessExplorerというツールがありますが、
リストからプロセスを選んでプロパティを見ると、カレントディレクトリが
表示されます。この情報が欲しいんです。

参考
Sysinternals Freeware - Utilities for Windows NT and Windows 2000 - Process Explorer
http://www.sysinternals.com/ntw2k/freeware/procexp.shtml
544名無し~3.EXE:2005/04/06(水) 08:41:53 ID:sYr8Uo4V
Shell.ApplicationのNameSpaceについてなんですが。
// test.js
var WshShell = new ActiveXObject("WScript.Shell");
var objShell = new ActiveXObject("Shell.Application");
var objFolder;
var ssfWINDOWS = 36;
objFolder = objShell.NameSpace(ssfWINDOWS);
WScript.Echo(objFolder.Title);
では動くんですが。これをhtmlファイルにすると動かないんです。これはどこが悪いんですか?
// test.html
<heml><body><script language="JScript">
var objShell = new ActiveXObject("Shell.Application");
var objFolder;
var ssfWINDOWS = 36;
objFolder = objShell.NameSpace(ssfWINDOWS);
document.write( objFolder.Title);
</script></body></html>
545名無し~3.EXE:2005/04/06(水) 19:27:04 ID:Cv00qS0R
>>544
オススメしないが
マイコンピュータゾーンのセキュリティレベルをカスタマイズして
スクリプトを実行しても安全だとマークされていない ActiveX コントロールの
初期化とスクリプトの実行を有効にする。
http://support.microsoft.com/default.aspx?scid=kb;ja;833633

なおXPSP2については知らない。

HTAにするほうがラク。
546名無し~3.EXE:2005/04/07(木) 22:30:31 ID:FuCd3CpG
wshをはじめようと思ってネット検索してたらこんなスクリプトに出会いました。
だけど実行できないのはなぜ。。
ちなみにIriaにURLを送るwshだそうですが、これをまねてIrvineで使えないかなと思っています

エラー行 19
文字 24
エンティティの参照に問題があります-対応する','が見つかりません。

Set Ie = WScript.CreateObject("InternetExplorer.Application")
Set Iria = WScript.CreateObject("Iria.IriaApi")
sURL="適当なURL"

Ie.Navigate sURL
Do While IE.Busy Or IE.ReadyState < > 4
WScript.Sleep 100
Loop
Set document=IE.document
Set window=document.ParentWindow
sURLs=sURL & vbCrLf
For Each oSubLink In document.links
sURL=oSubLink.href
sExt=Right(sURL,3)
If sExt="jpg" Or sExt="png" Or sExt="zip" Or sExt="lzh" Then
sURLs=sURLs & sURL & vbCrLf
End If
Next
Iria.AddUrl sUrls,0
547名無し~3.EXE:2005/04/07(木) 22:42:47 ID:Y6nRP3jI
>>546
Irvineなら/ie_menuフォルダ内のスクリプトを参考にすれば?
548名無し~3.EXE:2005/04/08(金) 00:10:33 ID:7lNebnEp
何処が19行なんだよ。
549名無し~3.EXE:2005/04/08(金) 03:06:27 ID:JQ+L3rxD
クリップボードの内容をいじるプログラムを作りたいのですが,可能でしょうか?
クリップボードの内容を取得する所までは可能な事はいろいろ調べてわかったのですが・・・

やりたい事は,例えばクリップボードに
---
こんにちは.
お元気ですか?
---
なんていうのが入っていたら,実行するとクリップボードの内容を例えば
---
メッセージありがとう.

> こんにちは.
> お元気ですか?
---
というものに書き換えてくれるプログラムを作りたいのです.

どうか,お力をお貸し下さい.お願いします.m(_ _)m
550名無し~3.EXE:2005/04/08(金) 06:24:45 ID:eww1H0/l
551名無し~3.EXE:2005/04/08(金) 13:22:44 ID:59TOkYpy
>>549
> というものに書き換えてくれるプログラムを作りたいのです.
作って欲しいんじゃないんだよな?!

1. クリップボード内容を文字列として取り込む処理
2. 改行で文字列を配列に分割し、各配列の先頭に"> "を付けて結合する処理
3. 2の文字列でクリップボード内容を置き換える処理

をやるようなスクリプト考えれ。1と3はどっか探せばあるスクリプトから切り貼り
2はマヌアル見ながら文字列処理とかループの項見てやれば何となく分かるぞ。

2は正規表現での置換にしてもいいが。
552名無し~3.EXE:2005/04/08(金) 23:23:53 ID:LQZKgdzS
イベント待ち(無限ループ)しているスクリプトAをスクリプトBから任意のタイミングで止めたい
のですが、スクリプトBはどう実現すればいいんでしょうか

今のところalt+ctrl+delで止めてるんですが、不便です
553名無し~3.EXE:2005/04/08(金) 23:26:55 ID:eww1H0/l
Win32_ProcessでTerminate、というのが浮かんだ。
554名無し~3.EXE:2005/04/08(金) 23:49:45 ID:LQZKgdzS
>>553
ありがとうございます
試してみたんですが
スクリプトA1
スクリプトA2
を実行している時にスクリプトA1を停止させたい時に
var e= new Enumerator(GetObject("winmgmts:").InstancesOf("Win32_process"))
for (;!e.atEnd();e.moveNext()){
var Process = e.item();
WScript.echo (Process.Name)
}
で列挙すると
cscript.exe
が二つ表示されてどちらを停止させていいのか・・・
もうすこし調べてみます
555名無し~3.EXE:2005/04/08(金) 23:54:44 ID:59TOkYpy
Bで環境変数設定して、Aのループ内で読んで分岐させれば?
556名無し~3.EXE:2005/04/08(金) 23:59:45 ID:eww1H0/l
>>555
なるほど。

Win32_ProcessならCommandLineプロパティ辺りが有効かな。
557名無し~3.EXE:2005/04/09(土) 00:08:21 ID:7FhXWFoY
>>555
>>556
それでやってみます
あるいはファイルを使用する方法とかもありそうです
いろいろ試してみます

ありがとうございました
558316=322=361:2005/04/09(土) 05:33:18 ID:i/yx9+J/
ちょっと前に、Win98で古いWSHを使っていて、XPから抜こうとして叩かれた316=322=361です。

ここの過去スレのPart.2
http://pc2.2ch.net/win/kako/1022/10222/1022248379.html
の178あたりにある、SendKeysで無変換が使えない、という話、カンタンでしたよ?

WinME MSHOM.OCX 5.1.0.4615の場合、7D6Dh : 29h -> 33h
Win2000 MSHOM.OCX 5.1.0.4615の場合、7D6Dh : 29h -> 33h
(WinME版と微妙に内容が違う)
WinXP WSHOM.OCX 5.6.0.6626の場合、9E3Dh : 29h -> 33h

にするだけです。{KANJI}(半角/全角キー)が使えるようになります。ハングルも使えるみたいです。日本語システムではアレですが・・・

バージョン・インディペンデントのパッチャーも作ったけど、ライセンス違反ですからな〜

FIXWSHOM LZH 436 05-04-08 22:23 FIXWSHOM.LZH
559名無し~3.EXE:2005/04/09(土) 15:42:31 ID:t+/BdBgc
各ActiveScriptのインストール方法が載ってる
http://emeditor.net/EmEditor_Macro_ActiveScript.html
560316=322=361:2005/04/10(日) 07:35:11 ID:hxLuciYw
なんてね。

*** MKFW.RED開始
r ip
100
r bx
0
r cx
1B4
nFIXWSHOM.LZH
e 0100 25 D7 2D 6C 68 35 2D 8C 01 00 00 F6 01 00 00 0F
e 0110 0F 7A 32 20 01 0C 46 49 58 57 53 48 4F 4D 2E 43
e 0120 4F 4D 81 A9 4D 00 00 01 6E 62 62 D7 46 D4 3B EF
e 0130 FD DD 78 B7 26 AE D0 6C 6D C1 9A AA EB 8C 15 04
e 0140 35 55 45 32 30 1C D0 D5 17 40 D1 70 6D A0 E0 F1
e 0150 AB 26 C1 D9 E8 6C 04 11 85 4E 18 7A 25 81 CE 0A
e 0160 51 7A 06 18 1D 01 45 4A 62 94 41 0A 78 2D 80 C1
e 0170 75 C5 31 BB DD 9C 68 4E AA 03 A9 2B 53 E6 C3 E9
e 0180 A6 50 3C 64 85 87 2A 01 E5 89 DD EC A6 58 99 13
e 0190 B0 46 BD 7A A6 7B 27 8F 8D 96 9E E0 79 09 E8 07
e 01A0 D2 4E C8 37 11 B0 6C 86 1A FC 24 F4 EE 22 94 42
e 01B0 B7 D8 3E DB 5B 93 9C 69 28 B0 E5 D8 A2 95 19 CA
e 01C0 87 11 3F C0 55 F9 09 FB 85 6B F2 56 6E 92 6B 83
e 01D0 9B 5B 10 AB 31 FE 12 DC 57 BC 4A 94 34 FD D2 B5
e 01E0 74 AC DE 24 F6 03 CC 90 FE AB F8 94 FE 3F FC EF
e 01F0 E0 27 EC 6D CF E4 24 B8 BA 8E 47 B6 AF 15 9C 04
561316=322=361:2005/04/10(日) 07:36:43 ID:hxLuciYw
e 0200 99 3C F2 E1 55 13 4A 4E FB 8D B4 06 FB 8E 2E 53
e 0210 DE 0F B6 F6 14 F8 03 CE CF CB AB 87 C6 9E A0 73
e 0220 D3 DA 0D DD DC FF D5 57 29 7F 76 A6 5F FE 25 50
e 0230 79 37 ED D7 6D A7 96 B6 83 05 6E 01 D1 11 A4 0E
e 0240 92 C4 6A 03 ED 7F A2 28 03 EC 26 88 3E A6 EF 72
e 0250 3D A6 F9 E3 30 27 5A 48 CF BF 44 65 1F A3 DF 58
e 0260 19 E1 89 D3 97 CD EA B0 C2 F4 E5 49 35 C6 A0 12
e 0270 0E BF 38 DE 96 D7 C5 82 C7 7D 7B 66 52 F9 1C AF
e 0280 5C F9 6A 9B 6D 73 CC 4F 81 49 94 A4 C8 AF 01 40
e 0290 5D D8 9D 7A DC 30 77 84 4E C3 87 63 AF AC 39 79
e 02A0 1C 78 EB 9D 0F 37 9F 43 48 7A 6A 79 29 E8 E6 D3
e 02B0 F1 69 80 00
w
q
*** MKFW.RED終了

1. これをMKFW.REDとして保存後、それを置いてある場所からDOSプロンプトを開く。
2. 「DEBUG < MKFW.RED」とコマンドを入力。
3. FIXWSHOM.LZHのできあがり。

あと、何で使えなくなってたのかは未解析。
562名無し~3.EXE:2005/04/10(日) 16:44:24 ID:WSO8k2/E
あえてPerlでWSHやってる人とかいるのかね
563名無し~3.EXE:2005/04/10(日) 21:22:15 ID:VpAjoNGH
たまに使うよ。

こんなページも見つけた
ttp://material.s9.xrea.com/wsh/
564名無し~3.EXE:2005/04/10(日) 22:19:08 ID:DoDLxJHj
そういえば自分はphpでDoodle2使ってるんだが、
データをバイト型バリアント配列に保存する
GetCanvasが使えないんだよね。
自分が使いこなせてないだけかもしれないけど(;´д⊂ヽ
565536:2005/04/11(月) 03:40:40 ID:PoljGR0K
>>537
おぉおおお、なんかよさげです。
サンクスです!
566名無し~3.EXE:2005/04/13(水) 15:46:37 ID:4/UBgKZr
WSHで「ファイル開く」ダイアログを表示することはできたんですが、
「フォルダを開く」ダイアログを表示することができません。
どうしたらよいでしょうか?
567名無し~3.EXE:2005/04/13(水) 15:54:39 ID:UcjYXxMo
>>566
フォルダの参照の方が簡単だと思うけどなぁ。
ttp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/shell.htm

ん? フォルダを「開く」?
568名無し~3.EXE:2005/04/13(水) 16:20:42 ID:4/UBgKZr
>>567
 「ファイルを開く」コモンダイアログでも「フォルダを選択」の動きを
するような局面ってありませんでしたっけ・・・・。
 でも、「フォルダの参照」の方が自然なのでこっちを使うことにします。
有難う御座いました!
569566:2005/04/13(水) 16:58:26 ID:4/UBgKZr
すみません。引き続き質問なんですが、WSHとしてBrowseForFolderメソッド
を使い「フォルダ参照」ダイアログを表示することはできたんですが、拡張子
をhtmlとしブラウザ上で表示させようとするとBrowseForFolderの所で「書
き込みできません。」というエラーが出てしまいます。このメソッドはブラウ
ザ上からは利用できないのでしょうか。

以下のソースの6行目でエラーが出てしまいます。
---[test.html]-------------------------------------------------
<HTML>
<HEAD>
<SCRIPT language="VBScript">
Sub ShowDialog()
Set Shell = CreateObject("Shell.Application")
Set f = Shell.BrowseForFolder(0,"フォルダの参照",BIF_EDITBOX)
MsgBox f.Items.Item.Path
End Sub
</SCRIPT>
</HEAD>
<BODY>
<INPUT type="button" onClick="Call ShowDialog" value="フォルダの参照">
</BODY>
</HTML>
--------------------------------------------------------
570名無し~3.EXE:2005/04/13(水) 17:22:20 ID:UcjYXxMo
>>569
>>545

//ローカルのhtmlにも制限がかかるようになったのはいつからだろ?
571566:2005/04/14(木) 10:10:52 ID:cbVq+pPV
569のソースを自分の試せる環境で実行してみました。

 ローカルhtaとして実行 → ○
 ローカルhtmlとしてブラウザで読み込み実行 → ×
 ローカルのIIS経由で実行 → ×
 LAN上の他のマシンのIIS経由で実行 → ○
 インターネット上の他のマシンのApache経由で実行 → ○

 ローカルで実行するとエラーが出るのに、ネットおよびWebServer経由
での実行であればエラーが出ませんでした。セキュリティの観点でVBSの
実行が制限されているのであれば、ローカルhtaのみ実効可でないと変だ
と思うのですが。
572名無し~3.EXE:2005/04/14(木) 19:59:13 ID:baZa55H7
>>571
おまえさんのセキュリティ設定がおかしいだけじゃないの?
スパイウェア飼ってるとか・・・
573名無し~3.EXE:2005/04/14(木) 20:28:09 ID:5eyTpVZp
おまいさん←最近これ使うヤツ多いな。変なの。
574名無し~3.EXE:2005/04/14(木) 20:40:15 ID:xZN/PpjV
>>573
このスレで使ったのは君が初めてだ。おめでとう。
575名無し~3.EXE:2005/04/14(木) 22:57:54 ID:KPkW1jmg
輝いてねぇw
576名無し~3.EXE:2005/04/15(金) 01:57:20 ID:g8Mouc+V
>>571
IEのセキュリティゾーンにマイコンピュータを追加する
ttp://pcweb.mycom.co.jp/column/winxp/116/
IEのセキュリティゾーン関連のレジストリエントリについて
ttp://support.microsoft.com/default.aspx?scid=kb;ja;182569
577549:2005/04/15(金) 19:50:47 ID:jlUyjH4k
>>551
だ、駄目です・・・1. までしかできません(T_T)
2. は素人の僕には無理だったのと,あと
3. は,wshで本当にできるのでしょうか??

すみません,誰か,>>549を作って下さいm(_ _)m
お願いします.
578名無し~3.EXE:2005/04/15(金) 20:00:31 ID:WH5y3bNt
めんどくせぇからDMonkeyだw
var objClip = new Clipboard, text = new Strings(objClip.asText);
for(i in text) text[i] = ">" + text[i];
objClip.asText = text.text
579名無し~3.EXE:2005/04/15(金) 22:01:31 ID:R2/T0mJW
/*clip.js*/
/*親切バージョン*/
//IEのオブジェクト生成してIE起動
var IE = new ActiveXObject("InternetExplorer.Application");
IE.Navigate( "about:blank");
//IEが立ち上がるまで待つ
while(IE.Busy)Wscript.Sleep(10);
//クリップボードから文字列取得
str= IE.Document.parentWindow.clipboardData.getData("text");

//クリップボードが空なら終了
if(!str){IE.Quit();WScript.Quit();}
//最後が改行なら除去
if(str.length>2 && str.substr(str.length-2, 2)=="\r\n")str=str.substr(0, str.length-2);
//文字列を改行で分割して配列に格納
var arr=str.split("\r\n");
//配列の各要素の先頭に>をつける
for(var i=0;i<arr.length;i++)
arr[i]=">"+arr[i];
//配列の要素を結合して文字列に
var text=arr.join("\r\n");
//クリップボードに格納
IE.Document.parentWindow.clipboardData.setData("text", text);
//IE終了
IE.Quit();
580551:2005/04/16(土) 10:45:27 ID:eXau2MGq
>>578-579
藻前らやさしいな。

>>549=577
579のスクリプトはちゃんとどっかに保存しておけ、
別の機械にクリップボード内容を処理したり、
文字列を行毎に分割して処理したいときの雛形にしれ。
人の書いたスクリプトを多少なりとも理解して改変して使うのが上達の道だ。

慣れてくれば、>>551みたくまずフローチャートを考えて、
それに当てはまる部品をあちこちから拾ってくればいいと分かるようになるぞ。

ガンガレ
581549:2005/04/19(火) 00:14:24 ID:EJ4asA5i
>>578-580
ありがとうございましたm(_ _)m
582名無し~3.EXE:2005/04/20(水) 01:26:09 ID:I8Fl6lY2
JScriptでvar UserWrap = new ActiveXObject("DynamicWrapper");
とやってwin32apiを使おうとしたのですが、
Automation server can't create object.
というエラーで終了してしまいます。

MicrosoftのwebではWSH5.6にしろと書いてありましたが、
WinXP SP2で、wscript.exeを実行すると5.6のようです。
どのあたりが原因か、心当たりのあるかたはいらっしゃいますか?
583名無し~3.EXE:2005/04/20(水) 01:34:50 ID:CQsC1nQa
DynaCallのCOM登録に失敗してないか?
ていうかDynaCall(>>19)入れてる?
584名無し~3.EXE:2005/04/20(水) 02:37:25 ID:I8Fl6lY2
>>583
がーん、COM登録に失敗していました……。
いやまさかと思いつつ試してみたら……。
583さん、ありがとう。
585名無し~3.EXE:2005/04/20(水) 15:22:04 ID:DM6Iua9Y
データベースのインターフェースをHTAで書こうとおもっています。
データバインドがなかなか使いやすそうだったのですが、ローカルの
MDBファイルに接続する方法がわかりません。
今はいったんADOで読み出してXMLに保存した後、それをRDSで
バインドしていますが、これは少々面倒だし、編集できないので不便です。
何か良い方法はないでしょうか。
なるべく素のWindowsXPだけで、複雑な手順無しでできるとたすかります。
(ODBCデータソースの設定が必要とかだとちょっと厳しいです)
586名無し~3.EXE:2005/04/20(水) 17:28:33 ID:ahDEpnSY
>>585
こういう事でいいのかな?
このコード埋め込んだ.htmはローカルでも動いたから、.htaでも大丈夫かも(試してないけど)

<!-- CSVファイルをオブジェクトとして参照する -->
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
ID=MDB WIDTH=0 HEIGHT=0>
<PARAM NAME="DataURL" VALUE="cgi-bin/data/mdb.txt"><!-- CSVファイルの指定 -->
<PARAM NAME="UseHeader" VALUE="True"><!-- データファイルの1行目をフィールド名として使う -->
<PARAM NAME="CharSet" VALUE="EUC-JP"><!-- データファイルの文字コード。CGI処理し易いものを。 -->
<PARAM NAME="FieldDelim" VALUE=" "><!-- 実はCSVでなくタブ区切りを使ってます。この方が便利だから。 -->
</OBJECT>

CLASSIDについてはここを見た
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpisdk/dhtml/dhtml.asp
587名無し~3.EXE:2005/04/20(水) 18:02:40 ID:ahDEpnSY
FieldDelimの所、空白になっちゃったけどダブルクォーテーションの中は&#09;って入ってる。

私も質問
IEのAタグのハイパーリンクは、ドラッグアンドドロップでHTAに落とせるけど、
IEに表示されている画像をHTAまでドラッグしても、カーソルが禁止マーク(○の中に\)になってドロップ出来ません。
セキュリティ設定をインターネット (「中」までしか落とせなかったけど)/ローカル共甘くしても現象変わらず。
もちろん、デスクトップ等にあるローカルファイルなら画像、その他区別無くHTAにドロップ出来ます。

IEに表示されている画像を何らかの設定でHTAにドロップ出来るようにすることは可能でしょうか?
(ドロップ操作で、URLを取得したい)

>>505-516 辺りに似たような話で禁止になる場合と、ドロップできる場合がありますね。
(ちなみに家じゃ505と同じくドロップ出来てC:\が表示されます。)

Windows XP Home SP2
588585:2005/04/20(水) 18:07:18 ID:DM6Iua9Y
>>586
Tablular Data Control は残念ながらデータベースには接続できないようです。
それ以外の点はほぼ申し分ないのですが。
やりたいのはこんなかんじなのですが、IISがないと駄目みたいです。

<OBJECT classid="clsid:bd96c556-65a3-11d0-983a-00c04fc29e33" id="dso">
<PARAM NAME="SERVER" VALUE="localhost">
<PARAM NAME="SQL" VALUE="select * from data">
<PARAM NAME="CONNECT" VALUE="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Z:\access.mdb;">
</OBJECT>
589585:2005/04/20(水) 18:24:48 ID:DM6Iua9Y
<OBJECT classid="clsid:bd96c556-65a3-11d0-983a-00c04fc29e33" id="dso"></OBJECT>
<SCRIPT>
rs = new ActiveXObject("ADODB.Recordset");

// これはNG
//rs.Open("select * from Car", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb");

// こっちはOK
rs.Open("data.xml");
dso.SourceRecordset = rs;
</SCRIPT>

.な〜ぜ〜 orz...
590名無し~3.EXE:2005/04/20(水) 18:41:55 ID:ahDEpnSY
かなりちぐはぐなことを書き込みました、すみません。

>>585
かなり質問の意味を誤解してました。.MDBじゃ>>586は駄目なんですね。

587 質問撤回
IEのアドレスバーからURLをドロップすればOKなんですが、
すみません本当はIEじゃなくSleipnirで表示した画像の場合だったんです。
WSHでもHTAでも無いので、質問自体撤回します。
591名無し~3.EXE:2005/04/20(水) 19:28:39 ID:nPqrBiaC
>>585 こんな?ADODB.Connectionは使わなくてもいけるけど。

var ADOConnec = new ActiveXObject("ADODB.Connection");
var ADORecset = new ActiveXObject("ADODB.Recordset");

var adLockOptimistic = 3;
var adOpenForwardOnly = 0;
var ConStr = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\hoge.mdb;";

ADOConnec.Open( ConStr );
ADORecset.Open( "TableName", ADOConnec, adOpenForwardOnly, adLockOptimistic );

ADORecset.AddNew();
ADORecset.Fields("id").Value = "001"
ADORecset.Fields("name").Value = "Tanaka"
ADORecset.Update();
ADORecset.Close();
592名無し~3.EXE:2005/04/20(水) 19:31:58 ID:ahDEpnSY
Access持ってないので完了は出来ないのですが

//rs = new ActiveXObject("ADODB.Recordset"); // 接続を使用できない云々
rs = new ActiveXObject("ADODB.Connection");

// データベースc:\temp\data.mdbの形式が認識できません(中身が空なので当然)
rs.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\temp\\data.mdb");
593名無し~3.EXE:2005/04/20(水) 20:39:57 ID:DM6Iua9Y
>>591
ADODB.Recordsetを使ったデータアクセスのやり方が分からないわけではありません。
MSHTMLにデータバインドという仕組みがあるので、これを活用したいのです。
他にもっと便利なフレームワークがあるなら、そちらでも構わないのですが。

>>592
えーと、お返事の意味がちょっとよくわかりません。
もしや、 >>589 を誤解されてるのかな?
こういう事なんですが。

<SPAN id="s1" datasrc="#dso" datafld="table1"> NG </SPAN>
<OBJECT classid="clsid:bd96c556-65a3-11d0-983a-00c04fc29e33" id="dso"></OBJECT>
<SCRIPT>
rs = new ActiveXObject('ADODB.Recordset')
rs.Open("select * from data", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb");
dso.SourceRecordset = rs;
alert( rs.Fields("table1").value ) // OK
alert( s1.innerText ) // "NG" なぜかバインドされない
rs.Save("data.xml", 1);
rs.Close();

rs = new ActiveXObject('ADODB.Recordset')
rs.Open("data.xml");
dso.SourceRecordset = rs;
alert('バインド完了を待つ');
alert( s1.innerText ) // OK
</SCRIPT>
594名無し~3.EXE:2005/04/20(水) 22:30:41 ID:iHp+Atly
代わりにデータアクセスページなんかどうよ?
DataSourceControlを手書きだと死ねるがAccessに作らせりゃかんたんだべ。
595名無し~3.EXE:2005/04/21(木) 01:39:21 ID:4t9dyTbf
最初はそれを考えてたんですけど、うまく使いこなせなくて。
折角表現力の高いHTMLを使ってるのに、イモなデザインしか
できないし、他のツールからはメンテ不能なHTMLを吐くし。

データバインドできそうもないし、HTMLテンプレートライブラリを探すかな。
JSかVBSで動くものがあればいいのだけど。
596名無し~3.EXE:2005/04/21(木) 08:51:05 ID:lKL5R/Zz
以前似たようなことをしようとして挫折した私は、
ADODB を操作して、HTML ソースをちまちまと出力するという
スクリプトで妥協しています…orz
ローカル .mdb でデータバインドって、やっぱり無理なんですかねえ。
597名無し~3.EXE:2005/04/21(木) 17:00:59 ID:4q4m33kR
ログオンの失敗をメールで通知する
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/452rejectlogon/rejectlogon.html

このスクリプトの機能をC++アプリで作りたいんですけど、難解で行き詰まりです。
ご存知の方いませんか?ちょっとスレ違いかもしれませんがお願いします。

C++で作りたい理由は、サービスとして実行したいからです。
598名無し~3.EXE:2005/04/21(木) 18:35:23 ID:XY5pZoXi
>>597
.NET/C#辺りで作るというのは。

てのはおいとくとして(お薦めだけど)、結局COMで実装されているのだからそのように、と。
ttp://zatsugaku.info/index.php?Program%2FWmi%2FProgram
599名無し~3.EXE:2005/04/21(木) 22:55:42 ID:QrUf5Bfs
複数のファイル名又はフォルダ名を引数にして名前に含まれる半角カタカナを全角カタカナに直す
スクリプトを作りたいのです。ググって調べてコピペして以下のようなものをでっちあげました。
構想1ヶ月、書いたり直したりで1週間かかった始めてのプログラム(というかスクリプト)です。
とりあえず思ったように動いていますが、いかにも不細工だと思います。これでよいのでしょうか?
きっとクールな方法があるはず。えらい人、添削してもらえませんでしょうか。

On Error Resume Next
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Set arg=WScript.Arguments
If arg.Count=0 Then 'もしオプションがついていなければ
   msgBox("1つ以上のファイル名又はフォルダ名を引数にしてください。")
  WScript.Quit
End If
600599の続き:2005/04/21(木) 22:57:11 ID:QrUf5Bfs
For i = 0 To arg.Count-1
  If Fs.FileExists(arg(i)) Then 'もし、与えられたパスがファイルなら
    Set f=Fs.GetFile(arg(i)) 'fというオブジェクト変数にFileオブジェクト代入
    newname = Henkan(f.name)
     Fs.MoveFile f.name , newname
  ElseIf Fs.FolderExists(arg(i)) Then 'もし、与えられたパスがフォルダなら
     Set f=Fs.GetFolder(arg(i)) 'fというオブジェクト変数にFolderオブジェクト代入
       If f.IsRootFolder Then 'ルートフォルダを指定するといろいろ不都合が出るので除外
         MsgBox "ルートフォルダは指定できません。"
         WScript.Quit
       End If
     newname = Henkan(f.name)
  Fs.MoveFolder f.name , newname
  Else 'パスが存在しない場合、終了
    MsgBox "このパスは実在しません。"
     WScript.Quit
  End If
Next

Set Fs = Nothing
Set arg = Nothing

Function Henkan(oldname)
  newname = Replace(oldname ,"ガ","ガ")
  '↑↓この間、100行くらい延々と文字変換
  newname = Replace(newname ,"ン","ン")
  Henkan = newname
End Function

601名無し~3.EXE:2005/04/21(木) 23:38:57 ID:XY5pZoXi
ああうん、なんていうかお疲れ。
全半角変換ってのはそんなに要望が多いのか、けっこう転がってる。
ttp://www.google.com/search?num=100&hl=ja&lr=lang_ja&oe=utf8&q=vbscript%7CWSH+%E5%85%A8%E8%A7%92+%E5%8D%8A%E8%A7%92
変換部分はそう言うのも参考にすればいいかも。
//コードからはロジックを掴みにくいだろうけど。

で、MoveFile/MoveFolderの部分、まともに動く?
スクリプトのファイルがあるところと同じフォルダ(というかカレントディレクトリ)にある物しか扱えないと思うんだけど。
MoveFile/MoveFolderするならフルパスで指定してやらないと。
ParentFolderプロパティが使えるかな。

MsgBoxよりもWScript.Echoの方が好みとか。
//cscriptで実行したとき標準出力に流されるから。普通にwscriptのときはMsgBoxと同じ動き。
602名無し~3.EXE:2005/04/21(木) 23:59:10 ID:4LK0cljt
たぶん一番クールな方法は
文字列処理が得意な言語を使うことだろう。
603名無し~3.EXE:2005/04/22(金) 00:08:24 ID:FhnPDLMi
>>598
ありがとうございます。参考になります。
604名無し~3.EXE:2005/04/22(金) 00:31:52 ID:rLYEJNRb
1から700000までの数字を,ランダム(又は規則性がばれない)な順番で,重複無く出力するには,どうしたら良いでしょうか?
相当に悩んでいます.お願いします.
605599:2005/04/22(金) 00:35:16 ID:G1kk6+Kl
>>601
ロジック全然わからないけど、ありがとうございました。

> で、MoveFile/MoveFolderの部分、まともに動く?
動いてる。何故かはわからない・・・

それより、与える引数が多くなると、食べ残しがでてくるのが悩みです。
大丈夫な引数の数は一定しない。
長いファイル名が多いと変換できる数が少なくなるような。
ひょっとして、引数にできる文字数の限界ってありますか?

>>602
bccをインストールして最初の2週間はC言語で何とかしようとしていました。
hello world はからはじまって配列の受渡くらいまでは楽しかったけど、
半角全角が入り混じったファイル名の変換なんてとても無理と悟りました。
文字列処理が得意な言語ってなんでしょう。
606名無し~3.EXE:2005/04/22(金) 00:50:19 ID:3h24UcpQ
>>604
メモリに余裕があるなら
1 ・1から700000までの数字を配列にいれる
2 ・配列をシャッフルする
3 ・配列を先頭からひとつづつ取り出す

メモリが厳しいなら1-3をディスクに書きながらやる
607えすひろ:2005/04/22(金) 00:55:40 ID:2RMoFGjI
Javaかな?全角/半角に関係なく1文字は1文字として扱われる。
詳しい方フォローよろしくm(__)m
608名無し~3.EXE:2005/04/22(金) 00:59:40 ID:LYxmu7Fd
>>605
>文字列処理が得意な言語
perl とか ruby あたりはちょろっと出てきそうだけど.
インストールサイズを絞りたいなら awk + sed という手もある.
609604:2005/04/22(金) 02:08:31 ID:rLYEJNRb
>>606
誰かその部分だけ作って頂けませんか?
出力部分とかは標準出力で構いませんm(_ _)m
610名無し~3.EXE:2005/04/22(金) 02:11:33 ID:lGrXIHjF
>>599
ファイル名やフォルダ名の変更は、
f.name = newname
でok。
f.name = Henkan(f.name)
でも良いかもしれん。


全角半角変換は、>>19のBASP21をインストすれば一発。

スクリプトだけでやるなら
ttp://www.geocities.jp/clone_01/kanaToKANA.htm
みたいな方法が楽かも。
JavaScriptだけどやってることは分かると思う。
611名無し~3.EXE:2005/04/22(金) 03:58:35 ID:T9e55UM7
>>609
スクリプトでの配列のシャッフルは非現実的じゃないか?
700000個もの配列になると、おそらく途方もない時間がかかると思われ。
vbscriptだとどうか知らないが、javascriptだと特に配列のコストが高いので。

と思って自作のウンコアルゴリズム(jscrpt)でシャッフルしてみた

配列の数   所要時間概算(秒)
1000      2
2000      8
4000      32
10000     215

配列の数がn倍になると時間はn~2倍かかってる?
つまり700000個の数だと(700~2)*2=980000秒≒11日ってこと(;´Д`)?

まあこれはウンコにせよ素直にCで書くことを勧める。
いいアルゴリズムはそこらへんに転がってると思う。
612名無し~3.EXE:2005/04/22(金) 04:00:57 ID:T9e55UM7
ああ、実験環境はP4 2.8GHz(HT)ね。
613604:2005/04/22(金) 04:06:02 ID:rLYEJNRb
>>611
ありがとうございます.ではランダムは非現実的として,
普通の人が見て規則性がわからなければ良いのですが,何か良い方法は無いでしょうか?
614名無し~3.EXE:2005/04/22(金) 04:23:21 ID:T9e55UM7
>>613
各桁を乱数で発生させて、文字列として結合すればいいんでね?

615名無し~3.EXE:2005/04/22(金) 04:31:59 ID:bW1SQEJM
1〜700000の値と乱数シードを何らかのハッシュ関数にかける。
ハッシュ関数を工夫すれば、出力も1〜700000で重複無く出てくるようなのも可能かも。
616名無し~3.EXE:2005/04/22(金) 05:31:38 ID:nW+jJIk/
>>611
いったいどういうコード書いたんだ?
処理の内容からしてn~2倍になるなんておかしいだろ。
面倒なのでhtmlのスクリプトで作ったが、Celeron700Mhzで
JavaScriptの場合30秒。VBScriptの場合10秒程度だったぞ。(出力時間含まず)
VBの方が早いのは内部的なデータ形式のせいだろうな。
617名無し~3.EXE:2005/04/22(金) 05:32:01 ID:nW+jJIk/
<script language=javascript>
<!--
document.write(new Date()+"<br>");
size=700000; a=new Array(size); for(i=0; i<size; i++) { a[i]=i; } //初期化
with(Math){ for(i=0; i<size; i++) { j=floor(random()*size); tmp=a[j]; a[j]=a[i]; a[i]=tmp } } //ランダム化
document.write(new Date()+"<br>");
//出力
//for(i=0; i<size; i++) {
//if((i%25)==0)document.write("<br>");
//document.write(a[i]+" ");
//}
-->
</script>
618名無し~3.EXE:2005/04/22(金) 05:32:27 ID:nW+jJIk/
<script language=vbscript>
<!--
document.write(Time() & "<br>")
Dim a() : size=700000-1 : ReDim a(size) : For i=0 To size : a(i)=i :Next : Randomize '初期化
For i=0 To size : j=Int(Rnd()*size) : tmp=a(j) : a(j)=a(i) : a(i)=tmp : Next 'ランダム化
document.write(Time() & "<br>")
'出力
'For i=0 To size
'If (i Mod 25)=0 Then document.write("<br>")
'document.write(a(i) & " ")
'Next
-->
</script>
619604:2005/04/22(金) 14:43:33 ID:eIeLFBuC
>nW+jJIk/
ありがとうございましたm(_ _)m
620名無し~3.EXE:2005/04/22(金) 18:29:22 ID:CcMx5Djc
//半角 ==> 全角 変換
var O_Dic = {} , Re_Hankana = new RegExp();
sub_initialize(O_Dic, Re_Hankana);

var s = sub_hanToZen("アイスでゴザイマス");
WScript.Echo(s.split("").join("\n"));

s = sub_hanToZen("パソコン検定"); //パは未定義なのでハだけ変換
WScript.Echo(s.split("").join("\n"));

function sub_hanToZen(s){
return s.replace( Re_Hankana , sub_replaceFunc );
}
function sub_initialize(dic, reHan){
var s_zen1 = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン";
var s_han1 = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン";

var s_zen2 = "ガギグゲゴザジズゼゾ";
var s_han2 = "ガギグゲゴザジズゼゾ";

var a_zen2 = s_zen2.split("");
var a_han2 = s_han2.match(/../g);

var a_zen = s_zen1.split("").concat( a_zen2 );
var a_han = s_han1.split("").concat( a_han2 );

for(var i=0, n=a_han.length ; i<n ; i++){ dic[ a_han[i] ] = a_zen[i]; }

var s_pattern = a_han2.join("|") + "|["+ s_han1 +"]";
reHan.compile( s_pattern , "g" );
}
621620:2005/04/22(金) 18:30:18 ID:CcMx5Djc
function sub_replaceFunc(sHan){ //置換関数
var s = O_Dic[sHan];
return s ? s : sHan;
}


/* 要点
連想配列
o["ア"] = "ア"
o["イ"] = "イ"
o["ガ"] = "ガ"
o["ギ"] = "ギ"

正規表現
/ガ|ギ|[アイ]/g

置換関数
Windows Script 5.5 の新機能
http://www.microsoft.com/japan/msdn/columns/scripting/scripting121399.asp
*/
622名無し~3.EXE:2005/04/22(金) 21:36:26 ID:J6b6cM/N
>>607
JavaScriptもVBScriptもJavaと同じくUnicodeを使っているから全角・半角に関わらず同じ1文字として使える。

>>605
Cは文字列処理が最も面倒くさい言語の1つ。それよりはせめてC++を。
623604:2005/04/22(金) 22:21:51 ID:eIeLFBuC
>>617
>>618
スイマセン(>_<) >>617-618の内容をhtmlに組み込んで出力まではできたのですが
出力の量が大きすぎてクリップボードにも保存できないしOSが固まってしまうので
wshに書き換えたのですが,wshに書き換えると順番がランダムに変わらずに
0 1 2 3 4 5 6 ・・・699999 という順番になってしまいます.何故でしょうか?

---ソースここから
Dim a() : size=700000-1 : ReDim a(size) : For i=0 To size : a(i)=i :Next : Randomize '初期化
For i=0 To size : j=Int(Rnd()*size) : tmp=a(j) : a(j)=a(i) : a(i)=tmp : Next 'ランダム化

For i=0 To size
If (i Mod 40000)=0 Then WScript.Echo "-----"
WScript.Echo i
Next
---ソースここまで

---出力ここから
0
1
2
(略)
699998
699999
---出力ここまで
624名無し~3.EXE:2005/04/22(金) 22:41:20 ID:Ed0YldEa
>>623
>  For i=0 To size  
>  If (i Mod 40000)=0 Then WScript.Echo "-----"
>  WScript.Echo i
>  Next  

なんだこれはw
iをそのまま出力したらそりゃ順番通りになるっしょ
625604:2005/04/22(金) 22:57:29 ID:eIeLFBuC
あ,,,a(i) だ... アホだ俺...失礼しました (>_<)
626599:2005/04/22(金) 22:58:12 ID:G1kk6+Kl
>>610
> f.name = Henkan(f.name)でも良いかもしれん。
OKでした。オブジェクトがパスを覚えててくれるのかな。
> 全角半角変換は、>>19のBASP21をインストすれば一発。
週末にでもやってみます。

引数を食べ残す件について。引数全体の文字数が約1,000を超えると以降の引数を受け取ってもらえない
ようです。無限とは思ってないけど、ちょい不便。

>>620
ありがとうございます。とてもスマートな感じがします。var s_zen2とvar s_han2にパ→パを加えればパも
変換できるようになるのは魔法みたいです。こんことができるなんてWSHは実は文字列処理が得意なんですね。
流用させてもらってファイル名を変換するようにはできそうです。が、中身を理解するには時間がかかりそうです。
連想配列って言葉は初めてです。面白そうですが、文字列を添字とする配列ってなんのことだか・・・。
int a[10]; でメモリ上に変数が順番に並ぶというのとどういう関係があるのか検討つきません。
「Wshクイックリファレンス」にもC言語の本にも書いてないようです。お勧めの本があったら紹介してもらえませんか。
627名無し~3.EXE:2005/04/22(金) 23:35:38 ID:VV0FBlSG
それにはまずハッシュというものについて調べるといいかも
628名無し~3.EXE:2005/04/23(土) 19:13:53 ID:hzrEoXvs
Scripting.Dictionary
629名無し~3.EXE:2005/04/27(水) 20:46:17 ID:2JsONT23
nternetExplorer.Applicationを使って表示したHTML内のボタンが
押された時に処理を行いたいのですが
OnQuiteのようにイベントを取得する事はできますか?
(処理でWscript.sleepを使いたいのでHTML内に記述するのがNGなんです。)

dim IE
set IE = Wscript.CreateObject("InternetExplorer.Application")
IE.Navigate("about:blank")
IE.Visible = True
IE.document.writeln "<html>"
IE.document.writeln "<body>"
IE.document.writeln "<input type=""button"" id=""button1"">"
IE.document.writeln "</body>"
IE.document.writeln "</html>"

こんな感じで、button1が押された時に処理を行いたいのです。
630名無し~3.EXE:2005/04/27(水) 21:07:10 ID:bvzj/Da/
.hta
631名無し~3.EXE:2005/04/27(水) 21:17:30 ID:2JsONT23
すいません、htaでwscript.sleepはどう使えばよいのでしょうか?
632名無し~3.EXE:2005/04/27(水) 21:29:07 ID:/z24n95Z
強引な手法(JScript)
IE.document.writeln( "<script>button1.onclick=BClick;function BClick(){alert( \"Hello World!\" );}</script>");
633名無し~3.EXE:2005/04/27(水) 21:33:21 ID:CUMD5NCq
function foo () { bar; }
IE.document.button1.onclick = foo;
でできなかったっけ。
VBScriptなら、GetRef したものをを Set
634名無し~3.EXE:2005/04/27(水) 22:19:11 ID:2JsONT23
うまくできませんでしたorz

レスくださった方ありがとうございました!
勉強して出直してきます・・・。
635名無し~3.EXE:2005/04/27(水) 22:48:50 ID:2JsONT23
もう一度だけチャンスを・・・

set IE.document.all.button1.onclick = GetRef("foo")
sub foo()
' 何かの処理
end sub

これでボタンをクリックしても動作せず、

set IE.document.all.button1.onclick = GetRef("foo")
IE.document.all.button1.onclick ' 自動でボタンクリック
sub foo()
' 何かの処理
end sub

これだと動きました。
自動でなく手動でクリックしたときに処理を行いたいのですが・・・
知恵をお貸しいただけませんでしょうか。。
636635:2005/04/28(木) 03:20:26 ID:Jh+UKJLo
自己解決しました・・・。

> set IE.document.all.button1.onclick = GetRef("foo")
> sub foo()
> ' 何かの処理
> end sub

とした場合、Script自体が終了していました。
ご迷惑をおかけしてすいませんでした。
637名無し~3.EXE:2005/04/28(木) 20:25:36 ID:MAmBH1dO
こいつここの住人なんだが、なんとかしろよ。

http://etc3.2ch.net/test/read.cgi/charaneta2/1114503447/

スレ主
ttp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

それともここの住人はこんなイカレてる奴等ばかりなのか?
638名無し~3.EXE:2005/04/28(木) 20:27:07 ID:MAmBH1dO
こいつどうにかしろよ。

http://etc3.2ch.net/test/read.cgi/charaneta2/1114503447/
ここのスレ主。ここの住人だろ。
ttp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
それともキチガイばっかなのか?
639名無し~3.EXE:2005/04/28(木) 21:02:41 ID:e0x+3Vw5
黄金厨にしては気が早いですね
640名無し~3.EXE:2005/04/29(金) 16:32:52 ID:AqIwlnJ9
>>636
どゆふに自己解決したの?
641名無し~3.EXE:2005/04/29(金) 20:05:12 ID:3SsurYEK
稼動中のosがインストールされてるドライブ名や、ログオンアカウントを取得できますか。
こんなふうに、スタートメニュー に SendTo を追加する batファイル を作りたいのですが。
cony "?:\Documents and Settings\[logon-account]\SendTo のショートカット" "?:\Documents and Settings\[logon-account]\スタート メニュー"
642名無し~3.EXE:2005/04/29(金) 20:05:54 ID:3SsurYEK
cony→copy
643名無し~3.EXE:2005/04/29(金) 20:30:32 ID:evYAgujW
>>641
取りあえずWshShellオブジェクトのSpecialFolderプロパティでSendToやスタートメニューのフォルダは取れる。
644名無し~3.EXE:2005/04/30(土) 04:45:17 ID:MBnZcZHM
>>641
の例に倣うなら
copy "%SystemDrive%\Documents and Settings\%username%\SendTo のショートカット" "%SystemDrive%\Documents and Settings\%username%\スタート メニュー"
645名無し~3.EXE:2005/05/01(日) 02:13:57 ID:zuAasuJi
FormatNumberでMB表示してるんだけど・・・・。
1048576(1024*1024)でフォーマットするとマイコンピュータから
みる容量と違うんだけど・・。 いくつでフォーマットしてるの?
646132:2005/05/01(日) 17:05:59 ID:58PDvKK2
>>132
関数の戻り値を、配列で返す事に成功しました.
---
sample.vbs
 RANDOMIZE
 Msgbox RndMsg("dummy")(Int(RND(1)*3))
 Wscript.Quit

 Function RndMsg(dummy)
  RndMsg = Array("(^^)v ","(T T)", "ヽ(`Д´)ノ")
 End Function

(※ 全角スペースは削除してから実行してください)
---
RNDMSG("")の後に、更に添え字が付けられるなんて
思い付かなかったもので。5ヶ月も経ってた…
以上、日曜プログラマからの報告でした。
普段、ROMばっかりで、出る幕が無いのですが、
このスレを応援してます。
647名無し~3.EXE:2005/05/02(月) 21:51:11 ID:IZ8mg2N3
WSHスレ違いっぽいかもしれまんせが質問させてください。

正規表現で、、
1).「あいうえお」
2).「えおうあい」
3).「あいうあい」
上の3行を「あい」、「えお」で検索して1)と2)をマッチさせたい場合ってどうすればいいですか?
648647:2005/05/02(月) 21:53:51 ID:IZ8mg2N3
訳分からん質問なので訂正。。


「あい」と「えお」の両方あった時だけマッチさせたい。
つまり1)と2)の行だけヒットする。
649名無し~3.EXE:2005/05/02(月) 21:57:26 ID:jd/hGZ1B
2回検索すりゃいいじゃん
650名無し~3.EXE:2005/05/02(月) 22:01:18 ID:/VvlCFsr
ていうかそう言う正規表現を書く。
正規表現は実践してなんぼだよ。
651名無し~3.EXE:2005/05/02(月) 22:06:04 ID:KcgXOhNT
あい.*えお|えお.*あい
652647:2005/05/02(月) 22:10:32 ID:IZ8mg2N3
>>651
おぉおおお、すごい。
そういう手がありましたか。。サンクスです。


あれこれ実践して挫折したのでここに来ました・・・w
653名無し~3.EXE:2005/05/09(月) 22:04:37 ID:FitQ5Znf
age
654ちらしの裏:2005/05/11(水) 02:57:49 ID:JhmTrLg3
wsh でデータの使いまわしができて仕事が楽になったら、
前任者は何回もデータを入力して、自分から言わせたら無駄な残業をしてばかじゃないんかな
という感情を持つこともあるな。
655名無し~3.EXE:2005/05/11(水) 07:04:06 ID:J+QTCzSG
残業代がつきませんから!残念!
656名無し~3.EXE:2005/05/11(水) 15:53:23 ID:6gLH9O+O
657名無し~3.EXE:2005/05/11(水) 17:44:02 ID:VOSd7ZIO
wsh の文法を覚えますか、それとも、サービス残業しますか?
658名無し~3.EXE:2005/05/11(水) 17:47:44 ID:qpBm6+ni
無駄に見える残業にも職場の仲間と連帯感を深めると言う意味があるのだよ
ばかばかしいと思って時間内に終わらせてるといつの間にか俺みたいになる
659名無し~3.EXE:2005/05/12(木) 19:05:23 ID:xGQFP/QE
Jscript を使用して word をコントロールすることについておたづねします。
「ページを指定して印刷」する方法のVB.netやC#版は、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/dv_wrcore/html/wrtskhowtosenddocumentstoprinter.asp
にありますが、
これをJscript で行うようにすると
http://www.tomorrowssolutionsllc.com/Materials/AutomatingWord.html (英語)
の真ん中あたりの「Printing」
oDocument.PrintOut( lBackground, , nPrintRangeType, cFileName, cFrom, cTo, , cCopies, cPageRange, , lPrintToFile)
あたりと読めますが、
VB.net や C#.net での書き方をJscript 記法に直す方法、規則がわかりません。

wsh日本語版 v5.6 help には、VB,VBA にあってVBS にない関数
ぐらいしか関係部分がないようですが、ぜんぜん関係ない記述しかないし。

できれば、ファイル名を指定してword でオープンして、1−3ページを印刷して
ファイルを更新していようがいまいが保存せずにクローズして終了する
Jscript サンプルプログラムがあるとうれしいのですが。





660名無し~3.EXE:2005/05/12(木) 19:13:58 ID:xGQFP/QE
あ、過去録part 3 で 名前憑き引数というキーワードも出てきてますがそれでもねえ。。
661名無し~3.EXE:2005/05/12(木) 20:34:15 ID:5sK1irih
こんなもんかな?

var filename = "C:\\Documents and Settings\\Chinco\\My Documents\\Unco.doc";
var doc = GetObject(filename);
var show = doc.Application.Visible;
doc.Application.Visible = true;
doc.PrintOut(false, false, 3, "", "1", "3");
doc.Application.Visible = show;
doc.Close();
662名無し~3.EXE:2005/05/12(木) 21:10:05 ID:kRuGZtpH
WSHとかHTAで書いたスクリポトは有償配布してもいいのでつか?
663名無し~3.EXE:2005/05/12(木) 23:51:32 ID:16xjRF6B
PHPで金取るとこもあるスクリプトで金を取って悪い理由はない
しかし客が納得するかは別の話だな
664659:2005/05/12(木) 23:59:18 ID:xGQFP/QE
>>661 ありがとうございます。
VB.net や C#.net での書き方をJscript 記法に直す一般的な方法、規則はないから
ここで聞けということでいいのかな。
665名無し~3.EXE:2005/05/13(金) 00:57:25 ID:5YpSZ+Y5
htaの話ってここでいいのかな?
新Mac板のDashboard・Widgetスレでお絵かきできる付箋紙作ってって
カキコがあったので、ジョーク(?)で
それをWidgetではなく、htaで作ってみた。
(Widgetもhtaと同じでHTMLとJavaScriptで書く)

Dashboardっぽく枠消したのでドラッグできないのが問題。
JavaScriptで対処できると思うけど。


興味がある人はどうぞ。
http://taro.poke1.jp/up/img/up194.zip
666名無し~3.EXE:2005/05/13(金) 01:34:13 ID:QEVUDTHh
>>665
SVGファイルの中にもスクリプト書けるんだね。面白い。

それはそうと・・・終了ボタンつけてくれ!!(汗
667名無し~3.EXE:2005/05/13(金) 01:58:40 ID:5YpSZ+Y5
>>666
> SVGファイルの中にもスクリプト書けるんだね。面白い。
なんかこのスクリプト、JavaScriptではあるけど、
ブラウザののJavaScriptエンジンじゃなくて、
adobe SVG Viewerが解釈しているっぽい?
ifの中で&&が使えなかったり、childNodesを一旦変数に入れないと
うまく列挙できなかったり。もしかしたらケアミスしていただけかも知れんけど。

> それはそうと・・・終了ボタンつけてくれ!!(汗
つALT+F4

だってWidgetに終了ボタンないんだもんw。

Macの奴ってどうやって閉じるんだろ?
ショートカットキーで起動して、同じショートカットキーで閉じるのか?
668名無し~3.EXE:2005/05/13(金) 02:00:50 ID:eHQwK8EZ
readmeに書いてあるよ
669名無し~3.EXE:2005/05/13(金) 02:03:22 ID:5YpSZ+Y5
もし右のツールのところに閉じるボタンが無いということなら、
それは元々の「こんなの作って」の絵に無かったから。
忠実に作りましたw
670名無し~3.EXE:2005/05/14(土) 01:39:14 ID:nisk6+Bb
>>665
Win2000+Ie5.0では上手く動作しなかった…
svgサポートって5.5から(だっけ?)だから?
671名無し~3.EXE:2005/05/14(土) 01:46:44 ID:hLJmQbr5
これって便利ジャマイカ?
Copal
ttp://homepage1.nifty.com/kaityo/copalpro/index.html
672名無し~3.EXE:2005/05/14(土) 17:26:45 ID:KR+0YK8c
>>665
当方、Win2KSP4+IE6です。
htaファイルを実行すると、、、
65行目、var svgdoc = document.canvas.getSVGDocument();
^
ここで、オブジェクトでサポートされていないプロパティまたはメソッドですって言われてしまいます。

その他
16行目、正式にライセンスされていないため、コントロールを作成する事はできません。
95行目、svgcanvas.setColor(value); svgcanvasは、Nullまたは、オブジェクトではありません。


IEのセキュリティレベルを下げても駄目でした。
何か、追加でインストールしないといけないのでしょうか?

そもそもウチのPCで、SVG環境が構築されてるのかすら分からないので、
googleなどで調べてみます。
673名無し~3.EXE:2005/05/16(月) 10:39:44 ID:mHYUCIFw
>>670
>>672
readme.txtにも書いてあったと思うけど、
ちゃんとAdobe SVG Viewer入れてる?

http://www.adobe.co.jp/svg/viewer/install/
674名無し~3.EXE:2005/05/16(月) 12:30:17 ID:cbMfHNFC
「エラー: '}'がありません。」等のWSHのエラーメッセージを保存する方法ってあります?
675名無し~3.EXE:2005/05/16(月) 12:44:23 ID:jRXAM7qt
cscriptで動かしてエラー出力をリダイレクトすれ
676名無し~3.EXE:2005/05/16(月) 15:11:53 ID:cbMfHNFC
有難うございます。いけました
cscript hoge.js 2> error.txt
677名無し~3.EXE:2005/05/16(月) 15:30:34 ID:FmoEryZ3
エラーダイアログ表示中にCtr+Cでコピーできるよ
678名無し~3.EXE:2005/05/18(水) 01:18:46 ID:6wcHYXfe
>>673
すみません。検索して、ダウンロードだけしてみたのですが、インストールしようか
どうか迷ってました。
とりあえず、インストールしてみます。
679名無し~3.EXE:2005/05/18(水) 23:51:42 ID:x+Iqhm2V
>>662
せこい人だな
お気楽お手軽がスクリプトのいいところなのに・・・
エンコードしてソース隠してもデコーダーで読まれるだろうし
680名無し~3.EXE:2005/05/19(木) 01:15:21 ID:CACiuMxF
>>673
670だけど、htaを開くと66行目でエラーと言われてダメだった。
ただ、SVGを開くとお絵かきが出来た。

>>679
サポートをする気がある、ソースを見られる事を前提に洗練された
ロジックを組む自信がある・・・なら必要としている人が買うかもねえ。
681名無し~3.EXE:2005/05/19(木) 02:01:00 ID:zHVoSjDp
VBSのビープ音を鳴らし方を教えてください。
682名無し~3.EXE:2005/05/19(木) 02:02:12 ID:zHVoSjDp
音を→音の
683名無し~3.EXE:2005/05/19(木) 23:46:40 ID:dVTlJpGw
684名無し~3.EXE:2005/05/20(金) 13:42:12 ID:i+RaCpRe
いや、ピーっていうビープ音です。警告とかの。
ここでDOSコマンドの「ECHO 」で鳴らす方法があったのでこれをVBSに組み込んで使っています。
ttp://j7p.net/backup/howto_d2f.html
もし他にも鳴らし方わかる方いたらお願いします。
685名無し~3.EXE:2005/05/20(金) 14:18:55 ID:RweRvCol
686名無し~3.EXE:2005/05/20(金) 18:49:29 ID:nCmr4Vk8
>>684
Wscript.Echo Chr(7)

cscriptから実行させる必要がある。
687名無し~3.EXE:2005/05/23(月) 18:09:46 ID:y/zvYIXQ
DynaWrapを使ってショートファイル名をロングファイル名に変換するGetLogPathNameを使いたいのですが、変換後の文字列がうまく引き取れません。
サンプル見ながら以下のようにしたのですが、何がいけないのでしょう?
Resにはそれっぽい値が入ります。
OSはWin2000SP4、WSHは5.6かな。

Set UserWrap = CreateObject("DynamicWrapper")
UserWrap.Register "Kernel32.dll", "GetLongPathName", "i=ssl", "f=s", "r=l"

ShortName = "C:\PROGRA~1\MICROS~2\Office\WINWORD.EXE"
LongName = String(256, "*")
Res = UserWrap.GetLongPathName(Cstr(ShortName), LongName, Clng(100))

Wscript.Echo Res
Wscript.Echo LongName
688名無し~3.EXE:2005/05/23(月) 23:32:04 ID:Wv+UVBVr
ふつーに FileSystemObject.GetFile().Name でよくないか?
689名無し~3.EXE:2005/05/24(火) 00:42:24 ID:aej1q8HO
>687
私はWin98なので文字コードが違うのですが、それ以前に
Dyancallでは文字列変数のアドレスがDLLに渡っていない
のではないでしょうか。皆さん普通にDyancallを
使っているのでWinNT系のDynacallはそれが無いものだと
思ってました。
もしこのせいならば文字列変数名ではバッファアドレスを
DLLに渡せませんのでバッファのアドレスを取得するしか
方法がありません。可能ですがかなり面倒です。(lstrcatして
VARIANT変数のアドレスを取得してその中からBSTRのアドレスを
取り出す)

またDyancallのサンプル正常に機能した方はいるので
しょうか?一見正しそうに見えて実は途中で文字が
切れてるのだが。
690689:2005/05/24(火) 10:03:44 ID:aej1q8HO
>>687
忘れてました。文字列"定数"ならバッファアドレスがそのまま
渡せるので以下のようにしてはどうでしょう。残念ながら私は
Win98のため文字コード変換が必要になりこのコードを直接
確認できません。


Set UserWrap = CreateObject("DynamicWrapper")
'vv i=ssl -> i=swl に変更
UserWrap.Register "Kernel32.dll", "GetLongPathName", "i=swl", "f=s", "r=l"

'vv 誰でも持っているファイルに変更
ShortName = "C:\PROGRA~1\ACCESS~1\MSPAINT.EXE"
'vv LongNameを定数に
Const LongName = "                                                                                                    "
Res = UserWrap.GetLongPathName(Cstr(ShortName), LongName, Clng(100))

Wscript.Echo Res
'vv 文字列がBSTR形式になってないので切りだし
'vv もしかしたら文字列終端が変になるかも
Wscript.Echo Left(LongName ,Res)
691687:2005/05/24(火) 15:04:43 ID:tm8pklkx
>>690
回答有難うございます。
教えて頂いたスクリプトで変換後のロングファイル名が取得できました。
が、変換後の文字列をEchoで表示すると文字化けしました。
cscript //U script.vbs >> result
としてresultファイルの内容は見ると、WSHのロゴなどはUnicodeになっていますが、変換後のロングファイル名はUnicodeになっていません。
なんで普通に表示できないのか(?_?)です。
692名無し~3.EXE:2005/05/24(火) 15:07:15 ID:E/ATei80
GetLongPathNameAを呼んだらどうなる?
693698:2005/05/24(火) 19:35:31 ID:aej1q8HO
>>691
すいませんが//UはWin98ではサポートしてないので私には手に
負えません。WScript.StdOut.Write()ならOpenでファイル形式を
指定できるストリームなのでいけるのかも(いいかげん)。
でも実用にするなら>>688さんの仰るとおり
FileSystemObject.GetFile().Name を使ったほうがよさそうです。


ちょっと訂正。最初に「文字列変数のアドレスを渡していない」と
書いてしまいましたが、見てのとおり「渡すだけ」ならOKのように
見えます。返却値として文字列を返す場合のバッファアドレスがちゃんと
渡せないようです。ただしWin98の場合はUNICODE非対応のWIN32APIが
多いので「渡すだけ」でもUNICODE->ANSI変換が必要になったりします。
694689つづき:2005/05/24(火) 19:40:20 ID:aej1q8HO
ちなみに前回のをWin98で実現させると以下のようになります。
以前CeateObject("DynamicWrapper")は一度でいいと言う書きこみが
ありましたがWin98ではオブジェクト1つに1つのDLL関数しか
割り当てられないので複数作成しています。

Set UserWrap = CreateObject("DynamicWrapper")
'vv i=ssl -> i=swl に変更
UserWrap.Register "Kernel32.dll", "GetLongPathName", "i=swl", "f=s", "r=l"
'vv2 A->W 変換
Set UserWrap2 = CreateObject("DynamicWrapper")
UserWrap2.Register "Kernel32.dll", "MultiByteToWideChar", "i=llwlwl", "f=s", "r=l"

'vv 誰でも持っているファイルに変更
ShortName = "C:\PROGRA~1\ACCESS~1\MSPAINT.EXE"
'vv LongNameを定数にした
'vv2 ここにはANSIコードが入る
Const LongName = "                                                                                                    "
'vv2 ここにはUNICODEが入る
'vv2 !!注意!!他の定数と同じ文字列にしないこと
' VBSの仕様により同一アドレスが設定される
' また定数をByRef引数で関数に渡したらコピーが渡る(蛇の足)
Const buf = "****************************************************************************************************"
Res = UserWrap.GetLongPathName(Cstr(ShortName), LongName, Clng(100))
'vv2 A->W変換
UserWrap2.MultiByteToWideChar 0,0,LongName,-1, buf ,100

Wscript.Echo Res
'vv 文字列がBSTR形式になってないので切りだし
'vv もしかしたら文字列終端が変になるかも
'vv2 W変換バッファに変更
'vv2 日本語が含まれていれば ほぼ100%文字列終端が変になる
Wscript.Echo Left(buf ,Res)
695687:2005/05/24(火) 21:24:09 ID:tm8pklkx
>>692
GetLongPathNameAをやってみましたが、同じでした(T_T)
>>693-694
いろいろとありがとうございました。
まだ進展してませんが、もう少し試行錯誤してだめなら、別の方法を探して見ようと思います。

FileSystemObject.GetFile().Nameはショートファイル名でパスを渡すとそのままショートファイル名で帰ってきました。
696名無し~3.EXE:2005/05/24(火) 23:06:50 ID:fQe4KEwq
ちょっと質問なんだけど、VBスクリプトで、
指定ディレクトリ以下の全ファイルを取得していくようなのってどうやるの?
バッチで言うところの for /r %%a (*) do みたいな。

今は for each オブジェクト変数 in subfolderコレクション を
サブルーチン化して再帰処理させてるけど、
バッチのfor /rみたいに簡単な方法って無いのかね?
知ってる人居たら教えてくださいませ。
因みにVBスクリプト以外を使えとかは無しの方向で。
697687:2005/05/25(水) 01:03:05 ID:UEYABEWY
>>695
>FileSystemObject.GetFile().Nameはショートファイル名で
パスを渡すとそのままショートファイル名で帰ってきました。


う〜む、最初からそう言ってもらっていればこんな長ったらしいことを
書かずとも…

Windows Scripting Host Laboratory
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop.htm

を参考にしてください。

Set fs=CreateObject("Scripting.FileSystemObject")
Set sh=CreateObject("Shell.Application")
ShortName = "C:\PROGRA~1\ACCESS~1\MSPAINT.EXE"
Set shn=sh.NameSpace(fs.GetParentFolderName(ShortName))
Set shp=shn.ParseName(fs.GetFileName(ShortName))
wscript.echo shp.path
698687:2005/05/25(水) 09:17:43 ID:/jZlsmvd
>>697
へー、すごい簡単になっちゃいましたねぇ。
API使わなきゃできないって固まってました。
ありがとうございます。
699名無し~3.EXE:2005/05/27(金) 12:56:32 ID:SCSh4uZV
xmlhttpでWebページを取得しようとしたときに
301が返ってくるとそのまま止まってしまう(エラーやフリーズではなく文字通りうんともすんとも言わなくなる)んですが解決手段はあるでしょうか?
もしだめなら301の場合は取得を中断と言う手段でも構いません

具体的なURLは以下の場合です
http://www.2ch.net/guide/ -> http://info.2ch.net/guide/

通信パケットをキャプチャしてみると受け取ったlocationにGETしてるんですがそこで止まっています
環境はWin98SE、IE6.1、Windows Script 5.6です
700名無し~3.EXE:2005/05/27(金) 21:25:57 ID:ehh3A1nS
WIN32APIを勉強したらVBSだけより便利になりますか?
そしてどんなことができるようになるんでしょうか
701名無し~3.EXE:2005/05/27(金) 21:44:36 ID:IsaI6C5j
> WIN32APIを勉強したらVBSだけより便利になりますか?
なります

> そしてどんなことができるようになるんでしょうか
いろんなこと
詳しくはWIN32APIについて勉強すればわかります
702699:2005/05/28(土) 00:12:27 ID:PyRncbER
あの後自分でいろいろ調べたらこういうのが見つかりました
[MSXML] ServerXMLHTTP はリダイレクトされた要求を受信できない
http://support.microsoft.com/default.aspx?scid=kb;ja;308607

で、その中に書かれていた通りにMSXML 4.0を導入して
Msxml2.XMLHTTP.4.0をオブジェクトとして利用したら
301もきちんとリダイレクトするようになりました
703名無し~3.EXE:2005/06/01(水) 16:17:46 ID:zPoWofzV
DOSコマンドで言うところの「net view」のようなもので
ネットワーク上のPC名の一覧を取得したいのですが
似たようなことが出来ないでしょうか。
704名無し~3.EXE:2005/06/01(水) 17:08:16 ID:VmYJvi3a
WshShell.Execでnet viewを実行……とか駄目か。
705名無し~3.EXE:2005/06/01(水) 20:13:10 ID:NfPxeK+v
>>703 これで一応出来たけど、絶対もっと上手い方法があるはず。
ワークグループじゃなくてドメインならttp://winscript.s41.xrea.com/wiki/index.phpの
「テクニック」にサンプルがあった気がする。

var objShell = new ActiveXObject("Shell.Application");
var ssfNETWORK = 0x12;

var network = getFolder( "ネットワーク全体", objShell.NameSpace(ssfNETWORK) );
var msWinNetwork = getFolder( "Microsoft Windows Network", network );
var workgroup = getFolder( "myworkgroup" /* 自分のワークグループ */, msWinNetwork );

var pcs = workgroup.Items();
for ( var i = 0; i < pcs.Count; i++ ) WScript.Echo( pcs.Item(i) );

function getFolder( name, currentFolder ) {
var objFolderItems = currentFolder.Items();
for ( var i = 0; i < objFolderItems.Count; i++ )
if ( objFolderItems.Item(i).Name.match(name) )
return objFolderItems.Item(i).GetFolder;
}
706名無し~3.EXE:2005/06/01(水) 20:18:27 ID:NfPxeK+v
そして>704の言うとおり、WshShell.Execでnet viewを実行のが楽っぽい。

var wshShell = WScript.CreateObject( "WScript.Shell" );
var oExec = wshShell.Exec( "net view" );
var res = "";
while ( !oExec.StdOut.AtEndOfStream ) res += (oExec.StdOut.ReadLine());
WScript.Echo(res.match(/(\\\\\S+)/g));
707sage:2005/06/02(木) 11:13:11 ID:QhiJZAay
VBスレでスレ違い指摘受けたのでこちらに再掲します。
Windows 2000 Professional SP4, WSH(VBScript) 5.6 です。
ExecNotificationQuery を使ってアプリケーションログの監視をしているのですが、
ときどき、TargetInstance.InsertionStrings に値が入っていないらしく
for each で「オブジェクトがコレクションではありません。」というエラーになります。
オブジェクトがコレクションかどうか確認する関数はありますか?

以下、該当部分のコード:
Set events = GetObject("winmgmts:{impersonationLevel=impersonate,(Backup, Security)}!\\.\root\CIMV2") _
.ExecNotificationQuery("select * from __instancecreationevent where targetinstance isa 'Win32_NTLogEvent' and targetinstance.EventType = 1")

do
set NTEvent = events.nextevent ()
for each str in NTEvent.TargetInstance.InsertionStrings
wscript.echo "InsertionStrings: " & str
next
loop
708703:2005/06/02(木) 16:35:05 ID:lDPdKewM
す、すいません。
できれば>705か>706をvbsでお願いできないでしょうか。
書き忘れてました。すいません。
709名無し~3.EXE:2005/06/02(木) 18:42:49 ID:QmfHP3Wh
>>708
知らん。自分でやれ
710名無し~3.EXE:2005/06/03(金) 00:45:05 ID:bHoxzue7
>>707
多分、「値が入っていない」 = 「null」 だと思うからIsNullでどうでしょう。
あとはOn Errorとか。
711名無し~3.EXE:2005/06/03(金) 03:25:22 ID:bHoxzue7
>708
vbsは正規表現使い辛。

Dim wshShell, oExec, res
Set wshShell = CreateObject( "WScript.Shell" )
Set oExec = wshShell.Exec("net view")

Do While Not oExec.StdOut.AtEndOfStream
res = res & oExec.StdOut.ReadLine()
Loop

Dim regEx, Match, Matches
Set regEx = New RegExp
regEx.Pattern = "\\\\\S+"
regEx.Global = True
Set Matches = regEx.Execute(res)

For Each Match in Matches
WScript.Echo Match.Value
Next
712703:2005/06/03(金) 13:40:09 ID:VxHl0uE6
できました!
ありがとうございます。
713名無し~3.EXE:2005/06/03(金) 15:03:32 ID:LAyj+2x2
おまいら、微妙にスレちがいかもしれんが助けてくれ。

WSHをつかって固定メンバーへのメール配信がしたいんだ。
(緊急連絡網をメールですると思ってもらうといいかも)

OSはXP Proなんで、送信処理はCDOでオッケーだと思うんだけど
周辺の仕組み的にどうやっていいのかわかんねえ。

【やりたい事】
・個人情報保護っつー事でアドレスリストを暗号化したい
・WSH→送信処理→送信完了までの間も極力アドレスリストを平文の状態にしたくない。
(テンポラリ的なlist.txtに復号してそれを読み込んで終わったら消して・・・っつー感じにはしたくない)

【分からない事】
平文ファイルを作成せずに復号して読み込む方法


暗号化自体WSH単体で無理だと思うんで、外部コンポーネントや
WSH使えるソフト情報でもなんでもいいんで、なんかいい案チョウラィ!щ(゚▽゚щ)。
714713:2005/06/03(金) 15:10:15 ID:LAyj+2x2
補足
・暗号化はそれ用の別スクリプト作ってもいい
・復号のKeyはプロンプト使ってユーザが手入力


なんでこんな事するかっつーと、警備員とかの外部の人に
使わせるケースがあるからだったりします。



ボスケテ。
715名無し~3.EXE:2005/06/03(金) 18:57:55 ID:9Q94QqM6
ソースに埋め込んで Script Encoder じゃだめ?

日本語は無視の方向で・・・
716名無し~3.EXE:2005/06/03(金) 19:12:44 ID:D/K+iAKe
717名無し~3.EXE:2005/06/03(金) 22:38:12 ID:lxx60Aqq
それはHTMLメールで送るってことか?
718名無し~3.EXE:2005/06/05(日) 01:46:54 ID:Pn1Q37t1
719名無し~3.EXE:2005/06/05(日) 02:06:22 ID:1mYajcK1
池沼自演コテが乗っ取っててワロタ
720名無し~3.EXE:2005/06/05(日) 14:58:14 ID:MPoGVS64
WMIのWQLってサブクエリ使えないのですか?
721713:2005/06/06(月) 11:32:39 ID:0vxU305w
皆さん情報ありがとうございます。

>>715
アドレスは将来的に変わる可能性があるので、
ハードコーディングはさすがに厳しいです。

>>716
暗号化自体はおっしゃる通り色々あるんですが、
平文ファイル化せずにコーデックする方法があればと思いまして。

アドレスリストはテキストファイルでせいぜい数百件なんで、
難しく考えずにさっくりReadAllなりっつー方向の方がいいんですかね。

>>717
テキストメールです。
送信先の大部分が携帯電話のアドレスなので。

逆に携帯電話のアドレスだっていうのが、テンポラリでも極力
平文ファイル化したくないと騒いでいる理由だったりします。
722名無し~3.EXE:2005/06/08(水) 05:58:12 ID:1bqoAi1s
2つのテキストファイルに共通して存在する行だけ出力したいのですが,どのようにしたら良いでしょうか?

例:
---1.txt
30
80
50
40
---

---2.txt
400
20
500
80
10
---

とあれば,1.txtと2.txtの両方に含まれる「80」だけが出力されるようにしたいです.
尚,実際には40000行ぐらいのテキストファイルからの共通の行の抽出に使用します.
実際のファイルの中身は1〜1000000までの数字です.(ソート後の実行も可能です.)

どうかお力をお貸し下さい.お願いします.
723名無し~3.EXE:2005/06/08(水) 06:32:57 ID:G2wQal52
>>722
ExcelなりCalcなりを使った方がいいと思うけど、
どうしてもスクリプトでやりたいなら、どちらかの内容を行単位で配列に入れて、
もう一方を行単位で読みながら配列内に一致する値があるかどうかをループで回しながら判断させ
一致があれば書き出せばいい。
値が数値なら、配列に格納するときに前後に記号でも入れておけば、ループ回さずvbsのFilter関数で
一致が有るかどうかを判断すことも可能。
まあ、ここはスクリプト書いて貰うスレじゃないから、あとは自分でがんがれや。
724名無し~3.EXE:2005/06/08(水) 07:25:35 ID:XpkKPnGR
> もう一方を行単位で読みながら配列内に一致する値があるかどうかをループで回しながら判断させ
んなことしないでDictionaryを使ったほうがいい。
725名無し~3.EXE:2005/06/08(水) 12:48:36 ID:P7JIIBD8
>>723
>>724
詳しく教えて下さいm(_ _)m
簡単にできるようなら書いて欲しいです...
726名無し~3.EXE:2005/06/08(水) 16:44:08 ID:WYEjSOzd
>>722

1. 両方のファイルを昇順にソートし1行ずつ読み込む。

2. "1.txtの行"と "2.txtの行" を比較する。

3-A. "1.txtの行" < "2.txtの行" の場合
 -> "1.txt"の次の行を読み込み、2へ戻る。

3-B. "1.txtの行" = "2.txtの行" の場合
 -> 共通している行を出力して両方のファイルの次の行を読み込み、2へ戻る。

3-C. "1.txtの行" > "2.txtの行" の場合
 -> "2.txt"の次の行を読み込み、2へ戻る。
727名無し~3.EXE:2005/06/08(水) 17:21:47 ID:rlgH3Xl1
>>725
まるっきりCOBOLの順更新のアルゴリズムだ、超なつかしー!w
ソート後の実行が可能とのことだし、全行チェックするよりもスマートな予感。 
728名無し~3.EXE:2005/06/08(水) 17:42:33 ID:pm+nuUeL
重複がないのが前提だな。by元コボラー
729名無し~3.EXE:2005/06/08(水) 17:55:52 ID:6UtbVX9I

  ∧_∧
 ( ・∀・) < 詳しく教えて下さいm(_ _)m
 (    )
 | | |
__(__)_)__
 (   ) )
 | | |
 (    )
 (  ・A・)  < 面倒くせーから書いてクレよ
  V ̄V

  Λ_Λ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< これが722の正体さ!
 ̄| ∪ ̄∪ ̄|\______________
730名無し~3.EXE:2005/06/08(水) 18:07:21 ID:TCJyphr2
>>729
誰だってそうじゃないのか
731名無し~3.EXE:2005/06/08(水) 18:39:50 ID:u3ZHsO8z
>>722 ADO か DAO objcet create して 2つの file を table t1, t2 に放り込み、
SELECT t1.f FROM t1, t2 WHERE t1.f = t2.f;
の結果を file に吐き出せ。
732名無し~3.EXE:2005/06/08(水) 18:45:36 ID:gl4aa64O
>>731
書いてくれと言われるのがオチだよ
733名無し~3.EXE:2005/06/08(水) 18:54:43 ID:u3ZHsO8z
>>732
なんだよ、「書いてくれ」って言われないように >>726 書かずに済ます方法だしたのに…。
734名無し~3.EXE:2005/06/08(水) 19:02:22 ID:XpkKPnGR
お前らのヒントがクソすぎるから、書いてやる。

>>722
ファイル名を引数にするとか細かい部分は自分でやれな。

Set FSO = CreateObject("Scripting.FileSystemObject")
Set d = CreateObject("Scripting.Dictionary")

Set f1 = FSO.OpenTextFile("1.txt")
Do Until f1.atEndOfLine
d.Add f1.ReadLine(), true
Loop

Set f2 = FSO.OpenTextFile("2.txt")
Do Until f2.atEndOfLine
str = f2.ReadLine()
If d.Exists(str) Then
WScript.Echo str
End If
Loop
735名無し~3.EXE:2005/06/09(木) 01:29:09 ID:NWpAwltQ
ログファイルを監視して、特定のメッセージが来たら処理ルーチンに廻すスクリプトなんですが、

起動時に Scripting.FileSystemObject で OpenAsTextStream して Skip(.Size)
でログファイルの末尾までポインタを飛ばしています。

これで動作はするのですが、ログファイルのサイズが大きいと、
Skip の時にやたらと時間がかかります。ReadAll も同じく。
もっと速くする方法はありますか?
736名無し~3.EXE:2005/06/09(木) 11:40:05 ID:LImznLLc
>>735
ログをOpenしてなんの処理もせずに、ただ単に末尾までSkipしてるの?なんで?
737名無し~3.EXE:2005/06/09(木) 14:28:17 ID:IlGvMHyd
>>734 ありがとうございましたm(_ _)m
738名無し~3.EXE:2005/06/09(木) 14:58:27 ID:NWpAwltQ
>>736
監視プログラムが起動したあとにログファイルに書き込まれたログのみを、
監視対象にするためです。
739名無し~3.EXE:2005/06/10(金) 02:21:17 ID:UiZPf+qc
>>735 あ〜ぁ、書いちまったよ…。
740名無し~3.EXE:2005/06/12(日) 00:13:27 ID:SUiDiCi7
>>735

'ReadAllよりは早いな。
Do Until obj.AtEndOfStream
obj.SkipLine
Loop
741名無し~3.EXE:2005/06/12(日) 00:15:41 ID:SUiDiCi7
っていうか、WSHで開いてるログファイルに
ログは書き込まれるのか? 疑問なんだが。
それともそのスクリプト自体がログもとってるのか?
742名無し~3.EXE:2005/06/12(日) 23:57:45 ID:GI8fwamy
特定のフォルダにある複数の特定の文字列を含むファイルを一括して削除したいのですが、
これはどのようにすればよいのでしょうか?

今は指定したファイル名の削除はできるようになったのですが、検索してファイルを削除と言う
やりかたが良く分かりません。
すみませんがどなたか教えてください。
743名無し~3.EXE:2005/06/13(月) 00:13:05 ID:JNvfkIqx
Set fs = CreateObject("Scripting.FileSystemObject")
aFolder = "C:\特定のフォルダ"
searchStr = "uho"
del aFolder, searchStr

Sub del(FolderPath,searchStr)
Set Folder = fs.GetFolder(FolderPath)
For Each oFile In Folder.Files
If Instr(oFile.Name,searchStr) <> 0 Then
fs.DeleteFile(oFile.path)
End If
Next
For Each oSubFolder In Folder.SubFolders
del oSubFolder,searchStr
Next
End Sub
こんなのか?試してないけど。だれか間違えてたら指摘よろ
744名無し~3.EXE:2005/06/13(月) 06:07:46 ID:vGAwwSYt
>740,741
ありがとうございます。たしかにReadAllよりは速そうですが、
Skip(.Size)と較べると、あまり変わらない感じでした。
ログファイルには、別にプロセスが随時ログを書き込んでいます。
745名無し~3.EXE:2005/06/13(月) 10:28:00 ID:M4FF6B1D
>744
>File::OpenAsTextStream メソッドはファイルをロックします
>(他プロセスの書き込み目的のファイルオープンを不可能にします)
という説明を見つけたんだが、まあ、実際に動いてるんならこの説明に穴があるんだろう。
746名無し~3.EXE:2005/06/13(月) 16:50:57 ID:3LceyRIA
コマンドプロンプトにでもいいから、tailがあればいいのに。
747名無し~3.EXE:2005/06/13(月) 22:41:49 ID:mPZ/XMPa
スクリプトで2重起動防止とかできますか・・・?
748名無し~3.EXE:2005/06/13(月) 22:45:42 ID:P233SL4R
>>745
書き込みか追記でopenした場合はロックされる。
読み取り専用ならロックされない。
749名無し~3.EXE:2005/06/13(月) 22:45:56 ID:rmljTOx3
なにを?
750名無し~3.EXE:2005/06/13(月) 23:45:20 ID:ySHwVs1N
>>746
ふつーにあるが
751名無し~3.EXE:2005/06/14(火) 11:45:43 ID:AhBMKMoY
>>746
そういうときはプリインストールされていれば良いのにと言おうな。
Windowsで一般的なものが「ない」ってことはほぼありえないから。
752名無し~3.EXE:2005/06/14(火) 21:04:23 ID:K8q2UY4U
ちょうど私も、特定のファイル内のファイルから特定の文字列を含むファイルを探す処理が必要だったので
>>743を、ファイルを消すという処理の部分だけファイル名を出力する形に変更して実行してみたのですが、
大量のファイルから文字列を検索しているような動作はするのですが(HDDランプがつきっぱになるのでそう判断)、
1つもヒットしません。
よろしければ教えて頂きたいのですが
If Instr(oFile.Name,searchStr) <> 0 Then
という指定でお間違いございませんでしょうか?
753名無し~3.EXE:2005/06/14(火) 21:12:02 ID:zw7jvuvu
>>752
ためしに削除処理のとこを
msgbox oFile.Name
にしてやってみたけど、ちゃんとメッセージボックスでたぞ
754名無し~3.EXE:2005/06/14(火) 21:17:15 ID:+PeNVOgE
正規表現使うようなのでもないのなら、dirコマンドやdelコマンドの方が楽だよねー。
755名無し~3.EXE:2005/06/14(火) 21:19:43 ID:vAoQUWe+
ふつーにgrep使ったほうが楽なのに、何故そんなに苦労したがるのか
756名無し~3.EXE:2005/06/14(火) 21:30:11 ID:K8q2UY4U
↓でやったのですが、何も出力されません。ちなみにダウンロードしたHTMLファイルなのでヒットしないはずが無いです。
ちなみに「WScript.Echo oFile.Name」を2行上にずらしたらズラズラっとファイル名が出力されたので、
If Instr(oFile.Name,searchStr) <> 0 Then がヒットしていない以外には考えられないようです...
---
Set fs = CreateObject("Scripting.FileSystemObject")
aFolder = "D:\test\output"
searchStr = "<html>"
yui aFolder, searchStr

Sub yui(FolderPath,searchStr)
Set Folder = fs.GetFolder(FolderPath)
For Each oFile In Folder.Files
If Instr(oFile.Name,searchStr) <> 0 Then
WScript.Echo oFile.Name
End If
Next
For Each oSubFolder In Folder.SubFolders
yui oSubFolder,searchStr
Next
End Sub
---
757名無し~3.EXE:2005/06/14(火) 21:39:14 ID:+PeNVOgE
>>756
743は「ファイル"名"に」特定文字列を含むファイルを検索してるというのは見れば分かるだろ。
中身まで検証するならoFileからTextStream開いて読んで、ってやらなきゃいけない。

まあそんなのはそこらに転がってるツールつかっとけと言うことだな。
758名無し~3.EXE:2005/06/14(火) 21:39:34 ID:zw7jvuvu
ファイル内文字列かよ
759名無し~3.EXE:2005/06/14(火) 21:53:51 ID:doM56Ctu
おいおい
760名無し~3.EXE:2005/06/14(火) 22:01:04 ID:K8q2UY4U
あ,ファイル名に特定の文字列を含むのをヒットさせてたんですね(−_−;)
ではファイル内に特定の文字列を含むファイルをヒットさせるには
If Instr(oFile.Name,searchStr) <> 0 Then
WScript.Echo oFile.Name
End If
をどのように変えたら良いのでしょうか?

>>757
> 見れば分かるだろ
いえ、わかるような知識があれば気付いてます。
761名無し~3.EXE:2005/06/14(火) 22:25:19 ID:BMWwgrhH
If Instr(oFile.Name,searchStr) <> 0 Then
WScript.Echo oFile.Name
End If

Set rFile = fs.OpenTextFile(oFile)
If InStr(1, rFile.ReadAll, searchStr) > 0 Then
  WScript.Echo oFile.Name
End If
rFile.Close
762名無し~3.EXE:2005/06/14(火) 23:00:07 ID:K8q2UY4U
>>761 ありがとうございました。うまくいきました。
763名無し~3.EXE:2005/06/15(水) 21:23:31 ID:o2W7134x
IE をコントロールするには InternetExplorer.Application オブジェクトを
使えばいいのは分かりますが、すでに開いている IE の Document って
取得できます?
764名無し~3.EXE:2005/06/15(水) 22:23:11 ID:BJbtsw+V
>>763
それができたらセキュリティホールとなって、悪さができてしまう
765名無し~3.EXE:2005/06/15(水) 22:29:26 ID:VU89nshF
え?
766名無し~3.EXE:2005/06/15(水) 22:34:25 ID:eKWQ+Vaw
var app = new ActiveXObject("Shell.Application.1");
var winds = app.Windows();
for (var i = 0; i < winds.Count; i++) {
   if (winds.Item(i).FullName.match(/iexplore/i)) {
      WScript.Echo(winds.Item(i).locationURL);
   }
}
767名無し~3.EXE:2005/06/15(水) 22:39:00 ID:ux+hFZZN
>>764

Set sh = WScript.CreateObject("Shell.Application")
For Each wnd In sh.Windows
Set doc=wnd.document
If TypeName(doc) = "HTMLDocument" Then
doc.body.insertAdjacentHTML "AfterBegin", _
"<span style='font-size:200pt;position:absolute'>うんこ</span>"
End If
Next
768名無し~3.EXE:2005/06/17(金) 00:14:21 ID:T/4rYx9E
亀レスですみません。
>>734
ですが、
行:    1
文字:   1
エラー:  このキーは既にコレクション内の要素の関連付けられています。
と出てうまくいきません。
他の方法でも構いませんので、何とかなりませんでしょうか?
769名無し~3.EXE:2005/06/17(金) 03:02:21 ID:uPVtSC/W
>764
> それができたらセキュリティホールとなって、悪さができてしまう
あはは。ばーかじゃねーの。
そんなことができるC/C++なんて
セキュリティホールの塊ということになっちゃうじゃんwwww
770722=768:2005/06/17(金) 21:40:44 ID:sIM8eqIe
仕方無いので自分で強引に書いてみたのですが、明らかに処理速度は遅いですよね・・・


Set FSO = CreateObject("Scripting.FileSystemObject")
Set d = CreateObject("Scripting.Dictionary")

Set f2 = FSO.OpenTextFile("2.txt")
Do Until f2.atEndOfLine
Set f1 = FSO.OpenTextFile("1.txt")
str = f2.ReadLine()
If InStr(1, f1.ReadAll, str) > 0 Then
WScript.Echo str
End If
f1.Close
Loop


でも僕の力ではこれが限界です。手直しお願いできましたら幸いです。
771名無し~3.EXE:2005/06/17(金) 23:32:20 ID:3ZFPCBC9
>>770
片方の一行ごとにもう片方を全文検索すればそりゃ遅いでしょ。

仮に元ファイルの中身がランダムな文字列なら
ソートしてから一行ずつ比較するのがセオリーかな・・・

この場合は中身が1-100000の数値とわかってるから
俺なら1-100000までの配列をつくってフラグ立てていくね。
2つのファイルを一回ずつサーチすればおしまい。
ちょっとかっこ悪いけど。

772名無し~3.EXE:2005/06/17(金) 23:46:28 ID:39Ydlq4e
>>770
>734の

d.Add f1.ReadLine(), true

↑を↓な感じにしてみるとどうでしょ。

line = f1.ReadLine()
If Not d.Exists(line) Then
d.Add line, true
End If
773名無し~3.EXE:2005/06/18(土) 07:42:42 ID:/D0PFhqb
>>770
しょうがないな、最高のサンプルを見せてあげるよ。jsだけど。

fs = WScript.CreateObject("Scripting.FileSystemObject");
fA= fs.OpenTextFile("a.txt");
fB= fs.OpenTextFile("b.txt");
arA= fA.ReadAll().split("\r\n");
arB= fB.ReadAll().split("\r\n"); //それぞれ配列に読み込む

arA.sort(); arB.sort(); //昇順にソート、速くするためのポイント。

//以下 arB を任意の数 spCount に分割。速くするための工夫。
var next, spCount= 4;
spB= new Array(spCount);
for(i=0, j=0; i!=spCount; ++i, j=next)
spB[i]= arB.slice(j, next= Math.floor( arB.length * ((i+1)/spCount) ));

//以下、対象の arA が spB の最小値以上、最大値以下なら検索
for(i=0; i!=arA.length; ++i)
for(j=0; j!=spCount; ++j)
if(spB[j][0] <= arA[i] && arA[i] <= spB[j][spB[j].length-1]) //速くするため
for(k=0; arA[i]<=spB[j][k], k!=spB[j].length; ++k) //arA[i]<=spB[j][k] は速くするため
if(arA[i] == spB[j][k])
WScript.Echo("" + arA[i]);

WScript.Echo("終了");

とりあえずソートすれば、もうこれ以上は検索しても意味が無い状態を知ることができる。
spCountを大きくすれば、もっと速くなる。

ただ実用を考えた場合、arA、arB それぞれに、重複する要素がある場合、削除しておかないと結果が冗長になるぞ。
774名無し~3.EXE:2005/06/18(土) 10:38:03 ID:21ZFoCKm
>>773 最高に遅いな。待つのが嫌になって途中で止めちゃうぐらい遅い。

Dim inFile1, inFile2, ForReading, TristateUseDefault
Dim fso, oDic, f, ts, line
inFile1 = "in1.txt"
inFile2 = "in2.txt"
ForReading = 1
TristateUseDefault = -2

Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oDic = WScript.CreateObject("Scripting.Dictionary")

Set f = fso.GetFile(inFile1)
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
While Not ts.AtEndOfStream
line = ts.ReadLine()
If Not oDic.Exists(line) Then
oDic.add line, ""
End If
WEnd
ts.Close()

Set f = fso.GetFile(inFile2)
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
While Not ts.AtEndOfStream
line = ts.ReadLine()
If oDic.Exists(line) Then
WScript.Echo line
End If
WEnd
ts.Close()
775773:2005/06/18(土) 13:15:36 ID:DJtF/zfH
>>773
自分のソース見て気づいたけど、無限ループになりかかってたw
最後のforの継続条件のトコは「,」でなくて「&&」ね。
それに文字列のままソートしたり、比較してるからこりゃダメだな。
よし、暇なときに超高速プログラムにパワーアップして貼りなおします。

>>774
>> 最高に遅いな。待つのが嫌になって途中で止めちゃうぐらい遅い。
「なんのためにdictionary避けてんだよ!」っていう突っ込み期待してたのにw
そんなマトモな普通のコード貼れたら、この流れ終わっちゃう。まあ別にいいけどさ。
776名無し~3.EXE:2005/06/18(土) 13:23:05 ID:9NWcLW1g
JSで
指定されたフォルダのファイル名一覧の配列を作りたいです
どんな方法がありますか?
777名無し~3.EXE:2005/06/18(土) 13:32:32 ID:VdN3gXMM
>>776
FileSystemObjectのGetFolder、GetFilesから順次配列に追加。
778名無し~3.EXE:2005/06/18(土) 14:35:06 ID:21ZFoCKm
>>775
>>773のソート以降を以下に変更。
これで重複があってもok且つ辞書より速い、と思う。

var p = 0;
for ( var i = 0; i < arB.length; i++ ) {
while ( p < arA.length ) {
if ( arA[p] == arB[i] ) {
WScript.Echo(arB[i]);
while ( arA[p] == arB[i] ) p++;
}
if ( arA[p] > arB[i] ) break;
p++;
}
}

ついでに>>774の辞書使ったヤツ、重複があるとダブって出力しちゃう。
Echoする前にフラグチェックして、Echoしたらフラグ立てなきゃ駄目だったな。
779名無し~3.EXE:2005/06/18(土) 17:38:33 ID:cPXCJfBO
>>777
ありがとうございます
詳しく調べてみますね
780名無し~3.EXE:2005/06/19(日) 10:49:29 ID:ruFCf+ys
>>776
Enumerator.prototype.toArray = function(){
  this.moveFirst();
  for(var i=0, a=[] ; !this.atEnd() ; this.moveNext()){ a[i++] = this.item(); }
  return a;
}
Enumerator.prototype.toNameArray = function(){
  this.moveFirst();
  for(var i=0, a=[] ; !this.atEnd() ; this.moveNext()){ a[i++] = this.item().Name; }
  return a;
}

var objFs = new ActiveXObject("Scripting.FileSystemObject");
var col = objFs.GetFolder("c:").Files;
var en = new Enumerator(col);

//var a = en.toArray();
var a = en.toNameArray();
WScript.Echo(a.join("\r\n"));
781722=768=770:2005/06/21(火) 01:06:53 ID:l1Qhq43Z
>>772
ありがとうございました.うまくいきました.ちなみに

>>734 ・・・正常に動作せず
>>770 ・・・何とか最後まで動作したがまる2日かかった
>>772 ・・・なんと30秒程度で完了

感激でし...
782名無し~3.EXE:2005/06/21(火) 19:12:18 ID:+hqJ7BLx
はじめまして。質問があります。

WSHでコマンドプロンプトを起動して、ディレクトリを移動するのは
下の書き方で合っていますよね?
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "cmd /K d: & cd work"

で、そのコマンドプロンプトでA.exeを起動。そして終了したのを認識して、
コマンドプロンプトを切るスクリプトを書きたいです。
どなたか教えていただけませんか?
783名無し~3.EXE:2005/06/21(火) 19:26:12 ID:xmrf7+F6
全部&でつなげれば?
つかWshShell.CurrentDirectoryでカレントディレクトリ移動させてWshShell.Execで実行させればもっと分かりやすいと思ふ。
784名無し~3.EXE:2005/06/21(火) 19:33:16 ID:FLXMQPHQ
つ .bat
785名無し~3.EXE:2005/06/21(火) 19:43:17 ID:D+G+d+Du
つ?
786名無し~3.EXE:2005/06/21(火) 20:06:19 ID:VXz7ljKq
>>782
つCMD /C
787782:2005/06/22(水) 00:21:26 ID:Ex+Rnv3x
>783
ありがとうございます。
Wshshell.run "cmd /K d: & cd work & A.exe"
ということですか?

このA.exeはプロンプト上に計算経過が表示され、終了すると入力待ちの状態
になります。Wshshell.execで、この終了も認識できるのですか?
788名無し~3.EXE:2005/06/22(水) 00:27:27 ID:c0d6Izna
Runメソッド使うならexitコマンドがある。つか/cでいいじゃん。
789名無し~3.EXE:2005/06/22(水) 01:30:09 ID:fHWCgaoA
>>766
>>767
さんくす。なるほど、IE統合シェルのオブジェクトですか。

しかしやりたかったのは ASP の ShowModalDialog 関数で
現れるポップアップウィンドウの中身を取得することで、これが
Shell.Application の Windows() だと拾えないみたい。
うーん、いい方法はないでしょうかねー。
790名無し~3.EXE:2005/06/22(水) 01:30:19 ID:jZGWrN+N
ただの確認のようにみえますが御教授ください。

 今VBSの動作を調べていると
1.VBSのユーザ定義関数の引数デフォルトはByRef
2.引数デフォルト状態のユーザ定義関数を
A.Callを付けずに引数に括弧を付けるとByVal
B.上記以外はByRef
となりました。

 以前は
1.VBSのユーザ定義関数の引数デフォルトはByVal
2.引数デフォルト状態のユーザ定義関数を
A.Callを付けずに引数に括弧を付けるとエラー
B.上記以外はByVal
だったように記憶しているのです。

環境は Win98 WSH5.6 です。

VBSの文法周りを確認していて気がついたのですが
先日.NETを導入して以来動作が変わったような
気がするのです。これは全て私の勘違いなの
でしょうか?
791名無し~3.EXE:2005/06/22(水) 01:45:14 ID:hjhCXMSu
>790
昔から省略したときはByRefだったような気がするが自信ないなー。
どちらにしても省略したときのデフォルト動作に頼るのはあまりやらない方がいいけど。
792名無し~3.EXE:2005/06/22(水) 07:51:03 ID:7DXy1VQp
ファイルをD&Dして処理をするスクリプトを書いてます。
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(".")
Set src = fso.GetFolder(f.Path)
Set objargs = WScript.Arguments
msgbox("src : " & src)

と書いて変数srcの中を見ると、ファイルをD&Dしたときと
D&Dしないでvbsを実行したときで中身が変わるんですけど
なぜですか?

D&Dするファイルはvbsファイルと同じフォルダに入ってます。
793名無し~3.EXE:2005/06/22(水) 12:33:03 ID:xoQP+X+G
>>790
常にbyRefだろ。

引数が1つなら 括弧つけてもエラーにはならないけど
計算式として扱われて結果として値渡しのようになるみたいだね。
794名無し~3.EXE:2005/06/22(水) 12:34:51 ID:xoQP+X+G
>>792
Explorerの仕様。
795名無し~3.EXE:2005/06/22(水) 16:55:45 ID:WpcS8LMc
>788
ありがとうございました。出来ました!
796名無し~3.EXE:2005/06/22(水) 19:11:08 ID:7DXy1VQp
>>794
なるほど。そういうことですか。
ありがとうございました。
797790:2005/06/22(水) 19:12:14 ID:jZGWrN+N
>>791,>>793
御回答有難うございました。
VBSとVBとの違いのひとつに引数のデフォルトがあったように
記憶していたのですが私の勘違いのようです。

Microsoftのドキュメントがもう少しまともなら
こんな苦労はしないのに...
798名無し~3.EXE:2005/06/22(水) 19:37:50 ID:ThbXZhir
>>792
それは単にカレントフォルダが違うってだけでしょ
799名無し~3.EXE:2005/06/23(木) 10:48:54 ID:fJZA1htr
テキストファイルの中身を行単位でランダムに入れ替えて出力したいのですが、どうすれば良いでしょうか。例えば

>>>入力.txt
10000
20000
30000
40000
50000

となっているのを
>>>出力.txt
50000
20000
30000
10000
40000

などというように行がランダムに入れかわる感じです。
別のファイルに出力しなくても、ファイルの中身をランダムにしてくれるだけでも構いません。
800名無し~3.EXE:2005/06/23(木) 11:27:55 ID:e469Knkc
WSHでループさせていて途中で止めたい時って、タスクマネージャでwscript.exe
を切るしかないですよね?他に方法あります??
801名無し~3.EXE:2005/06/23(木) 12:11:52 ID:OXEPkDrG
>>799
>>600-625辺りにランダムに並べ替えるというのがある。
ReadAllで読み込んで改行でsplitした配列を並べ替えた後WriteLineで書き込んでいけばいい。
と書いてから、FileSystemObjectの基礎ができてるのかどうか不安になった。
802名無し~3.EXE:2005/06/23(木) 19:05:46 ID:fJZA1htr
>>801
すいません、ずぶの素人で、基礎どころではありません。
書いてくれると嬉しいです。
803名無し~3.EXE:2005/06/23(木) 19:28:00 ID:PecciZI6
人の書いたスクリプトを内容を理解せずに使うのはとっても危険だよ。
とくに2chのようなスペシャリストが回答してくれるところではね。
804名無し~3.EXE:2005/06/23(木) 19:45:39 ID:sujyBk84
俺は書けないからおまえら代わりに俺の要望通りのものを書け
ってのはスレ違いだし、ずぶの素人が匿名者の書いたスクリプト使うのは
>>803の言うように危険もある。

内容的には簡単だけど、丸投げの要望にホイホイ応えるほどこのスレは甘くない。
まぁ、やる気がある奴ならヒントや手引きくらいはくれてやるけど、
今回の件についてはヒントというか既にほとんど答えそのものが出てるし。
805名無し~3.EXE:2005/06/23(木) 20:42:42 ID:WFcbAVYn
では

>ReadAllで読み込んで改行でsplitした配列を並べ替えた後

ここまででいいので、お願いできませんか?
これでもかなりの長期間悩んでます。
806名無し~3.EXE:2005/06/23(木) 20:53:35 ID:f+w0CSNc
XMLHTTPはよくエラーになると思いますが、
stateプロパティに12030が入ると異常終了するみたいですね
こうなる前にエラーを出さずに静かに終了させる方法とかないですかね?
これじゃとても使えん・・・
807名無し~3.EXE:2005/06/23(木) 21:07:17 ID:jU0ApLfp
>>805
hoge = Split(ファイルストリームオブジェクト.ReadAll, vbCrLf)
これでhogeが「ReadAllで読み込んで改行でsplitした配列」になる。
あとは>>801が示してくれた先のアルゴリズムをそのまま使って並べ替えをして
結果を書き出せばいいだけ。

「ここまででいい」って言ったんだから、あとは自分の力でがんがれ。
808名無し~3.EXE:2005/06/23(木) 21:17:05 ID:AAAkrPbc
>>806
JScriptならtry-catch、VBScriptならOn Error Resume Nextしてやればいいんじゃない?
//VBSのエラー処理がいまいちよくわかんないなぁ。
まあ.NETに移行した方が幸せそうではある。
809名無し~3.EXE:2005/06/24(金) 00:02:28 ID:QMm0urmW
>806
俺のところだとこんな感じ。

on Error Resume Next
set objXmlHttp = WScript.CreateObject("microsoft.xmlhttp")
objXmlHttp.Open "GET", strURL, false
objXmlHttp.Send
if Err.Number <> 0 then
 strErrMsg = strURL & ": " & Err.Description
end if
on Error Goto 0
810名無し~3.EXE:2005/06/24(金) 01:31:35 ID:VZTTMcCr
>>808>>809
ありがとうございました。無事エラーを捕まえられました
811805:2005/06/24(金) 08:06:02 ID:vGlW87i5
>>807
その配列の数はどうすればわかるのでしょうか。
配列の中身を入れ替えるとき、このスレを探したら見つける事ができた
For i=0 To size : j=Int(Rnd()*size) : tmp=a(j) : a(j)=a(i) : a(i)=tmp : Next 'ランダム化
を使おうとしているのですが、sizeに入れるべき配列の数がわかりません。
812名無し~3.EXE:2005/06/24(金) 08:16:16 ID:xbCKlgoN
>>811
そういうのはVBScriptは大抵関数で提供されているので、
MSDNでVBSの関数名一覧を見てそれっぽいのを調べるか、
ttp://www.google.com/search?num=100&hl=ja&c2coff=1&biw=&q=VBScript+%E9%85%8D%E5%88%97+%E3%82%B5%E3%82%A4%E3%82%BA+%E9%96%A2%E6%95%B0&lr=lang_ja
813名無し~3.EXE:2005/06/24(金) 08:21:05 ID:uAs98FtG
UBound
814805:2005/06/24(金) 12:33:45 ID:mImxBdVV
頑張ったのですが(>_<)

Set fs = CreateObject("Scripting.FileSystemObject")
Set rFile = fs.OpenTextFile("D:\test\1.txt")
hoge = Split(rFile.ReadAll, vbCrLf)
size = UBound(hoge)
For i=0 To : j=Int(Rnd()*size) : tmp=a(j) : a(j)=a(i) : a(i)=tmp : Next 'ランダム化
For i=0 To size
WScript.Echo hoge(i)
Next

としたのですがダメでした・・・・
ここまでガンばったので、どなたか
>>799
の答えを書いて頂けませんか?

815名無し~3.EXE:2005/06/24(金) 12:58:03 ID:cKFMUnQc
>>814
まずエラーメッセージを読んで、どこがまずいのかを確認するんだ。
VBSならエラーが発生したソースの行番号もレポートしてくれる。
ついでにそのメッセージの意味するところが分からなくて人に聞く場合も、
エラーメッセージとそのエラーが発生した所(+前後数行)のソースコードを添えて聞かないと答えも得にくい。


> For i=0 To  : j=Int(Rnd()*size) : tmp=a(j) : a(j)=a(i) : a(i)=tmp : Next 'ランダム化  

さてエラーの原因はここだ。
For i=0 To の後が抜けてるのはまあ単純なミスだろう。
このコードの中で良く出てくるのは a() だ。これが配列というのは分かると思う。
で、いつ a なんて名前の配列を作った?
作った配列はhogeだけだったはずだ。

あと、このまま実行しても、毎回同じ結果が返ってくるはずだ。
MSDNのRnd関数の仕様を調べてみよう。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/vsfctRnd.asp
816805:2005/06/24(金) 15:13:45 ID:cZfOJNqS
>>815
うまくいきました。
単純ミスだけでした。
ちょっと自信がつきました。
ありがとうございました。
817名無し~3.EXE:2005/06/24(金) 20:56:33 ID:XSG8pdDC
VBである時刻t1から現在の時刻t2の差を秒で求めたいんだけどねーの?

Dim before
before = Now()

'// なんか処理

Dim now
now = Now()

で差を求めたいわけだが・・・

ちなみにテンプレで
Nacelle - WSH「自動」
http://nacelle.info/wsh/index.php
停止中みたいですね^^;
818名無し~3.EXE:2005/06/24(金) 21:10:50 ID:JL8T3Xr2
DateDiff( "s", t2, t1 )
819853:2005/06/24(金) 21:38:36 ID:XSG8pdDC
情報を小出しにしてる形になってしまいすみません

WSH経由でVBScriptを使っています。
少し調べた結果、APIを使うためにはWMIを入れる必要が出てきそうなんで避けたかったんです。

簡単なマクロみたいなのを作ろうとして安易にWSHを選んだことをちょっと後悔しました。
今度からはもうちょっと調べてから質問することにします。

ありがとうございました。
820名無し~3.EXE:2005/06/24(金) 22:32:21 ID:hpDWZoIc
をいをい…
何勘違いして突っ走ってるんだ?
APIなんて関係ないだろ。
DateDiff関数はVBScriptでそのまま使える。

Dim t1, t2
t1 = Now

'// なんか処理の代わり
Wscript.Sleep 5000

t2 = Now
MsgBox DateDiff("s", t1, t2)

を実行してみろ。
「Sleep 5000」で5000_秒(5秒)止めた分の 5 が返るから。
821名無し~3.EXE:2005/06/25(土) 00:15:26 ID:UyX53BGv
  / | ハ    \ ////    ヽ
! l |l、、\     ` 丶 、'´_ 、     、
! l ‖\、 \_     _ /, -`ヽ    }
、 l ‖_ >:=‐  ̄ ̄「 l| l    } 、  ヽ   んっ んんっ…
ヽ 、i`─ '´ ___   | ll ⌒; j  、   ヽ
 \ヽ r,ニ、‐‐'‐' u .l ll   '_ノ   、    ヽ 
   ` \"\):、    | l|  `、 ヽ  、   ヽ
      ヽ  ゞ'^     ! ll   `、 ヽ  、    ヽ
     丿   .:::.  | l|     \ ヽ、 、   ヽ
     丶、_        | l|/lヽ   `>=‐- ミヽ   `、
          `⌒ヽ_  | l| | ハ  /´     `ヽ   、
  チュパ  /  /. `´| l| | l / 〃        `、  、
 チュパ  /   /     | l| | l' 〃            
                             【ゴールデンレス】

このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です
822名無し~3.EXE:2005/06/25(土) 01:06:28 ID:8ZAygSiK
>>820
DateDiff関数に第二引数と第三引数はDateだと思ってて突っ走った
少し反省している

というかありがとうございます
823776:2005/06/25(土) 20:24:55 ID:HtxTPUI+
指定されたフォルダのフォルダ名一覧の配列も作りたいです
どんな方法がありますか?
824名無し~3.EXE:2005/06/25(土) 20:43:24 ID:jaXQOmeE
780をちょっといじれ。
825776:2005/06/26(日) 21:39:08 ID:pErfRXp/
やっとEnumeratorオブジェクトを理解した
826名無し~3.EXE:2005/06/27(月) 14:11:03 ID:ChuXL0WP
HTA から wshsellobj.exec("cscript hoge.wsf") とやると wsf 実行中は DOS 窓が開くんですがこれを抑止できませんか。
Run なら窓開かないオプションが指定できるんですが、run の場合は標準出力を監視できないので。
ちなみに
wshshellobj.exec("cscript //nologo //B hoge.wsf")
でも DOS 窓抑止できませんでした。
827名無し~3.EXE:2005/06/27(月) 14:28:26 ID:SRkDVWRT
いまWSHでFortranのプログラムを実行させています。
そのプログラムで、途中にPauseをかけてあります。
そのPauseしたのを認識して、WSHの次のコマンドラインに移る方法ってありますか?

現在は、FortranでPause直前にファイルに終わったことをあらわす数を書き出し、
それを何回も検索させることで認識させています。
どなたかよろしくお願いします。
828名無し~3.EXE:2005/06/27(月) 14:36:49 ID:Dt38RXj+
環境変数を使うとか。
どう実行させてるのか知らないけど、Fortranが標準出力になんか書き出してそれをWSH側が読み取るとか。
829Trackback(774):2005/06/27(月) 15:00:32 ID:a0qIokfs
前略)
var body = ie.document.all(i).innerHTML;
file.WriteLine(body);  // プロシージャの呼び出し、または引数が不正です。
とするとエラーが出てしまいます。
調べてみたらHTML内に〜;てなUNICODEが含まれてるためエラーになるようです。
これを回避する方法は無いでしょうか。
830名無し~3.EXE:2005/06/27(月) 15:12:34 ID:ChuXL0WP
>>829
書いててNGなコードが出てきたらやり直してる

try { file.WriteLine(body) }
catch (e) {
for(i=0; i<body.length; i++) {
try { file.Write(body.charAt(i)) }
catch (e) { file.Wrtie("&#"+body.charCodeAt(i)+";") }
}
file.WriteLine()
}

もっとエレガントな方法あったら求む
831名無し~3.EXE:2005/06/27(月) 15:30:03 ID:SRkDVWRT
>828
返事ありがとうございます!
現在のスクリプトを簡単ですが、載せてみました。
標準出力に書き出すってことは、Cscript.exeで実行しなければなりませんね?
その出力を読むのはStdoutですか??

Dim WSHShell
Dim stepnumber, StartTime, EndTime
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set Fs = WScript.CreateObject ("Scripting.FileSystemObject")

WSHShell.Run"..\main\3a_main.exe",7,False
Do
Set oTs1 = Fs.OpenTextFile("step.dat")
sStep = oTs2.ReadLine
oTs2.Close
If sStep = 0 Then
Exit Do
End If
Loop
WScript.Echo "Pause"
832Trackback(774):2005/06/27(月) 15:58:08 ID:a0qIokfs
>>830
ありがとうございました。上手くできました。
833830:2005/06/27(月) 20:35:30 ID:ChuXL0WP
後で気づいたんだけど

try { file.WriteLine(body) }

で失敗したら、その行は丸々書かれなかったことになるのかな?
もし途中まで書いてたなら file.column プロパティで何文字目まで書いたかわかる(だろうと思う)ので

var ibegin=0
if (file.column>0) ibegin=file.column-1
for(i=ibegin; i<body.length; i++) {

の様にしたほうが良いかもしれない
834776:2005/06/27(月) 21:42:23 ID:5cc/9scc
解決しました
FilesをSubFoldersに変えるだけなんですね
お騒がせしました
835名無し~3.EXE:2005/06/27(月) 22:21:24 ID:7m0PXNxy
掲示板の書き込み用スクリプトを作っています。
書き込み内容を引数に渡すと、自動でそのサイトに書き込むというものです。

VBSの引数として、改行を含んだ文字列を渡したいのですが、
どういった記述をすればよいでしょうか?
下のような書き方では、「"1行目"」しか第一引数として渡りませんでした。

C:\> hoge.vbs "1行目" & vbCrLf & "2行目"
836835:2005/06/28(火) 01:01:33 ID:arf8VtmE
自己解決しました。
こんな感じで期待通りの動きをしました。

C:\> hoge.vbs Replace("1行目\n2行目", \n, vbCrlf)

もしも、もっといい方法があったら教えてもらえるとうれしいです。
失礼しましたー。
837名無し~3.EXE:2005/06/28(火) 01:19:19 ID:uRdvmD3Q
俺等に荒らしや宣伝の手伝いをしろと?
838名無し~3.EXE:2005/06/28(火) 09:02:00 ID:arf8VtmE
そうそう指摘もきっとあるんだろうなーと思ったから、具体的な処理の中身は書かなかったんですけどね。
839名無し~3.EXE:2005/06/28(火) 10:16:20 ID:FZN1DUed
840名無し~3.EXE:2005/06/29(水) 12:24:37 ID:xRXzvGKC
InternetExplorer.ApplicationオブジェクトのNavigateであるURLに飛ばす際に
リファラを指定してやりたいんですが上手くいきません。
4番目の引数に追加のヘッダを記述すれば行けるはずなんですが
どうやって指定すればいいのかわからないです。

なお、こんな感じでテストしています
var wb = new ActiveXObject("InternetExplorer.Application");
wb.Visible = true;
wb.Navigate("http://www.ugtop.com/spill.shtml", 0, null, "Referer http://www.yahoo.co.jp\n");

841名無し~3.EXE:2005/06/29(水) 12:47:46 ID:syu22InB
>>840
Navigateの第4引数はPOSTするデータ。ヘッダは第5引数。
あとヘッダの名前とデータはコロン(とスペース)で区切る。
842名無し~3.EXE:2005/06/29(水) 13:41:36 ID:xRXzvGKC
>>841
ありがとうございました。以下で行けました。
ie.Navigate("http://www.ugtop.com/spill.shtml", 0, null, 1, "Referer: http://www.yahoo.co.jp\r\n");
843名無し~3.EXE:2005/06/30(木) 17:07:26 ID:Kd/BkTkt
JSで他のファイルを実行したいです
メモ帳を起動したいんですけどどんな方法がありますか?
844名無し~3.EXE:2005/06/30(木) 17:28:35 ID:L5K75BM/
>>843
普通に

つーかプログラム実行なんて一番初歩的な部分だろ。
調べる気が少しでもあるなら、わからないなんてことはあり得ないわけだが。

そんなことも調べられないようならjsなんて使わずに
バッチでも使ってろ。テキストにパス書いて拡張子batにすればそれで終わりだ。
845名無し~3.EXE:2005/06/30(木) 17:58:35 ID:Kd/BkTkt
だって何のキーワードで調べるのかわかんないんです><
846名無し~3.EXE:2005/06/30(木) 18:09:23 ID:/9+MWKQr
847名無し~3.EXE:2005/06/30(木) 20:06:32 ID:rvAkSOf4
>>843
そもそもなんで js でやろうと思ったの?
答えそのままだとためにならないので、ヒントだけ言うなら
exec とか run あたりのメソッドを試してみたら?
848http://www.geocities.jp/fox_mondai/:2005/06/30(木) 21:08:55 ID:JV9mNq7w
たった5件の保守ageで、アクセス規制!?
849名無し~3.EXE:2005/07/01(金) 16:44:10 ID:9yi1xDRx
850名無し~3.EXE:2005/07/01(金) 20:05:15 ID:BG/u+VYB
できました
ありがとうございました
ご迷惑おかけしました
851名無し~3.EXE:2005/07/02(土) 12:57:09 ID:DU8o0MIV
質問です JScriptでやってます
インターネットから画像ファイルをダウンロードしてファイルに保存したいのです
下のスクリプトを実行してみるとエラーを特定できませんと成ってうまくいきません
何か足りない部分があるのでしょうか?
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
sURL = "http://www.google.co.jp/intl/ja_jp/images/logo.gif";
adTypeBinary = 1;
adSaveCreateOverWrite = 2;
TmpPath = "logo.gif";
Stream = new ActiveXObject("Adodb.Stream");
xmlhttp.Open("GET", sURL, false);
Stream.Type = adTypeBinary;
Stream.Open();
Stream.Write(xmlhttp.responseBody);
Stream.SaveToFile(TmpPath, adSaveCreateOverWrite);
852名無し~3.EXE:2005/07/02(土) 13:15:28 ID:DD8OpXsg
接続を開いただけで要求を送ってない。
xmlhttp.Send();
をOpenのあとに付け加える。
853名無し~3.EXE:2005/07/02(土) 14:23:29 ID:DU8o0MIV
>>852
望みどおりの動作を出来ました!
ありがとうございました
854名無し~3.EXE:2005/07/04(月) 16:53:45 ID:VsxHVlPF
はじめまして。
Do LoopであるEXEを実行しています。そのEXEは毎回同名のファイル
を作成するので、前のステップのファイルが消えてしまいます。
そこで、コピーをさせたいのですが、何回繰り返したときのファイルかわかるように
ファイル名を指定したいのですが、何か良い方法ありますか?

Do I=1,step
call cal (プログラム)
call copy (コピー)
Loop

毎回test.datが出るので、別フォルダに、0001test.dat、0002test.dat・・・
と別名コピーしたいということです。どなかたお願いします。
855名無し~3.EXE:2005/07/04(月) 17:24:21 ID:Q74Q+2qD
>>854
カウンタ回してカウンタ変数をファイル名に当てればいいだけじゃん。
"0001"にしたいなら right("000"&カウンタ変数,4) で。
「書いて」とか言うなよ。
856名無し~3.EXE:2005/07/04(月) 19:11:38 ID:Ujj/GPdN
>>855
書きたいんだろ?ホントはw
857名無し~3.EXE:2005/07/04(月) 19:28:28 ID:m3YqWzNm
>>855
うん、書いてやればw
858名無し~3.EXE:2005/07/04(月) 21:12:09 ID:BYwHLMcR
10 シキ i=0
20 ジッコウ プログラム
30 コピー ファイル "ファイル"+i
40 i=i+1
50 10ニイケ
859名無し~3.EXE:2005/07/04(月) 21:15:31 ID:BYwHLMcR
50 20ニイケ
のマチガイ。>>854スマン
860名無し~3.EXE:2005/07/04(月) 21:19:54 ID:Ujj/GPdN
go to文なんて久しぶりに見たなw
861名無し~3.EXE:2005/07/04(月) 23:07:21 ID:iOYP1gxT
ダサw
862名無し~3.EXE:2005/07/04(月) 23:59:05 ID:ygoaaKot
ぴう太?
863名無し~3.EXE:2005/07/05(火) 22:50:48 ID:bjNjC0Bz
>>854
Dim objFS, objFile, I
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
I = 0
Do
I = I + 1
Set objFile = objFS.GetFile(ぱす)
objFile.Name = I & objFile.Name
Loop
うるおぼえ
864名無し~3.EXE:2005/07/05(火) 23:15:49 ID:c+RZoHEU
四年に一度の うろうどし
865854:2005/07/06(水) 11:25:58 ID:iPjGicTm
皆さんすんません。アドバイス頂いたおかげで出来ました!
ありがとうございます!
866名無し~3.EXE:2005/07/07(木) 23:28:47 ID:YZpongGx
初心者がほほえましいな
867名無し~3.EXE:2005/07/10(日) 23:16:07 ID:mw7rcPjW
>>1
使っております!
868名無し~3.EXE:2005/07/10(日) 23:22:08 ID:kF02gQXa
>>867
詳しく
869名無し~3.EXE:2005/07/11(月) 07:04:16 ID:fYZw6nDI
>>1
つがんてる
870名無し~3.EXE:2005/07/12(火) 01:41:29 ID:qLZNoogy
infoseekラッキーサーチで検索しまくるwsh書いたのに
ちっとも当たらない。
871名無し~3.EXE:2005/07/13(水) 01:50:01 ID:tixYhwL+
>>870を日本語に直すスクリプトをおながいします
872名無し~3.EXE:2005/07/13(水) 01:59:19 ID:Zr/8ZU+0
>>871
「トウモロコシ畑にオレンジ色の光か…」
あと訛っててよくわかんないや。
873名無し~3.EXE:2005/07/13(水) 11:23:29 ID:JNVlv6cR
ひとつのファイルの一部分と、別のファイルの一部分をコピーして置き換える
スクリプトって可能ですかね?どうもうまくいかなくて。
お願いしまっす!
874名無し~3.EXE:2005/07/13(水) 11:38:10 ID:lyoSUdJ+
>>873
テキストファイルなら簡単にできる
875名無し~3.EXE:2005/07/13(水) 12:17:39 ID:9mrwEXfu
バイナリならADODB.Streamオブジェクトだな。
JScriptからバイナリを操作するのは諦め気味だったがこんなの発見。
ttp://www.hawk.34sp.com/stdpls/dwsh/charset_adodb.html
XMLDOMを使う訳か。巧いな。

/* サンプルコード */
var ados = new ActiveXObject("ADODB.Stream");
ados.type = 1;
ados.open();
ados.loadFromFile("hoge.dat");
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
var elem = xmldoc.createElement("tmp");
elem.dataType = "bin.hex";
elem.nodeTypedValue = ados.read();
ados.close();
elem.text += "82a0";
ados.open();
ados.write(elem.nodeTypedValue);
ados.saveToFile("hage.dat");
ados.close();
876873:2005/07/13(水) 13:15:06 ID:JNVlv6cR
すいません、テキストです。
877名無し~3.EXE:2005/07/13(水) 13:48:25 ID:kIBBerqT
>>876
それなら簡単だ。
がんばれ。
878名無し~3.EXE:2005/07/13(水) 13:49:49 ID:+xiB2BEw
「一部の」って言われてもどういう条件でどことどこを置き換えたいのかよくわからん。
879873:2005/07/13(水) 13:55:47 ID:JNVlv6cR
具体的には
1,10,10,10
2,11,11,11
3,13,12,11
とならんでいる部分をまるごと
1,15,15,15
2,13,14,50
3,14,65,43
というものと置き換えたいということです。
880名無し~3.EXE:2005/07/13(水) 14:15:56 ID:+xiB2BEw
>879
その説明じゃ全然わからないが・・・。
881名無し~3.EXE:2005/07/13(水) 14:18:49 ID:0RYBHytn
>>878
別にいいじゃん、「可能ですかね?」なんだから、
可能かどうかさえわかれば、自分で書くんだろうから。
882名無し~3.EXE:2005/07/13(水) 15:36:25 ID:np3HrxyN
A:「可能ですかね?」
B:「可能です」
A:「どうすればできますかね?」
B:「こうすればできます」
A:「やってみたんですが、出来ませんでした。コードを書いてもらえませんかね?」
B:「・・・(最初からそう書けよ)」
883873:2005/07/13(水) 15:57:21 ID:JNVlv6cR
そうですね。すんませんでした。
もし時間があれば、どなたか書いてくれませんか?
884名無し~3.EXE:2005/07/13(水) 16:06:54 ID:lKR6vsSt
スレ違い。
ここは丸投げして、「〜なスクリプト書いてください」ってなスレではなく
技術的なヒントを貰ったり、テクを披露したりするスレ。

教えたがり君が常駐してるからやる気のない教えて君も後を絶たないが、
そろそろコード丸投げのクレ厨は追放しようぜ。
885名無し~3.EXE:2005/07/13(水) 16:26:03 ID:DKIhVnfl
>>884に禿同しておいて……

>>873
だいたい書き換えの仕様も分からんし、この段階で書いてくれなんて
厨すぎると思いませんか?
自分でやってみて分からんところを尋ねるならOK。
調べ方が分からないというなら調べ方を調べてください。
886873:2005/07/13(水) 17:43:55 ID:JNVlv6cR
そうですね、すんませんでした。自分が作ったのは、下のような感じです。
test.txtの1行目は飛ばして、2行目から426行目まで読み込ませます。
そして、test2.txtの、同じく2行目から426行目までとまるごと置き換えたいということです。
WSHのドキュメントファイルを見たのですが、長い行数まるごと置換する方法が見つかりませんでした。

Dim fso,opfile1,opfile2
Set fso = CreateObject("Scripting.FileSystemObject")
Set opfile1 = fso.OpenTextFile("test.txt", ForReading, True)
opfile1.skipline
For I=1 To 425
f= f & opfile1.ReadLine
Next
Set opfile2 = fso.OpenTextFile("file1.txt", ForWriting)
opfile2.WriteLine f
opfile2.Close
opfile1.Close


test.txt
(1行目飛ばし)
1, 0.0 , 0.5, 0.5
2, 0.0 , 1.0, 0.5
3, 0.0 , 1.5, 0.5

  ・
  ・
こんな感じのファイルを読み込ませました。するとfを出力すると
1, 0.0 , 0.5, 0.5 2, 0.0 , 1.0, 0.5 3, 0.0 , 1.5, 0.5
と表示されてしまうのも改善したいのですが。
887名無し~3.EXE:2005/07/13(水) 17:55:23 ID:9mrwEXfu
改行文字って知ってるかい? ってか知らないからこうなんだろうな。
文字列の一行の最後に含まれる仮想的な文字のことなんだけど。
ReadLineは一行の改行直前まで読み取る。つまり改行文字は含まれない。
で、その改行文字を含まない文字列をどんどん足していっちゃったからベタな無改行文字列が出力されたって訳。
改行文字をVBScriptでどう表現するかはこんな感じでぐぐれ。
ttp://www.google.com/search?num=100&hl=ja&c2coff=1&q=VBScript+%E6%94%B9%E8%A1%8C%E6%96%87%E5%AD%97&lr=lang_ja

で、WriteLineは文字列の後ろに改行文字を付加して書き込む。
であるからさ、ReadLineしたのを一々fにため込んだりせずにそのままWriteLineすれば簡単だと思わないか?
888名無し~3.EXE:2005/07/14(木) 04:16:25 ID:Asg2HN0l
すでに立ち上がっているWindows Media Playerに対して
スクリプトで、ファイル→URLを開く→ファイル名をペースト→OKボタンをやりたいんですけど
スクリプト内で起動したプログラムでないと操作できないんでしょうか?
889名無し~3.EXE:2005/07/14(木) 08:11:58 ID:ZcAC6ieT
>>888
できるよ。
コード書いてってのは>>884なのでがんばってね。
890名無し~3.EXE:2005/07/14(木) 08:25:51 ID:K180mzu5
なにも考えないで済むのはキーストロークをおくるやりかただな
891名無し~3.EXE:2005/07/14(木) 12:53:58 ID:Asg2HN0l
>>889 >>890
ヒントすら教えてもらえないのですか(´・ェ・`) ショボーン
できるって言われても、何を使ったらWindows Media Player接続できるのやら・・・
せめてPIDで接続できるようなものがあればいいんだが
892888 891:2005/07/14(木) 13:42:50 ID:Asg2HN0l
>>889 >>890
昨日使ってみたがうまく接続できなかったが、
.AppActivate("Windows Media Player")をもう一度やってみたら接続できました。URLを開くまでできました。
アクティブなウィンドウに対してなので不安定な動作していたのかもしれない。
お手数かけました。
893名無し~3.EXE:2005/07/14(木) 20:28:22 ID:jcyrQcpk
>>892
AppActivateは知ってるよな?
894名無し~3.EXE:2005/07/15(金) 01:15:37 ID:u76GRIaz
SendKeysでキーを送ることを「接続」って言ってるの?
895名無し~3.EXE:2005/07/16(土) 02:58:42 ID:GIz2x6n9
>>893
よく知りません
>>894
誰ともそんな話しないから言ったこと無い
896名無し~3.EXE:2005/07/17(日) 13:42:58 ID:s2NEIL9M
あるサイトのページのソースを取得し、その中から文字列を取得したいと思っています。
変数の中にソースを代入し、そこから必要な文字列だけを切り出せば出来ると思っているのですが、どうすれば出来ますか?
897896:2005/07/17(日) 13:44:47 ID:s2NEIL9M
VBSを使ってやりたいと思っています。
898名無し~3.EXE:2005/07/17(日) 13:50:03 ID:vGAcSKoO
まずどこが分からないのかから聞こうか。
899名無し~3.EXE:2005/07/17(日) 13:53:44 ID:SjgeNnQN
BASP21、W3getの-cオプション(HTTP クッキー指定)でクッキーを複数の指定するにはどうすればいいでしょうか
「;」区切り、-cの複数書きなどでは駄目でした。使用言語はJscriptです。
900896:2005/07/17(日) 14:20:08 ID:s2NEIL9M
>>898
サイトからページのソースを取得する部分で躓いています。
901名無し~3.EXE:2005/07/17(日) 14:22:25 ID:H8wDRWV2
まずは自分が書いた物を貼ってみよう。
全く書いてないというなら(゚听)カエレとなるが。
902896:2005/07/17(日) 14:39:25 ID:s2NEIL9M
ご指摘ありがとうございます。

インターネットブワウザでview-source:アドレス と指定するとソースが表示できるのでそれを応用しようと考えたのですが、
エラーが出てしまいます。別の方法でやるべきですか?



Dim SourceGet,objSourceGet
SouceGet = ""
Set objSourceGet = CreateObject("WScript.Shell")
SouceGet = objSourceGet.Run "view-source:http://yahoo.co.jp"
MsgBox SouceGet
903名無し~3.EXE:2005/07/17(日) 14:44:21 ID:fj3lfQO1
>>902
SamurizeとかAveDeskのWeb情報取得系のvbs拾ってきて
流用するのが一番早いと思われ。
904おれはおれだ ◆SAGI2KFG6c :2005/07/17(日) 18:51:05 ID:GAm91tIf
>>902
こんばんはSamurizeスレの者です
私はVBS出来ませんがJScriptで参考になれば幸いです

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("GET", "http://www.yahoo.co.jp/", false);
xmlhttp.send();
txt = xmlhttp.responseText;

これで変数txtにソースを代入します
あとはStringクラスのメソッドで必要な部分を切り取れば出来上がります
905名無し~3.EXE:2005/07/17(日) 20:23:50 ID:K16Ce8+R
>>902, >>903
basp21 なんかもお勧め。
906名無し~3.EXE:2005/07/18(月) 13:01:58 ID:uONo2bkM
902-904のスムーズな流れにワロタ
907名無し~3.EXE:2005/07/23(土) 23:57:27 ID:wP5iuexc
ファイルの概要情報をゴニョゴニョしたいんですけど、
FolderオブジェクトのメソッドGetDetailsOf で
なぜか「キーワード」だけ取得できません。他の「タイトル」とかはいけてるんですが……

フォルダの表示を詳細表示にしても、キーワードの何も表示されないし。
何か方法がありませんか?

908名無し~3.EXE:2005/07/26(火) 10:40:03 ID:/XUH5pHG
オライリー本買ったかね?
909名無し~3.EXE:2005/07/26(火) 13:28:26 ID:LHprXdA1
>>906
携帯から乙
910名無し~3.EXE:2005/07/26(火) 15:59:22 ID:LyplnuSK
Toolsack Baseline 1.1ってどうよ?
誰か使った事ある?

ttp://www.toolsack.com/
911名無し~3.EXE:2005/07/27(水) 18:33:22 ID:AMBHqMUk
sendkey でクリップボードの中のデータは壊れますか?
912名無し~3.EXE:2005/07/28(木) 01:12:50 ID:ZrX+2uFg
質問の意図がわからないが、たぶん壊れない
913907:2005/07/28(木) 02:35:47 ID:jpcsRqXo
MSNデスクトップサーチだとキーワード拾ってくれるのにな〜
914名無し~3.EXE:2005/07/28(木) 17:41:09 ID:8saPxx0L
>>912
あんがと、でいいのかな
915名無し~3.EXE:2005/07/28(木) 20:31:00 ID:9GQWx63v
>>914
いや、壊せる。
916名無し~3.EXE:2005/08/01(月) 01:56:23 ID:0cXpaOBW
JScriptでWMIって情報が少なくてつらい〜
ようやくStdRegProvクラスのEnumKeyが使えたので貼っとく。

var dict = new ActiveXObject("Scripting.Dictionary");
var keys = dict.items(); // VBArray
var reg = GetObject("winmgmts:/root/default:StdRegProv");
var HKCU = 0x80000001;
var ret = reg.EnumKey(HKCU, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", keys);
for (var i = keys.lbound(); i <= keys.ubound(); ++i) {
WScript.Echo(keys.getItem(i));
}
917名無し~3.EXE:2005/08/05(金) 13:39:02 ID:plvwoaKQ
うへへ。。。僕は肉奴隷
918名無し~3.EXE:2005/08/08(月) 21:12:19 ID:7kPr/eKF
もりあがらねえぁ。
次スレは、学校の宿題で出たwsh の課題をも教えてあげるスレにしたら?
919名無し~3.EXE:2005/08/08(月) 21:19:40 ID:w9RaMnHj
宿題にWSHの課題が出るとも思えんな。
920名無し~3.EXE:2005/08/09(火) 01:01:48 ID:fFKptDs5
結局VistaにはMonadも乗らないんだよなー。
921名無し~3.EXE:2005/08/13(土) 17:19:46 ID:CoarYLSC
オライリー本、全然ダメだな。数分の立ち読みだけど。
「行末」のことを「文末」と書いてる点で萎えた。
922名無し~3.EXE:2005/08/17(水) 01:01:29 ID:jV9Vp7XI
【チラシの裏】
IEのオブジェクトでクリップボードを操作しようとしたら、Navigate の値?をabout:blankにするはずだったのが
綴りを間違えてabaut:blankにしてしまった。
で、Meだと正常に動いていたが、XPで実行すると正常に機能しなかった。
【チラシの裏終わり】
923名無し~3.EXE:2005/08/17(水) 01:46:34 ID:ZNa/+dz3
Meがいかにアバウトな造りであるかを
印象付けるようなエピソードですね。

一方、堅そうで脆いXPは
つむじ曲がりのヘソ曲がりなので動くものも動きません。
動く頃にはサポート終わります。仕様。
924名無し~3.EXE:2005/08/17(水) 01:47:24 ID:6bV9par/
>>921
行末がCrLf、文末がLfだと知らない素人
925名無し~3.EXE:2005/08/17(水) 01:57:15 ID:6bV9par/
>>924
すまん、ちょっとうそついてみたけどしばらく出かけるので。
嘘だと言っとく。
926名無し~3.EXE:2005/08/17(水) 02:09:47 ID:FQYnIsOQ
>>924
あほか,んなこたぁない
927名無し~3.EXE:2005/08/17(水) 02:21:43 ID:3MIGcNfJ
>>921
今日借りてきたけど…。ホントだ。
「JScript では、文の終わりに ; が必要です」とか書いてある。ややこしい…。
でも私は初心者だから、役に立ちそうです。
928名無し~3.EXE:2005/08/17(水) 04:33:24 ID:VouLrjWH
>>927
921が言ってるところは知らんけど、
「JScript では、文の終わりに ; が必要です」というのは正しいよ。

var hoge =
  "ABCDEFG";
と2行に分けて書いたり、

foo += 123; bar += 456;
と 1行にまとめて書いても良い。

だから、 ; を付けるのは行末ではなく文末なの。
929名無し~3.EXE:2005/08/17(水) 07:57:02 ID:e9y0WDF3
var A = 0
var B = 1

; なくても大丈夫ですよ。
930927:2005/08/17(水) 14:02:17 ID:brZ+1PiN
なるほど、そういうことだったのですね、失礼しました…。
それから、確かに ; 無しでも動きました。ありがとうございました。
931名無し~3.EXE:2005/08/25(木) 01:26:08 ID:FoYuYL5z
WScript.Echo("ほしゅ");
932名無し~3.EXE:2005/08/25(木) 21:32:26 ID:kYau19UG
要するにステートメント末尾ってことだよな
933名無し~3.EXE:2005/08/25(木) 22:55:51 ID:XIMMEj7q
あるとき突然動いていたスクリプトが動かなくなって、ソースを見るも原因不明
再起動すると何事もなかったように動作する
なんとかなりませんか・・・
934名無し~3.EXE:2005/08/25(木) 22:59:13 ID:HL6OkhXR
なんともならんな
935名無し~3.EXE:2005/08/28(日) 17:21:35 ID:avD/LM+c
ネタがないから>>933はそのスクリプト晒せよ。
もしかしたら解決するかもしれん。
936名無し~3.EXE:2005/08/28(日) 21:03:45 ID:2WzZYCjD
使ってみたいのですが。動かない。やっぱり。スキル梨orz...
コマンドラインスレの物。

ネタ代わりに↓スクリプト晒しますから動せるように出来ないかな

こんな素敵なメモツール
ttp://d.hatena.ne.jp/yamatt2/20050215/p1

を見つけて使おうとしましたが

' テキストファイルを起動(エディタは、.txt に関連付けているやつ)
Set sh = CreateObject("WScript.Shell")
sh.Run basepath & "\" & memofile, , false

で止まりエラーになります。

このスクリプト内でエディタ起動するにはどうしたらいいでしょうか?
もしかしてWSHスレかもしれませんが(VBS)
メモ自体は生成されます。でも指定エディタが起動しませんorz

私のレベルでは無理でした。
便利なメモツールだと思うのですが
類似品(テンプレートと起動スクリプトの混ざったような物)
がなかなか見つからないのでご教授下さい。

環境はwindow2000でWindows Script 5.6です
コマンドラインで呼びだしてサクッとメモり、溜まったら
grepで探して便利に使いたいですorz
937名無し~3.EXE:2005/08/28(日) 22:18:09 ID:EFLPKRHw
多分パス内にスペースが含まれてるんじゃないか?
938名無し~3.EXE:2005/08/28(日) 22:21:09 ID:SkSr4/7c
ていうかさー、エラーメッセージぐらい書けって話だよねー。
939名無し~3.EXE:2005/08/28(日) 22:22:48 ID:EFLPKRHw
スペース含むパスで試した。コレで多分いける。
sh.Run """" & basepath & "\" & memofile & """", , false
940936:2005/08/28(日) 23:01:34 ID:2WzZYCjD
動いたお。
C:Doc.....で止まってたんだorz...

>>939

(≧∀≦。)ノありがd

なんか凄いです。
""が一杯

便利になりました。d
941名無し~3.EXE:2005/08/29(月) 00:21:07 ID:sni/fKiU
余裕があればちょっとでも勉強してみては。このぐらいはすぐ理解出来るようになるから。
942名無し~3.EXE:2005/08/31(水) 23:01:01 ID:nXx9dV6I
馬鹿みたいな質問で恐縮ですが、ダウンロード版のWSHヘルプって、
フォントの大きさは変えられませんか?
小さすぎて目が疲れる…
943名無し~3.EXE:2005/08/31(水) 23:02:33 ID:Uf0kgPKn
Ctrl + ホイールスクロール
944名無し~3.EXE:2005/08/31(水) 23:19:42 ID:nXx9dV6I
で、できました…
ありがとうございました。いやはや、恥ずかしい…
945名無し~3.EXE:2005/09/01(木) 00:44:59 ID:+FLKg9cS
Office入れてるとmse.exeを使って
変数やオブジェクトの内容を見ながらデバッグできるけど
Officeを入れずに、できれば無料で
同じような環境は手に入らないかな?
946名無し~3.EXE:2005/09/01(木) 18:25:08 ID:cJnPCYZ0
>>945
Script Debugger?
947名無し~3.EXE:2005/09/02(金) 00:23:24 ID:PMkTNymy
>>946
MSScriptDebuggerは対象をブラウザなんかで開かないと駄目で
単体スクリプトのデバッグって出来なくない?

mse.exeだと >cscript //X hoge.vbs でデバッグできるのよね。
変数の内容も自動で更新してくれるし
オブジェクトのメンバもチェックできるからかなり便利。

やっぱりOffice入れるかVisualStudioいれるしかないんかな。
948名無し~3.EXE:2005/09/02(金) 15:59:37 ID:gWC1JQHK
batスレから誘導されてきました。よろしくお願いいたします。
ドラッグ&ドロップしたファイル(主に複数)のテキストファイルに対して、
本文中のタブと空白、ファイルの拡張子を削除するバッチを作ろうと思っているのですが、
どのようにしたらよいでしょうか。よろしくお願いいたします
949名無し~3.EXE:2005/09/02(金) 16:09:19 ID:eIjfFscD
>>948
For Eachステートメントに、Wscript.Argumentsを当てて
ReadAllでファイルを読み込んで、Replaceでタブやスペースを""に置換して
読み込んだファイルを削除して、Writeで拡張子を抜いたファイル名に書き込んで終わり

ここは「書いてください」スレじゃないので具体的なコードは自分で書こう
950名無し~3.EXE:2005/09/02(金) 18:18:22 ID:76Kyl1Iq
練習がてら書いてみました。
ttp://www.uploda.org/file/uporg183285.zip.html

同じディレクトリに出来上がります。
入力ファイルは消してません。
951名無し~3.EXE:2005/09/02(金) 23:19:18 ID:jru7iSMS
>>950
元から拡張子が無かった場合にエラーになるな。
一度変数に読み込んでInfを閉じてから書き込んだ方がいいでしょ。
それと".拡張子"と同じ文字列がパスの中に有ると出力パスが狂ってくるから
GetParentFolderNameとGetBaseNameでパス決めた方がいいな。
まあ、初めてにしては上出来だ。
952名無し~3.EXE:2005/09/03(土) 18:39:42 ID:3zBrWDCO
WScript.Arguments で引数を10個くらい処理しようとするとエラーになってしまうのですが、一度に数十個処理できないものでしょうか
953名無し~3.EXE:2005/09/03(土) 19:20:01 ID:v9QDnCz6
>>952
ひとつのフォルダに放りこんで
フォルダ単位で処理する
954名無し~3.EXE:2005/09/03(土) 19:48:43 ID:3zBrWDCO
レス早っ
ありがとうございます。なんとかできそうです
955名無し~3.EXE:2005/09/03(土) 23:44:39 ID:gqZ8ORmH
>>954
なんとかしたらupしてみて。
956名無し~3.EXE:2005/09/03(土) 23:49:40 ID:jvNcM23H
バグを叩き潰せ!
957名無し~3.EXE:2005/09/03(土) 23:50:57 ID:Ch9kSBc+
ヤメテ!
ボクヲイジメナイデ!!
958名無し~3.EXE:2005/09/05(月) 12:20:19 ID:ancuNvP6
WSHでIEのプロキシの切り替えをするにはどうすればいいでしょうか?
959名無し~3.EXE:2005/09/05(月) 12:42:40 ID:cUcyMtiR
960名無し~3.EXE:2005/09/05(月) 13:55:33 ID:ancuNvP6
>>959
ありがとうございます。やっぱり他所に置いた.pacファイルを読み込ませるしかないですか・・・
1つのスクリプトファイル内でプロキシを切り替えれないかと考えていたところです。
961名無し~3.EXE:2005/09/05(月) 19:24:33 ID:cUcyMtiR
いや、設定ファイル書き出すのが一番簡単かなと思って・・・

レジストリだと
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
の ProxyServer あたりを書き換えればいいんじゃね?
試してないけど。
962名無し~3.EXE:2005/09/06(火) 17:10:17 ID:23FLj5Ig
取得はあるけど設定はできんのかな。

List Internet Explorer LAN Settings
ttp://www.microsoft.com/technet/scriptcenter/scripts/desktop/ie/dmievb12.mspx
Internet Explorer
ttp://www.microsoft.com/technet/scriptcenter/scripts/desktop/ie/default.mspx
963名無し~3.EXE:2005/09/06(火) 18:01:14 ID:s70kE+0b
起動中のIEの設定を変えようとするならAPI使わないと無理だったと思う
964名無し~3.EXE:2005/09/06(火) 18:07:36 ID:AFvQ0NDX
プロキシ設定変えるスクリプトが欲しいというschoolboyに対して

ttp://groups.google.com/group/microsoft.public.windows.server.scripting/browse_thread/thread/b872561dd796c150/275a9dbe72d8ba6a#275a9dbe72d8ba6a

ttp://support.microsoft.com/kb/819961/
を参考にしろとTorgeir Bakken氏が言ってた。

ダイヤルアップなら
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections
あたりも見ろと。
965名無し~3.EXE:2005/09/06(火) 21:27:44 ID:iBwRolDz
VBScriptでExcelファイルを操作したいのですが、
Excelの組み込み定数を使うことはできないのでしょうか?

sheet.Cells(1, 1).HorizontalAlignment = xlHAlignCenter 'sheetはWorkSheetオブジェクト

とか指定したいのですが、
このままだとエラーになってしまいます。
966名無し~3.EXE:2005/09/06(火) 21:38:31 ID:JACXxD+g
使えない
ExcelのメソッドなどはExcelのオブジェクトから参照できるが
定数はExcelで使われてる定数文字列を書いても、
参照先はソレを書いたVBS内になるから。

ExcelVBEのイミディエイトウィンドウで
? xlHAlignCenter
と入力してEnterキー押すと-4108が返るし
Shift+F2でオブジェクトブラウザから定数値調べてもいいし
大量に調べたければセルにでも書き出せばいい

あとはVBS内で定数宣言
const xlHAlignCenter = -4108
967名無し~3.EXE:2005/09/06(火) 22:38:31 ID:Rrg870VY
HTAのフレームにファイルやフォルダをドロップしていろいろさせるスクリプト作っています。
期待しているイベントは次のようなもので、また、それぞれの最終状態でFRAME.location.hrefにはドロップされたアイテムのパス情報が入ってることを期待しています。

■ローカルファイルをドロップしたとき
イベントonReadyStateChangeが発生、document.readystateが次のように変化
 loading → interactive → complete
イベントonLoadが発生

■ローカルフォルダをドロップしたとき
イベントonReadyStateChangeが発生、document.readystateが次のように変化
 loading → interactive → ERROR(フォルダドロップではcompleteが発生しない。そのフレームがファイルエクスプローラーに化けるから。)
イベントonLoadは発生しない(フレームの中身はファイルエクスプローラーだから)

しかるに、ヒアリングした限りでは同じ環境なのに
(1)フォルダをドロップしているのにdocument.readystate=completeとonLoadが発生する
(2)FRAME.location.href=about:blankとなり、パス情報がない。
というようなことが起こるようです。手元のPCでは再現できずお手上げ状態です。
環境はXP SP2(Home/Pro)(なのでWSH5.6) IE6.xxです。

プログラムは http://winscript.s41.xrea.com/wiki/ のアップローダー使わせていただいて、「HTAフレームへアイテムドロップしたときのイベントトレース.zip」です。

質問は、
★イベントは上記の期待しているとおりでよいと思っているのですが、何か考え漏れはないでしょうか。
★あぷしたプログラムで、(1)(2)の様な現象の出る方はこのスレではいらっしゃいますか?
 あるいはそのようになる原因がわかれば教えてください。
968967:2005/09/06(火) 23:13:52 ID:Rrg870VY
アップローダー使えないみたいなので
HTAフレームへアイテムドロップしたときのイベントトレースプログラム
http://plutonium.hp.infoseek.co.jp/futaba/trace.zip
969名無し~3.EXE:2005/09/07(水) 01:29:55 ID:i7j9UtKs
>>965

.wsf ファイルでよければ以下の方法でできる。

<Job id="hoge">
' Excel の定数を使用する
<REFERENCE GUID="{00020813-0000-0000-C000-000000000046}"/>
<script language="VBScript">
  :
  :
</Script>
</Job>
970名無し~3.EXE:2005/09/07(水) 11:17:56 ID:Ly944d50
IEのツール->インターネットオプション->全般 で
インターネット一時ファイルの削除
Cookieの削除
履歴のクリアを
VBSでやりたいのですが、ご存知の方いましたら教えてください
971名無し~3.EXE:2005/09/07(水) 11:31:21 ID:mBy9b2hU
>>970
…で?
972名無し~3.EXE:2005/09/07(水) 12:45:41 ID:SBrw4ajT
>>970
ノシ ヤッテルヨw
自分でどこまで調べてて,どこが分からないの?
973名無し~3.EXE:2005/09/07(水) 15:13:41 ID:7y3GWFmG
>>970

探した? 「教えて goo」 に それっぽいのがあったけど。。

「質問:自動化のソフトの作り方を教えてください」 : インターネット一時ファイル削除
  → http://oshiete1.goo.ne.jp/kotaeru.php3?q=551840

「質問:Temporary Internet FilesにあるすべてのCookieをjavascriptで削除」 : Cookie 削除
  → http://oshiete1.goo.ne.jp/kotaeru.php3?q=1526558

974970:2005/09/07(水) 18:22:02 ID:AX1UOlAl
>>971-973
レス、ありがとうございます。

履歴のクリアは、保存する日数0日で対応することにしました
インターネット一時ファイルの削除とCookieの削除は
973 さんのサンプルを参考して以下のようにしました。

Option Explicit
DIM WshShell, FS, TmpIePath

Set WshShell = CreateObject("WScript.Shell")
Set FS = CreateObject("Scripting.FileSystemObject")

TmpIePath = WshShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache")

FS.DeleteFile(TmpIePath+"\"+"*.*")

これで消えている感じなので
973さん、どうもありがとうぞざいました。
975名無し~3.EXE:2005/09/07(水) 23:14:31 ID:WuvFzaKm
ttp://java-house.jp/~takagi/security/misc/jscript-clipboard/test.html

クリップボード操作便利だから無効にしたくないなあ
WEBブラウジングを別のブラウザにするしかないの?
976名無し~3.EXE:2005/09/08(木) 00:04:32 ID:r4UbVIFF
>>975
インターネットゾーンで無効にして
マイコンピュータゾーンでだけ有効のままにしとけばいいんじゃ?
977名無し~3.EXE:2005/09/08(木) 00:13:57 ID:g10toboR
>>976
IE.Navigate("about:blank"); じゃなく、
なんらかのローカルファイルを開くようにすればいいのか。

978名無し~3.EXE:2005/09/08(木) 12:40:09 ID:r4UbVIFF
>>977
ああそか。
うちはabout:blankを信頼済みサイトに入れてたんで
動いてたんでした
979名無し~3.EXE:2005/09/10(土) 01:04:17 ID:wbepMNH4
HTAアプリでウィンドウ位置やウィンドウサイズを保存するために
JScriptでINIファイルの読み書きをするオブジェクトというかクラスというかを
書いたので貼ってみる。
980979 INIファイル読み書きオブジェクト:2005/09/10(土) 01:05:19 ID:wbepMNH4
<<< INIFIL~2.ZIP for MS-DOS ( use shift_jis ish ) [ 24 lines ] >>>
!!!;!&9Q!5"XRo/g1c;eEV[,cJ"Z!'"HDm_CXu!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-:>!
!!!;!&9Q!5"XRo/g1c;eEV[,cJ"Z!'"HDm_CXu!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-:>!
!!!;!&9Q!5"XRo/g1c;eEV[,cJ"Z!'"HDm_CXu!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-:>!
%_ルVャ@紂@A湖o\;}ホ-i6S@^V曖K@@@H@@icd,ホサ髞ョxタソ奈リ)fロ:|gシ「ニ閑ォ厠ワ。ASNs@ts擱、LlBァ
&「テワヌVゥi?3オ.lソオ7n屬邉裼ォヤ」Jn啣ケオ8-喊6B-^?Eア^m]キ晒与9ネ鮟ーgゥqVルqエヌ^儷8|2ア鉾コO恂-
'朽x埀J゙ンu:ムゥム;」NBマ面lィu恣ッョカ妬f6ー*ナ・Uミ-Uア把錚縁ナ_Gキオ」驅w淕9ナ甜蝠ンd*Yj悽ヲォッ<谷
)/ノラ=ツnm廉ユ_dレMネュ針ノwセトyj2L:ニJ蒄m征ニ朔k7ー;ク<茆鞘>鍔狙キaァ観a_=菱Beミ.[奈@0ャW厳ルケ
+2u4ヨ;1ウョヒ。濘ャ裂3E・H浅L2知4A]イヌ」lv人{ヨ幅堋ヤソoaフチ)尼、レjtシ鑠MgvエミoリL氾茱uSチ[+曠m
,+ア@Oナ'ラッCR30盂P)冕槿N慳ニォuYネ剏c\エ)サウryZヤPcヨ_X后オ幇t歎ム^コイ15(エ酷Q@ナlコフキ貘ホョル゙カ
?ユモ寶ネコ4C:イtミ隕ェ薛キ7aロミ」宴[秘I]KTBW@唱ェ渣ヌァ[-ャホ1ヤRコ_1Hメ決鎭挙ツPwW:・6]シ換C3ッW3a
/ワア杞jサfニOカ狐・(sxフ>袮ホD鰺7鰓」(撼サ泯:[ャmミ利ソラpK、R摩K訥X0アレb@vコェR8s杪Y栖ソ鎰'=ョ慊
2チ84eA椣.0ロセ2Kトhpロ」Wkレlャ螻ナ1Vォ2逮谷嵌d悟bT螂l)o,aウロ'ケl芯ャ伍Tスシサ}ェモvココャソLセ裝チ\エ
4Oサ迹ミリ皮ハレ永タアセンサ聟Sツ。祀\「ヲフiRpx薑週j帽TTレ虚x」oノ.?ラp粗|1Qヨ9「リア-モiュ゚/ョ。恕ヨ驚礇
5UチoUUCィFJゥNdPナマェtォ玳イォウツ_ァロロヨK賜竄古・冰焉スキタワB,ン(E桀馬M匚5箕x>彜_ホ.ヲ。企+祉0ノ]
6蔽hLAQT5b「N~dxンi゚フ2PロケC]Fj報シV甥Q'チ・ッ啄Y|1嗾'<hx1z歙ソッゥ債O呉ェ|リメュ]iJミP/ッmヲM杯
7鏤KヲOテ喞屎ソラナ髦塵oqFRa藩5ュオxミyエ歳痞yl7Sマ,7wツ-緒ホ・」sテス}[ワゥ_モ編チeカQ励アーiラ昭t譎_
8-ァWJJ鰾Nァ捍ユp3S}O「。0gG笆ソK門゚YPヒ皇Ae゙Mホ(チシ閼ソ桎オ犇瓢オセナ^\4・nシ+シ4j8]kスsNz}稔Uy
9婦z腿nxク稠R>殼溷螳\ロ肺Fサ鬟イH1ヤ詈VサwRヘ羃ォヌh2ョ庇氛毅SRルヒ;シcSBSu:Bリ_^@叩@@テ篁.'コ
:メ2@6愁儖@@゙N@EV曄@@@@@V曄@@H@@@@@@中/ノヲsロ瀋ェ榎貽ケサ棹|ォ@」@@廛@@@A@ソ@@n・@@@@,。ハ
;}ノ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@「ケイ
。++qgSi喬oRチネH猾皃賑;e・・HイznスCマ6ウ/Y,>ア8Faスツ」ィYkyyイオサ^o゚dョmフ5テ/N7レG1qVウ譴イョ~yノ'
」~スャホト処ャzル処:R(TストI鑁ホゥsルoエ+M膏腮gト゚ロ1弯n。ィ^ハ膂;ィXm=^~クツ拂plgサ淘b|_オペc(g}チLミ
--- INIFIL~2.ZIP (24/24) ---
981名無し~3.EXE:2005/09/10(土) 01:11:22 ID:wbepMNH4
>>979のHTAアプリって言い方おかしかったか。
982名無し~3.EXE:2005/09/10(土) 12:29:25 ID:zxyIEeaG
>>980
メモ帳にコピペして、行末の半角スペースと改行を削除して、拡張子をzip に変えて
保存してみたけど、解凍できなかったよ。
983982:2005/09/10(土) 12:36:25 ID:zxyIEeaG
ごめん。解凍できました。
メモ帳にコピペして、行末の半角スペースを削除して、拡張子をish に変えて
保存。そのあと、Archwayなどのish対応ソフトで解凍すると、zipファイル
INIFIL~2.ZIP が生成されてた。
984名無し~3.EXE:2005/09/10(土) 12:46:22 ID:GpKQUxbA
普通、見た瞬間に気付かないか?
985名無しさん@そうだ選挙に行こう:2005/09/10(土) 18:27:35 ID:P+1ElF12
パソコン通信時代を知らない世代は難しいんじゃないか?
986名無しさん@そうだ選挙に行こう:2005/09/10(土) 21:08:06 ID:njZkjH7+
1行目に書いてあるだろ
987名無し~3.EXE:2005/09/10(土) 21:12:55 ID:DOUgTYzB
ishを初めて知ったぜ。
988名無しさん@そうだ選挙に行こう
lzhかと最初思った