5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :名無し~3.EXE:04/11/15 12:28:59 ID:bIVnwp3z
前スレ
#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)

6 :5: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
>>1
>>18-20

22 :追加:04/11/16 22:15:43 ID:LHLZDmux
【VBScript, JScript, Perl, Ruby以外にWSHで使える言語】
TCLScript
http://tclscript.sourceforge.net/
PerlScript
http://aspn.activestate.com/ASPN/docs/ActivePerl/Components/Windows/PerlScript.html
ActiveScriptRuby
http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/
PyScript
http://www.python.org/windows/win32com/ActiveXScripting.html
REXX Software for Windows 95/98/ME/NT/2000
ttp://www.borg.com/~jglatt/rexx/win32/rxusrw32.htm

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
はい、私も確認しました。
どうも:が入っていると駄目みたいです。
これってどうしようもないのでしょうか?
回避策をご存知でしたらどなたか教えてください。


26 :25: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でタスクを追加する場合、
実行アカウントとパスワードは設定できないんでしょうか?
あと、タスクの名前ってどうやって設定すればいいの?

29 :25: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だけは何とか調べて分かったのですが他は分かりませんでした。


56 :yara ◆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
>>58
FTPで良いんだよな。
ttp://www.ogawa.tokushima.tokushima.jp/~fmjuser/fmjml_logf/mllog/35000/035441.html

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
(´・ω・`)

76 :69: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して開くという行為そのものを記述する方法を…

79 :69: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

85 :81: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
フォルダを開く時に左側のエクスプローラーバーを表示させた状態で開くことは出来ますか?

89 :81: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
う。 普通にできたか……。

いい加減な事言って悪かった。

94 :86: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
このスレ便利だよな。
「チラシの裏にでも書いとけ」とか言われそうだけど、
全スレ保存して検索かけるとやりたいことが実例つきで出てくるし。

111 :102: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
>>112http://up.isp.2ch.net/up/eaef76baf84a.zip

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
配列にすれば?
クラスにするほどでもないだろし。

134 :132: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から見たらありえない変数名だろうが。

144 :130: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で埋めたあと上書き保存して、ファイルを削除すれば良いんじゃない?たぶん。

まぁ、廃棄時以外でよっぽどの理由がなければここまでする理由がみつからんけど。

148 :140: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プロパティのサンプル見るといいよ。

153 :151: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なのかな?

155 :151:04/12/08 06:00:24 ID:1/p4DSvy
>>154 遅い時間にありがとうございます。
はい、以下のようにすると、foldero変数への代入にsetステートメントが有る無しに
関わらず、「msgbox foldero」文ではpath変数に代入した文字列がそのまま得られますね。

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

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

-->つづく


156 :151: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
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/vsfctTypeName.asp
http://www.google.com/search?hl=ja&lr=lang_ja&ie=SJIS&oe=SJIS&q=Visual+Basic+%83f%83t%83H%83%8B%83g%82%CC%83v%83%8D%83p%83e%83B

158 :151: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")だとどう?

167 :166: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
ありがとうございました。微妙に難しいのでこれからいろいろ調べてみます

173 :164: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です。これを実行すると、
インターネットオプション>ユーザー補助>ユーザースタイルシート
のチェックボックスのオンオフは切り替わるのですが、その結果は適用されません。
結果を読み込むにはどうしたらばよいでしょうか?

174 :164: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
すまん、これ実際やってみたら動かなかった。

188 :185: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 );
}
}
}

193 :192:04/12/18 03:07:15 ID:0c3zK+bC
あー。
最初は全てのファイルを取得してから置き換えしてたので
getFiles関数はファイル名リストを返してたんだけど
ファイルを見つける度に置き換えするように変更したので
関数名が適当じゃないね。どうでも良いけど。

194 :185: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の前に付記して頂けたら幸いです。


203 :202: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などを設定したからって必ずしも最新確認される訳じゃないぞ。
サーバの設定次第。

205 :202: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]でスクリーンサイズを取得したほうがお得だと思う。


212 :208: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 );
}
}

218 :712: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


219 :218: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

220 :218: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と
書き換えたら、あっさり怒られました。

239 :238: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

241 :238: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+
>>251
FileSystemObject > driveオブジェクトのIsRedyプロパティ。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsproisready.asp

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クラスを使えばいけるかも知れない。

293 :289: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
便利ですね、これ。

304 :295: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
>>313
ttp://www.google.com/search?num=100&hl=ja&lr=lang_ja&oe=utf8&q=perl+clipboard

315 :名無し~3.EXE:05/02/09 20:30:16 ID:Qkl6Yu3f
>>313
http://aspn.activestate.com/ASPN/docs/ActivePerl/site/lib/Win32/Clipboard.html

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 ダウソ汁。

322 :316: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


331 :330: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>

333 :326: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+
>>348
ttp://www.atmarkit.co.jp/fwin2k/operation/command002/command3.html

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 );



360 :gooじしょ:05/02/18 01:40:33 ID:tVzoj5di
>>359
ひょっとして: saucer saute saucy

361 :322: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に表示されているテキストを[すべて選択]して[コピー]するにはどうしたらいいのでしょうか・・・?

370 :366: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
>>372
ttp://homepage3.nifty.com/aya_js/wsh/wsh23.htm

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
>>374
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/lettitle.asp

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)

とやっても、空白が返るだけです。
この方法をご存知の方、助言頂けないでしょうか。

380 :369: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
>>382
ttp://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/oleview-o.asp

ttp://www.microsoft.com/downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&displaylang=en
じゃだめなの?


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
の方が分かりやすい?

392 :389: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の後ろのスペースがないくらいしか考えられないが。

394 :389: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でも解決できました.
ありがとうございました.


400 :399: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

404 :402: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
カルロストシキとオメガトライブ

413 :408: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とか)は別途学習すべし。


415 :408:05/03/06 14:38:36 ID:INEqsex6
ありがとうございました。m(_ _)m

416 :名無し~3.EXE:05/03/06 15:26:16 ID:8FLUxMgD
つまりNothingはCのポインタでいうとぬru

417 :405: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
補完タン(*´Д`)ハァハァ

431 :405: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>

439 :435: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)


444 :442: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
>>448
これとかは?
ttp://www.vector.co.jp/soft/win95/prog/se177026.html

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

455 :444: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 );

458 :457: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があったら教えてください


461 :460: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
だろ。

464 :460: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との接続を
切ってから)

469 :468: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/

474 :460: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台ならどっちでも大差ないと思われ。
台数が増えたら特定鯖以外は外に向かわせない、
という事については禿同。

161 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)