1 :
名無し~3.EXE :
04/11/15 12:28:59 ID:bIVnwp3z
/ヽ /ヽ / ヽ / ヽ / ヽ__/ ヽ ┏┓ ┏━━┓ / \ .┏━┓ ┏┛┗┓┃┏┓┃ / \ / | .┃ ┃ ┗┓┏┛┃┗┛┃┏━| > < |━┓┃ ┃ ┏┛┗┓┃┏┓┃┃ |. (__人__) | ┃┃ ┃ ┗┓┏┛┗┛┃┃┗━ヽ \/ / ━┛┗━┛ ┃┃ ┃┃ / \ ┏━┓ ┗┛ ┗┛ /  ̄ ̄ヽ / ̄ ヽ .┗━┛ .ヽ_______/ \__/
以下のコードを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
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
日付に関する話が多かった気がするので 昔作ったのをはっとく。
マウスの動きを再現するときは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
>>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
前スレ
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()
'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
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 では失敗してしまいます。メモ帳は開いていませんし管理者権限です。 なぜでしょうか?コードが間違っているのでしたら教えてください。
>>13 最後の行を
Wscript.Echo "おしまい"
に変える。
15 :
名無し~3.EXE :04/11/16 16:32:41 ID:vuEhNtEj
>>14 やってみましたが、駄目でした。
レジストリキー"hoge"は削除できません、のエラーメッセージが出ます。
エラーコードは80070002です。
>>15 本当にやるとおもわなんだ。
¥だか:だかをつかっちゃいかんということじゃないかとおうもうが。
たぶんその値に含まれてる¥が階層の¥と誤読されてる。 ためしにそこにfffというのをつくってそのスクリプトで消してみたら消えた。
18 :
テンプレ1 :04/11/16 21:54:43 ID:LHLZDmux
20 :
テンプレ2 :04/11/16 22:06:37 ID:LHLZDmux
21 :
テンプレ終 :04/11/16 22:08:17 ID:LHLZDmux
22 :
追加 :04/11/16 22:15:43 ID:LHLZDmux
テンプレ貼るの失敗したって理由で削除依頼通るかな?
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に書いてますか?
どうしても見つからないのですが回避策は載って無くてもいいので、
このキャラクターは使えないってのがもし書いてあるページがありましたら
教えてください。
\を前につけるとか""や''で囲むとか
29 :
25 :04/11/17 02:03:59 ID:XCVkA3pd
>>28 > 実行アカウントとパスワードは設定できないんでしょうか?
できない
> あと、タスクの名前ってどうやって設定すればいいの?
エクスプローラでリネーム
//WMIからは無理ってこと
31 :
名無し~3.EXE :04/11/17 23:49:40 ID:jhuNJyNP
WSHでバイナリーファイルの操作って出来ませんか? バイナリーファイルを開いて数ビットだけいじって閉じるってのをやりたいのですけど。
33 :
名無し~3.EXE :04/11/18 11:58:53 ID:YXIW4Z12
なんかファイルがらみの質問が続いていますが私もファイル絡みで教えてください。 もしc:\hoge.exeがあったら削除するってコマンドはどうしたらいいのでしょうか? on errorは他にも影響するので使いたくありません。
FileSystemObjectのFileExistsで確認。
>>33 他にも影響しないようにつかえよ。
on error以外では完璧にやる方法は無い。
FileExistsを使ったところでファイルがあると判定した後に
別プロセスがファイル消すこともある。
俺もファイル絡みで。 WSHのファイルに引数としてデータを渡すことはできる? もしできるんだったらその引数の読み方を教えて。
>>36 Arguments プロパティでできるよ。
>>12 のドキュメント、もし入れてないなら入れとくと便利かも。
>>36 WScriptオブジェクトのArgumentsプロパティ。
>33
ファイルを他のプロセスが使用中で削除不能とかもあるしな。
39 :
名無し~3.EXE :04/11/18 18:05:22 ID:hGvoS14o
36です。回答ありがとう。
質問です。 wshで、あるファイルへのURL(http〜.zip等)から、 そのファイルをローカルにダウンロードする方法を教えて下さい。
>>41 ソースを貼ってくれたのですね。ありがとうございます!
今試してみたら希望どおりの動作でした。助かりました。
WSH実行時、タスクマネージャーでのプロセス名がwscript.exeと表示されますが、 これを別の任意の名前(hoge.exe等)にすることは出来ないのでしょうか。
>43 どんな悪事を企んでるんですか?
質問なのですが wshで、zipファイルを(できればOS標準機能で)解凍する方法ってありますか? もしあれば教えてくださいませ。
>>46 迅速なレスありがとうございます。標準では無理ですか。
とりあえず、リンク先のVB関係あたりから見てみます。
msgboxを押すのが面倒なので、一定時間経つと消える もしくは何らかの方法でメッセージを一定時間表示する方法ってないでしょうか
>48 WScript.ShellのPopup
>>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でいちいちファイルをフルパスで入力するのはめんどくさいので。
>>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();
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だけは何とか調べて分かったのですが他は分かりませんでした。
>>55 Mon, 24 Nov 2004 01:00:00 GMT
日本は(GMT+09:00)ね。
ゴミ箱を空にしたり、最近使ったファイルを空にしたり、モデムを削除する方法は 無いでしょうか? キーを押したことにしてやることは出来そうなのですけど、誤動作しそうなので、 できたらレジストリやファイルを操作してやれないかな?と思って色々と試して いますが、どうしても駄目でして。クッキーだけはシステムファイルじゃないみたいで 削除できたのですけど。 よろしくお願いします。
58 :
名無し~3.EXE :04/11/24 22:32:04 ID:Lm2hW0IA
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使えばできるんですが、できれば使いたくないのです。
またキンタマ?
>60 >41を参考にがんがれ。
63 :
名無し~3.EXE :04/11/25 13:42:38 ID:i6sYfV9h
55です。
>>56 時間は手打ちで入力したのでめちゃくちゃだと思います。すみません。
ただ、
>>55 に書いたようなフォーマットの変換はどのようにすればできるのでしょうか?
>>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
()の中が長くなったので改行したいんですけどそうするとエラーがでます どうすればいいんですか?
>>66 改行直前にアンダースコア(_)を入れる。
>>65 WMIを忘れてた。
UTCTimeクラスとLocaleTimeクラスのHourプロパティの差を見れば時差も計算できるかな。
指定したURLのテキストデータをファイルに保存する方法は無いでしょうか? xmlhttpのresponsebodyを使ってもソースしか取れません。 ソースをいじってテキストファイルを作成しようとしてもテキストファイルの本文内に <br>などの制御コードがまじっているとどうしようもないです。 何か良い方法は無いでしょうか? IEをバックグラウンドで起動して該当のURLを立ち上げてその後にCtrl+A,Ctrl+Cを送信 なんて出来ればクリップボードからいくらでもファイルに落とせるのですが、 どうしてもやり方が分かりません。 これもきちんと表示できたかどうかがこちら側で分からないと厳しい面がありますが。 色々やったのですがどうしても分からないので良い方法があったら教えてください。
>>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();
D&Dしたり送るでファイルを開くスクリプトってどうやって書いたらよろしいんでしょうか? たとえば、txtファイルを関連付けしていない普通のプログラムで開く、ような
ウシュフ
>>71 スクリプトにファイルパスが引数として与えられ、WScript.Argumentsで取得できる。
あとはWshShellのRunメソッドとか使ったり。
(´・ω・`)
76 :
69 :04/11/25 17:20:22 ID:RElYbooW
>>70 教えて君ですみませんが、VBSで出来ないでしょうか?
拡張子をjsにしたらきちんと動作したのですが、VBSのファイルに組み込んで
利用したいので。
教えて君でほんとすみません。
;を抜いたり色々とやったのですがjsは初めてでまったく分かりませんでした。
あと、どなたか前のスレのログをすべてお持ちでしたらどこかにミラーして
もらえないでしょうか。お願いします。
>>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
スクリプトにD&Dして別のプログラムで開くのではなく 別のプログラムにD&Dして開くという行為そのものを記述する方法を…
79 :
69 :04/11/25 18:25:25 ID:dMPv8ZB7
>>77 ActiveXでばかり検索していました。
何から何までありがとうございました。
81 :
名無し~3.EXE :04/11/25 20:50:27 ID:3k6IL0UA
ファイルを開いて、ファイル内に"名無し~3.EXE"などの特定の文字列がいくつあるか カウントする方法はないですか?
きっとそのファイルは未知の暗号鍵に堅く閉ざされたファイルなんだよ。
>>78 パス渡せ
>>81 string.match(/regexpression/g).length
85 :
81 :04/11/25 22:37:20 ID:3k6IL0UA
1970-1- 1からの経過秒数を計算する方法はないでしょうか。
>>85 目の付け所は良いのにコードに全く反映されてないのはどういう訳だ。
84が挙げたのはJScript用で、VBScriptならそのサンプルの通り。
patrnは/.../じゃなくて""でくくった普通の文字列、/.../gのgはregex.Global = Trueのこと。
Executeで返されるMatchesコレクションの総数(=ヒットした数)はMatchesコレクションのCountプロパティ(このプロパティ、ドキュメントに見つからないけど)
フォルダを開く時に左側のエクスプローラーバーを表示させた状態で開くことは出来ますか?
89 :
81 :04/11/25 23:37:45 ID:3k6IL0UA
>>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で。
補足。 引数なしなら現在の時刻の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
>>92 う。 普通にできたか……。
いい加減な事言って悪かった。
94 :
86 :04/11/26 10:39:48 ID:CW0yZokp
>>88 Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("explorer /e, C:\")
WSHでグループポリシーの変更をスクリプト化 することはできる? 多くのマシンに同じ設定を仕込みたいのだけど、 ドメイン敷いてないので各マシンごとに作業が 必要。なんとか自動化したいのだが…。
>>95 ありがとうございます
忘れられてるかと思った…
98 :
名無し~3.EXE :04/11/28 18:58:57 ID:pXtV435D
WSHでAPIを利用することは出来ますか? SHEmptyRecycleBinを使いたいのですが。
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で逃げています。 良い方法があったらアドバイスください。
>>102 RUNメソッドの第3引数をTrueじゃだめなの?
>>101 めんどくさいから C:\RECYCLER\ (または C:\Recycled\) ごと消しちゃぇよ!
>>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なのですが、見つけられませんでした。お願いします。
JSなら「\"」 VBSなら「""」
>>107 朝早くにどうもありがとうございます。vbsで作っているので、「""」でうまくいきました。
二時間はまっていましたが、これでもう少し進みそうです。
遠い昔へのレス。 Shift-JisからUTF-8への変換はBasp21でできた。
このスレ便利だよな。 「チラシの裏にでも書いとけ」とか言われそうだけど、 全スレ保存して検索かけるとやりたいことが実例つきで出てくるし。
111 :
102 :04/11/30 13:07:01 ID:ql73JYid
最近このスレを知ったのだけれどどなたか前スレのdatを上げてくれませんか? 1スレ目、2スレ目はHTML化済みだったので見れるのですが 前スレはみみずんやにくちゃんねるを漁ってもダメでした
115 :
前スレ11 :04/11/30 16:40:07 ID:ufsqza58
VBScriptでファイルが使われているかどうかが分かる方法はないでしょうか? 自分で開いたプログラムだとPIDで検索できますけど、そうじゃないファイルの場合、 調べようが無くて。
>107 "hogehoge" & chr(34) & "hogehoge" ↑こんな風にしかできないと思ってた俺。
> "hogehoge" & chr(34) & "hogehoge" どっかのサイトに堂々と挙げられてたな(w
ドジの多いところでは、そう書いたほうがトラブルが少ないです。 MakeQuoteStringなんていう、""で囲んだテキストを返すだけの関数を用意したりもします。
"のエスケープが"っていう仕様はやっぱかっこわるいよなあ。 Function MakeQuoteString(ByVal strValue) MakeQuoteString = """" & strValue & """" End Function なんだよ""""って……
""""=ぃぃぃぃ=(・∀・)イイ!!(・∀・)イイ!!
122 :
名無し~3.EXE :04/12/02 14:27:38 ID:X9caKwAA
VBScriptなんですが、ダブルクリックして実行した後 1分後にある処理をしたいのですが、タイマーあたりを 見てみたのですが分かりません ヒントお願いできませんでしょうか
>>122 WScript.Sleep 60000
>>120 javascriptの\"とどっちがカコワルイ?
\"は普通だろ。
>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が関係ありそうなのはなんとなく 分かるんですが。
PerlScriptを知らないからアレだが、普通にそのまま使えないの? VBScriptとJScriptなら普通にグローバル変数を定義してそのまま使用できるんだけど。
>>128 ええ、わたくしもよく分かってないもんですからなんとも。
グローバル変数というやつに何らかの可能性があるというわけですね。
やってみます。
>>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>
>>130 キタ━━━━(゚∀゚)━━━━ッ!!
いやいや、聞いてみるものです。
どうもでした。
キタ━━━━(゚∀゚)━━━━ッ!!
Function DBinfo(str)〜End Function で、戻り値を利用している者ですが、教えて下さい。 関数の戻り値が3個在るのですが、戻り値DBinfo の中には、1個しか値が入りません。 今の所、3個をDBinfoの中にまとめて突っ込んで、 あとで、Splitで分解してるのですが、この方法より も良い方法は在るのでしょうか? (Part1&2 は、書き込み頻度が少なかったのに、3からは 勢い付いて来ましたね、このスレ。)
配列にすれば? クラスにするほどでもないだろし。
134 :
132 :04/12/04 18:08:26 ID:9DKW6wO+
>>133 できないのかと思っていました。
参照渡しが必要とか、そんなんじゃなかったんですね。
ありがとうございました。
>>133 横からサンクス。
これで、検索と置換をまとめられる……。
検索結果のブール値が欲しかったのだよ。
136 :
名無し~3.EXE :04/12/05 00:24:45 ID:lnQkQ94R
削除するファイルをHDから完全に消すことってVBSで出来る? ファイルを一度開いてすべて"00h"で埋めて上書きするなんて出来るの? ファイルの完全削除ツールを使ってHDは奇麗にしたんだけど、毎回このソフトを起動すると 200Gすべて奇麗にするのにすごく時間がかかるから次から削除するファイルはすべて 完全削除したいんだけど、D&Dにしか対応してないソフトが多いから自分で作りたくて。 ちなみに1Mぐらいの特定のファイルいくつかだけを完全に削除したいだけです。
>>132 正統的な方法: クラスか構造体を返す。
邪道な方法: ByRef引数を書き換える。
中道の方法: 配列を返す。
前世紀に置き去りにしたい方法: 複数の戻り値を結合して1つにして返す。
>136 できることはできると思うが、毎回そんなことしてたらHDDの寿命が縮むぞ。
>137 前世紀モノだが、グローバル変数を書き換えるんじゃあかんのかなぁ。
ドメインに参加しているPCに、ログオンスクリプトでPC利用許諾を表示させています。 (msgbox利用、対象OS:Win2000,XPPro) OKボタンを押すまでは何も出来ないようにしたいのですが、システムモーダル にしていても、スタートボタンを押下できたり、Officeを起動できたりします。 ユーザがOKボタンを押すまでは、PCリソースをまったく利用させたくないのですが、 良い方法はないでしょうか?
>>139 それはCOBOL脳的発想でない?
かく言う漏れもこぼらだったんだけどね。(ニガワラ
でも戻り値を複数返す方法の話はすごく役に立った。ありがとう!
>141 FORTRAN脳ですw
>>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
>>140 wshでできるかなぁ…つーかwshのmsgboxでできるかなぁ…
>>138 どうやったら出来ますか?ちなみに一日一回しか使わない予定なのでHDには
負担はかけないと思います。
>146 ADODB.Streamで対象ファイルと同じサイズのバイナリストリームを作って 0x00で埋めたあと上書き保存して、ファイルを削除すれば良いんじゃない?たぶん。 まぁ、廃棄時以外でよっぽどの理由がなければここまでする理由がみつからんけど。
148 :
140 :04/12/07 01:18:11 ID:PZzz0RzN
>>145 自社のネットワーク上に接続されているPCを、外部のユーザに使用させます。
この際に、グループポリシーでがちがちにセキュリティを固めたアカウントを利用してもらうんです。
初回起動時に「このパソコン使ってネットワークに被害を与えたら賠償しる!」っていう
メッセージボックスを出して、OKを押すまでは何もリソースを使わせたくないんです。。。
wshだけではムリポですか。。。?いろいろ調べてみたところWin32ではシステムモーダル
に出来ないようですし、ADの機能を使うべし?
>>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
>>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変数にはこのとき何が代入されたのでしょう。そもそもエラーにならないのはなぜ
でしょうか。教えていただけませんか。
>>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
158 :
151 :04/12/08 06:51:17 ID:1/p4DSvy
>>157 大感謝です。でかける直前なので短く。以下の結果でした。
set foldero = fso.GetFolder(path) ならFolder型
foldero = fso.GetFolder(path) ならString型
デフォルトプロパティーの方は、のちほどじっくり読みます。
どうもありがとうございました。
>>158 vbsは変数宣言時に型宣言無くて全部Variant型で処理されているからです。
foldero = fso.GetFolder(path) の時点で文字列入れても
set foldero = fso.GetFolder(path) でオブジェクト参照しても
エラーが出ないのは構文見てwsh側で勝手に判断してるから。
逆にキッチリ文字列として処理したいならCstr関数とか使って
明示してやらないとはまることもある罠。
ページ内の語句の検索および標準合わせ、 要はCtrl+Fで検索することをWSHにさせたいのですが、どのようにすればいいのでしょうか。 IE.document.NavigateAndFind("ほげ",true); では動かなかったです。
VBSとかHTAでプログレスバーなんて実現できませんかのぅ・・・
>>160 困ったときの妥協案、SendKeys()
>>162 ありがとうございます。
WShell.Sendkeys("^F");では検索窓が現れてくれなかったので、別を考えてみます・・・
>>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で変えても
結果が反映されません。誰か同じようなことをやったことがある人いませんか?
>>164 すみません。Jscriptでは、
「Do Until 〜〜
〜〜〜
Loop」
が使えなかったというのを
今思い出しました。
>>163 SendKeys("^F")でなくて、SendKeys("%ef")だとどう?
167 :
166 :04/12/13 18:47:35 ID:E1nEN/CS
連投スマン。SendKeys("^f")でも通るね。
>>167 WShell.Sendkeys("^f");
WScript.Sleep(1000);
WShell.Sendkeys("word~");
でいけました。日本語を扱うにはクリップボードを経由しなければいけないようですが、
とりあえず解決しそうです。ありがとうございました。
自作アプリにsendkeysを使わないで apl.textbox1.value="test" のようにに確実に値を入れられないでしょうか
>>170 (1)自作アプリにCOM実装
(2)自作アプリのインターフェースをWebアプリ化、またはOfficeアプリ化
(3)DynaCall + Win32APIでがんがる
(4)ロケットマウスに送金
#UWSCでもいけるんだっけ?
>>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に再読み込みさせればよいようですが、
その方法が分かりません。お願いします。
ファイル名を受け取ったら その拡張子部分(ドット以下3文字〜4文字)を書き換えるvbサンプルください。 (ファイル変換でなく名前の変更機能だけでOK) 具体的には、SendToフォルダに置いて 送る. ─┬─ (*.zip)→(*.wsz) ├─ (*.txt)→(*.vbs) ├─ (*.txt)→(*.html) こんな感じで使いたいので 必要に応じて手前で簡単に増やしていきたいので 特定の拡張子から特定の拡張子へ名前を変えるやつお願いします。
> サンプルください いきなりこれだもんな
>>176 自分が試した例を書いておけば
答えてもらいやすくなりますよ
シェルに任せてファイルを実行させるにはどうすればよいでしょうか? (ex: *.txtの場合、メモ帳で開く)
>>176 VBSを書かなくてもプログラムへのパスが"Command /c ren *.zip. *.wsz"のようになっているショートカットをSendToに必要な数だけ置けばいいだけじゃないか?
バッチが書けるなら
>>175 が参考になるけど……。
バッチすら書けないとなると……('A`)
>>181 Σハッ!図星・・・ 適当にネットをさまよって来ますわ
>>179 WshShellオブジェクトのRunメソッドにファイル名を渡せばいい。
var WShell = WScript.CreateObject("Wscript.Shell");
WShell.Run( "c:\\hoge.txt" );
>>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")
>>185 .hogeを.hageに
.hageを.higeに変えてる。
>>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 '多分完成。
てすとむ
ここは親切なインターネットですね
>>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 InternetExplorer.Applicationでぐぐるとわさわさ。
>>196 でてこなかった。っていうか、当該ページをダウンロードしろということだよな。
つまり。
IEも”Ctrl+s”で保存できたような気がするけど。
>>195 情報thx
自動化したいんで「Ctrl+s」では保存ダイアログ出るしちょいキツイな
フリーのツールで充分できるレベルじゃないのか?
>>195 samurizeのweb情報取得して表示する系のスクリプト見るのが早いと思う。
(天気表示とかのスクリプトとか)
アレはソースとってきて必要な情報抜き出してテキスト化してるものだから。
>>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();
すいません。自分も教えて君で申し訳ないのですが、 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は、クライアントが既に所有している部
分の転送をやめる事で、不必要なネットワークの使用を減らす狙いがあ
ります。
>>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>ありがとうです。試してみます。
>>1 のソースアップ板消えてるんだけど、
誰かうpされてたサンプルとか保存してる?
そういえば移動するといっていた。 どこへ行ったんだか。
jsだけでプログレスバーオブジェクト作ってみた。
利用サンプルも入れて150行ぐらいなので書き込めない。
個人サイトを利用して申し訳ないが、
>>18 Windows Scripting Host Laboratory
ttp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/ にあるWikiのアップローダにUpさせてもらった。probar.zip 1.9KB。
自分のPCでしかチェックできなかったので
他の環境でも動くかチェック希望。
>>208 試してみた。WinXPSP2のノートPC。
起動しない? と思ったら激しく左上に埋まってた。
既定のデスクトップが何故か2つあって、取得ループが2回回って2回目でdeskTopWidth/Heightにnullが入ってるのが原因だった。
ループの最後に
if (deskTopWidth != null) break;
を追加すれば解決。
起動が遅いのはWMIとIE使う以上仕方ないかな。
後は問題なかった。
BASP21とかを使ったスクリプトを、それがインストールされてない環境で 使う方法とかありますか?
>>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してウィンドウサイズを取得してたんだけど
起動時に余分な描画があるので止めたのよね。
Part2のレス番325〜327(登録しておいたアプリケーションを強制終了させる) スクリプトをお持ちでしたら、どなたか上げていただけないでしょうか あとWMIをJavascriptで使いたいのですが、参考になるページはないのでしょうか VBSで書かれた解説ページなどはたくさんあるのですが・・・
>>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になるんじゃない?
お答え有難うございます。頂いたスクリプトは無事に動きました。 MSDNのWMIの解説・TipsもVBSCRIPTで書かれているものばかりなので、 やっぱりVBSCRIPTをかじるしか無いようです・・・
現在開いているIEのウィンドウのURLを取得するにはどのようにすればいいのでしょうか?
>>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で読み出す値がないことを事前または事後に検出することは出来ますか? 普通に書くと値がない場合に終了してしまいます。
>>221 JSならtry...catch、VBSならOn Errorかな?
>>217-220 thxです。劇的に環境が良くなりました。
こういう手法はどこで調べればいいんでしょうか?
<package>
<job id="DoneInRS">
<script language="VBScript">
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "tekitou.txt"
</script>
</job>
</package>
.wsfで保存して、スクリプトファイルに、適当なファイルをD&Dしてみると
指定されたファイルが見つかりません となるのは、自分だけでしょうか。
理由もわかりません。
スクリプトファイルを普通にクリックすれば、メモ帳でファイルが開きます。
>>73 のようなことがしたいのですが
D&Dしても、tekitou.txtが開くはずと思うんですが。。。
>>224 カレントディレクトリはドロップしたファイル側になるよ。
>>226 スクリプトと、tekitou.txtと、ドロップしたファイルは
同一ディレクトリにあります。
あう、勘違い。 D&Dしたときはカレントディレクトリはユーザディレクトリ(XPだとc:\Documents and Settings\ユーザ名)になるね。 ま、カレントディレクトリ依存なコードは書かない方が良い。 スクリプトファイルの位置はWScript.ScriptFullNameで。 で、>73とは関係無くないか。
>>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したときはカレントディレクトリはユーザディレクトリという情報は
どこで得られるのでしょうか
>>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
>>223 googleとmsdn。
(wsh |vbs|jscript|javascript) ie (実行中|起動中) 操作
こんな感じでやれば
"Shell.Application"を使うことがわかるから、
今度はこれを検索したり、msdnで調べたりする。
途中、直接関係なくても面白そうな情報を見つけたらメモしておく。
「確かこれは情報があったな」と思い出せるだけで検索しやすくなるから。
>>230 ありがとうございました。
"""" なんて・・・
よいお年を
あけましておめでとうございます。 今年最初の質問で恐縮ですが、自分のIPアドレスが分かる方法はないでしょうか? よろしくお願いします。
それがグローバルなIPだと言うのなら、統一的な手法としては外部に問い合わせるしかないと思う。
確認君 診断君
いちど
>>235 にあくせすしてそーすを見てどのえれめんとにIPが入っているかをはあくしておく。
それで、いんた〜ねっとえくすぷろ〜らおぶじぇくとをつくって、
>>235 のURIになびげーとしてやる。
しゅとくしたどきゅめんとおぶじぇくとのえれめんとの中のてきすとをしゅとくして、
ぽっぷあっぷさせたり、てきすとを吐かせたりしてしゅつりょくしてあげるといいよ。
あいいーのうぃんどぅはみえないままでもだいじょうぶだよ。
一度
>>235 にアクセスしてソースを見て、
どのエレメントにIPが入っているかを把握しておく。
それで、インターネットエクスプローラオブジェクトを作って、
>>235 のURIにナビゲートしてやる。
取得したドキュメントオブジェクトのエレメントの中のテキストを取得して、
ポップアップさせたり、テキストを吐かせたりして出力してあげるといいよ。
IEのウィンドゥは見えないままでも大丈夫だよ。
クリップボード中の画像をBMPとして保存したいのですが、どうもうまくいきません このスレのPart1の最初の頃にあったCreateTextFileを参考に、BitmapFileと 書き換えたら、あっさり怒られました。
239 :
238 :05/01/04 05:35:21 ID:i+6wB7Ob
すみません、書き忘れました VBSをちょっとかじっただけで、Jなんとかは全然分かりません
>>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入れて試したら成功しました。
ただ、パソコンのスペック不足のせいか、何か全体に動きが鈍くなりますね
(メモリ、足そっかな・・・)
ところで、JScript より VBScript のほうが速いんでしょうか? 実行速度。
>>242 場合による。
VBでごちゃごちゃ書いた部分がJだと関数一つですむこともあるし、
逆もある。
ごちゃごちゃやっているほうが当然遅い。
>>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オブジェクトの操作や
入出力時間の方が長いから気にしないけど。
C >> Perl > VBS >> js なわけか。 これはちょっとショッキングだなあ。 まさかVBSとjsで4倍も差が出るとは。
JScriptは配列もオブジェクトだから、そのせいが大きいだろうね。 しかしそのままで連想配列も(キーも文字列に限らず)利用可能なわけで。 利便性と速度のトレードオフと言ったところかな。
「速さはオブジェクトの数による」がふぁいなるあんさー?
>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
ループと加算の速度を比較。 空の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
こうしてみるとvbsの方が速いのは間違いないけど、
極端に多いループ処理が無ければvbsとjsにそれほど差はない。
また、普段のスクリプトではほぼ100%comオブジェクトを作り、
その部分に時間がかかるので両者の速度差は気にならなくなる。
よって、
>>247 の通りかな。
251 :
名無し~3.EXE :05/01/12 17:42:32 ID:HH8JivOG
テープドライブにメディアが挿入されているかどうか検出したいのですが 何かうまい方法はないものでしょうか?
DriveExists メソッドはどうだろう?
>DriveExists メソッド > >リムーバブル メディアのドライブの場合は、メディアがセットされていなくても真 (true) が返されます。 >ドライブの準備ができているかどうかを調べるには、Drive オブジェクトの IsReady プロパティを使用してください。 だそうだけど。
リムーバルじゃなきゃ使えた。 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 RSMが提供しているAPIを直接叩かないとダメっぽい
>>251 >>256 WMIに Win32_TapeDrive ってのがある。
driveオブジェクトのIsRedyみたいなのはなさそうだけど
メディアが入っていなければnullや0を返すプロパティをチェックするってのでどう?
>>251 貴社のバックアップツール(ARCServeとかBackupExecとか)に
マウント状況表示するコマンドってない? なかったらスマソ。
# サーバを直接触れない条件下の場合
# 普通は管理用端末にリモート操作できるツール入れるんちゃうんかと
262 :
前スレ11 :05/01/13 23:24:46 ID:F4mN6Btq
>>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とかヘルプに書いてないのは使えるのに・・・
>>264 >InStr 関数
> 引数
> start
> 省略可能です。
...
> 引数 compare を指定した場合は、引数 start も必ず指定します。
> 別件ですが、VBSってヘルプには正規表現検索時のMatches.valueとか書いてるけど使えないんですね。
> Countとかヘルプに書いてないのは使えるのに・・・
Matches.Valueなんてあったっけ?
それぞれのアイテム(Matchオブジェクト)のValueプロパティはあるけど。
引数 compare を指定した場合は、引数 start も必ず指定します。 …とヘルプに書いてありますので、(頭から検索するなら) s = instr(1,ss,sss,1) ですね。 ところで、CreateObject("MSXML2.XMLHTTP")を使ってhtmlソースを取得したい場合に、 取得できるページと取得できない(MsgBoxで表示すると文字化けしている)ページとが あるようですが、これの原因や回避方法などありましたら教えて下さい。 例えばinfoseekのトップは取得できますが、Exciteは化けてしまいます。 前スレ57に >…それより、XMLHTTPが日本語テキストのレスポンスをまともに >デコードしてくれないという問題があることを忘れてた(w とさらりとは書いてあるのですが…
>>266 結局
> >…それより、XMLHTTPが日本語テキストのレスポンスをまともに
> >デコードしてくれないという問題があることを忘れてた(w
に尽きる。
ResponseBodyをBASP21辺りで妥当なコードに変換するとか。
それって別に問題じゃないだろ。 ドキュメントにもそう書いてあるんだし。
>>262 ちょっと手直ししたヤツをアップし直しました。
>>266 たしか、ResponseBodyはUTF-16BEになってると思う。
>>262 のwikiのアップローダに「exciteで翻訳HAT.zip」ってのをUpしたんだけど
このスクリプトの中でADODB.Streamを使って文字コードを変換してるので
良ければご参考に。
>>269 redyというプロパティ名は直した方がいいかと。
保守。
うしゅふ
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" 'クラフトランチでつかってる。引数で何分後に終了するかを与えられる。 'そうでないときはインプットボックスが出る。
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を使ってない分こっちの方がタイト……か?
今、ふと気づいたのは。 Shutdownのコマンドを直接、Craftlaunchに登録しておけばいいじゃないかということ。 ・ ・ ・ ・ おやすみ。
'
>>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デバイスを使うときだけ有効→ブリッジに追加ってやりたいんですが…
IMEのオンオフって、スクリプトじゃ無理ですか? 今はショートカットを割り当てててSendKeysしてるんですが。
愛と勇気と根性とDynaCallでWin32API::ImmSetOpenStatus() するぐらいしかないんじゃ。
>>281 どうも。がんばってみます。
愛と勇気だけがトモダチです。
いっそ.Netに逝ってみるとか C#なら簡単そうだ
IMEは.NETのライブラリからは操作できんよ。
あるいは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
>>281 >>283 >>284 >>285 しかし、考えてみれば、ユーザー設定ショートカットキーで十分ですね。
色々とどうも。
TeraPadのツールとして引数に選択テキストのパラメータを取って
やってたんですが、
>>247 の実験でオブジェクトが増えるのは?らしいので
センドケーでがんばることにします。重ね重ね、どうも。
IEの中で、鯖上のcsvファイルがexcel経由で開かれた後 それをローカルのデスクトップに保存したいんですが… 認証鯖を越えて、ファイルを表示させる所まで来たんですが、 ここからどうアクセスしたらいいものか知恵を貸して下さい。 excelをアンインストールしたら、保存ダイアログが開くだろうけど、 それは業務的に不可だし。
>>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 あたりの
コードが使える。
Win2k serverで単位時間当たりのネットワークI/Fの送受信パケット数を 取得するうんまい方法はないでしょうか… M$のスクリプトセンターにはXP/2003用のサンプルスクリプトしか無いし。
>>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)。
>>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
ExcelやWordつかってもいい? だめならメモ帳にsendkey連発で・・・
>>296-297 どうもです。
WIN環境でならどこでも使えるスクリプトを書こうとするとき
perlでといとのはどうしても使える環境が限られてきますし、
Excel、Wordが使えるならばもちろんIEも使えるでしょうし…、
notepadだと2バイト文字が扱えません。
純粋にwshだけを用いて……というのは無さげですね。
JScript.NET使え
>>299 「WIN環境でならどこでも使えるスクリプト」
と言っているからまた文句を言われるよ。
助言するだけ無駄。
スレ違いだが、AutoHotkeyなら簡単に操作できるしコンパイルすりゃどこでも動くよ。 コンパイルしてもクリップボード処理程度なら200kb以下のサイズ。
コンパイラ又はコンパイラ済みファイルが必要だから、また(ry WSHエンジンがあってIEがないなぞという超限定的状況に気を遣いたくないな。 clipboardDataを持つIHTMLWindow3をサポートするのがIE4.0からってことはWin98なら問題ないわけだし、 Win95にはWSHそのものがデフォルトでは入ってないようだし。
>>299 単純にクリップボード操作のみ行うものをスクリプトに添付する
という方法でできそうですね。
>>301 便利ですね、これ。
304 :
295 :05/02/08 17:54:34 ID:+B/+AK+Q
ツマンネー('A`)オチ
まあ何でこの質問がきたか知ってる俺としては 特におかしな質問だとは思わないが
Samurizeとかの方面ですか
>>307 Sleipnirです。Sleipnirから、
IEのFavoritesフォルダにブックマークを入れるスクリプトを書いてまして。
結局、そのスクリプトではclipboardを使う必要は無かったんですがね。
他でもclipboardを使うことが多いものですから、ここでお尋ねした次第です。
Sleipnirのスクリプトなら新しくIEオブジェクト作るまでもなくwindow使えるじゃん……。
>>309 できました。説明書はよく読まなきゃいけませんな。
成果のほどはSleipnirスレにはっときます。
>>310 なんだ、結局天然荒らしのプニル厨だったのか。
もう二度と来るなよ。
>>311 ありがとう。
このスレのお陰で幅が広がりそうです。
>>296 プニルはともかく、Perlでクリップボードってどうやるの?
よろしければ教えて下さい。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'
VB6.0を買ってしまったほうが幸せになれそうに見えるな・・・
或いは.NETか。 SDKだけなら無料だし。 スクリプトの主眼は操作の自動化であって、GUIは基本的に埒外。 SendKeysはWSH2.0からサポートされてる。
Win9xで.NETは無理だと思われ。
あー、確かにSDKやVSは無理だな。 でもWin98なら実行環境はインストールできるし、実行環境にコンパイラもついてくるから、 スクリプト代わり程度ならなんとか。
>>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 になってました。あくまで私の持ってるやつですが・・・
>>322 Shell.Application はWSHとは関係ないし。
Win98用インストーラが用意されているのにわざわざXPからCopyするなんてどうかしてる
>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
>>326 測るスクリプトをドラッグアンドドロップすると、実行時間が
でるスクリプトを書いたつもりなんですが、
これで正確にスクリプトの実行時間を測れてますかね?
>>328 いじったことはないが、こういうのならいっそHSPとかを使った方が手っ取り早いのではないだろうか、と思えるな……。
331 :
330 :05/02/14 23:57:01 ID:wYtkAhTc
と思いながら、WScript.Sleep( 30000 ) だけのスクリプトを計測してみたら vbs版は23.xx.秒とか25.xx秒とかなった。 なぜだ。 ちなみにjs版(始めと終わりに new Date() して引く )だと、ちゃんと30秒ちょい。 timeitでも30秒ちょっと。
そこで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 を使いながら試行錯誤してみます。
ありがとうございました。
>ところで特定文字列で指定した長さまで埋める関数・メソッドって標準では存在しないのかな?
これはタブの変換のことですか?
だとしたら、私は↓を使ってます。 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
>>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にはどうも或る文字を指定数並べた文字列を取得するようなメソッドが見あたらない……。
>>335 なるほど。無さげですねこれは。
>>336 タブ文字"\t"を、実態参照の半角スペース"&nbsp;"
に変換しているだけですので、ずれっぱなしです。
実体参照を使うなら、アンパサンドが&で表せることぐらい知っとこうな
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ときます。
左に"00"足して、文字列操作で右側3文字だけ抜き出す
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をそのままつっこむと文字列になりません。
あ、OSはWinXP SP2です。
2行目はPadLeft = の間違いだな。 で、直接数値を放り込んでもいけたんだけど。 ついでに、VBSにStr関数はないようだぞ。
あ、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
For I = 0 To 10 z = "00" & I z = right(z,3) WScript.Echo z Next という感じで、うまく行きました。ありがとうございました。 VBにはあるけどVBSには無いとかいう、微妙な仕様の違いって、何を見れば分かるんですかねぇ。 ちなみに、str(I)はI & ""で代用できそうでした。
WshShell.RunでCmd.exeを起動させてクリップボード上の 文字列を貼り付けたいんですがどうすれば良いんでしょうか? ペーストのショートカットをSendkeysで送ろうかと思ったんだけど 探しても見つけられませんでした。orz
VBのキャストって CStr みたいに「C」がつかなかったっけ?
>>349 そのようですね。
古典BASICのかすかな記憶が邪魔をしたようですorz
>351 おぉ、そんな手があったんですね。 有り難うございます。がんばって実装してみます。
>>352 バッチファイルならば、
引数を与えてcmd.exeを起動して、
%1を使うのはどうだろう?
>353 バッチファイルではないんですよ。 実は今独習JAVAを1からやっているんです。 普段エディタにはEmeditorを使っているのでマクロを使って 簡単にコンパイルできたらなぁって思って聞いてみたんです。 WshShell.Sendkeys("% ")って送ってみているんですが プロンプトにスルーされてまいます。これじゃ無理なのかしら。
直接javac.exeだっけ、コンパイラを起動させるわけにはいかんの?
>355 ぐふっ、一番簡単な方法を忘れてました。 希望のことはできました。ありがとうございます。
357 :
名無し~3.EXE :05/02/17 22:35:21 ID:5o31Ua1s
ていうか、 [Fn]キーをエミュレーションする SendKey は どうすりゃいいんだ? おしえてくださいませ。
>>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 );
>>359 ひょっとして: saucer saute saucy
361 :
322 :05/02/18 09:02:38 ID:u+bUMv2U
>>324 他諸氏
申し訳無い。落とせることは知ってます。ただ、そんなこと(XPからの抜き出し)をやってみたかったのです・・・
ライセンス違反になるような気がするがね。
>354 わざわざソース有り難うございます。 自分が作ったモノは単純すぎるコードなので今後 スクリプトを作る際に参考にさせていただきます。
>>357 Fnキーはキーボードコントローラー(だっけ?)で制御してるから無理だと思ふ。
FNでなにやりたいか書くと吉。
中国語のHTMLテキストを整形しているのですが、ReadLineやReadAllを使うと一部の中国語が勝手に変換されてしまいます。 どのような対策が考えられるでしょうか?
>>366 対象のhtmlファイルの文字コードと、
どう元ファイルを開いてるか、保存ファイルをどう作ってるかのコードを。
UTF16/UTF8なら、OpenTextFileの第4引数に-1、CreateTextFileの第3引数にTrueを入れればいけると思うけど。
//UTF8をUTF8のままで保存してくれるのは良いけど、なんでUTF16用のBOM付きなんだ……? >FileSystemObject
>367 いっそバイナリストリームで、ってのは手間かかりすぎだろうな・・・。
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)
>>370 Adodb.Stream使えばコード指定できるよ
372 :
名無し~3.EXE :05/02/23 18:16:55 ID:H2Zgk7uq
COMやDDEを使って既に開いているIEにURLを渡す事は可能でしょうか? 宜しくお願いします。
374 :
名無し~3.EXE :05/02/23 19:38:39 ID:H2Zgk7uq
>>373 レスありがとうございます。
もう一つお願いします。
WSHで作成したCOMオブジェクトをレジストリに登録して他のアプリケーションから利用する事はできるでしょうか?
376 :
名無し~3.EXE :05/02/23 22:42:20 ID:H2Zgk7uq
>>373 MSDN英語版も一通り見たのですが、DDEのように最前面のウィンドウに送るのはどうすればいいんでしょうか?
下記は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
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つしか無いですし・・・ どのオブジェクトでやるんでしょうか・・・?
OLE/COM Object ViewerのDLページがなくなってる・・・ 2000用のはあるがIVIEWERS.DLLが添付されてない(´・ω・`)
ADODB.Streamじゃねーか。
>>385 レスサンクス
上のほうリンクにおいてあるのをDLしたんがDLLが入ってなかったんだよ
んでぐぐってたらDiectory of NTReskitっていう名前のサイトみつけて
そこで無事IVIEWERS.DLLげとできました(`・ω・´)
ためしに下のほうのWindows Server 2003 Resource Kit ToolsもDL
しようとしたが95%くらいでダウソちゅうだんされたので諦めた
Win32APIって呼べないの?
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や過去ログ見たつもりですが、よくわからないので識者の方々、ご指導お願いします。
>>389 WSHShell.Run "c:\hoge.BAT パラメータ"
あ、 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 ("番号を入力してください。")」で何も入力しなければ バッチファイルが実行されます。しかし、ここで数字が入力されると上記のエラーで止まります。 ホント、クレクレで申し訳ないのですが、もし原因に心当たりがありましたら 教えて頂けないでしょうか。
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 --- 宜しくお願い致します.
>>395 objHTTP.SetRequestHeader "Cookie", "Name=Value; Id=****"
objHTTP.Send
と書いてから試したけど、無視されちゃうな。ごめん。 なんか代替手段は無いかなっと。
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を設定すれば無視されませんでした.
perlscript入れる(藁
402 :
名無し~3.EXE :05/03/04 03:51:29 ID:h3dabNAc
メモ帳に、SendKeys使わずにクリップボード内容を貼り付けることってできますか?
WM_PASTE
404 :
402 :05/03/04 05:10:16 ID:h3dabNAc
あのう、これって検索したらSendMessage - USER32.DLLって出てきたんですけど、どうやって使うんでしょうか?Dynawrapperでしょうか?
以前から気になってたんだけど、MSDNにいくと左側に表示される検索ウィンドウがウザイ。 これってどうにかならんモンですか?
スクリプトオフ
EmptyとNullの違いって何でしょうか?
Empty 器があるけどカラ Null 器すらない
空と無
伽藍と涅槃。
カルロストシキとオメガトライブ
413 :
408 :05/03/06 05:41:15 ID:Pd9hJVeH
ごめんなさい。よくわかりません・・・ 1. 値が代入されていない変数はどちら? 2. ヌルストリング""は?
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
つまりNothingはCのポインタでいうとぬru
417 :
405 :05/03/06 16:47:03 ID:hOyCvLoE
>>409 が分かりやすい喩えをだし、
>>410 がウパニシャッドにひねり、
>>411 が大乗仏教的にねじった。
でだ。
>>412 。お前だよ。
>>412 。
何だよ、カルロストシキとオメガドライブって?
分からんでもないが、それだったらそこは菊池桃子とラ・ムーじゃねーのか?
>>418 菊地桃子はラ・ムーのメンバーだろう。
カルロストシキはオメガトライブのメンバーじゃない。
だいたいオメガトライブって何? omega tribe ── オメガ部族?
>>419 なるほど。
つまり「杉山清隆とオメガトライブ」の杉山清隆が脱退して
から「カルロストシキとオメガトライブ」になったって流れを踏まえれば、
>>412 は「杉山清隆とオメガトライブ」から見た場合の
「カルロストシキ」と「オメガトライブ」だってことか。
>>421 1986オメガトライブと混同してないか?
そろそろスレ違いが許容範囲を超えると思うのだが。
425 :
名無し~3.EXE :05/03/07 09:52:11 ID:iOmJsgRT
WSH ファイルを編集するのに便利なエディタって何でしょうか? いまはメモ帳でやっているんですが、できれば Visual Studio .NET 2003 の IntelliSense のような機能が欲しいのですが。
俺もインテリセンスほしい。 けど、VBSとかJSみたいな型なし言語だと原理的に無理だと思う。 function f(x){ x.??? ← xにどんなメソッドがあるかなんてわかったもんじゃない } ちなみにTeraPad使いです。キーワードが太字になるだけ。
クンをタンに脳内変換してる件
補完タン(*´Д`)ハァハァ
431 :
405 :05/03/08 03:48:53 ID:untOpnSV
なんかいいアイディアないかな?マジで。 一応おみとろんスレで聞いたら一蹴されちゃったよ。 WSHでもできるとは思うんだが。
コレクションの要素数はどうやって得るのでしょうか? Count = 0 for each Elem in Collection Count = Count + 1 next だといくらなんでもバカですよね・・・
むう、タンのほうが良かったかな?
>432 Countプロパティを使う。 lngCount = Collection.Count
バッチファイル的にいくつかコマンドをループさせて実行するスクリプトを 書きたいのですが、以下のところで引っ掛かっています var wssh = WScript.CreateObject("WScript.Shell"); var oexec = WShell.Exec("COMMAND"); while(oexec.Status == 0) WScript.Sleep(100); DOS窓上で上記のように、ExecしCOMMANDを実行したときに COMMANDの標準出力が見られない。どうしたらよいのでしょうか?
>435 oExec.StdOut.ReadAllを使うのかな。DOS窓では見えないけど。
>>435 oexecのStdOutを読み込んで明示的に書き出せば見えるはず。
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);
}
単純な出力ならこれで結果は表示されるようだが、リアルタイムで書き換える出力は
無理みたい
そりゃReadAllはEOFが返ってくるまでブロックするからね。 ReadLineメソッド辺りで一行ずつ読み込むとか。
いろんなサイトを回って参考になりそうなコード見たけどめんどくさそう また機会があったらいろいろと試してみます・・・
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)
>>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で未実装かどうかわかるページはご存知ないでしょうか?
ビットマップオブジェクトのハッシュ比較をしたいのですが、WSHにそういう機能はありますか? DLL作ってUWSC(というマクロスクリプトがある)から呼び出すのがいいのかな?
>>444 > 私は、Windows98(1st)です。WSHが古いせいかもしれません。
とりあえず、MSのサイトから最新版をDLしてインストールして試してみるとか。
> handle = dwFindWindow.FindWindow("Edit", "")
> とやると0しか返ってこないのですが、なぜなのでしょうか・・・?
"Edit"が"Notepad"の子ウィンドウだから。
FindWindowはトップレベルウィンドウしか調べられない。
だから443はFindWindowExを使ってる。
MSDNでFindWindowとFindWindowExを調べると詳しく書いてある。
> それとWin32関数がWindows95で未実装かどうかわかるページはご存知ないでしょうか?
MSDNの各APIページの下部に書いてある。
リストボックスを含んだダイアログを作って選択させたいのですが、 GUIを組み立てられるCOMコンポーネントってありますか?
>>449 thanx
いちおうやりたいことはできそうです。
戻り値をスクリプトで処理したいので、
HTAでは無理かも
Windows標準のCOMだけで、窓操作をマクロしきることって可能ですか?
アプリによるけどsendkey多用しても厳しいと思う
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()とは意味が違うのでしょうか?
というか、ここで聞くべきじゃないですか・・・?
>>455 Win32APIスレの方が良いかもね。
WM_CLOSEみたいないつ終わるか分からないのはPostMessageで送る。
WM_ACTIVATEはアクティブに「なった時」にシステムから送られるメッセージ。
アクティブにするためのメッセージじゃない。
アクティブにするならSetForegroundWindowとかを使う。
>>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
リロードすればよかった。メチャメチャかぶっとる…
んで、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行だけじゃダメですよね
アチャー
>>119 二千六百年かけてようやく手に入れたものを無にしようというわけですか。
そーですか。
>>464 超マジレス。
>>462-463 の人が例に出したのはコマンドライン。
VBSではない。その1行でOK。
これをバッチファイルにしてタスクスケジューラに仕掛ければ
毎起動時や一定時間ごとに時刻同期できる。
だがインターネットにつながる環境だったら
PC毎にTClockか桜時計を仕掛けて
自動的に日本標準時に合わせる方が何かといいと思うよ。
NET TIMEはインターネットにつながらない社内LANで
時刻同期のために仕方なく使うコマンドだから。
>>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ファイルを スタートアップに置いてもいいか (こういうやりかたってダサいのかな)
いやさ、.batをスタートアップに入れればいいんじゃね?
プゲラ
こんなんが管理者なのか
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をローカルファイルにダウンロードし かつその保存ファイル名を取得する方法はないでしょうか?
>>467 全部インターネットへというのはあまりよくないのでは
PC00だけNTPに問い合わせさせて。 残りはPC00にお伺い立てるようにすればいいんでないの。 擬似的にNTP鯖見たく出来ればいいわけだし。
それだと結局は同じだがや
480 :
名無し~3.EXE :2005/03/21(月) 18:09:14 ID:oLmj/0Ym
>>476 ありがとうございました!
試してみたんですが、
Set Stream = WScript.CreateObject("Adodb.Stream")
のところで「エラー:オブジェクトがありません 'Wscript'」
というエラーが出て実行できません。
Adodb.Streamってなんのアプリケーションですか?
>>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>
>>477-478 5台ならどっちでも大差ないと思われ。
台数が増えたら特定鯖以外は外に向かわせない、
という事については禿同。
vbsファイル単体でインクルードファイルみたいなのが仕えないのがウンコすぎ
>>484 そっすね
やるとしたら、Script ComponentにしてCOM経由で利用するとか。
あるいはFile System Objectで読んでevalでもいいかもしれませんがw
wsfファイルの知名度が全くない上に使用が何故か忌避される件について
487 :
名無し~3.EXE :2005/03/25(金) 22:03:40 ID:l7RWFjv3
すみません、教えてください。 フォルダをまるごとコピーするのは、以下のようにやればいいとわかったのですが、 Option Explicit Dim objFS, objFolder Set objFS = WScript.CreateObject("Scripting.FileSystemObject") Set objFolder = objFS.GetFolder("c:\test") objFolder.Copy "c:\test2", True ちょっとちがって、 現在日時が「2005年3月25日22時1分だとすると」 D:\★★★バックアップ\20050325-2201\ というフォルダを作成し、 その直下に「c:\test」というフォルダをコピーしたいのですが、 どうすればいいのでしょうか?
>>487 誤爆?
WSHスレに逝け。ここでサポさせんじゃねーよ。
ん?誤爆?いいんじゃね、ここで聞いても
というかここがその逝けと言う先のWSHスレなんだがな。
>>487 そう言う風に書けとしか。
FileSystemObjectのFolderExistsメソッド、CreateFolderメソッド。
VBの日付関数は良くわからんが、Now関数、Year関数、Month関数、Day関数以下略。
日付のフォーマットってできたっけ?
Dim week(7) week(1) = "Sun.": week(2) = "Mon.": week(3) = "Tue." week(4) = "Wed.": week(5) = "Thu.": week(6) = "Fri." week(7) = "Sat." Dim theDate, ye, mo, da, we theDate = Date ye = Right(Year(theDate),2) mo = Right("0" & Month(theDate),2) da = Right("0" & Day(theDate),2) we = week(Weekday(theDate)) Dim theTime, ho, mi theTime = Time ho = Right("0" & Hour(theTime),2) mi = Right("0" & Minute(theTime),2)
492 :
487 :2005/03/25(金) 23:20:26 ID:l7RWFjv3
>>491 さん
ありがとうございます。
引用して、作成させていただきました。ありがとうございます。
以下ソース。どもです。
//-----------------------------------------------------------
Option Explicit
Dim week(7)
week(1) = "Sun.": week(2) = "Mon.": week(3) = "Tue."
week(4) = "Wed.": week(5) = "Thu.": week(6) = "Fri."
week(7) = "Sat."
Dim theDate, ye, mo, da, we
theDate = Date
ye = Right(Year(theDate),2)
mo = Right("0" & Month(theDate),2)
da = Right("0" & Day(theDate),2)
we = week(Weekday(theDate))
Dim theTime, ho, mi
theTime = Time
ho = Right("0" & Hour(theTime),2)
mi = Right("0" & Minute(theTime),2)
Dim objFS, objFolder , strNewFolder
strNewFolder = "D:\★★★バックアップ\" & "20" & ye & mo & da & we & "-" & ho & mi
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("C:\Documents and Settings\daisuke\My Documents\tmp_12345\")
objFolder.Copy strNewFolder , True
MsgBox ("finished")
daisuke
494 :
487 :2005/03/26(土) 00:09:07 ID:rE2V6/PA
>>493 あい。ちなみに、wshのスレって2chの中でここだけなんでしょうか?
スレッド検索であれこれ検索してみたものの、ここしかひっかからず(過去ログはひっかかりましたが)
一応プログラム板にもあるが、ここ以上に過疎ってるな。
496 :
487 :2005/03/26(土) 00:16:52 ID:rE2V6/PA
素VBSで"tail -f"を作った香具師いる? tail動作だけならいいんだが、リアルタイムログ監視に 「割り込み終了されるまで、ループして"cmd /k type %OutFile%"に出力し続ける」方法が思いつかない..orz shell.execで前に開いてたcmd /kを狙い打ちして落たうえでcmd /kを作り直すぐらいしか思いつかないけど、 これやるとcmd窓を生成して閉じたりで落ち着かなすぎる。。ヽ(`ε´)ノシ
ところで、VectorにVBS登録しすぎな吉岡 照雄って人どうよ
>>498 いや、cmd /cしたらtype %OutFile%した後即落ちるだけで、
リアルタイムログ監視になんねぇって..orz
表示更新されるまではtype %OutFile%は表示しっぱなしにしておきたいんだyo。。
>>500 邪道で
SendKeys "type "
SendKeys "~"
>>499 なんというか、ソースみると、いろいろなものがこみ上げてくるyo!
503 :
名無し~3.EXE :2005/03/26(土) 19:03:54 ID:ymp4Pyiy
すいません。 wsfファイルにフォルダーをD&Dして、そのフォルダーのフォルダーアイテムを得ていろいろ処理させるプログラムを書いて、それは一応動くのですが。 D&Dさせるのがフォルダーやファイルの時はWScript.Argumentsで引数を得ることが出きますが、 D&Dさせるのがドライブの時はWScript.Argumentsでは引数を得られない感じなんだけど。 D&Dさせるのがドライブの時は引数を得るやり方ってどうやんの?
>>503 はて? ふつうに取得できるが・・・
OSによって違うのかな? 家はXP
var fso = new ActiveXObject("Scripting.FileSystemObject"); var fold = fso.GetFolder(WScript.Arguments(0)); WScript.Echo(fold.Path); でC:\をD&DしたらちゃんとC:\が表示されたよ? //引数に"C:"を与えると何故かスクリプトファイルのディレクトリが返ってくるな……。
>>505 カレントディレクトリ (作業ディレクトリ)
507 :
503 :2005/03/27(日) 14:36:21 ID:BIm9S0iQ
やっぱり動かないです。 505さんの書かれたのでも、フォルダーの時は表示されるのですけど、ドライブだと何の反応もありません。 wsfだけでなくjsファイルにしても同じです。 wshのバージョンは5.6(ie6を入れた時に入ってくる奴)でOSは2kと98seどちらもダメでした。 .Net frameworkを入れてないけど、それは関係ないよね? はて、なにが原因なんだろ? // a.wsf <package> <comment> </comment> <job> <script language="jscript"> var fso = new ActiveXObject("Scripting.FileSystemObject"); var fold = fso.GetFolder(WScript.Arguments(0)); WScript.Echo(fold.Path); </script> </job> </package>
GetDrive メソッド があるじゃないか
どうも507が言うドライブと私の考えるドライブが違う気がする。 私の言うドライブはマイコンピュータのハードディスクドライブカテゴリの中のアイコンなんだが。 コマンドラインからc:\を引数に与えたらどうなるの? しかし反応がないってエラーも出さないって事?
>>507 ドライブレターだけの時は後に¥をつければいいだろ?
そゆ問題じゃなかったね。
ドライブアイコンをドロップしてもスクリプト実行されない。
513 :
503 :2005/03/27(日) 23:19:47 ID:BIm9S0iQ
ども ドライブってのは、C:\やD:\などを指して使っています。コントロールパネルなどの仮想フォルダーの事を指している訳でもありません。 D&Dは、例えば、エクスプロラーを開いて横のツリーバーからドライブをクリックした状態のをそのままwsfファイルに落す、という事をしています。 動作は無反応という感じでポップアップもなにも出ません。 タスクマネージャーを開いたまま行なうと、 マウスクリックと開始と共にdragと表示され、離すことによりdragが消え、そのまま何も起こりません。 (フォルダーの時はdragが消えた後、ちゃんとwindows script hostと表示されていきます。)
>>513 drag って何だ〜〜?
変なソフト入れてんじゃねーの?
>>513 無反応じゃなくて、.wsfにドロップしようとすると進入禁止アイコンになって
ドロップできないんじゃないか?うちではそう(Windows 2000 SP4)。
>>514 タスクマネージャで見てると確かにそうなるよ。俺も初めて知ったけど。
516 :
503 :2005/03/28(月) 00:45:33 ID:NNtwNvBg
気付かなかったけど、ほんと進入禁止マークが出てる。orz ってことは、基本的に出来ないということか…。 いろいろお騒がせしました。どもありがとです。
'a.cmd @echo off wscript.exe a.js "%1" //a.js WScript.Echo(WScript.Arguments(0)); バッチをつかう。
>>497 って、わざわざcmdを叩かなくても
cscriptで実行すれば済む話なんじゃないの?
ファイル名を取得して、ファイル名の一番後ろが 2Byte文字であるかどうかで、特定のフォルダに振り分けたいのですが 良い知恵が有れば貸して頂けませんか?
var filespec; var moveto; if(isZenkaku(filespec.length-5)){ var fso = new ActiveXObject("Scripting.FileSystemObject"); fso.MoveFile(filespec,moveto); } function isZenkaku(char){ var re=/[\u3000-\u9FFF\uF900-\uFDFF\uFF10-\uFF19]/; if(re.exec(char)){ return true; }else{ return false; } } 全角がすべて判定できるか不明 拡張子は 3 文字に決めうち やっつけなんでこんなとこで。あとは自分でやり
FileSystemObjectのGetBaseName
なんでFileオブジェクトにはBaseNameプロパティがないんだろうね?
>>520 有難う御座います。
Fileオブジェクトを渡すのかなと分かりましたが以下のコードでは
Lengthプロパティが無いとエラーになってしまいました。
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FO = FSO.GetFile("D:\test.txt")
MsgBox(FO.Length)
WScript.Arguments とかを使わないと駄目なのでしょうか?
filespecはfso.MoveFileの第一引数でも使ってるだろう? MoveFileの引数の解説を見てみたら? ……VBSじゃそもそもlengthプロパティがないんだよな。Len関数か。 いやそもそもfso.GetBaseNameを使えば必要ないな。 後はRight関数? reはVBSだとRegExpオブジェクトを使う事になるな。 Function LastIsZenkaku(text) LastIsZenkaku = IsZenkaku(text, Len(text)) End Function Function IsZenkaku(char, index) Dim regex Set regex = New RegExp regex.Pattern = "[\u3000-\u9FFF\uF900-\uFDFF\uFF10-\uFF19]" IsZenkaku = regex.Test(Mid(text, index)) End Function //ん〜、IndexOf的な実装にすべきだったかも知れない。
人が作ったスクリプトから抜き出してみただけだけど…こんなのどう? If (Asc(c) And &HFF00) = 0 Then '1バイト文字だった場合 Else '2バイトだった場合 End If
526 :
520 :Windows暦21/04/01(金) 23:57:56 ID:ETotfrdY
そもそも if(isZenkaku(filespec.charAt(filespec.length-5))){ } なのでした。 指摘されてるように getBaseNama を使うのがよさげですね。 キモは正規表現だけだと思ったんで他の部分をおろそかにしてた。すまん。
527 :
455 :Windows暦21/04/02(土) 03:45:24 ID:SIGWnUSt
>>456 ,
>>457 ,
>>459 どうもありがとうございました。
おかげでかなり便利になりました。マウスでなければフォーカスできない場所にフォーカスしたりもできるようになりました。まだまだできない事が多いですが・・・
アドバイスの中でいくつかわからない点があったのですが・・・
>WM_CLOSEみたいないつ終わるか分からないのはPostMessageで送る
の「いつ終わるか分からない」ってどういうことなんですか?
MSDNでPostMessageを調べたところ、「スレッドがメッセージを処理するのを待たずに制御を返します」と書いてありました。
SendMessageだと「メッセージを処理し終わった後で制御を返します」と書いてあるのですが、それだとSendMessageの方こそ間違いなく閉じれるような気が・・・?
また、いつ終わるか分からないメッセージというのは他にどんなものがあるのでしょうか?それとメモ帳や電卓なんかはSendMessageでやってもちゃんと閉じれたのは何でなんでしょう?
>>459 >んで、SetForegroundWindow が言うこと聞いてくれないのでドツボにはまっていく・・・と。
非常に気になるんですが、これってどういう事なんですか?
私が試した限りではまだ大丈夫みたいなんですが、例えばどういう状況で実行するとちゃんと動作しなくなるのでしょうか・・・?
あと、IUnknownさんのページを拝見しましたが、9x系ではやはりRegisterで2度登録ができないんだそうです。IUnknownさんはdynwrapのソースを改造して修正できたそうですが・・・
Postmessageは命令投げっぱなし。 SendMessageは命令なげて、処理が終わったかどうかを待ってその結果を得られる。 命令が伝わって処理がなされたかどうかが分かるかどうかの違い。 どっちでも命令を受け取った窓で何らかの処理が行われるかはその窓次第。
529 :
519 :2005/04/03(日) 02:57:29 ID:CjIormjr
>>520 ,521,522,524,525,526
色々と有難う御座いました。
仕様について考えてみるとファイル名は固定長で、2Byte文字が入るときは
コメントなので文字数をカウントすれば良い事が分かりました。
逆に難しい事を言ってしまってすみませんでした。有難う御座いました!
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SRC = FSO.GetFolder("D:\test\")
For Each FileName In src.Files
FileEx = FSO.GetExtensionName(FileName)
If LCase(FileEx) = "txt" Then
tmpMsg = tmpMsg & "ファイル名:" & FSO.getBaseName(FileName) & " :" & Len(FSO.GetBaseName(FileName)) & vbnewline
Set SRC = FSO.GetFile(FileName)
If Len(FSO.GetBaseName(FileName)) = 9 Then
SRC.Move("D:\test\comp\")
End If
If Len(FSO.GetBaseName(FileName)) >= 10 Then
SRC.Move("D:\test\incomp\")
End If
End If
Next
MsgBox(tmpMsg)
ステップアップWSHに有るファイル名変更についてですが そのまま行ってもエラーになってしまいます。 メソッドの名前が違ったりしますか? Set fso = CreateObject("Scripting.FileSystemObject") Set src = fso.GetFile("c:\work\test.xls") src.Name "test2.xls"
>>530 src.Name = "test2.xls"
532 :
530 :2005/04/03(日) 04:15:54 ID:CjIormjr
>>531 こんな時間に有難う御座います。
もう少しスマートな方法が有るかも知れないですが、以下で出来ました。
SRC.Name = Left(FSO.GetBaseName(FileName),9) & "." & FSO.GetExtensionName(FileName)
クリップボードから取得してPINGを打とうと書いてみたのですが 取得する行で不明なエラーが出てきてしまいます・・・。 Dim WshShell, oExec, regEx Set WshShell = WScript.CreateObject("WScript.Shell") Set objIE = CreateObject("InternetExplorer.Application") Set regEx = New RegExp Function Ping(vIPAddress) For i = 0 To 10 Set oExec = WshShell.Exec("ping -n 1 " & vIPAddress) Do While oExec.Status <> 1: WScript.Sleep 100: Loop res = oExec.StdOut.ReadAll regEx.Pattern = "Reply .* time.*" regEx.IgnoreCase = True Set Matches = regEx.Execute(res) tmpMsg = tmpMsg & Matches(0).Value Next WScript.Echo tmpMsg End Function clip = objIE.Document.ParentWindow.ClipboardData.GetData("Text") Ping(clip) 何か分かる教えて貰えませんか?
>>533 取得前に
objIE.Navigate "about:blank"
>>534 出来ました。有難う御座います。
IEインスタンス?を生成した後にIEを起動?しないと駄目なんですね。
すいません。
>>454 ってスクリプトの範囲じゃ無理なんでしょうか?
定期的に実行して、txtに結果を吐き出すってような スクリプトをJSで作っていて、処理自体は出来たのですが、 ある名前のファイルが存在してるかどうかを条件にフラグを セットしたい、という所で詰まっています。 一応tryで読み出しを試みて、失敗したらcatch…で、それっぽく 動くのですが、ここの皆さんならもっとスマートなやり方を 知っているかと思った次第ですが、どんなもんでしょうか。
>>538 FileSystemObjectのFileExists
実際に読み出したりする必要がある場合はtry-catchしないといけないけどね。
(FileExistsで確認してから実際に開くまでにファイルが消されたりする可能性がある)
>>539 こんな便利でスマートなメソッドがあるのですね…勉強になりました。
ありがとうございます。
ある既存のプロセスが実行された時のカレントディレクトリ取得できませんか? そのプロセスの作業ディレクトリをスクリプトでいじりたいんですが。 ショートカットの「作業ディレクトリ」がいろいろなんで困ってます。
>>541 ショートカットの作業ディレクトリなら、
WshShellのCreateShortcutで既存ショートカットへの参照を作成>
WorkingDirectoryプロパティをいじってSave
>>542 ありがとうございます。
でも違うんです。
動いているプログラムのカレントディレクトリが知りたいんです。
どうやって起動されたかは判らないと言う前提なんです。
SysInternalのProcessExplorerというツールがありますが、
リストからプロセスを選んでプロパティを見ると、カレントディレクトリが
表示されます。この情報が欲しいんです。
参考
Sysinternals Freeware - Utilities for Windows NT and Windows 2000 - Process Explorer
http://www.sysinternals.com/ntw2k/freeware/procexp.shtml
544 :
名無し~3.EXE :2005/04/06(水) 08:41:53 ID:sYr8Uo4V
Shell.ApplicationのNameSpaceについてなんですが。 // test.js var WshShell = new ActiveXObject("WScript.Shell"); var objShell = new ActiveXObject("Shell.Application"); var objFolder; var ssfWINDOWS = 36; objFolder = objShell.NameSpace(ssfWINDOWS); WScript.Echo(objFolder.Title); では動くんですが。これをhtmlファイルにすると動かないんです。これはどこが悪いんですか? // test.html <heml><body><script language="JScript"> var objShell = new ActiveXObject("Shell.Application"); var objFolder; var ssfWINDOWS = 36; objFolder = objShell.NameSpace(ssfWINDOWS); document.write( objFolder.Title); </script></body></html>
546 :
名無し~3.EXE :2005/04/07(木) 22:30:31 ID:FuCd3CpG
wshをはじめようと思ってネット検索してたらこんなスクリプトに出会いました。 だけど実行できないのはなぜ。。 ちなみにIriaにURLを送るwshだそうですが、これをまねてIrvineで使えないかなと思っています エラー行 19 文字 24 エンティティの参照に問題があります-対応する','が見つかりません。 Set Ie = WScript.CreateObject("InternetExplorer.Application") Set Iria = WScript.CreateObject("Iria.IriaApi") sURL="適当なURL" Ie.Navigate sURL Do While IE.Busy Or IE.ReadyState < > 4 WScript.Sleep 100 Loop Set document=IE.document Set window=document.ParentWindow sURLs=sURL & vbCrLf For Each oSubLink In document.links sURL=oSubLink.href sExt=Right(sURL,3) If sExt="jpg" Or sExt="png" Or sExt="zip" Or sExt="lzh" Then sURLs=sURLs & sURL & vbCrLf End If Next Iria.AddUrl sUrls,0
>>546 Irvineなら/ie_menuフォルダ内のスクリプトを参考にすれば?
何処が19行なんだよ。
549 :
名無し~3.EXE :2005/04/08(金) 03:06:27 ID:JQ+L3rxD
クリップボードの内容をいじるプログラムを作りたいのですが,可能でしょうか? クリップボードの内容を取得する所までは可能な事はいろいろ調べてわかったのですが・・・ やりたい事は,例えばクリップボードに --- こんにちは. お元気ですか? --- なんていうのが入っていたら,実行するとクリップボードの内容を例えば --- メッセージありがとう. > こんにちは. > お元気ですか? --- というものに書き換えてくれるプログラムを作りたいのです. どうか,お力をお貸し下さい.お願いします.m(_ _)m
>>549 > というものに書き換えてくれるプログラムを作りたいのです.
作って欲しいんじゃないんだよな?!
1. クリップボード内容を文字列として取り込む処理
2. 改行で文字列を配列に分割し、各配列の先頭に"> "を付けて結合する処理
3. 2の文字列でクリップボード内容を置き換える処理
をやるようなスクリプト考えれ。1と3はどっか探せばあるスクリプトから切り貼り
2はマヌアル見ながら文字列処理とかループの項見てやれば何となく分かるぞ。
2は正規表現での置換にしてもいいが。
552 :
名無し~3.EXE :2005/04/08(金) 23:23:53 ID:LQZKgdzS
イベント待ち(無限ループ)しているスクリプトAをスクリプトBから任意のタイミングで止めたい のですが、スクリプトBはどう実現すればいいんでしょうか 今のところalt+ctrl+delで止めてるんですが、不便です
Win32_ProcessでTerminate、というのが浮かんだ。
>>553 ありがとうございます
試してみたんですが
スクリプトA1
スクリプトA2
を実行している時にスクリプトA1を停止させたい時に
var e= new Enumerator(GetObject("winmgmts:").InstancesOf("Win32_process"))
for (;!e.atEnd();e.moveNext()){
var Process = e.item();
WScript.echo (Process.Name)
}
で列挙すると
cscript.exe
が二つ表示されてどちらを停止させていいのか・・・
もうすこし調べてみます
Bで環境変数設定して、Aのループ内で読んで分岐させれば?
>>555 なるほど。
Win32_ProcessならCommandLineプロパティ辺りが有効かな。
>>555 >>556 それでやってみます
あるいはファイルを使用する方法とかもありそうです
いろいろ試してみます
ありがとうございました
ちょっと前に、Win98で古いWSHを使っていて、XPから抜こうとして叩かれた316=322=361です。
ここの過去スレのPart.2
http://pc2.2ch.net/win/kako/1022/10222/1022248379.html の178あたりにある、SendKeysで無変換が使えない、という話、カンタンでしたよ?
WinME MSHOM.OCX 5.1.0.4615の場合、7D6Dh : 29h -> 33h
Win2000 MSHOM.OCX 5.1.0.4615の場合、7D6Dh : 29h -> 33h
(WinME版と微妙に内容が違う)
WinXP WSHOM.OCX 5.6.0.6626の場合、9E3Dh : 29h -> 33h
にするだけです。{KANJI}(半角/全角キー)が使えるようになります。ハングルも使えるみたいです。日本語システムではアレですが・・・
バージョン・インディペンデントのパッチャーも作ったけど、ライセンス違反ですからな〜
FIXWSHOM LZH 436 05-04-08 22:23 FIXWSHOM.LZH
559 :
名無し~3.EXE :2005/04/09(土) 15:42:31 ID:t+/BdBgc
なんてね。 *** MKFW.RED開始 r ip 100 r bx 0 r cx 1B4 nFIXWSHOM.LZH e 0100 25 D7 2D 6C 68 35 2D 8C 01 00 00 F6 01 00 00 0F e 0110 0F 7A 32 20 01 0C 46 49 58 57 53 48 4F 4D 2E 43 e 0120 4F 4D 81 A9 4D 00 00 01 6E 62 62 D7 46 D4 3B EF e 0130 FD DD 78 B7 26 AE D0 6C 6D C1 9A AA EB 8C 15 04 e 0140 35 55 45 32 30 1C D0 D5 17 40 D1 70 6D A0 E0 F1 e 0150 AB 26 C1 D9 E8 6C 04 11 85 4E 18 7A 25 81 CE 0A e 0160 51 7A 06 18 1D 01 45 4A 62 94 41 0A 78 2D 80 C1 e 0170 75 C5 31 BB DD 9C 68 4E AA 03 A9 2B 53 E6 C3 E9 e 0180 A6 50 3C 64 85 87 2A 01 E5 89 DD EC A6 58 99 13 e 0190 B0 46 BD 7A A6 7B 27 8F 8D 96 9E E0 79 09 E8 07 e 01A0 D2 4E C8 37 11 B0 6C 86 1A FC 24 F4 EE 22 94 42 e 01B0 B7 D8 3E DB 5B 93 9C 69 28 B0 E5 D8 A2 95 19 CA e 01C0 87 11 3F C0 55 F9 09 FB 85 6B F2 56 6E 92 6B 83 e 01D0 9B 5B 10 AB 31 FE 12 DC 57 BC 4A 94 34 FD D2 B5 e 01E0 74 AC DE 24 F6 03 CC 90 FE AB F8 94 FE 3F FC EF e 01F0 E0 27 EC 6D CF E4 24 B8 BA 8E 47 B6 AF 15 9C 04
e 0200 99 3C F2 E1 55 13 4A 4E FB 8D B4 06 FB 8E 2E 53 e 0210 DE 0F B6 F6 14 F8 03 CE CF CB AB 87 C6 9E A0 73 e 0220 D3 DA 0D DD DC FF D5 57 29 7F 76 A6 5F FE 25 50 e 0230 79 37 ED D7 6D A7 96 B6 83 05 6E 01 D1 11 A4 0E e 0240 92 C4 6A 03 ED 7F A2 28 03 EC 26 88 3E A6 EF 72 e 0250 3D A6 F9 E3 30 27 5A 48 CF BF 44 65 1F A3 DF 58 e 0260 19 E1 89 D3 97 CD EA B0 C2 F4 E5 49 35 C6 A0 12 e 0270 0E BF 38 DE 96 D7 C5 82 C7 7D 7B 66 52 F9 1C AF e 0280 5C F9 6A 9B 6D 73 CC 4F 81 49 94 A4 C8 AF 01 40 e 0290 5D D8 9D 7A DC 30 77 84 4E C3 87 63 AF AC 39 79 e 02A0 1C 78 EB 9D 0F 37 9F 43 48 7A 6A 79 29 E8 E6 D3 e 02B0 F1 69 80 00 w q *** MKFW.RED終了 1. これをMKFW.REDとして保存後、それを置いてある場所からDOSプロンプトを開く。 2. 「DEBUG < MKFW.RED」とコマンドを入力。 3. FIXWSHOM.LZHのできあがり。 あと、何で使えなくなってたのかは未解析。
あえてPerlでWSHやってる人とかいるのかね
そういえば自分はphpでDoodle2使ってるんだが、 データをバイト型バリアント配列に保存する GetCanvasが使えないんだよね。 自分が使いこなせてないだけかもしれないけど(;´д⊂ヽ
565 :
536 :2005/04/11(月) 03:40:40 ID:PoljGR0K
>>537 おぉおおお、なんかよさげです。
サンクスです!
WSHで「ファイル開く」ダイアログを表示することはできたんですが、 「フォルダを開く」ダイアログを表示することができません。 どうしたらよいでしょうか?
>>567 「ファイルを開く」コモンダイアログでも「フォルダを選択」の動きを
するような局面ってありませんでしたっけ・・・・。
でも、「フォルダの参照」の方が自然なのでこっちを使うことにします。
有難う御座いました!
569 :
566 :2005/04/13(水) 16:58:26 ID:4/UBgKZr
すみません。引き続き質問なんですが、WSHとしてBrowseForFolderメソッド を使い「フォルダ参照」ダイアログを表示することはできたんですが、拡張子 をhtmlとしブラウザ上で表示させようとするとBrowseForFolderの所で「書 き込みできません。」というエラーが出てしまいます。このメソッドはブラウ ザ上からは利用できないのでしょうか。 以下のソースの6行目でエラーが出てしまいます。 ---[test.html]------------------------------------------------- <HTML> <HEAD> <SCRIPT language="VBScript"> Sub ShowDialog() Set Shell = CreateObject("Shell.Application") Set f = Shell.BrowseForFolder(0,"フォルダの参照",BIF_EDITBOX) MsgBox f.Items.Item.Path End Sub </SCRIPT> </HEAD> <BODY> <INPUT type="button" onClick="Call ShowDialog" value="フォルダの参照"> </BODY> </HTML> --------------------------------------------------------
571 :
566 :2005/04/14(木) 10:10:52 ID:cbVq+pPV
569のソースを自分の試せる環境で実行してみました。 ローカルhtaとして実行 → ○ ローカルhtmlとしてブラウザで読み込み実行 → × ローカルのIIS経由で実行 → × LAN上の他のマシンのIIS経由で実行 → ○ インターネット上の他のマシンのApache経由で実行 → ○ ローカルで実行するとエラーが出るのに、ネットおよびWebServer経由 での実行であればエラーが出ませんでした。セキュリティの観点でVBSの 実行が制限されているのであれば、ローカルhtaのみ実効可でないと変だ と思うのですが。
>>571 おまえさんのセキュリティ設定がおかしいだけじゃないの?
スパイウェア飼ってるとか・・・
おまいさん←最近これ使うヤツ多いな。変なの。
>>573 このスレで使ったのは君が初めてだ。おめでとう。
輝いてねぇw
577 :
549 :2005/04/15(金) 19:50:47 ID:jlUyjH4k
>>551 だ、駄目です・・・1. までしかできません(T_T)
2. は素人の僕には無理だったのと,あと
3. は,wshで本当にできるのでしょうか??
すみません,誰か,
>>549 を作って下さいm(_ _)m
お願いします.
めんどくせぇからDMonkeyだw var objClip = new Clipboard, text = new Strings(objClip.asText); for(i in text) text[i] = ">" + text[i]; objClip.asText = text.text
/*clip.js*/ /*親切バージョン*/ //IEのオブジェクト生成してIE起動 var IE = new ActiveXObject("InternetExplorer.Application"); IE.Navigate( "about:blank"); //IEが立ち上がるまで待つ while(IE.Busy)Wscript.Sleep(10); //クリップボードから文字列取得 str= IE.Document.parentWindow.clipboardData.getData("text"); //クリップボードが空なら終了 if(!str){IE.Quit();WScript.Quit();} //最後が改行なら除去 if(str.length>2 && str.substr(str.length-2, 2)=="\r\n")str=str.substr(0, str.length-2); //文字列を改行で分割して配列に格納 var arr=str.split("\r\n"); //配列の各要素の先頭に>をつける for(var i=0;i<arr.length;i++) arr[i]=">"+arr[i]; //配列の要素を結合して文字列に var text=arr.join("\r\n"); //クリップボードに格納 IE.Document.parentWindow.clipboardData.setData("text", text); //IE終了 IE.Quit();
580 :
551 :2005/04/16(土) 10:45:27 ID:eXau2MGq
>>578-579 藻前らやさしいな。
>>549 =577
579のスクリプトはちゃんとどっかに保存しておけ、
別の機械にクリップボード内容を処理したり、
文字列を行毎に分割して処理したいときの雛形にしれ。
人の書いたスクリプトを多少なりとも理解して改変して使うのが上達の道だ。
慣れてくれば、
>>551 みたくまずフローチャートを考えて、
それに当てはまる部品をあちこちから拾ってくればいいと分かるようになるぞ。
ガンガレ
581 :
549 :2005/04/19(火) 00:14:24 ID:EJ4asA5i
JScriptでvar UserWrap = new ActiveXObject("DynamicWrapper"); とやってwin32apiを使おうとしたのですが、 Automation server can't create object. というエラーで終了してしまいます。 MicrosoftのwebではWSH5.6にしろと書いてありましたが、 WinXP SP2で、wscript.exeを実行すると5.6のようです。 どのあたりが原因か、心当たりのあるかたはいらっしゃいますか?
DynaCallのCOM登録に失敗してないか?
ていうかDynaCall(
>>19 )入れてる?
>>583 がーん、COM登録に失敗していました……。
いやまさかと思いつつ試してみたら……。
583さん、ありがとう。
585 :
名無し~3.EXE :2005/04/20(水) 15:22:04 ID:DM6Iua9Y
データベースのインターフェースをHTAで書こうとおもっています。 データバインドがなかなか使いやすそうだったのですが、ローカルの MDBファイルに接続する方法がわかりません。 今はいったんADOで読み出してXMLに保存した後、それをRDSで バインドしていますが、これは少々面倒だし、編集できないので不便です。 何か良い方法はないでしょうか。 なるべく素のWindowsXPだけで、複雑な手順無しでできるとたすかります。 (ODBCデータソースの設定が必要とかだとちょっと厳しいです)
>>585 こういう事でいいのかな?
このコード埋め込んだ.htmはローカルでも動いたから、.htaでも大丈夫かも(試してないけど)
<!-- CSVファイルをオブジェクトとして参照する -->
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
ID=MDB WIDTH=0 HEIGHT=0>
<PARAM NAME="DataURL" VALUE="cgi-bin/data/mdb.txt"><!-- CSVファイルの指定 -->
<PARAM NAME="UseHeader" VALUE="True"><!-- データファイルの1行目をフィールド名として使う -->
<PARAM NAME="CharSet" VALUE="EUC-JP"><!-- データファイルの文字コード。CGI処理し易いものを。 -->
<PARAM NAME="FieldDelim" VALUE=" "><!-- 実はCSVでなくタブ区切りを使ってます。この方が便利だから。 -->
</OBJECT>
CLASSIDについてはここを見た
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpisdk/dhtml/dhtml.asp
FieldDelimの所、空白になっちゃったけどダブルクォーテーションの中は&#09;って入ってる。
私も質問
IEのAタグのハイパーリンクは、ドラッグアンドドロップでHTAに落とせるけど、
IEに表示されている画像をHTAまでドラッグしても、カーソルが禁止マーク(○の中に\)になってドロップ出来ません。
セキュリティ設定をインターネット (「中」までしか落とせなかったけど)/ローカル共甘くしても現象変わらず。
もちろん、デスクトップ等にあるローカルファイルなら画像、その他区別無くHTAにドロップ出来ます。
IEに表示されている画像を何らかの設定でHTAにドロップ出来るようにすることは可能でしょうか?
(ドロップ操作で、URLを取得したい)
>>505-516 辺りに似たような話で禁止になる場合と、ドロップできる場合がありますね。
(ちなみに家じゃ505と同じくドロップ出来てC:\が表示されます。)
Windows XP Home SP2
588 :
585 :2005/04/20(水) 18:07:18 ID:DM6Iua9Y
>>586 Tablular Data Control は残念ながらデータベースには接続できないようです。
それ以外の点はほぼ申し分ないのですが。
やりたいのはこんなかんじなのですが、IISがないと駄目みたいです。
<OBJECT classid="clsid:bd96c556-65a3-11d0-983a-00c04fc29e33" id="dso">
<PARAM NAME="SERVER" VALUE="localhost">
<PARAM NAME="SQL" VALUE="select * from data">
<PARAM NAME="CONNECT" VALUE="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Z:\access.mdb;">
</OBJECT>
589 :
585 :2005/04/20(水) 18:24:48 ID:DM6Iua9Y
<OBJECT classid="clsid:bd96c556-65a3-11d0-983a-00c04fc29e33" id="dso"></OBJECT> <SCRIPT> rs = new ActiveXObject("ADODB.Recordset"); // これはNG //rs.Open("select * from Car", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb"); // こっちはOK rs.Open("data.xml"); dso.SourceRecordset = rs; </SCRIPT> .な〜ぜ〜 orz...
かなりちぐはぐなことを書き込みました、すみません。
>>585 かなり質問の意味を誤解してました。.MDBじゃ
>>586 は駄目なんですね。
587 質問撤回
IEのアドレスバーからURLをドロップすればOKなんですが、
すみません本当はIEじゃなくSleipnirで表示した画像の場合だったんです。
WSHでもHTAでも無いので、質問自体撤回します。
>>585 こんな?ADODB.Connectionは使わなくてもいけるけど。
var ADOConnec = new ActiveXObject("ADODB.Connection");
var ADORecset = new ActiveXObject("ADODB.Recordset");
var adLockOptimistic = 3;
var adOpenForwardOnly = 0;
var ConStr = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\hoge.mdb;";
ADOConnec.Open( ConStr );
ADORecset.Open( "TableName", ADOConnec, adOpenForwardOnly, adLockOptimistic );
ADORecset.AddNew();
ADORecset.Fields("id").Value = "001"
ADORecset.Fields("name").Value = "Tanaka"
ADORecset.Update();
ADORecset.Close();
Access持ってないので完了は出来ないのですが //rs = new ActiveXObject("ADODB.Recordset"); // 接続を使用できない云々 rs = new ActiveXObject("ADODB.Connection"); // データベースc:\temp\data.mdbの形式が認識できません(中身が空なので当然) rs.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\temp\\data.mdb");
>>591 ADODB.Recordsetを使ったデータアクセスのやり方が分からないわけではありません。
MSHTMLにデータバインドという仕組みがあるので、これを活用したいのです。
他にもっと便利なフレームワークがあるなら、そちらでも構わないのですが。
>>592 えーと、お返事の意味がちょっとよくわかりません。
もしや、
>>589 を誤解されてるのかな?
こういう事なんですが。
<SPAN id="s1" datasrc="#dso" datafld="table1"> NG </SPAN>
<OBJECT classid="clsid:bd96c556-65a3-11d0-983a-00c04fc29e33" id="dso"></OBJECT>
<SCRIPT>
rs = new ActiveXObject('ADODB.Recordset')
rs.Open("select * from data", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb");
dso.SourceRecordset = rs;
alert( rs.Fields("table1").value ) // OK
alert( s1.innerText ) // "NG" なぜかバインドされない
rs.Save("data.xml", 1);
rs.Close();
rs = new ActiveXObject('ADODB.Recordset')
rs.Open("data.xml");
dso.SourceRecordset = rs;
alert('バインド完了を待つ');
alert( s1.innerText ) // OK
</SCRIPT>
代わりにデータアクセスページなんかどうよ? DataSourceControlを手書きだと死ねるがAccessに作らせりゃかんたんだべ。
最初はそれを考えてたんですけど、うまく使いこなせなくて。 折角表現力の高いHTMLを使ってるのに、イモなデザインしか できないし、他のツールからはメンテ不能なHTMLを吐くし。 データバインドできそうもないし、HTMLテンプレートライブラリを探すかな。 JSかVBSで動くものがあればいいのだけど。
以前似たようなことをしようとして挫折した私は、 ADODB を操作して、HTML ソースをちまちまと出力するという スクリプトで妥協しています…orz ローカル .mdb でデータバインドって、やっぱり無理なんですかねえ。
597 :
名無し~3.EXE :2005/04/21(木) 17:00:59 ID:4q4m33kR
複数のファイル名又はフォルダ名を引数にして名前に含まれる半角カタカナを全角カタカナに直す スクリプトを作りたいのです。ググって調べてコピペして以下のようなものをでっちあげました。 構想1ヶ月、書いたり直したりで1週間かかった始めてのプログラム(というかスクリプト)です。 とりあえず思ったように動いていますが、いかにも不細工だと思います。これでよいのでしょうか? きっとクールな方法があるはず。えらい人、添削してもらえませんでしょうか。 On Error Resume Next Set Fs = WScript.CreateObject("Scripting.FileSystemObject") Set arg=WScript.Arguments If arg.Count=0 Then 'もしオプションがついていなければ msgBox("1つ以上のファイル名又はフォルダ名を引数にしてください。") WScript.Quit End If
600 :
599の続き :2005/04/21(木) 22:57:11 ID:QrUf5Bfs
For i = 0 To arg.Count-1 If Fs.FileExists(arg(i)) Then 'もし、与えられたパスがファイルなら Set f=Fs.GetFile(arg(i)) 'fというオブジェクト変数にFileオブジェクト代入 newname = Henkan(f.name) Fs.MoveFile f.name , newname ElseIf Fs.FolderExists(arg(i)) Then 'もし、与えられたパスがフォルダなら Set f=Fs.GetFolder(arg(i)) 'fというオブジェクト変数にFolderオブジェクト代入 If f.IsRootFolder Then 'ルートフォルダを指定するといろいろ不都合が出るので除外 MsgBox "ルートフォルダは指定できません。" WScript.Quit End If newname = Henkan(f.name) Fs.MoveFolder f.name , newname Else 'パスが存在しない場合、終了 MsgBox "このパスは実在しません。" WScript.Quit End If Next Set Fs = Nothing Set arg = Nothing Function Henkan(oldname) newname = Replace(oldname ,"ガ","ガ") '↑↓この間、100行くらい延々と文字変換 newname = Replace(newname ,"ン","ン") Henkan = newname End Function
たぶん一番クールな方法は 文字列処理が得意な言語を使うことだろう。
>>598 ありがとうございます。参考になります。
604 :
名無し~3.EXE :2005/04/22(金) 00:31:52 ID:rLYEJNRb
1から700000までの数字を,ランダム(又は規則性がばれない)な順番で,重複無く出力するには,どうしたら良いでしょうか? 相当に悩んでいます.お願いします.
605 :
599 :2005/04/22(金) 00:35:16 ID:G1kk6+Kl
>>601 ロジック全然わからないけど、ありがとうございました。
> で、MoveFile/MoveFolderの部分、まともに動く?
動いてる。何故かはわからない・・・
それより、与える引数が多くなると、食べ残しがでてくるのが悩みです。
大丈夫な引数の数は一定しない。
長いファイル名が多いと変換できる数が少なくなるような。
ひょっとして、引数にできる文字数の限界ってありますか?
>>602 bccをインストールして最初の2週間はC言語で何とかしようとしていました。
hello world はからはじまって配列の受渡くらいまでは楽しかったけど、
半角全角が入り混じったファイル名の変換なんてとても無理と悟りました。
文字列処理が得意な言語ってなんでしょう。
>>604 メモリに余裕があるなら
1 ・1から700000までの数字を配列にいれる
2 ・配列をシャッフルする
3 ・配列を先頭からひとつづつ取り出す
メモリが厳しいなら1-3をディスクに書きながらやる
607 :
えすひろ :2005/04/22(金) 00:55:40 ID:2RMoFGjI
Javaかな?全角/半角に関係なく1文字は1文字として扱われる。 詳しい方フォローよろしくm(__)m
>>605 >文字列処理が得意な言語
perl とか ruby あたりはちょろっと出てきそうだけど.
インストールサイズを絞りたいなら awk + sed という手もある.
609 :
604 :2005/04/22(金) 02:08:31 ID:rLYEJNRb
>>606 誰かその部分だけ作って頂けませんか?
出力部分とかは標準出力で構いませんm(_ _)m
>>609 スクリプトでの配列のシャッフルは非現実的じゃないか?
700000個もの配列になると、おそらく途方もない時間がかかると思われ。
vbscriptだとどうか知らないが、javascriptだと特に配列のコストが高いので。
と思って自作のウンコアルゴリズム(jscrpt)でシャッフルしてみた
配列の数 所要時間概算(秒)
1000 2
2000 8
4000 32
10000 215
配列の数がn倍になると時間はn~2倍かかってる?
つまり700000個の数だと(700~2)*2=980000秒≒11日ってこと(;´Д`)?
まあこれはウンコにせよ素直にCで書くことを勧める。
いいアルゴリズムはそこらへんに転がってると思う。
ああ、実験環境はP4 2.8GHz(HT)ね。
613 :
604 :2005/04/22(金) 04:06:02 ID:rLYEJNRb
>>611 ありがとうございます.ではランダムは非現実的として,
普通の人が見て規則性がわからなければ良いのですが,何か良い方法は無いでしょうか?
>>613 各桁を乱数で発生させて、文字列として結合すればいいんでね?
1〜700000の値と乱数シードを何らかのハッシュ関数にかける。 ハッシュ関数を工夫すれば、出力も1〜700000で重複無く出てくるようなのも可能かも。
>>611 いったいどういうコード書いたんだ?
処理の内容からしてn~2倍になるなんておかしいだろ。
面倒なのでhtmlのスクリプトで作ったが、Celeron700Mhzで
JavaScriptの場合30秒。VBScriptの場合10秒程度だったぞ。(出力時間含まず)
VBの方が早いのは内部的なデータ形式のせいだろうな。
<script language=javascript> <!-- document.write(new Date()+"<br>"); size=700000; a=new Array(size); for(i=0; i<size; i++) { a[i]=i; } //初期化 with(Math){ for(i=0; i<size; i++) { j=floor(random()*size); tmp=a[j]; a[j]=a[i]; a[i]=tmp } } //ランダム化 document.write(new Date()+"<br>"); //出力 //for(i=0; i<size; i++) { //if((i%25)==0)document.write("<br>"); //document.write(a[i]+" "); //} --> </script>
<script language=vbscript> <!-- document.write(Time() & "<br>") Dim a() : size=700000-1 : ReDim a(size) : For i=0 To size : a(i)=i :Next : Randomize '初期化 For i=0 To size : j=Int(Rnd()*size) : tmp=a(j) : a(j)=a(i) : a(i)=tmp : Next 'ランダム化 document.write(Time() & "<br>") '出力 'For i=0 To size 'If (i Mod 25)=0 Then document.write("<br>") 'document.write(a(i) & " ") 'Next --> </script>
619 :
604 :2005/04/22(金) 14:43:33 ID:eIeLFBuC
>nW+jJIk/ ありがとうございましたm(_ _)m
//半角 ==> 全角 変換 var O_Dic = {} , Re_Hankana = new RegExp(); sub_initialize(O_Dic, Re_Hankana); var s = sub_hanToZen("アイスでゴザイマス"); WScript.Echo(s.split("").join("\n")); s = sub_hanToZen("パソコン検定"); //パは未定義なのでハだけ変換 WScript.Echo(s.split("").join("\n")); function sub_hanToZen(s){ return s.replace( Re_Hankana , sub_replaceFunc ); } function sub_initialize(dic, reHan){ var s_zen1 = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン"; var s_han1 = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン"; var s_zen2 = "ガギグゲゴザジズゼゾ"; var s_han2 = "ガギグゲゴザジズゼゾ"; var a_zen2 = s_zen2.split(""); var a_han2 = s_han2.match(/../g); var a_zen = s_zen1.split("").concat( a_zen2 ); var a_han = s_han1.split("").concat( a_han2 ); for(var i=0, n=a_han.length ; i<n ; i++){ dic[ a_han[i] ] = a_zen[i]; } var s_pattern = a_han2.join("|") + "|["+ s_han1 +"]"; reHan.compile( s_pattern , "g" ); }
621 :
620 :2005/04/22(金) 18:30:18 ID:CcMx5Djc
>>607 JavaScriptもVBScriptもJavaと同じくUnicodeを使っているから全角・半角に関わらず同じ1文字として使える。
>>605 Cは文字列処理が最も面倒くさい言語の1つ。それよりはせめてC++を。
623 :
604 :2005/04/22(金) 22:21:51 ID:eIeLFBuC
>>617 >>618 スイマセン(>_<)
>>617-618 の内容をhtmlに組み込んで出力まではできたのですが
出力の量が大きすぎてクリップボードにも保存できないしOSが固まってしまうので
wshに書き換えたのですが,wshに書き換えると順番がランダムに変わらずに
0 1 2 3 4 5 6 ・・・699999 という順番になってしまいます.何故でしょうか?
---ソースここから
Dim a() : size=700000-1 : ReDim a(size) : For i=0 To size : a(i)=i :Next : Randomize '初期化
For i=0 To size : j=Int(Rnd()*size) : tmp=a(j) : a(j)=a(i) : a(i)=tmp : Next 'ランダム化
For i=0 To size
If (i Mod 40000)=0 Then WScript.Echo "-----"
WScript.Echo i
Next
---ソースここまで
---出力ここから
0
1
2
(略)
699998
699999
---出力ここまで
>>623 > For i=0 To size
> If (i Mod 40000)=0 Then WScript.Echo "-----"
> WScript.Echo i
> Next
なんだこれはw
iをそのまま出力したらそりゃ順番通りになるっしょ
625 :
604 :2005/04/22(金) 22:57:29 ID:eIeLFBuC
あ,,,a(i) だ... アホだ俺...失礼しました (>_<)
626 :
599 :2005/04/22(金) 22:58:12 ID:G1kk6+Kl
>>610 > f.name = Henkan(f.name)でも良いかもしれん。
OKでした。オブジェクトがパスを覚えててくれるのかな。
> 全角半角変換は、
>>19 のBASP21をインストすれば一発。
週末にでもやってみます。
引数を食べ残す件について。引数全体の文字数が約1,000を超えると以降の引数を受け取ってもらえない
ようです。無限とは思ってないけど、ちょい不便。
>>620 ありがとうございます。とてもスマートな感じがします。var s_zen2とvar s_han2にパ→パを加えればパも
変換できるようになるのは魔法みたいです。こんことができるなんてWSHは実は文字列処理が得意なんですね。
流用させてもらってファイル名を変換するようにはできそうです。が、中身を理解するには時間がかかりそうです。
連想配列って言葉は初めてです。面白そうですが、文字列を添字とする配列ってなんのことだか・・・。
int a[10]; でメモリ上に変数が順番に並ぶというのとどういう関係があるのか検討つきません。
「Wshクイックリファレンス」にもC言語の本にも書いてないようです。お勧めの本があったら紹介してもらえませんか。
それにはまずハッシュというものについて調べるといいかも
Scripting.Dictionary
629 :
名無し~3.EXE :2005/04/27(水) 20:46:17 ID:2JsONT23
nternetExplorer.Applicationを使って表示したHTML内のボタンが 押された時に処理を行いたいのですが OnQuiteのようにイベントを取得する事はできますか? (処理でWscript.sleepを使いたいのでHTML内に記述するのがNGなんです。) dim IE set IE = Wscript.CreateObject("InternetExplorer.Application") IE.Navigate("about:blank") IE.Visible = True IE.document.writeln "<html>" IE.document.writeln "<body>" IE.document.writeln "<input type=""button"" id=""button1"">" IE.document.writeln "</body>" IE.document.writeln "</html>" こんな感じで、button1が押された時に処理を行いたいのです。
.hta
すいません、htaでwscript.sleepはどう使えばよいのでしょうか?
強引な手法(JScript) IE.document.writeln( "<script>button1.onclick=BClick;function BClick(){alert( \"Hello World!\" );}</script>");
function foo () { bar; } IE.document.button1.onclick = foo; でできなかったっけ。 VBScriptなら、GetRef したものをを Set
うまくできませんでしたorz レスくださった方ありがとうございました! 勉強して出直してきます・・・。
もう一度だけチャンスを・・・ set IE.document.all.button1.onclick = GetRef("foo") sub foo() ' 何かの処理 end sub これでボタンをクリックしても動作せず、 set IE.document.all.button1.onclick = GetRef("foo") IE.document.all.button1.onclick ' 自動でボタンクリック sub foo() ' 何かの処理 end sub これだと動きました。 自動でなく手動でクリックしたときに処理を行いたいのですが・・・ 知恵をお貸しいただけませんでしょうか。。
636 :
635 :2005/04/28(木) 03:20:26 ID:Jh+UKJLo
自己解決しました・・・。 > set IE.document.all.button1.onclick = GetRef("foo") > sub foo() > ' 何かの処理 > end sub とした場合、Script自体が終了していました。 ご迷惑をおかけしてすいませんでした。
黄金厨にしては気が早いですね
641 :
名無し~3.EXE :2005/04/29(金) 20:05:12 ID:3SsurYEK
稼動中のosがインストールされてるドライブ名や、ログオンアカウントを取得できますか。 こんなふうに、スタートメニュー に SendTo を追加する batファイル を作りたいのですが。 cony "?:\Documents and Settings\[logon-account]\SendTo のショートカット" "?:\Documents and Settings\[logon-account]\スタート メニュー"
cony→copy
>>641 取りあえずWshShellオブジェクトのSpecialFolderプロパティでSendToやスタートメニューのフォルダは取れる。
>>641 の例に倣うなら
copy "%SystemDrive%\Documents and Settings\%username%\SendTo のショートカット" "%SystemDrive%\Documents and Settings\%username%\スタート メニュー"
645 :
名無し~3.EXE :2005/05/01(日) 02:13:57 ID:zuAasuJi
FormatNumberでMB表示してるんだけど・・・・。 1048576(1024*1024)でフォーマットするとマイコンピュータから みる容量と違うんだけど・・。 いくつでフォーマットしてるの?
646 :
132 :2005/05/01(日) 17:05:59 ID:58PDvKK2
>>132 関数の戻り値を、配列で返す事に成功しました.
---
sample.vbs
RANDOMIZE
Msgbox RndMsg("dummy")(Int(RND(1)*3))
Wscript.Quit
Function RndMsg(dummy)
RndMsg = Array("(^^)v ","(T T)", "ヽ(`Д´)ノ")
End Function
(※ 全角スペースは削除してから実行してください)
---
RNDMSG("")の後に、更に添え字が付けられるなんて
思い付かなかったもので。5ヶ月も経ってた…
以上、日曜プログラマからの報告でした。
普段、ROMばっかりで、出る幕が無いのですが、
このスレを応援してます。
WSHスレ違いっぽいかもしれまんせが質問させてください。 正規表現で、、 1).「あいうえお」 2).「えおうあい」 3).「あいうあい」 上の3行を「あい」、「えお」で検索して1)と2)をマッチさせたい場合ってどうすればいいですか?
648 :
647 :2005/05/02(月) 21:53:51 ID:IZ8mg2N3
訳分からん質問なので訂正。。 「あい」と「えお」の両方あった時だけマッチさせたい。 つまり1)と2)の行だけヒットする。
2回検索すりゃいいじゃん
ていうかそう言う正規表現を書く。 正規表現は実践してなんぼだよ。
あい.*えお|えお.*あい
652 :
647 :2005/05/02(月) 22:10:32 ID:IZ8mg2N3
>>651 おぉおおお、すごい。
そういう手がありましたか。。サンクスです。
あれこれ実践して挫折したのでここに来ました・・・w
age
654 :
ちらしの裏 :2005/05/11(水) 02:57:49 ID:JhmTrLg3
wsh でデータの使いまわしができて仕事が楽になったら、 前任者は何回もデータを入力して、自分から言わせたら無駄な残業をしてばかじゃないんかな という感情を持つこともあるな。
残業代がつきませんから!残念!
寒
wsh の文法を覚えますか、それとも、サービス残業しますか?
無駄に見える残業にも職場の仲間と連帯感を深めると言う意味があるのだよ ばかばかしいと思って時間内に終わらせてるといつの間にか俺みたいになる
Jscript を使用して word をコントロールすることについておたづねします。
「ページを指定して印刷」する方法のVB.netやC#版は、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/dv_wrcore/html/wrtskhowtosenddocumentstoprinter.asp にありますが、
これをJscript で行うようにすると
http://www.tomorrowssolutionsllc.com/Materials/AutomatingWord.html (英語)
の真ん中あたりの「Printing」
oDocument.PrintOut( lBackground, , nPrintRangeType, cFileName, cFrom, cTo, , cCopies, cPageRange, , lPrintToFile)
あたりと読めますが、
VB.net や C#.net での書き方をJscript 記法に直す方法、規則がわかりません。
wsh日本語版 v5.6 help には、VB,VBA にあってVBS にない関数
ぐらいしか関係部分がないようですが、ぜんぜん関係ない記述しかないし。
できれば、ファイル名を指定してword でオープンして、1−3ページを印刷して
ファイルを更新していようがいまいが保存せずにクローズして終了する
Jscript サンプルプログラムがあるとうれしいのですが。
あ、過去録part 3 で 名前憑き引数というキーワードも出てきてますがそれでもねえ。。
こんなもんかな? var filename = "C:\\Documents and Settings\\Chinco\\My Documents\\Unco.doc"; var doc = GetObject(filename); var show = doc.Application.Visible; doc.Application.Visible = true; doc.PrintOut(false, false, 3, "", "1", "3"); doc.Application.Visible = show; doc.Close();
662 :
名無し~3.EXE :2005/05/12(木) 21:10:05 ID:kRuGZtpH
WSHとかHTAで書いたスクリポトは有償配布してもいいのでつか?
PHPで金取るとこもあるスクリプトで金を取って悪い理由はない しかし客が納得するかは別の話だな
664 :
659 :2005/05/12(木) 23:59:18 ID:xGQFP/QE
>>661 ありがとうございます。
VB.net や C#.net での書き方をJscript 記法に直す一般的な方法、規則はないから
ここで聞けということでいいのかな。
htaの話ってここでいいのかな?
新Mac板のDashboard・Widgetスレでお絵かきできる付箋紙作ってって
カキコがあったので、ジョーク(?)で
それをWidgetではなく、htaで作ってみた。
(Widgetもhtaと同じでHTMLとJavaScriptで書く)
Dashboardっぽく枠消したのでドラッグできないのが問題。
JavaScriptで対処できると思うけど。
興味がある人はどうぞ。
http://taro.poke1.jp/up/img/up194.zip
>>665 SVGファイルの中にもスクリプト書けるんだね。面白い。
それはそうと・・・終了ボタンつけてくれ!!(汗
>>666 > SVGファイルの中にもスクリプト書けるんだね。面白い。
なんかこのスクリプト、JavaScriptではあるけど、
ブラウザののJavaScriptエンジンじゃなくて、
adobe SVG Viewerが解釈しているっぽい?
ifの中で&&が使えなかったり、childNodesを一旦変数に入れないと
うまく列挙できなかったり。もしかしたらケアミスしていただけかも知れんけど。
> それはそうと・・・終了ボタンつけてくれ!!(汗
つALT+F4
だってWidgetに終了ボタンないんだもんw。
Macの奴ってどうやって閉じるんだろ?
ショートカットキーで起動して、同じショートカットキーで閉じるのか?
readmeに書いてあるよ
もし右のツールのところに閉じるボタンが無いということなら、 それは元々の「こんなの作って」の絵に無かったから。 忠実に作りましたw
>>665 Win2000+Ie5.0では上手く動作しなかった…
svgサポートって5.5から(だっけ?)だから?
>>665 当方、Win2KSP4+IE6です。
htaファイルを実行すると、、、
65行目、var svgdoc = document.canvas.getSVGDocument();
^
ここで、オブジェクトでサポートされていないプロパティまたはメソッドですって言われてしまいます。
その他
16行目、正式にライセンスされていないため、コントロールを作成する事はできません。
95行目、svgcanvas.setColor(value); svgcanvasは、Nullまたは、オブジェクトではありません。
IEのセキュリティレベルを下げても駄目でした。
何か、追加でインストールしないといけないのでしょうか?
そもそもウチのPCで、SVG環境が構築されてるのかすら分からないので、
googleなどで調べてみます。
「エラー: '}'がありません。」等のWSHのエラーメッセージを保存する方法ってあります?
cscriptで動かしてエラー出力をリダイレクトすれ
有難うございます。いけました cscript hoge.js 2> error.txt
エラーダイアログ表示中にCtr+Cでコピーできるよ
>>673 すみません。検索して、ダウンロードだけしてみたのですが、インストールしようか
どうか迷ってました。
とりあえず、インストールしてみます。
>>662 せこい人だな
お気楽お手軽がスクリプトのいいところなのに・・・
エンコードしてソース隠してもデコーダーで読まれるだろうし
>>673 670だけど、htaを開くと66行目でエラーと言われてダメだった。
ただ、SVGを開くとお絵かきが出来た。
>>679 サポートをする気がある、ソースを見られる事を前提に洗練された
ロジックを組む自信がある・・・なら必要としている人が買うかもねえ。
VBSのビープ音を鳴らし方を教えてください。
音を→音の
>>684 Wscript.Echo Chr(7)
cscriptから実行させる必要がある。
DynaWrapを使ってショートファイル名をロングファイル名に変換するGetLogPathNameを使いたいのですが、変換後の文字列がうまく引き取れません。 サンプル見ながら以下のようにしたのですが、何がいけないのでしょう? Resにはそれっぽい値が入ります。 OSはWin2000SP4、WSHは5.6かな。 Set UserWrap = CreateObject("DynamicWrapper") UserWrap.Register "Kernel32.dll", "GetLongPathName", "i=ssl", "f=s", "r=l" ShortName = "C:\PROGRA~1\MICROS~2\Office\WINWORD.EXE" LongName = String(256, "*") Res = UserWrap.GetLongPathName(Cstr(ShortName), LongName, Clng(100)) Wscript.Echo Res Wscript.Echo LongName
ふつーに FileSystemObject.GetFile().Name でよくないか?
>687 私はWin98なので文字コードが違うのですが、それ以前に Dyancallでは文字列変数のアドレスがDLLに渡っていない のではないでしょうか。皆さん普通にDyancallを 使っているのでWinNT系のDynacallはそれが無いものだと 思ってました。 もしこのせいならば文字列変数名ではバッファアドレスを DLLに渡せませんのでバッファのアドレスを取得するしか 方法がありません。可能ですがかなり面倒です。(lstrcatして VARIANT変数のアドレスを取得してその中からBSTRのアドレスを 取り出す) またDyancallのサンプル正常に機能した方はいるので しょうか?一見正しそうに見えて実は途中で文字が 切れてるのだが。
690 :
689 :2005/05/24(火) 10:03:44 ID:aej1q8HO
>>687 忘れてました。文字列"定数"ならバッファアドレスがそのまま
渡せるので以下のようにしてはどうでしょう。残念ながら私は
Win98のため文字コード変換が必要になりこのコードを直接
確認できません。
Set UserWrap = CreateObject("DynamicWrapper")
'vv i=ssl -> i=swl に変更
UserWrap.Register "Kernel32.dll", "GetLongPathName", "i=swl", "f=s", "r=l"
'vv 誰でも持っているファイルに変更
ShortName = "C:\PROGRA~1\ACCESS~1\MSPAINT.EXE"
'vv LongNameを定数に
Const LongName = " "
Res = UserWrap.GetLongPathName(Cstr(ShortName), LongName, Clng(100))
Wscript.Echo Res
'vv 文字列がBSTR形式になってないので切りだし
'vv もしかしたら文字列終端が変になるかも
Wscript.Echo Left(LongName ,Res)
691 :
687 :2005/05/24(火) 15:04:43 ID:tm8pklkx
>>690 回答有難うございます。
教えて頂いたスクリプトで変換後のロングファイル名が取得できました。
が、変換後の文字列をEchoで表示すると文字化けしました。
cscript //U script.vbs >> result
としてresultファイルの内容は見ると、WSHのロゴなどはUnicodeになっていますが、変換後のロングファイル名はUnicodeになっていません。
なんで普通に表示できないのか(?_?)です。
GetLongPathNameAを呼んだらどうなる?
693 :
698 :2005/05/24(火) 19:35:31 ID:aej1q8HO
>>691 すいませんが//UはWin98ではサポートしてないので私には手に
負えません。WScript.StdOut.Write()ならOpenでファイル形式を
指定できるストリームなのでいけるのかも(いいかげん)。
でも実用にするなら
>>688 さんの仰るとおり
FileSystemObject.GetFile().Name を使ったほうがよさそうです。
ちょっと訂正。最初に「文字列変数のアドレスを渡していない」と
書いてしまいましたが、見てのとおり「渡すだけ」ならOKのように
見えます。返却値として文字列を返す場合のバッファアドレスがちゃんと
渡せないようです。ただしWin98の場合はUNICODE非対応のWIN32APIが
多いので「渡すだけ」でもUNICODE->ANSI変換が必要になったりします。
694 :
689つづき :2005/05/24(火) 19:40:20 ID:aej1q8HO
ちなみに前回のをWin98で実現させると以下のようになります。 以前CeateObject("DynamicWrapper")は一度でいいと言う書きこみが ありましたがWin98ではオブジェクト1つに1つのDLL関数しか 割り当てられないので複数作成しています。 Set UserWrap = CreateObject("DynamicWrapper") 'vv i=ssl -> i=swl に変更 UserWrap.Register "Kernel32.dll", "GetLongPathName", "i=swl", "f=s", "r=l" 'vv2 A->W 変換 Set UserWrap2 = CreateObject("DynamicWrapper") UserWrap2.Register "Kernel32.dll", "MultiByteToWideChar", "i=llwlwl", "f=s", "r=l" 'vv 誰でも持っているファイルに変更 ShortName = "C:\PROGRA~1\ACCESS~1\MSPAINT.EXE" 'vv LongNameを定数にした 'vv2 ここにはANSIコードが入る Const LongName = " " 'vv2 ここにはUNICODEが入る 'vv2 !!注意!!他の定数と同じ文字列にしないこと ' VBSの仕様により同一アドレスが設定される ' また定数をByRef引数で関数に渡したらコピーが渡る(蛇の足) Const buf = "****************************************************************************************************" Res = UserWrap.GetLongPathName(Cstr(ShortName), LongName, Clng(100)) 'vv2 A->W変換 UserWrap2.MultiByteToWideChar 0,0,LongName,-1, buf ,100 Wscript.Echo Res 'vv 文字列がBSTR形式になってないので切りだし 'vv もしかしたら文字列終端が変になるかも 'vv2 W変換バッファに変更 'vv2 日本語が含まれていれば ほぼ100%文字列終端が変になる Wscript.Echo Left(buf ,Res)
695 :
687 :2005/05/24(火) 21:24:09 ID:tm8pklkx
>>692 GetLongPathNameAをやってみましたが、同じでした(T_T)
>>693-694 いろいろとありがとうございました。
まだ進展してませんが、もう少し試行錯誤してだめなら、別の方法を探して見ようと思います。
FileSystemObject.GetFile().Nameはショートファイル名でパスを渡すとそのままショートファイル名で帰ってきました。
ちょっと質問なんだけど、VBスクリプトで、 指定ディレクトリ以下の全ファイルを取得していくようなのってどうやるの? バッチで言うところの for /r %%a (*) do みたいな。 今は for each オブジェクト変数 in subfolderコレクション を サブルーチン化して再帰処理させてるけど、 バッチのfor /rみたいに簡単な方法って無いのかね? 知ってる人居たら教えてくださいませ。 因みにVBスクリプト以外を使えとかは無しの方向で。
697 :
687 :2005/05/25(水) 01:03:05 ID:UEYABEWY
>>695 >FileSystemObject.GetFile().Nameはショートファイル名で
パスを渡すとそのままショートファイル名で帰ってきました。
う〜む、最初からそう言ってもらっていればこんな長ったらしいことを
書かずとも…
Windows Scripting Host Laboratory
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop.htm を参考にしてください。
Set fs=CreateObject("Scripting.FileSystemObject")
Set sh=CreateObject("Shell.Application")
ShortName = "C:\PROGRA~1\ACCESS~1\MSPAINT.EXE"
Set shn=sh.NameSpace(fs.GetParentFolderName(ShortName))
Set shp=shn.ParseName(fs.GetFileName(ShortName))
wscript.echo shp.path
698 :
687 :2005/05/25(水) 09:17:43 ID:/jZlsmvd
>>697 へー、すごい簡単になっちゃいましたねぇ。
API使わなきゃできないって固まってました。
ありがとうございます。
xmlhttpでWebページを取得しようとしたときに
301が返ってくるとそのまま止まってしまう(エラーやフリーズではなく文字通りうんともすんとも言わなくなる)んですが解決手段はあるでしょうか?
もしだめなら301の場合は取得を中断と言う手段でも構いません
具体的なURLは以下の場合です
http://www.2ch.net/guide/ ->
http://info.2ch.net/guide/ 通信パケットをキャプチャしてみると受け取ったlocationにGETしてるんですがそこで止まっています
環境はWin98SE、IE6.1、Windows Script 5.6です
WIN32APIを勉強したらVBSだけより便利になりますか? そしてどんなことができるようになるんでしょうか
> WIN32APIを勉強したらVBSだけより便利になりますか? なります > そしてどんなことができるようになるんでしょうか いろんなこと 詳しくはWIN32APIについて勉強すればわかります
702 :
699 :2005/05/28(土) 00:12:27 ID:PyRncbER
DOSコマンドで言うところの「net view」のようなもので ネットワーク上のPC名の一覧を取得したいのですが 似たようなことが出来ないでしょうか。
WshShell.Execでnet viewを実行……とか駄目か。
>>703 これで一応出来たけど、絶対もっと上手い方法があるはず。
ワークグループじゃなくてドメインなら
ttp://winscript.s41.xrea.com/wiki/index.phpの 「テクニック」にサンプルがあった気がする。
var objShell = new ActiveXObject("Shell.Application");
var ssfNETWORK = 0x12;
var network = getFolder( "ネットワーク全体", objShell.NameSpace(ssfNETWORK) );
var msWinNetwork = getFolder( "Microsoft Windows Network", network );
var workgroup = getFolder( "myworkgroup" /* 自分のワークグループ */, msWinNetwork );
var pcs = workgroup.Items();
for ( var i = 0; i < pcs.Count; i++ ) WScript.Echo( pcs.Item(i) );
function getFolder( name, currentFolder ) {
var objFolderItems = currentFolder.Items();
for ( var i = 0; i < objFolderItems.Count; i++ )
if ( objFolderItems.Item(i).Name.match(name) )
return objFolderItems.Item(i).GetFolder;
}
そして>704の言うとおり、WshShell.Execでnet viewを実行のが楽っぽい。 var wshShell = WScript.CreateObject( "WScript.Shell" ); var oExec = wshShell.Exec( "net view" ); var res = ""; while ( !oExec.StdOut.AtEndOfStream ) res += (oExec.StdOut.ReadLine()); WScript.Echo(res.match(/(\\\\\S+)/g));
707 :
sage :2005/06/02(木) 11:13:11 ID:QhiJZAay
VBスレでスレ違い指摘受けたのでこちらに再掲します。 Windows 2000 Professional SP4, WSH(VBScript) 5.6 です。 ExecNotificationQuery を使ってアプリケーションログの監視をしているのですが、 ときどき、TargetInstance.InsertionStrings に値が入っていないらしく for each で「オブジェクトがコレクションではありません。」というエラーになります。 オブジェクトがコレクションかどうか確認する関数はありますか? 以下、該当部分のコード: Set events = GetObject("winmgmts:{impersonationLevel=impersonate,(Backup, Security)}!\\.\root\CIMV2") _ .ExecNotificationQuery("select * from __instancecreationevent where targetinstance isa 'Win32_NTLogEvent' and targetinstance.EventType = 1") do set NTEvent = events.nextevent () for each str in NTEvent.TargetInstance.InsertionStrings wscript.echo "InsertionStrings: " & str next loop
708 :
703 :2005/06/02(木) 16:35:05 ID:lDPdKewM
す、すいません。 できれば>705か>706をvbsでお願いできないでしょうか。 書き忘れてました。すいません。
>>707 多分、「値が入っていない」 = 「null」 だと思うからIsNullでどうでしょう。
あとはOn Errorとか。
>708 vbsは正規表現使い辛。 Dim wshShell, oExec, res Set wshShell = CreateObject( "WScript.Shell" ) Set oExec = wshShell.Exec("net view") Do While Not oExec.StdOut.AtEndOfStream res = res & oExec.StdOut.ReadLine() Loop Dim regEx, Match, Matches Set regEx = New RegExp regEx.Pattern = "\\\\\S+" regEx.Global = True Set Matches = regEx.Execute(res) For Each Match in Matches WScript.Echo Match.Value Next
712 :
703 :2005/06/03(金) 13:40:09 ID:VxHl0uE6
できました! ありがとうございます。
おまいら、微妙にスレちがいかもしれんが助けてくれ。 WSHをつかって固定メンバーへのメール配信がしたいんだ。 (緊急連絡網をメールですると思ってもらうといいかも) OSはXP Proなんで、送信処理はCDOでオッケーだと思うんだけど 周辺の仕組み的にどうやっていいのかわかんねえ。 【やりたい事】 ・個人情報保護っつー事でアドレスリストを暗号化したい ・WSH→送信処理→送信完了までの間も極力アドレスリストを平文の状態にしたくない。 (テンポラリ的なlist.txtに復号してそれを読み込んで終わったら消して・・・っつー感じにはしたくない) 【分からない事】 平文ファイルを作成せずに復号して読み込む方法 暗号化自体WSH単体で無理だと思うんで、外部コンポーネントや WSH使えるソフト情報でもなんでもいいんで、なんかいい案チョウラィ!щ(゚▽゚щ)。
714 :
713 :2005/06/03(金) 15:10:15 ID:LAyj+2x2
補足 ・暗号化はそれ用の別スクリプト作ってもいい ・復号のKeyはプロンプト使ってユーザが手入力 なんでこんな事するかっつーと、警備員とかの外部の人に 使わせるケースがあるからだったりします。 ボスケテ。
ソースに埋め込んで Script Encoder じゃだめ? 日本語は無視の方向で・・・
それはHTMLメールで送るってことか?
池沼自演コテが乗っ取っててワロタ
720 :
名無し~3.EXE :2005/06/05(日) 14:58:14 ID:MPoGVS64
WMIのWQLってサブクエリ使えないのですか?
721 :
713 :2005/06/06(月) 11:32:39 ID:0vxU305w
皆さん情報ありがとうございます。
>>715 アドレスは将来的に変わる可能性があるので、
ハードコーディングはさすがに厳しいです。
>>716 暗号化自体はおっしゃる通り色々あるんですが、
平文ファイル化せずにコーデックする方法があればと思いまして。
アドレスリストはテキストファイルでせいぜい数百件なんで、
難しく考えずにさっくりReadAllなりっつー方向の方がいいんですかね。
>>717 テキストメールです。
送信先の大部分が携帯電話のアドレスなので。
逆に携帯電話のアドレスだっていうのが、テンポラリでも極力
平文ファイル化したくないと騒いでいる理由だったりします。
722 :
名無し~3.EXE :2005/06/08(水) 05:58:12 ID:1bqoAi1s
2つのテキストファイルに共通して存在する行だけ出力したいのですが,どのようにしたら良いでしょうか? 例: ---1.txt 30 80 50 40 --- ---2.txt 400 20 500 80 10 --- とあれば,1.txtと2.txtの両方に含まれる「80」だけが出力されるようにしたいです. 尚,実際には40000行ぐらいのテキストファイルからの共通の行の抽出に使用します. 実際のファイルの中身は1〜1000000までの数字です.(ソート後の実行も可能です.) どうかお力をお貸し下さい.お願いします.
>>722 ExcelなりCalcなりを使った方がいいと思うけど、
どうしてもスクリプトでやりたいなら、どちらかの内容を行単位で配列に入れて、
もう一方を行単位で読みながら配列内に一致する値があるかどうかをループで回しながら判断させ
一致があれば書き出せばいい。
値が数値なら、配列に格納するときに前後に記号でも入れておけば、ループ回さずvbsのFilter関数で
一致が有るかどうかを判断すことも可能。
まあ、ここはスクリプト書いて貰うスレじゃないから、あとは自分でがんがれや。
> もう一方を行単位で読みながら配列内に一致する値があるかどうかをループで回しながら判断させ んなことしないでDictionaryを使ったほうがいい。
725 :
名無し~3.EXE :2005/06/08(水) 12:48:36 ID:P7JIIBD8
>>723 >>724 詳しく教えて下さいm(_ _)m
簡単にできるようなら書いて欲しいです...
>>722 1. 両方のファイルを昇順にソートし1行ずつ読み込む。
2. "1.txtの行"と "2.txtの行" を比較する。
3-A. "1.txtの行" < "2.txtの行" の場合
-> "1.txt"の次の行を読み込み、2へ戻る。
3-B. "1.txtの行" = "2.txtの行" の場合
-> 共通している行を出力して両方のファイルの次の行を読み込み、2へ戻る。
3-C. "1.txtの行" > "2.txtの行" の場合
-> "2.txt"の次の行を読み込み、2へ戻る。
>>725 まるっきりCOBOLの順更新のアルゴリズムだ、超なつかしー!w
ソート後の実行が可能とのことだし、全行チェックするよりもスマートな予感。
重複がないのが前提だな。by元コボラー
∧_∧ ( ・∀・) < 詳しく教えて下さいm(_ _)m ( ) | | | __(__)_)__ ( ) ) | | | ( ) ( ・A・) < 面倒くせーから書いてクレよ V ̄V Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´∀`)< これが722の正体さ!  ̄| ∪ ̄∪ ̄|\______________
730 :
名無し~3.EXE :2005/06/08(水) 18:07:21 ID:TCJyphr2
>>722 ADO か DAO objcet create して 2つの file を table t1, t2 に放り込み、
SELECT t1.f FROM t1, t2 WHERE t1.f = t2.f;
の結果を file に吐き出せ。
>>732 なんだよ、「書いてくれ」って言われないように
>>726 書かずに済ます方法だしたのに…。
お前らのヒントがクソすぎるから、書いてやる。
>>722 ファイル名を引数にするとか細かい部分は自分でやれな。
Set FSO = CreateObject("Scripting.FileSystemObject")
Set d = CreateObject("Scripting.Dictionary")
Set f1 = FSO.OpenTextFile("1.txt")
Do Until f1.atEndOfLine
d.Add f1.ReadLine(), true
Loop
Set f2 = FSO.OpenTextFile("2.txt")
Do Until f2.atEndOfLine
str = f2.ReadLine()
If d.Exists(str) Then
WScript.Echo str
End If
Loop
ログファイルを監視して、特定のメッセージが来たら処理ルーチンに廻すスクリプトなんですが、 起動時に Scripting.FileSystemObject で OpenAsTextStream して Skip(.Size) でログファイルの末尾までポインタを飛ばしています。 これで動作はするのですが、ログファイルのサイズが大きいと、 Skip の時にやたらと時間がかかります。ReadAll も同じく。 もっと速くする方法はありますか?
>>735 ログをOpenしてなんの処理もせずに、ただ単に末尾までSkipしてるの?なんで?
>>736 監視プログラムが起動したあとにログファイルに書き込まれたログのみを、
監視対象にするためです。
>>735 'ReadAllよりは早いな。
Do Until obj.AtEndOfStream
obj.SkipLine
Loop
っていうか、WSHで開いてるログファイルに ログは書き込まれるのか? 疑問なんだが。 それともそのスクリプト自体がログもとってるのか?
特定のフォルダにある複数の特定の文字列を含むファイルを一括して削除したいのですが、 これはどのようにすればよいのでしょうか? 今は指定したファイル名の削除はできるようになったのですが、検索してファイルを削除と言う やりかたが良く分かりません。 すみませんがどなたか教えてください。
Set fs = CreateObject("Scripting.FileSystemObject") aFolder = "C:\特定のフォルダ" searchStr = "uho" del aFolder, searchStr Sub del(FolderPath,searchStr) Set Folder = fs.GetFolder(FolderPath) For Each oFile In Folder.Files If Instr(oFile.Name,searchStr) <> 0 Then fs.DeleteFile(oFile.path) End If Next For Each oSubFolder In Folder.SubFolders del oSubFolder,searchStr Next End Sub こんなのか?試してないけど。だれか間違えてたら指摘よろ
>740,741 ありがとうございます。たしかにReadAllよりは速そうですが、 Skip(.Size)と較べると、あまり変わらない感じでした。 ログファイルには、別にプロセスが随時ログを書き込んでいます。
>744 >File::OpenAsTextStream メソッドはファイルをロックします >(他プロセスの書き込み目的のファイルオープンを不可能にします) という説明を見つけたんだが、まあ、実際に動いてるんならこの説明に穴があるんだろう。
コマンドプロンプトにでもいいから、tailがあればいいのに。
スクリプトで2重起動防止とかできますか・・・?
>>745 書き込みか追記でopenした場合はロックされる。
読み取り専用ならロックされない。
749 :
名無し~3.EXE :2005/06/13(月) 22:45:56 ID:rmljTOx3
なにを?
>>746 そういうときはプリインストールされていれば良いのにと言おうな。
Windowsで一般的なものが「ない」ってことはほぼありえないから。
752 :
名無し~3.EXE :2005/06/14(火) 21:04:23 ID:K8q2UY4U
ちょうど私も、特定のファイル内のファイルから特定の文字列を含むファイルを探す処理が必要だったので
>>743 を、ファイルを消すという処理の部分だけファイル名を出力する形に変更して実行してみたのですが、
大量のファイルから文字列を検索しているような動作はするのですが(HDDランプがつきっぱになるのでそう判断)、
1つもヒットしません。
よろしければ教えて頂きたいのですが
If Instr(oFile.Name,searchStr) <> 0 Then
という指定でお間違いございませんでしょうか?
>>752 ためしに削除処理のとこを
msgbox oFile.Name
にしてやってみたけど、ちゃんとメッセージボックスでたぞ
正規表現使うようなのでもないのなら、dirコマンドやdelコマンドの方が楽だよねー。
ふつーにgrep使ったほうが楽なのに、何故そんなに苦労したがるのか
↓でやったのですが、何も出力されません。ちなみにダウンロードしたHTMLファイルなのでヒットしないはずが無いです。 ちなみに「WScript.Echo oFile.Name」を2行上にずらしたらズラズラっとファイル名が出力されたので、 If Instr(oFile.Name,searchStr) <> 0 Then がヒットしていない以外には考えられないようです... --- Set fs = CreateObject("Scripting.FileSystemObject") aFolder = "D:\test\output" searchStr = "<html>" yui aFolder, searchStr Sub yui(FolderPath,searchStr) Set Folder = fs.GetFolder(FolderPath) For Each oFile In Folder.Files If Instr(oFile.Name,searchStr) <> 0 Then WScript.Echo oFile.Name End If Next For Each oSubFolder In Folder.SubFolders yui oSubFolder,searchStr Next End Sub ---
>>756 743は「ファイル"名"に」特定文字列を含むファイルを検索してるというのは見れば分かるだろ。
中身まで検証するならoFileからTextStream開いて読んで、ってやらなきゃいけない。
まあそんなのはそこらに転がってるツールつかっとけと言うことだな。
ファイル内文字列かよ
759 :
名無し~3.EXE :2005/06/14(火) 21:53:51 ID:doM56Ctu
おいおい
あ,ファイル名に特定の文字列を含むのをヒットさせてたんですね(−_−;)
ではファイル内に特定の文字列を含むファイルをヒットさせるには
If Instr(oFile.Name,searchStr) <> 0 Then
WScript.Echo oFile.Name
End If
をどのように変えたら良いのでしょうか?
>>757 > 見れば分かるだろ
いえ、わかるような知識があれば気付いてます。
If Instr(oFile.Name,searchStr) <> 0 Then WScript.Echo oFile.Name End If ↓ Set rFile = fs.OpenTextFile(oFile) If InStr(1, rFile.ReadAll, searchStr) > 0 Then WScript.Echo oFile.Name End If rFile.Close
>>761 ありがとうございました。うまくいきました。
IE をコントロールするには InternetExplorer.Application オブジェクトを 使えばいいのは分かりますが、すでに開いている IE の Document って 取得できます?
>>763 それができたらセキュリティホールとなって、悪さができてしまう
え?
var app = new ActiveXObject("Shell.Application.1"); var winds = app.Windows(); for (var i = 0; i < winds.Count; i++) { if (winds.Item(i).FullName.match(/iexplore/i)) { WScript.Echo(winds.Item(i).locationURL); } }
>>764 Set sh = WScript.CreateObject("Shell.Application")
For Each wnd In sh.Windows
Set doc=wnd.document
If TypeName(doc) = "HTMLDocument" Then
doc.body.insertAdjacentHTML "AfterBegin", _
"<span style='font-size:200pt;position:absolute'>うんこ</span>"
End If
Next
768 :
名無し~3.EXE :2005/06/17(金) 00:14:21 ID:T/4rYx9E
亀レスですみません。
>>734 ですが、
行: 1
文字: 1
エラー: このキーは既にコレクション内の要素の関連付けられています。
と出てうまくいきません。
他の方法でも構いませんので、何とかなりませんでしょうか?
>764 > それができたらセキュリティホールとなって、悪さができてしまう あはは。ばーかじゃねーの。 そんなことができるC/C++なんて セキュリティホールの塊ということになっちゃうじゃんwwww
770 :
722=768 :2005/06/17(金) 21:40:44 ID:sIM8eqIe
仕方無いので自分で強引に書いてみたのですが、明らかに処理速度は遅いですよね・・・ Set FSO = CreateObject("Scripting.FileSystemObject") Set d = CreateObject("Scripting.Dictionary") Set f2 = FSO.OpenTextFile("2.txt") Do Until f2.atEndOfLine Set f1 = FSO.OpenTextFile("1.txt") str = f2.ReadLine() If InStr(1, f1.ReadAll, str) > 0 Then WScript.Echo str End If f1.Close Loop でも僕の力ではこれが限界です。手直しお願いできましたら幸いです。
>>770 片方の一行ごとにもう片方を全文検索すればそりゃ遅いでしょ。
仮に元ファイルの中身がランダムな文字列なら
ソートしてから一行ずつ比較するのがセオリーかな・・・
この場合は中身が1-100000の数値とわかってるから
俺なら1-100000までの配列をつくってフラグ立てていくね。
2つのファイルを一回ずつサーチすればおしまい。
ちょっとかっこ悪いけど。
>>770 >734の
d.Add f1.ReadLine(), true
↑を↓な感じにしてみるとどうでしょ。
line = f1.ReadLine()
If Not d.Exists(line) Then
d.Add line, true
End If
>>770 しょうがないな、最高のサンプルを見せてあげるよ。jsだけど。
fs = WScript.CreateObject("Scripting.FileSystemObject");
fA= fs.OpenTextFile("a.txt");
fB= fs.OpenTextFile("b.txt");
arA= fA.ReadAll().split("\r\n");
arB= fB.ReadAll().split("\r\n"); //それぞれ配列に読み込む
arA.sort(); arB.sort(); //昇順にソート、速くするためのポイント。
//以下 arB を任意の数 spCount に分割。速くするための工夫。
var next, spCount= 4;
spB= new Array(spCount);
for(i=0, j=0; i!=spCount; ++i, j=next)
spB[i]= arB.slice(j, next= Math.floor( arB.length * ((i+1)/spCount) ));
//以下、対象の arA が spB の最小値以上、最大値以下なら検索
for(i=0; i!=arA.length; ++i)
for(j=0; j!=spCount; ++j)
if(spB[j][0] <= arA[i] && arA[i] <= spB[j][spB[j].length-1]) //速くするため
for(k=0; arA[i]<=spB[j][k], k!=spB[j].length; ++k) //arA[i]<=spB[j][k] は速くするため
if(arA[i] == spB[j][k])
WScript.Echo("" + arA[i]);
WScript.Echo("終了");
とりあえずソートすれば、もうこれ以上は検索しても意味が無い状態を知ることができる。
spCountを大きくすれば、もっと速くなる。
ただ実用を考えた場合、arA、arB それぞれに、重複する要素がある場合、削除しておかないと結果が冗長になるぞ。
>>773 最高に遅いな。待つのが嫌になって途中で止めちゃうぐらい遅い。
Dim inFile1, inFile2, ForReading, TristateUseDefault
Dim fso, oDic, f, ts, line
inFile1 = "in1.txt"
inFile2 = "in2.txt"
ForReading = 1
TristateUseDefault = -2
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oDic = WScript.CreateObject("Scripting.Dictionary")
Set f = fso.GetFile(inFile1)
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
While Not ts.AtEndOfStream
line = ts.ReadLine()
If Not oDic.Exists(line) Then
oDic.add line, ""
End If
WEnd
ts.Close()
Set f = fso.GetFile(inFile2)
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
While Not ts.AtEndOfStream
line = ts.ReadLine()
If oDic.Exists(line) Then
WScript.Echo line
End If
WEnd
ts.Close()
775 :
773 :2005/06/18(土) 13:15:36 ID:DJtF/zfH
>>773 自分のソース見て気づいたけど、無限ループになりかかってたw
最後のforの継続条件のトコは「,」でなくて「&&」ね。
それに文字列のままソートしたり、比較してるからこりゃダメだな。
よし、暇なときに超高速プログラムにパワーアップして貼りなおします。
>>774 >> 最高に遅いな。待つのが嫌になって途中で止めちゃうぐらい遅い。
「なんのためにdictionary避けてんだよ!」っていう突っ込み期待してたのにw
そんなマトモな普通のコード貼れたら、この流れ終わっちゃう。まあ別にいいけどさ。
776 :
名無し~3.EXE :2005/06/18(土) 13:23:05 ID:9NWcLW1g
JSで 指定されたフォルダのファイル名一覧の配列を作りたいです どんな方法がありますか?
>>776 FileSystemObjectのGetFolder、GetFilesから順次配列に追加。
>>775 >>773 のソート以降を以下に変更。
これで重複があってもok且つ辞書より速い、と思う。
var p = 0;
for ( var i = 0; i < arB.length; i++ ) {
while ( p < arA.length ) {
if ( arA[p] == arB[i] ) {
WScript.Echo(arB[i]);
while ( arA[p] == arB[i] ) p++;
}
if ( arA[p] > arB[i] ) break;
p++;
}
}
ついでに
>>774 の辞書使ったヤツ、重複があるとダブって出力しちゃう。
Echoする前にフラグチェックして、Echoしたらフラグ立てなきゃ駄目だったな。
>>777 ありがとうございます
詳しく調べてみますね
>>776 Enumerator.prototype.toArray = function(){
this.moveFirst();
for(var i=0, a=[] ; !this.atEnd() ; this.moveNext()){ a[i++] = this.item(); }
return a;
}
Enumerator.prototype.toNameArray = function(){
this.moveFirst();
for(var i=0, a=[] ; !this.atEnd() ; this.moveNext()){ a[i++] = this.item().Name; }
return a;
}
var objFs = new ActiveXObject("Scripting.FileSystemObject");
var col = objFs.GetFolder("c:").Files;
var en = new Enumerator(col);
//var a = en.toArray();
var a = en.toNameArray();
WScript.Echo(a.join("\r\n"));
>>772 ありがとうございました.うまくいきました.ちなみに
>>734 ・・・正常に動作せず
>>770 ・・・何とか最後まで動作したがまる2日かかった
>>772 ・・・なんと30秒程度で完了
感激でし...
782 :
名無し~3.EXE :2005/06/21(火) 19:12:18 ID:+hqJ7BLx
はじめまして。質問があります。 WSHでコマンドプロンプトを起動して、ディレクトリを移動するのは 下の書き方で合っていますよね? Dim WSHShell Set WSHShell = WScript.CreateObject("WScript.Shell") WSHShell.Run "cmd /K d: & cd work" で、そのコマンドプロンプトでA.exeを起動。そして終了したのを認識して、 コマンドプロンプトを切るスクリプトを書きたいです。 どなたか教えていただけませんか?
全部&でつなげれば? つかWshShell.CurrentDirectoryでカレントディレクトリ移動させてWshShell.Execで実行させればもっと分かりやすいと思ふ。
つ .bat
つ?
787 :
782 :2005/06/22(水) 00:21:26 ID:Ex+Rnv3x
>783 ありがとうございます。 Wshshell.run "cmd /K d: & cd work & A.exe" ということですか? このA.exeはプロンプト上に計算経過が表示され、終了すると入力待ちの状態 になります。Wshshell.execで、この終了も認識できるのですか?
Runメソッド使うならexitコマンドがある。つか/cでいいじゃん。
>>766 >>767 さんくす。なるほど、IE統合シェルのオブジェクトですか。
しかしやりたかったのは ASP の ShowModalDialog 関数で
現れるポップアップウィンドウの中身を取得することで、これが
Shell.Application の Windows() だと拾えないみたい。
うーん、いい方法はないでしょうかねー。
ただの確認のようにみえますが御教授ください。 今VBSの動作を調べていると 1.VBSのユーザ定義関数の引数デフォルトはByRef 2.引数デフォルト状態のユーザ定義関数を A.Callを付けずに引数に括弧を付けるとByVal B.上記以外はByRef となりました。 以前は 1.VBSのユーザ定義関数の引数デフォルトはByVal 2.引数デフォルト状態のユーザ定義関数を A.Callを付けずに引数に括弧を付けるとエラー B.上記以外はByVal だったように記憶しているのです。 環境は Win98 WSH5.6 です。 VBSの文法周りを確認していて気がついたのですが 先日.NETを導入して以来動作が変わったような 気がするのです。これは全て私の勘違いなの でしょうか?
>790 昔から省略したときはByRefだったような気がするが自信ないなー。 どちらにしても省略したときのデフォルト動作に頼るのはあまりやらない方がいいけど。
ファイルをD&Dして処理をするスクリプトを書いてます。 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(".") Set src = fso.GetFolder(f.Path) Set objargs = WScript.Arguments msgbox("src : " & src) と書いて変数srcの中を見ると、ファイルをD&Dしたときと D&Dしないでvbsを実行したときで中身が変わるんですけど なぜですか? D&Dするファイルはvbsファイルと同じフォルダに入ってます。
>>790 常にbyRefだろ。
引数が1つなら 括弧つけてもエラーにはならないけど
計算式として扱われて結果として値渡しのようになるみたいだね。
795 :
名無し~3.EXE :2005/06/22(水) 16:55:45 ID:WpcS8LMc
>788 ありがとうございました。出来ました!
>>794 なるほど。そういうことですか。
ありがとうございました。
797 :
790 :2005/06/22(水) 19:12:14 ID:jZGWrN+N
>>791 ,
>>793 御回答有難うございました。
VBSとVBとの違いのひとつに引数のデフォルトがあったように
記憶していたのですが私の勘違いのようです。
Microsoftのドキュメントがもう少しまともなら
こんな苦労はしないのに...
>>792 それは単にカレントフォルダが違うってだけでしょ
799 :
名無し~3.EXE :2005/06/23(木) 10:48:54 ID:fJZA1htr
テキストファイルの中身を行単位でランダムに入れ替えて出力したいのですが、どうすれば良いでしょうか。例えば >>>入力.txt 10000 20000 30000 40000 50000 となっているのを >>>出力.txt 50000 20000 30000 10000 40000 などというように行がランダムに入れかわる感じです。 別のファイルに出力しなくても、ファイルの中身をランダムにしてくれるだけでも構いません。
800 :
名無し~3.EXE :2005/06/23(木) 11:27:55 ID:e469Knkc
WSHでループさせていて途中で止めたい時って、タスクマネージャでwscript.exe を切るしかないですよね?他に方法あります??
>>799 >>600-625 辺りにランダムに並べ替えるというのがある。
ReadAllで読み込んで改行でsplitした配列を並べ替えた後WriteLineで書き込んでいけばいい。
と書いてから、FileSystemObjectの基礎ができてるのかどうか不安になった。
>>801 すいません、ずぶの素人で、基礎どころではありません。
書いてくれると嬉しいです。
人の書いたスクリプトを内容を理解せずに使うのはとっても危険だよ。 とくに2chのようなスペシャリストが回答してくれるところではね。
俺は書けないからおまえら代わりに俺の要望通りのものを書け
ってのはスレ違いだし、ずぶの素人が匿名者の書いたスクリプト使うのは
>>803 の言うように危険もある。
内容的には簡単だけど、丸投げの要望にホイホイ応えるほどこのスレは甘くない。
まぁ、やる気がある奴ならヒントや手引きくらいはくれてやるけど、
今回の件についてはヒントというか既にほとんど答えそのものが出てるし。
では >ReadAllで読み込んで改行でsplitした配列を並べ替えた後 ここまででいいので、お願いできませんか? これでもかなりの長期間悩んでます。
XMLHTTPはよくエラーになると思いますが、 stateプロパティに12030が入ると異常終了するみたいですね こうなる前にエラーを出さずに静かに終了させる方法とかないですかね? これじゃとても使えん・・・
>>805 hoge = Split(ファイルストリームオブジェクト.ReadAll, vbCrLf)
これでhogeが「ReadAllで読み込んで改行でsplitした配列」になる。
あとは
>>801 が示してくれた先のアルゴリズムをそのまま使って並べ替えをして
結果を書き出せばいいだけ。
「ここまででいい」って言ったんだから、あとは自分の力でがんがれ。
>>806 JScriptならtry-catch、VBScriptならOn Error Resume Nextしてやればいいんじゃない?
//VBSのエラー処理がいまいちよくわかんないなぁ。
まあ.NETに移行した方が幸せそうではある。
>806 俺のところだとこんな感じ。 on Error Resume Next set objXmlHttp = WScript.CreateObject("microsoft.xmlhttp") objXmlHttp.Open "GET", strURL, false objXmlHttp.Send if Err.Number <> 0 then strErrMsg = strURL & ": " & Err.Description end if on Error Goto 0
811 :
805 :2005/06/24(金) 08:06:02 ID:vGlW87i5
>>807 その配列の数はどうすればわかるのでしょうか。
配列の中身を入れ替えるとき、このスレを探したら見つける事ができた
For i=0 To size : j=Int(Rnd()*size) : tmp=a(j) : a(j)=a(i) : a(i)=tmp : Next 'ランダム化
を使おうとしているのですが、sizeに入れるべき配列の数がわかりません。
UBound
814 :
805 :2005/06/24(金) 12:33:45 ID:mImxBdVV
頑張ったのですが(>_<)
Set fs = CreateObject("Scripting.FileSystemObject")
Set rFile = fs.OpenTextFile("D:\test\1.txt")
hoge = Split(rFile.ReadAll, vbCrLf)
size = UBound(hoge)
For i=0 To : j=Int(Rnd()*size) : tmp=a(j) : a(j)=a(i) : a(i)=tmp : Next 'ランダム化
For i=0 To size
WScript.Echo hoge(i)
Next
としたのですがダメでした・・・・
ここまでガンばったので、どなたか
>>799 の答えを書いて頂けませんか?
816 :
805 :2005/06/24(金) 15:13:45 ID:cZfOJNqS
>>815 うまくいきました。
単純ミスだけでした。
ちょっと自信がつきました。
ありがとうございました。
817 :
名無し~3.EXE :2005/06/24(金) 20:56:33 ID:XSG8pdDC
VBである時刻t1から現在の時刻t2の差を秒で求めたいんだけどねーの?
Dim before
before = Now()
'// なんか処理
Dim now
now = Now()
で差を求めたいわけだが・・・
ちなみにテンプレで
Nacelle - WSH「自動」
http://nacelle.info/wsh/index.php 停止中みたいですね^^;
DateDiff( "s", t2, t1 )
819 :
853 :2005/06/24(金) 21:38:36 ID:XSG8pdDC
情報を小出しにしてる形になってしまいすみません WSH経由でVBScriptを使っています。 少し調べた結果、APIを使うためにはWMIを入れる必要が出てきそうなんで避けたかったんです。 簡単なマクロみたいなのを作ろうとして安易にWSHを選んだことをちょっと後悔しました。 今度からはもうちょっと調べてから質問することにします。 ありがとうございました。
をいをい… 何勘違いして突っ走ってるんだ? APIなんて関係ないだろ。 DateDiff関数はVBScriptでそのまま使える。 Dim t1, t2 t1 = Now '// なんか処理の代わり Wscript.Sleep 5000 t2 = Now MsgBox DateDiff("s", t1, t2) を実行してみろ。 「Sleep 5000」で5000_秒(5秒)止めた分の 5 が返るから。
/ | ハ \ //// ヽ ! l |l、、\ ` 丶 、'´_ 、 、 ! l ‖\、 \_ _ /, -`ヽ } 、 l ‖_ >:=‐  ̄ ̄「 l| l } 、 ヽ んっ んんっ… ヽ 、i`─ '´ ___ | ll ⌒; j 、 ヽ \ヽ r,ニ、‐‐'‐' u .l ll '_ノ 、 ヽ ` \"\):、 | l| `、 ヽ 、 ヽ ヽ ゞ'^ ! ll `、 ヽ 、 ヽ 丿 .:::. | l| \ ヽ、 、 ヽ 丶、_ | l|/lヽ `>=‐- ミヽ `、 `⌒ヽ_ | l| | ハ /´ `ヽ 、 チュパ / /. `´| l| | l / 〃 `、 、 チュパ / / | l| | l' 〃 【ゴールデンレス】 このレスを見た人はコピペでもいいので 10分以内に3つのスレへ貼り付けてください。 そうすれば14日後好きな人から告白されるわ宝くじは当たるわ 出世しまくるわ体の悪い所全部治るわでえらい事です
822 :
名無し~3.EXE :2005/06/25(土) 01:06:28 ID:8ZAygSiK
>>820 DateDiff関数に第二引数と第三引数はDateだと思ってて突っ走った
少し反省している
というかありがとうございます
823 :
776 :2005/06/25(土) 20:24:55 ID:HtxTPUI+
指定されたフォルダのフォルダ名一覧の配列も作りたいです どんな方法がありますか?
780をちょっといじれ。
825 :
776 :2005/06/26(日) 21:39:08 ID:pErfRXp/
やっとEnumeratorオブジェクトを理解した
HTA から wshsellobj.exec("cscript hoge.wsf") とやると wsf 実行中は DOS 窓が開くんですがこれを抑止できませんか。 Run なら窓開かないオプションが指定できるんですが、run の場合は標準出力を監視できないので。 ちなみに wshshellobj.exec("cscript //nologo //B hoge.wsf") でも DOS 窓抑止できませんでした。
827 :
名無し~3.EXE :2005/06/27(月) 14:28:26 ID:SRkDVWRT
いまWSHでFortranのプログラムを実行させています。 そのプログラムで、途中にPauseをかけてあります。 そのPauseしたのを認識して、WSHの次のコマンドラインに移る方法ってありますか? 現在は、FortranでPause直前にファイルに終わったことをあらわす数を書き出し、 それを何回も検索させることで認識させています。 どなたかよろしくお願いします。
環境変数を使うとか。 どう実行させてるのか知らないけど、Fortranが標準出力になんか書き出してそれをWSH側が読み取るとか。
前略) var body = ie.document.all(i).innerHTML; file.WriteLine(body); // プロシージャの呼び出し、または引数が不正です。 とするとエラーが出てしまいます。 調べてみたらHTML内に〜;てなUNICODEが含まれてるためエラーになるようです。 これを回避する方法は無いでしょうか。
>>829 書いててNGなコードが出てきたらやり直してる
try { file.WriteLine(body) }
catch (e) {
for(i=0; i<body.length; i++) {
try { file.Write(body.charAt(i)) }
catch (e) { file.Wrtie(""+body.charCodeAt(i)+";") }
}
file.WriteLine()
}
もっとエレガントな方法あったら求む
831 :
名無し~3.EXE :2005/06/27(月) 15:30:03 ID:SRkDVWRT
>828 返事ありがとうございます! 現在のスクリプトを簡単ですが、載せてみました。 標準出力に書き出すってことは、Cscript.exeで実行しなければなりませんね? その出力を読むのはStdoutですか?? Dim WSHShell Dim stepnumber, StartTime, EndTime Set WSHShell = WScript.CreateObject("WScript.Shell") Set Fs = WScript.CreateObject ("Scripting.FileSystemObject") WSHShell.Run"..\main\3a_main.exe",7,False Do Set oTs1 = Fs.OpenTextFile("step.dat") sStep = oTs2.ReadLine oTs2.Close If sStep = 0 Then Exit Do End If Loop WScript.Echo "Pause"
>>830 ありがとうございました。上手くできました。
833 :
830 :2005/06/27(月) 20:35:30 ID:ChuXL0WP
後で気づいたんだけど try { file.WriteLine(body) } で失敗したら、その行は丸々書かれなかったことになるのかな? もし途中まで書いてたなら file.column プロパティで何文字目まで書いたかわかる(だろうと思う)ので var ibegin=0 if (file.column>0) ibegin=file.column-1 for(i=ibegin; i<body.length; i++) { の様にしたほうが良いかもしれない
834 :
776 :2005/06/27(月) 21:42:23 ID:5cc/9scc
解決しました FilesをSubFoldersに変えるだけなんですね お騒がせしました
掲示板の書き込み用スクリプトを作っています。 書き込み内容を引数に渡すと、自動でそのサイトに書き込むというものです。 VBSの引数として、改行を含んだ文字列を渡したいのですが、 どういった記述をすればよいでしょうか? 下のような書き方では、「"1行目"」しか第一引数として渡りませんでした。 C:\> hoge.vbs "1行目" & vbCrLf & "2行目"
836 :
835 :2005/06/28(火) 01:01:33 ID:arf8VtmE
自己解決しました。 こんな感じで期待通りの動きをしました。 C:\> hoge.vbs Replace("1行目\n2行目", \n, vbCrlf) もしも、もっといい方法があったら教えてもらえるとうれしいです。 失礼しましたー。
俺等に荒らしや宣伝の手伝いをしろと?
そうそう指摘もきっとあるんだろうなーと思ったから、具体的な処理の中身は書かなかったんですけどね。
ー
InternetExplorer.ApplicationオブジェクトのNavigateであるURLに飛ばす際に
リファラを指定してやりたいんですが上手くいきません。
4番目の引数に追加のヘッダを記述すれば行けるはずなんですが
どうやって指定すればいいのかわからないです。
なお、こんな感じでテストしています
var wb = new ActiveXObject("InternetExplorer.Application");
wb.Visible = true;
wb.Navigate("
http://www.ugtop.com/spill.shtml ", 0, null, "Referer
http://www.yahoo.co.jp\n ");
>>840 Navigateの第4引数はPOSTするデータ。ヘッダは第5引数。
あとヘッダの名前とデータはコロン(とスペース)で区切る。
843 :
名無し~3.EXE :2005/06/30(木) 17:07:26 ID:Kd/BkTkt
JSで他のファイルを実行したいです メモ帳を起動したいんですけどどんな方法がありますか?
>>843 普通に
つーかプログラム実行なんて一番初歩的な部分だろ。
調べる気が少しでもあるなら、わからないなんてことはあり得ないわけだが。
そんなことも調べられないようならjsなんて使わずに
バッチでも使ってろ。テキストにパス書いて拡張子batにすればそれで終わりだ。
だって何のキーワードで調べるのかわかんないんです><
>>843 そもそもなんで js でやろうと思ったの?
答えそのままだとためにならないので、ヒントだけ言うなら
exec とか run あたりのメソッドを試してみたら?
848 :
http://www.geocities.jp/fox_mondai/ :2005/06/30(木) 21:08:55 ID:JV9mNq7w
たった5件の保守ageで、アクセス規制!?
849 :
名無し~3.EXE :2005/07/01(金) 16:44:10 ID:9yi1xDRx
できました ありがとうございました ご迷惑おかけしました
851 :
名無し~3.EXE :2005/07/02(土) 12:57:09 ID:DU8o0MIV
質問です JScriptでやってます
インターネットから画像ファイルをダウンロードしてファイルに保存したいのです
下のスクリプトを実行してみるとエラーを特定できませんと成ってうまくいきません
何か足りない部分があるのでしょうか?
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
sURL = "
http://www.google.co.jp/intl/ja_jp/images/logo.gif ";
adTypeBinary = 1;
adSaveCreateOverWrite = 2;
TmpPath = "logo.gif";
Stream = new ActiveXObject("Adodb.Stream");
xmlhttp.Open("GET", sURL, false);
Stream.Type = adTypeBinary;
Stream.Open();
Stream.Write(xmlhttp.responseBody);
Stream.SaveToFile(TmpPath, adSaveCreateOverWrite);
接続を開いただけで要求を送ってない。 xmlhttp.Send(); をOpenのあとに付け加える。
>>852 望みどおりの動作を出来ました!
ありがとうございました
854 :
名無し~3.EXE :2005/07/04(月) 16:53:45 ID:VsxHVlPF
はじめまして。 Do LoopであるEXEを実行しています。そのEXEは毎回同名のファイル を作成するので、前のステップのファイルが消えてしまいます。 そこで、コピーをさせたいのですが、何回繰り返したときのファイルかわかるように ファイル名を指定したいのですが、何か良い方法ありますか? Do I=1,step call cal (プログラム) call copy (コピー) Loop 毎回test.datが出るので、別フォルダに、0001test.dat、0002test.dat・・・ と別名コピーしたいということです。どなかたお願いします。
>>854 カウンタ回してカウンタ変数をファイル名に当てればいいだけじゃん。
"0001"にしたいなら right("000"&カウンタ変数,4) で。
「書いて」とか言うなよ。
856 :
名無し~3.EXE :2005/07/04(月) 19:11:38 ID:Ujj/GPdN
857 :
名無し~3.EXE :2005/07/04(月) 19:28:28 ID:m3YqWzNm
10 シキ i=0 20 ジッコウ プログラム 30 コピー ファイル "ファイル"+i 40 i=i+1 50 10ニイケ
860 :
名無し~3.EXE :2005/07/04(月) 21:19:54 ID:Ujj/GPdN
go to文なんて久しぶりに見たなw
ダサw
ぴう太?
>>854 Dim objFS, objFile, I
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
I = 0
Do
I = I + 1
Set objFile = objFS.GetFile(ぱす)
objFile.Name = I & objFile.Name
Loop
うるおぼえ
四年に一度の うろうどし
865 :
854 :2005/07/06(水) 11:25:58 ID:iPjGicTm
皆さんすんません。アドバイス頂いたおかげで出来ました! ありがとうございます!
初心者がほほえましいな
infoseekラッキーサーチで検索しまくるwsh書いたのに ちっとも当たらない。
>>870 を日本語に直すスクリプトをおながいします
>>871 「トウモロコシ畑にオレンジ色の光か…」
あと訛っててよくわかんないや。
873 :
名無し~3.EXE :2005/07/13(水) 11:23:29 ID:JNVlv6cR
ひとつのファイルの一部分と、別のファイルの一部分をコピーして置き換える スクリプトって可能ですかね?どうもうまくいかなくて。 お願いしまっす!
バイナリならADODB.Streamオブジェクトだな。
JScriptからバイナリを操作するのは諦め気味だったがこんなの発見。
ttp://www.hawk.34sp.com/stdpls/dwsh/charset_adodb.html XMLDOMを使う訳か。巧いな。
/* サンプルコード */
var ados = new ActiveXObject("ADODB.Stream");
ados.type = 1;
ados.open();
ados.loadFromFile("hoge.dat");
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
var elem = xmldoc.createElement("tmp");
elem.dataType = "bin.hex";
elem.nodeTypedValue = ados.read();
ados.close();
elem.text += "82a0";
ados.open();
ados.write(elem.nodeTypedValue);
ados.saveToFile("hage.dat");
ados.close();
876 :
873 :2005/07/13(水) 13:15:06 ID:JNVlv6cR
すいません、テキストです。
「一部の」って言われてもどういう条件でどことどこを置き換えたいのかよくわからん。
879 :
873 :2005/07/13(水) 13:55:47 ID:JNVlv6cR
具体的には 1,10,10,10 2,11,11,11 3,13,12,11 とならんでいる部分をまるごと 1,15,15,15 2,13,14,50 3,14,65,43 というものと置き換えたいということです。
>879 その説明じゃ全然わからないが・・・。
>>878 別にいいじゃん、「可能ですかね?」なんだから、
可能かどうかさえわかれば、自分で書くんだろうから。
A:「可能ですかね?」 B:「可能です」 A:「どうすればできますかね?」 B:「こうすればできます」 A:「やってみたんですが、出来ませんでした。コードを書いてもらえませんかね?」 B:「・・・(最初からそう書けよ)」
883 :
873 :2005/07/13(水) 15:57:21 ID:JNVlv6cR
そうですね。すんませんでした。 もし時間があれば、どなたか書いてくれませんか?
スレ違い。 ここは丸投げして、「〜なスクリプト書いてください」ってなスレではなく 技術的なヒントを貰ったり、テクを披露したりするスレ。 教えたがり君が常駐してるからやる気のない教えて君も後を絶たないが、 そろそろコード丸投げのクレ厨は追放しようぜ。
>>884 に禿同しておいて……
>>873 だいたい書き換えの仕様も分からんし、この段階で書いてくれなんて
厨すぎると思いませんか?
自分でやってみて分からんところを尋ねるならOK。
調べ方が分からないというなら調べ方を調べてください。
886 :
873 :2005/07/13(水) 17:43:55 ID:JNVlv6cR
そうですね、すんませんでした。自分が作ったのは、下のような感じです。 test.txtの1行目は飛ばして、2行目から426行目まで読み込ませます。 そして、test2.txtの、同じく2行目から426行目までとまるごと置き換えたいということです。 WSHのドキュメントファイルを見たのですが、長い行数まるごと置換する方法が見つかりませんでした。 Dim fso,opfile1,opfile2 Set fso = CreateObject("Scripting.FileSystemObject") Set opfile1 = fso.OpenTextFile("test.txt", ForReading, True) opfile1.skipline For I=1 To 425 f= f & opfile1.ReadLine Next Set opfile2 = fso.OpenTextFile("file1.txt", ForWriting) opfile2.WriteLine f opfile2.Close opfile1.Close test.txt (1行目飛ばし) 1, 0.0 , 0.5, 0.5 2, 0.0 , 1.0, 0.5 3, 0.0 , 1.5, 0.5 ・ ・ ・ こんな感じのファイルを読み込ませました。するとfを出力すると 1, 0.0 , 0.5, 0.5 2, 0.0 , 1.0, 0.5 3, 0.0 , 1.5, 0.5 と表示されてしまうのも改善したいのですが。
888 :
名無し~3.EXE :2005/07/14(木) 04:16:25 ID:Asg2HN0l
すでに立ち上がっているWindows Media Playerに対して スクリプトで、ファイル→URLを開く→ファイル名をペースト→OKボタンをやりたいんですけど スクリプト内で起動したプログラムでないと操作できないんでしょうか?
なにも考えないで済むのはキーストロークをおくるやりかただな
891 :
名無し~3.EXE :2005/07/14(木) 12:53:58 ID:Asg2HN0l
>>889 >>890 ヒントすら教えてもらえないのですか(´・ェ・`) ショボーン
できるって言われても、何を使ったらWindows Media Player接続できるのやら・・・
せめてPIDで接続できるようなものがあればいいんだが
892 :
888 891 :2005/07/14(木) 13:42:50 ID:Asg2HN0l
>>889 >>890 昨日使ってみたがうまく接続できなかったが、
.AppActivate("Windows Media Player")をもう一度やってみたら接続できました。URLを開くまでできました。
アクティブなウィンドウに対してなので不安定な動作していたのかもしれない。
お手数かけました。
>>892 AppActivateは知ってるよな?
SendKeysでキーを送ることを「接続」って言ってるの?
895 :
名無し~3.EXE :2005/07/16(土) 02:58:42 ID:GIz2x6n9
あるサイトのページのソースを取得し、その中から文字列を取得したいと思っています。 変数の中にソースを代入し、そこから必要な文字列だけを切り出せば出来ると思っているのですが、どうすれば出来ますか?
897 :
896 :2005/07/17(日) 13:44:47 ID:s2NEIL9M
VBSを使ってやりたいと思っています。
まずどこが分からないのかから聞こうか。
BASP21、W3getの-cオプション(HTTP クッキー指定)でクッキーを複数の指定するにはどうすればいいでしょうか 「;」区切り、-cの複数書きなどでは駄目でした。使用言語はJscriptです。
900 :
896 :2005/07/17(日) 14:20:08 ID:s2NEIL9M
>>898 サイトからページのソースを取得する部分で躓いています。
まずは自分が書いた物を貼ってみよう。 全く書いてないというなら(゚听)カエレとなるが。
902 :
896 :2005/07/17(日) 14:39:25 ID:s2NEIL9M
ご指摘ありがとうございます。
インターネットブワウザでview-source:アドレス と指定するとソースが表示できるのでそれを応用しようと考えたのですが、
エラーが出てしまいます。別の方法でやるべきですか?
Dim SourceGet,objSourceGet
SouceGet = ""
Set objSourceGet = CreateObject("WScript.Shell")
SouceGet = objSourceGet.Run "view-source:
http://yahoo.co.jp "
MsgBox SouceGet
>>902 SamurizeとかAveDeskのWeb情報取得系のvbs拾ってきて
流用するのが一番早いと思われ。
>>902 こんばんはSamurizeスレの者です
私はVBS出来ませんがJScriptで参考になれば幸いです
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("GET", "
http://www.yahoo.co.jp/ ", false);
xmlhttp.send();
txt = xmlhttp.responseText;
これで変数txtにソースを代入します
あとはStringクラスのメソッドで必要な部分を切り取れば出来上がります
906 :
名無し~3.EXE :2005/07/18(月) 13:01:58 ID:uONo2bkM
902-904のスムーズな流れにワロタ
907 :
名無し~3.EXE :2005/07/23(土) 23:57:27 ID:wP5iuexc
ファイルの概要情報をゴニョゴニョしたいんですけど、 FolderオブジェクトのメソッドGetDetailsOf で なぜか「キーワード」だけ取得できません。他の「タイトル」とかはいけてるんですが…… フォルダの表示を詳細表示にしても、キーワードの何も表示されないし。 何か方法がありませんか?
908 :
名無し~3.EXE :2005/07/26(火) 10:40:03 ID:/XUH5pHG
オライリー本買ったかね?
909 :
名無し~3.EXE :2005/07/26(火) 13:28:26 ID:LHprXdA1
sendkey でクリップボードの中のデータは壊れますか?
質問の意図がわからないが、たぶん壊れない
913 :
907 :2005/07/28(木) 02:35:47 ID:jpcsRqXo
MSNデスクトップサーチだとキーワード拾ってくれるのにな〜
JScriptでWMIって情報が少なくてつらい〜 ようやくStdRegProvクラスのEnumKeyが使えたので貼っとく。 var dict = new ActiveXObject("Scripting.Dictionary"); var keys = dict.items(); // VBArray var reg = GetObject("winmgmts:/root/default:StdRegProv"); var HKCU = 0x80000001; var ret = reg.EnumKey(HKCU, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", keys); for (var i = keys.lbound(); i <= keys.ubound(); ++i) { WScript.Echo(keys.getItem(i)); }
うへへ。。。僕は肉奴隷
もりあがらねえぁ。 次スレは、学校の宿題で出たwsh の課題をも教えてあげるスレにしたら?
宿題にWSHの課題が出るとも思えんな。
結局VistaにはMonadも乗らないんだよなー。
オライリー本、全然ダメだな。数分の立ち読みだけど。 「行末」のことを「文末」と書いてる点で萎えた。
【チラシの裏】 IEのオブジェクトでクリップボードを操作しようとしたら、Navigate の値?をabout:blankにするはずだったのが 綴りを間違えてabaut:blankにしてしまった。 で、Meだと正常に動いていたが、XPで実行すると正常に機能しなかった。 【チラシの裏終わり】
Meがいかにアバウトな造りであるかを 印象付けるようなエピソードですね。 一方、堅そうで脆いXPは つむじ曲がりのヘソ曲がりなので動くものも動きません。 動く頃にはサポート終わります。仕様。
>>921 行末がCrLf、文末がLfだと知らない素人
>>924 すまん、ちょっとうそついてみたけどしばらく出かけるので。
嘘だと言っとく。
>>921 今日借りてきたけど…。ホントだ。
「JScript では、文の終わりに ; が必要です」とか書いてある。ややこしい…。
でも私は初心者だから、役に立ちそうです。
>>927 921が言ってるところは知らんけど、
「JScript では、文の終わりに ; が必要です」というのは正しいよ。
var hoge =
"ABCDEFG";
と2行に分けて書いたり、
foo += 123; bar += 456;
と 1行にまとめて書いても良い。
だから、 ; を付けるのは行末ではなく文末なの。
var A = 0 var B = 1 ; なくても大丈夫ですよ。
930 :
927 :2005/08/17(水) 14:02:17 ID:brZ+1PiN
なるほど、そういうことだったのですね、失礼しました…。 それから、確かに ; 無しでも動きました。ありがとうございました。
WScript.Echo("ほしゅ");
要するにステートメント末尾ってことだよな
あるとき突然動いていたスクリプトが動かなくなって、ソースを見るも原因不明 再起動すると何事もなかったように動作する なんとかなりませんか・・・
なんともならんな
ネタがないから
>>933 はそのスクリプト晒せよ。
もしかしたら解決するかもしれん。
使ってみたいのですが。動かない。やっぱり。スキル梨orz...
コマンドラインスレの物。
ネタ代わりに↓スクリプト晒しますから動せるように出来ないかな
こんな素敵なメモツール
ttp://d.hatena.ne.jp/yamatt2/20050215/p1 を見つけて使おうとしましたが
' テキストファイルを起動(エディタは、.txt に関連付けているやつ)
Set sh = CreateObject("WScript.Shell")
sh.Run basepath & "\" & memofile, , false
で止まりエラーになります。
このスクリプト内でエディタ起動するにはどうしたらいいでしょうか?
もしかしてWSHスレかもしれませんが(VBS)
メモ自体は生成されます。でも指定エディタが起動しませんorz
私のレベルでは無理でした。
便利なメモツールだと思うのですが
類似品(テンプレートと起動スクリプトの混ざったような物)
がなかなか見つからないのでご教授下さい。
環境はwindow2000でWindows Script 5.6です
コマンドラインで呼びだしてサクッとメモり、溜まったら
grepで探して便利に使いたいですorz
多分パス内にスペースが含まれてるんじゃないか?
ていうかさー、エラーメッセージぐらい書けって話だよねー。
スペース含むパスで試した。コレで多分いける。 sh.Run """" & basepath & "\" & memofile & """", , false
940 :
936 :2005/08/28(日) 23:01:34 ID:2WzZYCjD
動いたお。
C:Doc.....で止まってたんだorz...
>>939 (≧∀≦。)ノありがd
なんか凄いです。
""が一杯
便利になりました。d
余裕があればちょっとでも勉強してみては。このぐらいはすぐ理解出来るようになるから。
馬鹿みたいな質問で恐縮ですが、ダウンロード版のWSHヘルプって、 フォントの大きさは変えられませんか? 小さすぎて目が疲れる…
Ctrl + ホイールスクロール
で、できました… ありがとうございました。いやはや、恥ずかしい…
Office入れてるとmse.exeを使って 変数やオブジェクトの内容を見ながらデバッグできるけど Officeを入れずに、できれば無料で 同じような環境は手に入らないかな?
>>946 MSScriptDebuggerは対象をブラウザなんかで開かないと駄目で
単体スクリプトのデバッグって出来なくない?
mse.exeだと >cscript //X hoge.vbs でデバッグできるのよね。
変数の内容も自動で更新してくれるし
オブジェクトのメンバもチェックできるからかなり便利。
やっぱりOffice入れるかVisualStudioいれるしかないんかな。
batスレから誘導されてきました。よろしくお願いいたします。 ドラッグ&ドロップしたファイル(主に複数)のテキストファイルに対して、 本文中のタブと空白、ファイルの拡張子を削除するバッチを作ろうと思っているのですが、 どのようにしたらよいでしょうか。よろしくお願いいたします
>>948 For Eachステートメントに、Wscript.Argumentsを当てて
ReadAllでファイルを読み込んで、Replaceでタブやスペースを""に置換して
読み込んだファイルを削除して、Writeで拡張子を抜いたファイル名に書き込んで終わり
ここは「書いてください」スレじゃないので具体的なコードは自分で書こう
>>950 元から拡張子が無かった場合にエラーになるな。
一度変数に読み込んでInfを閉じてから書き込んだ方がいいでしょ。
それと".拡張子"と同じ文字列がパスの中に有ると出力パスが狂ってくるから
GetParentFolderNameとGetBaseNameでパス決めた方がいいな。
まあ、初めてにしては上出来だ。
WScript.Arguments で引数を10個くらい処理しようとするとエラーになってしまうのですが、一度に数十個処理できないものでしょうか
>>952 ひとつのフォルダに放りこんで
フォルダ単位で処理する
レス早っ ありがとうございます。なんとかできそうです
バグを叩き潰せ!
ヤメテ! ボクヲイジメナイデ!!
WSHでIEのプロキシの切り替えをするにはどうすればいいでしょうか?
>>959 ありがとうございます。やっぱり他所に置いた.pacファイルを読み込ませるしかないですか・・・
1つのスクリプトファイル内でプロキシを切り替えれないかと考えていたところです。
いや、設定ファイル書き出すのが一番簡単かなと思って・・・ レジストリだと HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings の ProxyServer あたりを書き換えればいいんじゃね? 試してないけど。
起動中のIEの設定を変えようとするならAPI使わないと無理だったと思う
VBScriptでExcelファイルを操作したいのですが、 Excelの組み込み定数を使うことはできないのでしょうか? sheet.Cells(1, 1).HorizontalAlignment = xlHAlignCenter 'sheetはWorkSheetオブジェクト とか指定したいのですが、 このままだとエラーになってしまいます。
使えない ExcelのメソッドなどはExcelのオブジェクトから参照できるが 定数はExcelで使われてる定数文字列を書いても、 参照先はソレを書いたVBS内になるから。 ExcelVBEのイミディエイトウィンドウで ? xlHAlignCenter と入力してEnterキー押すと-4108が返るし Shift+F2でオブジェクトブラウザから定数値調べてもいいし 大量に調べたければセルにでも書き出せばいい あとはVBS内で定数宣言 const xlHAlignCenter = -4108
HTAのフレームにファイルやフォルダをドロップしていろいろさせるスクリプト作っています。
期待しているイベントは次のようなもので、また、それぞれの最終状態でFRAME.location.hrefにはドロップされたアイテムのパス情報が入ってることを期待しています。
■ローカルファイルをドロップしたとき
イベントonReadyStateChangeが発生、document.readystateが次のように変化
loading → interactive → complete
イベントonLoadが発生
■ローカルフォルダをドロップしたとき
イベントonReadyStateChangeが発生、document.readystateが次のように変化
loading → interactive → ERROR(フォルダドロップではcompleteが発生しない。そのフレームがファイルエクスプローラーに化けるから。)
イベントonLoadは発生しない(フレームの中身はファイルエクスプローラーだから)
しかるに、ヒアリングした限りでは同じ環境なのに
(1)フォルダをドロップしているのにdocument.readystate=completeとonLoadが発生する
(2)FRAME.location.href=about:blankとなり、パス情報がない。
というようなことが起こるようです。手元のPCでは再現できずお手上げ状態です。
環境はXP SP2(Home/Pro)(なのでWSH5.6) IE6.xxです。
プログラムは
http://winscript.s41.xrea.com/wiki/ のアップローダー使わせていただいて、「HTAフレームへアイテムドロップしたときのイベントトレース.zip」です。
質問は、
★イベントは上記の期待しているとおりでよいと思っているのですが、何か考え漏れはないでしょうか。
★あぷしたプログラムで、(1)(2)の様な現象の出る方はこのスレではいらっしゃいますか?
あるいはそのようになる原因がわかれば教えてください。
968 :
967 :2005/09/06(火) 23:13:52 ID:Rrg870VY
969 :
名無し~3.EXE :2005/09/07(水) 01:29:55 ID:i7j9UtKs
>>965 .wsf ファイルでよければ以下の方法でできる。
<Job id="hoge">
' Excel の定数を使用する
<REFERENCE GUID="{00020813-0000-0000-C000-000000000046}"/>
<script language="VBScript">
:
:
</Script>
</Job>
IEのツール->インターネットオプション->全般 で インターネット一時ファイルの削除 Cookieの削除 履歴のクリアを VBSでやりたいのですが、ご存知の方いましたら教えてください
>>970 ノシ ヤッテルヨw
自分でどこまで調べてて,どこが分からないの?
973 :
名無し~3.EXE :2005/09/07(水) 15:13:41 ID:7y3GWFmG
974 :
970 :2005/09/07(水) 18:22:02 ID:AX1UOlAl
>>971-973 レス、ありがとうございます。
履歴のクリアは、保存する日数0日で対応することにしました
インターネット一時ファイルの削除とCookieの削除は
973 さんのサンプルを参考して以下のようにしました。
Option Explicit
DIM WshShell, FS, TmpIePath
Set WshShell = CreateObject("WScript.Shell")
Set FS = CreateObject("Scripting.FileSystemObject")
TmpIePath = WshShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache")
FS.DeleteFile(TmpIePath+"\"+"*.*")
これで消えている感じなので
973さん、どうもありがとうぞざいました。
>>975 インターネットゾーンで無効にして
マイコンピュータゾーンでだけ有効のままにしとけばいいんじゃ?
>>976 IE.Navigate("about:blank"); じゃなく、
なんらかのローカルファイルを開くようにすればいいのか。
>>977 ああそか。
うちはabout:blankを信頼済みサイトに入れてたんで
動いてたんでした
HTAアプリでウィンドウ位置やウィンドウサイズを保存するために JScriptでINIファイルの読み書きをするオブジェクトというかクラスというかを 書いたので貼ってみる。
<<< INIFIL~2.ZIP for MS-DOS ( use shift_jis ish ) [ 24 lines ] >>> !!!;!&9Q!5"XRo/g1c;eEV[,cJ"Z!'"HDm_CXu!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-:>! !!!;!&9Q!5"XRo/g1c;eEV[,cJ"Z!'"HDm_CXu!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-:>! !!!;!&9Q!5"XRo/g1c;eEV[,cJ"Z!'"HDm_CXu!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-:>! %_ルVャ@紂@A湖o\;}ホ-i6S@^V曖K@@@H@@icd,ホサ髞ョxタソ奈リ)fロ:|gシ「ニ閑ォ厠ワ。ASNs@ts擱、LlBァ &「テワヌVゥi?3オ.lソオ7n屬邉裼ォヤ」Jn啣ケオ8-喊6B-^?Eア^m]キ晒与9ネ鮟ーgゥqVルqエヌ^儷8|2ア鉾コO恂- '朽x埀J゙ンu:ムゥム;」NBマ面lィu恣ッョカ妬f6ー*ナ・Uミ-Uア把錚縁ナ_Gキオ」驅w淕9ナ甜蝠ンd*Yj悽ヲォッ<谷 )/ノラ=ツnm廉ユ_dレMネュ針ノwセトyj2L:ニJ蒄m征ニ朔k7ー;ク<茆鞘>鍔狙キaァ観a_=菱Beミ.[奈@0ャW厳ルケ +2u4ヨ;1ウョヒ。濘ャ裂3E・H浅L2知4A]イヌ」lv人{ヨ幅堋ヤソoaフチ)尼、レjtシ鑠MgvエミoリL氾茱uSチ[+曠m ,+ア@Oナ'ラッCR30盂P)冕槿N慳ニォuYネ剏c\エ)サウryZヤPcヨ_X后オ幇t歎ム^コイ15(エ酷Q@ナlコフキ貘ホョル゙カ ?ユモ寶ネコ4C:イtミ隕ェ薛キ7aロミ」宴[秘I]KTBW@唱ェ渣ヌァ[-ャホ1ヤRコ_1Hメ決鎭挙ツPwW:・6]シ換C3ッW3a /ワア杞jサfニOカ狐・(sxフ>袮ホD鰺7鰓」(撼サ泯:[ャmミ利ソラpK、R摩K訥X0アレb@vコェR8s杪Y栖ソ鎰'=ョ慊 2チ84eA椣.0ロセ2Kトhpロ」Wkレlャ螻ナ1Vォ2逮谷嵌d悟bT螂l)o,aウロ'ケl芯ャ伍Tスシサ}ェモvココャソLセ裝チ\エ 4Oサ迹ミリ皮ハレ永タアセンサ聟Sツ。祀\「ヲフiRpx薑週j帽TTレ虚x」oノ.?ラp粗|1Qヨ9「リア-モiュ゚/ョ。恕ヨ驚礇 5UチoUUCィFJゥNdPナマェtォ玳イォウツ_ァロロヨK賜竄古・冰焉スキタワB,ン(E桀馬M匚5箕x>彜_ホ.ヲ。企+祉0ノ] 6蔽hLAQT5b「N~dxンi゚フ2PロケC]Fj報シV甥Q'チ・ッ啄Y|1嗾'<hx1z歙ソッゥ債O呉ェ|リメュ]iJミP/ッmヲM杯 7鏤KヲOテ喞屎ソラナ髦塵oqFRa藩5ュオxミyエ歳痞yl7Sマ,7wツ-緒ホ・」sテス}[ワゥ_モ編チeカQ励アーiラ昭t譎_ 8-ァWJJ鰾Nァ捍ユp3S}O「。0gG笆ソK門゚YPヒ皇Ae゙Mホ(チシ閼ソ桎オ犇瓢オセナ^\4・nシ+シ4j8]kスsNz}稔Uy 9婦z腿nxク稠R>殼溷螳\ロ肺Fサ鬟イH1ヤ詈VサwRヘ羃ォヌh2ョ庇氛毅SRルヒ;シcSBSu:Bリ_^@叩@@テ篁.'コ :メ2@6愁儖@@゙N@EV曄@@@@@V曄@@H@@@@@@中/ノヲsロ瀋ェ榎貽ケサ棹|ォ@」@@廛@@@A@ソ@@n・@@@@,。ハ ;}ノ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@「ケイ 。++qgSi喬oRチネH猾皃賑;e・・HイznスCマ6ウ/Y,>ア8Faスツ」ィYkyyイオサ^o゚dョmフ5テ/N7レG1qVウ譴イョ~yノ' 」~スャホト処ャzル処:R(TストI鑁ホゥsルoエ+M膏腮gト゚ロ1弯n。ィ^ハ膂;ィXm=^~クツ拂plgサ淘b|_オペc(g}チLミ --- INIFIL~2.ZIP (24/24) ---
>>979 のHTAアプリって言い方おかしかったか。
>>980 メモ帳にコピペして、行末の半角スペースと改行を削除して、拡張子をzip に変えて
保存してみたけど、解凍できなかったよ。
983 :
982 :2005/09/10(土) 12:36:25 ID:zxyIEeaG
ごめん。解凍できました。 メモ帳にコピペして、行末の半角スペースを削除して、拡張子をish に変えて 保存。そのあと、Archwayなどのish対応ソフトで解凍すると、zipファイル INIFIL~2.ZIP が生成されてた。
普通、見た瞬間に気付かないか?
パソコン通信時代を知らない世代は難しいんじゃないか?
1行目に書いてあるだろ
ishを初めて知ったぜ。
lzhかと最初思った