100 :
名無し~3.EXE :
02/06/27 19:27
たくさん釣れてるにゃ。 今日はごちそうにゃ。
(゚Д゚;≡;゚д゚)
盛り上がってまいりますた!
しまたぁー!釣り職人だったか。吊られたよ。もうだめポ。
釣れた【つれた】[名] 自分の当てずっぽうレスを大勢に突っ込まれ&馬鹿にされた時に厨房が悔し紛れに言う単なる逃げ口上の最後っ屁。その後放置される。
>>106 当てずっぽうかにゃ?
今回の場合、文体じゃにゃいかにゃ?
でも、大漁だったからいいにゃ。
108 :
名無し~3.EXE :02/06/27 21:13
109 :
名無し~3.EXE :02/06/27 21:14
110 :
名無し~3.EXE :02/06/27 21:42
Windowsの凋落と共に消え去る言語を覚える漢達に敬礼ッ!!
111 :
名無し~3.EXE :02/06/27 21:56
今後は、全員、語尾にニャなどを付けるニャ。 義務にゃ。 指定したURLのファイルを取ってきて ローカルHDDにコピーするという 単純なスクリプトを書こうとして 挫折したにゃ。 どうしたらいいにょ? とかいう感じでよろしくにぇ。
112 :
名無し~3.EXE :02/06/27 22:22
>111 キモイにゃ。Σ(゚Д゚)
114 :
名無し~3.EXE :02/06/28 12:29
今後は、全員、語尾にニャなどを付けるりゅん。 義務りゅん。 指定したURLのファイルを取ってきて ローカルHDDにコピーするという 単純なスクリプトを書こうとして 挫折したりゅん。 どうしたらいいりゅん? とかいう感じでよろしくりゅん。 時代は仙台りゅん。
116 :
名無し~3.EXE :02/06/28 16:31
今後は、全員、語尾にぴょんなどを付けるぴょん。 義務ぴょん。 入力した単語で複数の検索エンジンで検索して、 結果を検索エンジンごとのフレームに分けて表示するという 単純なスクリプトを書こうとして 挫折したぴょん。 どうしたらいいぴょん? とかいう感じでよろしくぴょん。
118 :
名無し~3.EXE :02/06/28 18:25
119 :
<丶`∀´> :02/06/28 18:49
今後は、全員、語尾にニダなどを付けるニダ。 義務ニダ。 入力した単語で複数の検索エンジンで検索して、 結果を検索エンジンごとのフレームに分けて表示するという 単純なスクリプトを書こうとして 挫折したニダ。 どうしたらいいニダ? とかいう感じでよろしくニダ。
120 :
名無し~3.EXE :02/06/28 18:50
IEのコンテキストメニューで「Bookshelfで単語を検索」って可能ですか? 当方2.0しか持ってないんです。 秀丸のマクロでそのようなものがあり非常に重宝してるんですが。
>>85 ご紹介ありがd
MKEditorでも使えるようにしてみました。
>84 インストーラのバイナリ解析しないと無理 >88 ・期待通りのこと WSHと.NET Frameworkの統合版 言語はC#, JScript.NET, J#, VB.NET等。 変数が厳密に型付けされている。 ・期待はずれのこと まだ英語ベータ版のみで現在配布していない。 開発中のこと。 >90 なんで? >91 あぁ、やっぱり。AppActivateはProcessIDも引数に取れます。 ProcessIDならWMIで取得できるし、似たタイトルでSendkeys誤爆しないので確実といった意味ですよ。 WMIを使わないならば、11さんの言ったとおり返り値判別ですけど。 >110 言語なんて頭が固くなければ何種類かは入るし。 >113 (・∀・)イイ! >123 すいませんでした。その目的でTeraPadのインストールまではしたんだけどチェック漏れました。 これ以上は言い訳だから書かないけど。 それとウチDanaなんだけど、…ダメ?
いつからここは小学校になったのだ? >111>114 windowをIEのインスタンスとおくと、 window.document.body.parentElement.outerHTML をテキストストリームに書く。 >117>119 どこで挫折したのかを書かないと答えられない。 おそらく検索結果はGETで出力するだろうから、locationURLを取得して、 WSHで作ったframeに押し込んでやればいいのではないかな。 >122 "BookShelfがインスコされたパス\bs98jl.exe" -h -d "検索対象文字" をシェル実行。 あと、わからないことがあったら放課後、職員室にくるように。
おまえら全員職員室に正座だ!
>>124 Dana落としてみました。普通のメッセージではダメみたいです。
ソースは当然公開されてないし、技術情報みたいのもないようなので、
どうやら無理っぽいです。スイマセン・・・。
答える都合上まとめて括ってしまったが、それは正座ものの質問ではないです。 気を悪くされたらスマソ。 >127 あ、試みて頂いてくれてありがとうございます。 その通りですね。状況が状況なので強いる気は全くないです。 #2chブラウザによっては名前数字、E-mail省略しないにするとこの場の該当ログを拾ってくれることに気がついて、 余計なことを言い放ってしまったと鬱。
↑上のほうは122さんへのレスね。
>>124 VC++やエスプレッソを使えばできますにゃ。
131 :
名無し~3.EXE :02/07/01 16:25
134 :
名無し~3.EXE :02/07/01 17:05
136 :
名無し~3.EXE :02/07/01 17:09
>>135 だからキモイっつってんだろおおおおおおおおうおおおあああああ!!!!!!!
>136 ごめんにゃさい
今年35ですにゃ
つーか、なんなの?おまえら
にゃんこ大好きだよ
148 :
名無し~3.EXE :02/07/01 21:16
149 :
名無し~3.EXE :02/07/01 21:19
wmiの使い方が詳しく載ってるところ教えて。 どういうメソッドとかあるのかさっぱり分からん。
150 :
名無し~3.EXE :02/07/01 21:27
き・も・い
きもくないにゃん
>>にゃんこ 荒らすのは止めてくれ。あなたが普通の言葉で書き込めば済むこと。
>>156 おお、こりゃなかなかいい感じ。
どもども。
>>152 アラーシが途中から戦法変えてきてんの気付けよ。
煽られんなっつーの。
本物は3回しか書き込んでないっつーの。
>>158 おいおい、責任転嫁かよ。いいわけレスでいちいちageないでくれ。
反応してる奴が一番ウサイにゅ
というか本物が一番うざい
メール欄参照。
>>156 ConnectServerメソッドの引数ですが、Rubyを256倍使うための本p.206-207に詳しい
解説があります。
もちろんSDKにはリファレンスがあると思いますけど、日本語なのがありがたいですね。
SDKに含まれるツール群も、オブジェクトモデル理解に役立つと思います。
今インストールしてないので詳しくは忘れましたけど、なんとかオブジェクトブラウザとかいう
名前のツールですね。現在のインスタンスを読み込んでプロパティの値を調べたりできます。
SDK今どこで落とせるんだろう…。
MSDN Web版は、しょっちゅうURLが変わって困るなぁ。
>>159 この場合、「責任転嫁」という言葉は適切じゃないだろ・・・
よーく文章を読んでみろ。
これじゃ知っている言葉を並べただけのヴァカだぞ。
>>161 負け犬が吠えてますな・・・
煽れないのがそんなに悔しいか?
(・∀・)カエレ!!
164 :
にゃんこ ◆NYA9/moE :02/07/02 10:19
偽物が場を盛り上げてる間に トリップつけてみましたにゃん
にゃんで1000を目指しますか?
,,,,.,.,,,, ミ`Д´ミ <ほしゅ """"
tes
170 :
前スレ680 :02/07/18 06:45
ぐは!便利よ、これ。ついさっきwsh始めました。で、私にどうしろと?
sendkeys を使って 無変換 キーを送りたいのだけど、 無変換 ってどう表せば良いの?
29じゃないの?
>173 >174 サンクス!
dat落ちしたかと思った…。 >171 まずは、自動実行に関する汎用のアイデアがあったらカキコしてください。 って言うかお願い。 >172 2バイト文字、NFER、XFERも同様に送れない。 なので、>174さんのURLに書いてあるプログラムかなんかで送るのが常道か。 と、思ったけど送れるの? WshShell.SendKeys 29 WshShell.SendKeys "{29}" WshShell.SendKeys "29" 全部ダメだったけど???
前スレHTML化キタ━(゚∀゚)━!!!!
>>176 WshShell.SendKeys "{NONCONVERT}"
でもダメですなあ。
WSHOM.OCXを覗いた限りでは定義されてるっぽいんだが、
ヘルプに載ってないってことは使えないってことか・・・。(-"-
180 :
名無し~3.EXE :02/07/22 13:10
>178 教えて、キー定義はどこに書いてあるの? オブジェクトブラウザでは見えなかったYO。
>>180 バイナリエディタ
私のWSHOM.OCX(5.6.0.6626)では、0xCBA0から。
ただし、
>>178 でも言ってるとおり「それっぽい」ってだけなんで、
この部分がSendKeysの定義であるかは保証しない。
182 :
名無し~3.EXE :02/07/23 21:59
age
分かった。ありがとう。ウチのでも同じところにあった。 どっから参照しているのかとか 区切り子であるはずのnull文字の個数の規則性がつかめないので 少し残念だがここまでであきらめるしかない。
>>183 普通に4バイトごとになってると思うけど・・・。>nullの個数
185 :
名無し~3.EXE :02/07/24 11:00
WSH(VBScript) で外部サーバのデータベース(Oracle)に 接続したいのですが、どうすればいいのでしょうか? ほかのサイト見ても、 サーバの指定方法まではなかったので。 おねがいします
>>185 ADO使ってODBCデータソースを指定すればそのまま行けるんでわ?
187 :
名無し~3.EXE :02/07/24 15:41
>186 具体的なやり方を教えていただけますか? 厨でスマソ
>187 こういうこと。 VBSに限らないで、VBでも一緒だからそれを含めて調べたほうがいいな。 環境がなく未確認だがADO2.1以上でいけるはず。 Const adOpenKeyset = 1 Const adLockOptimistic = 3 Set cnn = Wscript.CreateObject("ADODB.Connection") Set rec = WScript.CreateObject("ADODB.Recordset") ' Oracleとの接続を確立する cnn.Open "Provider=MSDAORA;" & _ "Data Source=NT;", "scott", "tiger" ' SQLステートメントを指定してレコードセットを作成する rec.Open "select * from EMP", cnn, _ adOpenKeyset, adLockOptimistic
↑元ソース(VB)を参考に示しておく。
ttp://homepage2.nifty.com/inform/vbdb/ado_oracle.htm ほとんど変わらない。
違いはWSHの制限として明文化されたことだけです。
>183
多分180と同人物だよね。
趣味ならいいんだけど、コレまでの経緯で定義文字は参照しないこともあるっていう
結論が出ているのだからそれ以上(180-183の間)は時間の無駄としか思えない。
そこまでするのならWScript.exeを逆汗した方がイイのでは?
…とか提案しておいて言えた義理じゃないが、自分だったらやりたくねぇ(w
>>188 - 189
なるほど、VB と同じやりかたでいいんですか。
どうもありがとうございました m(__)m
191 :
名無し~3.EXE :02/07/25 02:16
以下のスクリプトがうまく動かないのですが、原因わかる方教えて下さい。 ウチの環境では「8」、「9」が返されるべきところで「0」が返って来るんだが...。 Win98SE/WSH5.6 var re = /hoge(\d+)\.txt/i; var i; for (i = 1; i < 10; i++) { WScript.Echo(getNum('hoge0' + i + '.txt')); } function getNum(Path) { if (Path.match(re) != null) return parseInt(RegExp.$1); return null; }
すまん、解決した。よってレス無用。
193 :
名無し~3.EXE :02/07/25 03:50
>191-192 レス無用と書かれてもなぁ。 正規表現の一般的な罠なんだから、解決方法書こうよ。お願い。 冒頭コレにすれば取得したい範囲では問題はなくなる。 var re = /hoge0*(\d+).txt/i; いまさら8進法も使うこともなさそうなんだが、メタキャラクタマッチよりも後回しで優先順だけ高い。
191は聞くだけ聞いて自分は貢献しようとしない厨ですから
>>194 >>195 おお、スマンスマン。俺の解決法は、
parseInt(RegExp.$1)
↓
parseInt(RegExp.$1, 10)
197 :
名無し~3.EXE :02/07/30 01:32
すいません、さっきはじめたばかりの初心者なんですが、 「C:\WINDOWS\Temp\*.tmp」を消そうとして以下をつくったのですが、 そんなファイルは存在しませんといわれてしまいました。 こういうときどうするのがスマートなんでしょうか? Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile = objFS.GetFile("C:\WINDOWS\Temp\*.tmp") objFile.Delete True
>>197 GetFileメソッドの引数にはワイルドカード使えないんじゃ・・・。
Const TemporaryFolder = 2
Set Fs = CreateObject("Scripting.FileSystemObject")
Fs.DeleteFile Fs.GetSpecialFolder(TemporaryFolder).Path & "\*.tmp", True
>>198 ありがとうございます。
ただ、いただいたコードを実行したところ
行:3
文字:1
エラー:書き込みできません。
コード:800A0046
と怒られてしまいました。。。
なお、WinXP-Proで、いつもAdminitaratorで作業しています。
>>199 多分、*.tmpファイルの中にどっかのプロセスが現在使用してる
ファイルが含まれてるんだろう。
例えば、HTMLHelpを開いてたりするとそうなる。
エラーは一応、On Error Resume Nextを入れれば回避できる。
ただこれでは、エラーが出た時点で、メッセージを出さずに削除処理を
中止して次へ進むだけなので、使用中のファイルを除いて削除
したいのなら、TEMPフォルダのFilesコレクションを、For Eachで回して、
一つづつ削除するのがいいのでは。
201 :
名無し~3.EXE :02/08/09 20:43
このスレ イイ
人居ます?質問したいんだけど・・・。
あまりいません。
>>202 一応みてる。
質問来たら、答える気になればきっと答える。
点呼3 全く居ないわけじゃない様子。
206 :
11 :02/08/14 03:38 ID:AxCXFV0k
点呼4
207 :
202 :02/08/14 11:18 ID:t/R3SZGG
では よろしくお願いします。 '---ScriptRun.vbs------------------------------ Set TP = CreateObject("DoMacro.TeraPad") FilePath = TP.FilePath Dim WSHShell Set WSHShell = WScript.CreateObject("WScript.Shell") WSHShell.Run "FilePath" Set TP = Nothing DoMacroなんですが 編集中のVBS・JSを実行したいんですよ。 勘だけでやっていたので 詰まってしまいました。勉強してこよ・・・。
>>207 TeraPadにマクロ機能もたせるDoMacro使ってないので
よくわかんないけど、一応。
FilePathはまずいんじゃないか?
FP = TP.FilePath
とでもしてみるとか。
あとはwsript.exeの引数に編集中のファイルのパスを指定する形で起動とか
実験するのメンドイので、適当な答えでスマソ
# 埋もれてるスレなので
# 質問の時くらいはageても良いかもとか思う。
# 強制IDになったから荒らしも少しは減るだろうし。
連続スマソ TeraPadで単に編集中のvbs/jsファイルを実行するだけなら、 WSHにこだわらなくても、 ツールに 実行ファイル wscript.exe コマンドラインパラメータ "%f" %* 上書き保存する を登録して使うとかでもいいんでない?
210 :
202 :02/08/14 19:09 ID:t/R3SZGG
レスありがとうございます。
>>208 FilePathをFPにしても 無理みたいですね・・・。
エラー内容は『行:8 文字:1 エラー:指定されたファイルが見つかりません。』
ってなってます。
>>209 あー そういう方法もあるんですか・・・
DoMacroでやる事にこだわりすぎていました(笑)
『%*』はなくてもいいみたいですね。
入れた方が良いのかな?
>>207 8行目
WSHShell.Run "FilePath"
"で括る必要はないだろ。
ついでに俺の使ってるスクリプト var fso = new ActiveXObject('Scripting.FileSystemObject'); var shl = new ActiveXObject('WScript.Shell'); var tp = new ActiveXObject('DoMacro.TeraPad'); var arg = WScript.Arguments; var tmp = fso.GetSpecialFolder(2).Path + '\\wshtmp.'; var ext, prm = ''; if (arg.length > 0) { ext = fso.GetExtensionName(arg(0)).toLowerCase(); if (arg.length > 1) { prm = arg(1); } if (fso.FileExists(arg(0)) && (WScript.ScriptFullName != arg(0)) && ((ext == 'js') || (ext == 'vbs'))) { try { fso.DeleteFile(tmp + '*'); } catch(e) { } var tf = fso.CreateTextFile(tmp + ext); tf.Write(tp.GetAllText()); tf.Close(); if (prm != '/c') { shl.Run('wscript ' + tmp + ext); } else { shl.Run('COMMAND /K cscript ' + tmp + ext); } } }
213 :
202 :02/08/15 12:41 ID:xTVZ2osb
>>211 ホントですね。
括りを外したら きちんと動作しました。
スペースが入りのフォルダ対策に括っておいたんですけど 入らないんですね。
# スペース入りのフォルダなんて作りませんが 一応。
>212 これいいなぁ。 GetAllTextメソッドをGetSelTextに変えたのも作っておいて選択範囲を実行なんてのも 問題点の絞込みに役立ちますね。 >213 そういう意味なら """" & FilePath & """" じゃないの?
215 :
211 :02/08/15 23:43 ID:OHF1rEI2
>>214 どもです。さすがに
>>212 のままではチトあれなんで、
ご意見を踏まえつつ、VBSで書き直し。
Dim Fso, Shl, Tp, Arg, Temp, tmp, ext
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Shl = CreateObject("WScript.Shell")
Set Tp = CreateObject("DoMacro.TeraPad")
Set Arg = WScript.Arguments
tmp = Fso.GetSpecialFolder(2).Path & "\wshtmp."
If Arg.Count > 0 Then
ext = LCase(Fso.GetExtensionName(Arg(0)))
If Fso.FileExists(Arg(0)) And ((ext = "js") Or (ext = "vbs")) Then
On Error Resume Next
Fso.DeleteFile(tmp & "*")
Set Temp = Fso.CreateTextFile(tmp & ext)
If Tp.GetSelStart = Tp.GetSelEnd Then
Temp.Write Tp.GetAllText
Else
Temp.Write Tp.GetSelText
End If
Temp.Close
If ArgExists("/c") Then
Shl.Run "COMMAND /K cscript " & tmp & ext
Else
Shl.Run "wscript " & tmp & ext
End If
End If
End If
Function ArgExists(Prm)
Dim i
ArgExists = False
For i = 1 To Arg.Count - 1
If Arg(i) = Prm Then
ArgExists = True
Exit For
End If
Next
End Function
216 :
名無し~3.EXE :02/08/16 05:15 ID:Tm/LIADi
Hourglass・・・何でダメなんだろう こんな初歩的すぎるような質問じゃ怒られるかな。 大した使い方はしてません。 いくつかのファイルをあっちのマシンからからこっちのマシンににコピーするだけのvbsなんですが、ものがデカいのでちょっと処理に時間がかかる。 いまはマシンが処理中だぞと、だから余計な手出しはするなと(みんな必ずマウ スをカチカチやってる)、砂時計を出したいんです。 MousePointer = "Hourglass" ・・・処理・・・ MousePointer = "Default" Msgbox "コピー完了" web上のどこだったかお役立ちサイトみたいなところで拾ってきた書き方なんで すが、これじゃダメみたいです。
>216 その質問は初歩でなくとても高度なものです。 なのでコピー中の表示だったら、ShellオブジェクトのCopyHereメソッドを使ってダイアログを表示させ注意を促すのが得策かも。 VBと違って、Screenオブジェクトって無いんスよ。だから上記のプロパティも書き方もダメ、と。 とかいってAPI叩いてどうにかなんないかなとか試していたのは秘密。 Dim Shell, oFolder Set Shell = WScript.CreateObject("Shell.Application") Dim sFolder,sFile sFolder="C:\WinNT\Temp" sFile="D:\Documents and Settings\hogehoge\Local Settings\Temp\bigfile.tmp" Set oFolder=Shell.NameSpace(sFolder) oFolder.CopyHere sFile な感じで。
( ゚Д゚)・・・MousePointerってなんだろう? って思ってたのは秘密にしておいて良いでつか? それはそうと、スクリプト処理中に手を出して欲しくない時は、 MsgBoxをループさせてます。 しかも画面一杯に近い大きさのMsgBox( ゚∀゚)y--┘~~~
「このフォルダのカスタマイズ」 って一体どうなっちゃうんだろう。 >218 彼はVBでいうところの Screen.MousePointer = Hourglass がやりたかったのだと思われ。 できたら応用は利くと思うんだが、私の方はちょっとあきらめムード…。 最大化ダイアログそれいいなぁ、アイデア頂きます。 こんな感じで。 Dim window, txtDisp, i Set window = WScript.CreateObject("InternetExplorer.Application", "IE_") window.Navigate2 "about:blank" With window.document.parentWindow .document.write "<html><head><style>body{height:100%;font-family:'MS ゴシック';text-align:center;font-size:60;" & _ "background-color:menu;overflow:hidden;border-style:none;border-width:1pt;cursor:wait;}" & _ "</style><head><body><div id='txtDisp'></div></body></html>" .moveTo 0,0 .resizeTo .screen.availWidth,.screen.availHeight .document.title = "作業中" Set txtDisp = .document.getElementById("txtDisp") txtDisp.innerText = "作業中だ、邪魔するなYO" End With window.toolbar = False window.statusbar = False window.menubar = False window.Visible = True WScript.Sleep 5000 ' ここで時間のかかる作業 window.Quit Set window = Nothing
220 :
216 :02/08/18 12:25 ID:WfqKi9Zo
>>217 レス感謝します
プログレスバー(っていうんでしたっけ)簡単に出せるんですね
ちょっとびっくり
↓みたいな感じでやってて、プログレスバーを出すのは無理だと
思ったので、砂時計を考えたんです。
Dim source, destination, fs
Set fs = CreateObject("scripting.FileSystemObject")
source = ("-----")
destination = ("-----")
fs.CopyFile source, destination, True
>>219 Screen.MousePointer = Hourglass
そう、たしか原文はそんな感じでした。
でも何だかエラーで怒られ、ためしにScreenを消してみたらエラーが出
なくなった。
これでOKかと思ったら、けっきょく何もしてくれなかった、と。
スミマセン
おバカな質問で流れを乱してしまいました
プログレスバーを出せるというよりも、Shell.Applicationにお任せすると、 あのダイアログが勝手に出ると思ったほうがいいかも。 VBSで利用できるグラフィカルなインターフェイスはメッセージボックスと インプットボックスだけ。
wshを使って右クリックを表示させることは可能ですか?
224 :
名無し~3.EXE :02/08/26 21:54 ID:Auq8je+P
>>223 右クリックを表示???
質問ならばageれ。
WScript.Echo "右クリック"
226 :
名無し~3.EXE :02/08/27 13:02 ID:hzdkbXyS
ブラウザ上で、表示されているHTMLの操作(例えば文字や背景の色を変える、 画像を消したり、拡大する)ということは可能でしょうか? よろしくお願いします。
228 :
名無し~3.EXE :02/08/27 18:57 ID:NEnobPxp
ActivePerl 入れて、 eg\Windows Script Components\First.wsc を右クリック->登録でよくない?
>223 微妙にウケタ。 まぁマジに返すと、自動実行と自動操縦はちっと違うんですがねー。 >226 IEならばDOMレベル、Shellレベル双方に可能。227さんの言った通り。 レベル的にはもう一つあるような感じだがなし崩しでやっているのでようわからんのですわ。 サンプル挙げとく。開いているGoogleを黒くします。 Set oShell = WScript.CreateObject("Shell.Application") For Each window In oShell.Windows Set oDocument=window.document If TypeName(oDocument)="HTMLDocument" Then If oDocument.title="Google" Then oDocument.body.style.backgroundColor = "black" End If Next >228 自分はPerlScriptは逃げました。 だったらPerlを使った方がコミュニティも確立しているし、文法的には変わらないけど 荒野を好きこのんで迷走する感じで。 モジュールが使えたのはちと感動しましたが。 というわけで力になれなくてスマソ。
231 :
名無し~3.EXE :02/08/31 23:04 ID:COirDX1R
アクティブなウィンドウ(タイトル?)を取得し、 それが xyzzy なら Ctrl+c Ctrl+f 、MDIBrowser ならAlt+↑といった具合に、 アプリケーションごとに異なるキーを Sendkeys で送るスクリプトを作り、 マウスのホイールボタンを押した時に呼び出して使おうかと思っているのですが、 Sendkeys 以外は、さっぱりわかりません! アクティブなウィンドウの取得と、その比較って、 JScript では、どのようにすれば良いですか?
>>231 > マウスのホイールボタンを押した時
ホイールボタンのクリックをどうやって判断してるんですか?
マウスのユーティリティーにそういう機能があるんじゃないの? 単なる推測だけど。
変な時間に目が覚めた。
>>231 JScriptでは、うまくいかんかったのでVBScriptで。
とりあえず、タイトル取得まで。あとはがんばれ。
Dim Dc1, Dc2, hWnd, cap, l
Set Dc1 = CreateObject("DynamicWrapper")
Set Dc2 = CreateObject("DynamicWrapper")
Dc1.Register "user32.dll", "GetForegroundWindow", "f=s", "r=h"
Dc2.Register "user32.dll", "GetWindowTextA", "i=hrl", "f=s", "r=l"
hWnd = Dc1.GetForegroundWindow
if hWnd <> 0 Then
cap = String(256, 0)
l = Dc2.GetWindowTextA(hWnd, cap, 255)
if l > 0 Then MsgBox cap
End If
236 :
231 :02/09/01 07:53 ID:9F64xAy5
おはようございます。
>>232 ほぼ233さんのいうとおりで、
ClockLauncher というソフトを常駐させていて、
そのソフトにホイールクリックを監視して
任意のプログラムを実行する機能があるのです。
前スレ680さん、朝早くから有り難うございます。
ここまで教えていただければ後は自分で補えるかもと思い
早速実行してみたのですが、
ActiveX コンポーネントはオブジェクトを作成できません。:'DynamicWrapper'
というエラーが Set DC1 の行で発生してしまうのです。
環境に問題があるのでしょうか?
環境は、
Win2kSP3
wsh 5.6
IE 5.5SP2
です。
というか、Intelli Mouse互換マウス使ってるんなら、 マウスドライバでアプリごとに、各ボタンの挙動を指定できるから、 それでやれば良いんじゃないの? とか、思った。
239 :
231 :02/09/01 20:06 ID:utY+/SER
>>237 >>3 のリンクから dynawrapNt.zip をダウソしたのですが、
これってどうすれば利用できるようになるのでしょうか?
240 :
231 :02/09/01 20:37 ID:utY+/SER
MAKE.BATを実行すれば良かったんですね。スマソ
>>236 のエラーは出なくなったのですが、
今度はDc2.Registerの行で、
プロシージャの呼び出し、または引数が不正ですというエラーが出てしまうのです。
どうすれば良いでしょうか?
>>240 もしかして、環境依存なのかも・・・。
ウチの環境では
>>234 をコピペするだけで動くけど。
Win98SE
WSH 5.6
IE 5.01sp2
242 :
231 :02/09/01 23:59 ID:utY+/SER
>>241 そうですか・・・。
私にはエラーが出る原因がわからないので、
タイトル取得と比較はCで作成してしまいました。
ただ、CでSendkeysを再現しようとすると非常に面倒なので、
そこだけJScriptを呼び出すという、非常に不恰好な仕上がりになりました。
ありがとうございました。
>>242 終了した話題を蒸し返してすいませんが、エラーの原因と思われるもの
が分かりました。
DynaCallのNT版のソースや、
>>3 のページを見た限り、
NT版では引数の型指定で r (参照)が定義されてないので、
Dc2.Registerの行の"i=hrl"がエラーになるみたい。
NT版は参照渡しが出来ないのだろうか?
244 :
:02/09/05 19:15 ID:qqlWL1jz
19に書き込んでいる方と同じような質問なんですが、 submitボタンを自動でクリックするする方法がわかりません。 例えば、 >34の google検索のボタンを自動で押すのではなく I'm Feeling Luckey のほうのボタンを押すためには window.document.f.submit() をどう書き換えれば良いのでしょうか。
245 :
244 :02/09/05 19:17 ID:qqlWL1jz
すみません。 >34 × >39 ○
246 :
244 :02/09/05 19:27 ID:qqlWL1jz
すみません。もうひとつ質問させてください。 例えば、 <select name="KAZU"> <option value="">▼数を選択してください</option> <option>1</option><option>2</option><option>3</option> </select> のように、<option>にvalueが定義されていない場合、 自動的に選択するにはどうすれば良いのでしょうか。
247 :
244 :02/09/06 12:27 ID:I9u5zhZr
244の方は何とか自分でわかりました。 246誰か教えてください。
window.document.all.KAZU.selectedIndex = 1 では?
249 :
244 :02/09/06 13:43 ID:I9u5zhZr
ありがとう。 selectedIndexの部分がわかりませんでした。
250 :
名無し~3.EXE :02/09/06 23:31 ID:xN6oAzsE
あの、がいしゅつかもしれませんが。
JScriptxで、URLのラベル(?)を見て処理したいのですが、
<a href="
http://www.where.to.go ">Label</a>
みたいになっていて、この</a>の前のLabelという文字列はどうやったら取得できるでしょうか。
この文字列を比較して、条件を満たしたらその前のURLにジャンプしたいんです。
ぶしつけな質問ですみません。よろしくお願いします。
domれ。
文字列中で " を扱うにはどうしたらいいですか?
>243
NT系もAnsiでいいんでしたっけ?半可通発言ですまんです。
APIいじりは面白いんですが、時間を取られるのが、一番つらいです。
強制終了繰返して不安定→再起動とか。
なので、うまくいくラッパーの関数、クラスとか持ち寄ってWSH版Win32Api.txtみたいなのを
作っていけないかなぁ、と妄想を垂れ流してみる。
>250
ttp://www.openspc2.org/html_v3/ ttp://www.microsoft.com/japan/developer/library/jpisdk/dhtml/references/dhtmlrefs.htm ここら辺をじっくり読む事をお勧めする。
簡単なサンプルを示す。今起動しているIEのアンカー全てを列記します。
Set oTS = WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile("anchorlist.txt", 2, True)
Set oShell = WScript.CreateObject("Shell.Application")
For Each oWindow In oShell.Windows
Set document = oWindow.document
'MsgBox TypeName(document)
If TypeName(document)="HTMLDocument" Then
For Each oAnchor In document.all.tags("A")
oTS.Write oAnchor.href & "," & oAnchor.innerText & vbNewLine
Next
End If
Next
oTS.Close
255 :
250 :02/09/07 10:35 ID:VTrRLQIF
>>254 innerTextですね!できました。
リンクも大変参考になります。
どうもありがとうございました。
タブブラウザのスクリプト対応からか、DHTML関係の質問ばっかりに見えるんだけど、 スレ違いではないのかな。 ヘタすると乗っ取られそうな気が。
>>252 VBScriptなら "" (ダブルクォーテーション2つ)
258 :
名無し~3.EXE :02/09/07 23:52 ID:hXONB4T8
スレテンプレートの外部コンポーネント
BASP21 - メール、ファイルエンコード、文字コード変換、FTP/HTTPアップ、その他
ttp://www.hi-ho.ne.jp/babaq/basp21.html を使ってメールの送信を行おうとしています。
その機能自体は、なんとか実装できそうなのですが
ひとつ疑問があります。
メールの送信時にパスワードって不要なんですか?
パスワードの設定をしないでメールが送れてる
ようなのですが・・・???
当方、excelの延長でちょっとVBAがわかる程度のスキルです。
ちょっと気になるので
わかるかたお答えお願いします。
普通SMTPにはパスワードが設定されてないから大丈夫なんじゃないの?
260 :
名無し~3.EXE :02/09/08 00:00 ID:29xq9xoD
>>259 解答ありがとうございます。
すると
SMTPってのは、どこのプロバイダのものを使ってもいいってことですか?
>>258 ん?メールの送信にユーザーは必要無いと思うけど。
WSHとは関係無いが。
別に差出人のメールアドレスが存在しないアドレスでもメールは出せるよね。
サーバーのほうで制限しない限り。
262 :
名無し~3.EXE :02/09/08 00:11 ID:29xq9xoD
>>261 ただ単に、メールを送るのにもなんらかの制限があるもんだと
思い込んでいました。
ようは出す分には、そこら辺の郵便ポストみたいに
気軽に誰でも出せるけど
郵便受けには鍵が掛かっているってイメージですね。
勉強になりました。ありがとうございました。
**
スレ汚し失礼しました
>>郵便受けには鍵が掛かっているってイメージですね。 つか、そのまんま受け取り拒否と言う表現でいいと思う。
>>254 むむぅ・・・。バイナリ見てみたら、r も定義されてるみたいだ。>NT版
よくわかりませんが、アーカイブに入ってるccupd.vbsがそのままで
動くんであれば、Ansiでいいんだと思いますが。
ついでに r が使えることもわかるし。
もしそうなら、
>>243 は全くの見当違いということになるな。(-_-
D&Dしたファイルを開くスクリプトってどうやって書いたらよろしいんでしょうか? たとえば、txtファイルをD&Dしたらメモ帳で開く、みたいなスクリプトがほしいんですけど
267 :
265 :02/09/08 17:42 ID:n4AN3fBn
>>266 おぉ!できました。
なるほどって感じです。なぞってもんはわかってみると大したことないもんですね
>>267 謎というか、リファレンスに書いてあるけど。
>>266 いや、別に謝んなくてもいいと思いますが。
私は実際に試せないので、所詮、推測に過ぎませんから。
> メモリが"read"になることはできませんでした のエラーと
> VBScriptでサポートされていないオートメーションです のエラーが出る。
ってことはUserWrap.Registerの行は無事に通過してるってことでしょうか?
NT系でも r は使えるみたいですね。
>>234 はドコが駄目なのかな?
Dim Dc, hWnd, cap, L
Set Dc = CreateObject("DynamicWrapper")
Dc.Register "user32.dll", "GetForegroundWindow", "f=s", "r=h"
Dc.Register "user32.dll", "GetWindowTextA", "i=hrl", "f=s", "r=l"
hWnd = Dc1.GetForegroundWindow
If hWnd <> 0 Then
cap = String(256, 0)
L = Dc2.GetWindowTextA(hWnd, cap, 255)
If L > 0 Then MsgBox cap
End If
とかかな?9x版と、NT版の仕様の違いがよくわからん。(-"-;
間違えた・・・。スレ汚しスマソ。 Dim Dc, hWnd, cap, L Set Dc = CreateObject("DynamicWrapper") Dc.Register "user32.dll", "GetForegroundWindow", "f=s", "r=h" Dc.Register "user32.dll", "GetWindowTextA", "i=hrl", "f=s", "r=l" hWnd = Dc.GetForegroundWindow If hWnd <> 0 Then cap = String(256, 0) L = Dc.GetWindowTextA(hWnd, cap, 255) If L > 0 Then MsgBox cap End If
ほぼ雑文モード。 >269-270 いや、私はAPIを使って目的を果たしたことないから、 使える680さんを尊kの目で見ているんですよ。 270の方で出来ました。 ただし、取得できるアプリとそうでないものがあります。 デスクトップ(Program Manager)とIrvineは取得できる。 A BoneとDanaは取得できない。(スレタイとかファイル名とかでどうしても長くなる所為か) タイトルの文字数が多いと取得できない感じです。 また、出るエラーは "read"になることはできませんでした の方。 あ、言い遅れてましたが当方W2kSP3です。 自分としては急いてはいないつもりなんだけど、提案としては初めてだし、 やりたい事の初めの取っ掛かりが形にならないのでもどかしく思っている。 ↑9x系とNT系の違いを吸収できるアクティブウィンドウのタイトル文字取得関数の事。のみならず、今後の方針も含めてね。 WSHで普通に取得できるリテラル群と親和性が高いものであるべきだとか。 かつ、標準では出来ないが、出来たら応用性が高くなるものだとか。 ブラックボックス化しても特に困らない事だとか…。
おお、
>>270 でいけましたか。
9x版とNT版の違いは
9x ・・・ 各関数ごとにDynamicWrapperのインスタンスを作成しなければならない。
NT ・・・ 2つ以上のインスタンスを作成してはいけない。
ってとこなんでしょうかね?って、まったく逆じゃん・・・。Σ(´Д`ズガーン
取得できないのはこちらでも確認しました。
Win98SEでは、タイトルバーの文字列が39バイト以下でないと駄目でした。
(それ以上の時は空、もしくは文字化け。さらに84バイト以上は強制終了)
ってことで結局、
L = Dc.GetWindowTextA(hWnd, cap, 40)
が正解っぽいです。こうすれば、長いタイトルのときも始めの39バイトだけ取得できるので、
あとはスクリプト側でなんとかすると。でも、NT系では取得可能バイト数が違うかも。
(´-`).。oO(JScriptからてっとりばやくInputBox使うにはどうするのが良いかな・・・)
var oIE = WScript.CreateObject("InternetExplorer.Application"); oIE.Navigate2("about:blank"); var s = oIE.document.parentWindow.prompt("何か"); じゃだめ?
>>274 今はそんな感じでやるか、
.wsfでVBScriptとJScriptを混在させるかどっちかでやってます。
どっちにしろ、あまりスマートじゃないなぁと思ったので、
いいアイディア無いかなぁと。
InputBox表示する.vbsファイル作っておいて、
それを呼び出すとか言う方法もあるみたいですね。
http://www.borncity.com/WSHBazaar/WSHEnvironment.htm ちなみに友人には
「JScriptにこだわらないで、InputBox必要ならVBScriptでやれば良いじゃん」
って言われて終わりでした。
ごもっとも。
なんで欲しいかって言ったら、
決め打ちで処理しちゃう適当極まりないJScriptファイル作ったら、
それが意外に使うので、
いちいちファイルの中身を書き換えないで、対話式に出来るようにしようと思ったら、
InputBox作れないので、VBScriptに書き換えるということが何度かあったのですよ。
InputBoxだせるActiveX Control導入は、
出先とかで使えないので、ちと辛いしなぁ・・・。
# JScript.NETコンパイラって.NET framewrok SDKに付いてるのか?
> # JScript.NETコンパイラって.NET framewrok SDKに付いてるのか? 付いてる
277 :
sage :02/09/15 01:18 ID:eH1Nj97e
間違った、こっちに入れるのか、
Cでアルゴリズムの講義を受けた程度なんだけど VBSとJscript、はじめるならどっちがとっつきやすいかしら?
VBS
VBScriptよりはJScriptの方がCに似てはいる
CからならJSだろ。
>>279 End Ifが許容できるならVBS、if構文は{}で囲ませろというのならJS
284 :
名無し~3.EXE :02/09/16 13:28 ID:eUUqbFAL
>>279 ; 打つのが怠いならVBS
癖になってるならJS
上げちまった スマソ
286 :
名無し~3.EXE :02/09/16 15:02 ID:tMOJQdxd
HTML内のスクリプトで自身のパスを取得するために、 GetAbsolutePathName("ABC.html")としたのですが、 どこに置いてもC:\Windows\デスクトップ\ABC.HTML と帰ってきます。 VBSで同じ処理をすると正しいパスを返してくれるのですが... ブラウザはIE6.0を使っています。
>286 Mid(self.location.pathname, 2)
288 :
名無し~3.EXE :02/09/16 19:43 ID:kGUhlVmI
>287 解決しました!! ありがとうございました m(_ _)m
c:\folder\001.txt c:\folder\002.zip c:\folder\003.txt c:\folder\004.zip c:\folder\005.zip c:\folder\006.log c:\folder\007.log c:\folder\008.txt を c:\folder\LOG\006.log c:\folder\LOG\007.log c:\folder\TXT\001.txt c:\folder\TXT\003.txt c:\folder\TXT\008.txt c:\folder\ZIP\002.zip c:\folder\ZIP\004.zip c:\folder\ZIP\005.zip な感じに拡張子毎分けるスクリプトおながいします。
>289 これって…、種類でソートして振分けのほうが早くない?(語尾上げ) 用途が共感できるものなら作るけど。 それ次第ということで。
>>289 Cygwinのshell scriptだとこんなん。
--
#!/bin/sh
for i in /c/folder/*; do
case $i in
*.log)
if [ ! -d LOG ]; then mkdir LOG; fi; mv $i LOG/ ;;
*.txt)
if [ ! -d TXT ]; then mkdir TXT; fi; mv $i TXT/ ;;
*.zip)
if [ ! -d ZIP ]; then mkdir ZIP; fi; mv $i ZIP/ ;;
*)
echo "unknown: $i" 1>&2 ;;
esac
done
--
別にWSHでもできなくはないだろうが、道具は用途によって使い分ける
方がいいかと。
>>291 Cygwinインスコできて、ある程度使える奴が、
こんなこと質問すると思うか?(w
// js だけど path = "c:\\" folder = new Enumerator( (new ActiveXObject("Scripting.FileSystemObject")).GetFolder(path).Files ) files = new Array() for ( ; ! folder.atEnd(); folder.moveNext() ) files.push( folder.item()+'' )// .Path .Name // でこの、ファイルの配列 files を? files.sort() // これは要らないけど気持ち。// files.push(folder.item()) でも、sort() はできるみたい // 拡張子順に並べ替えるとしたら function sortfunc(l,r){ var lext = l.replace(/^.+\.(.+)/,'$1') var rext = r.replace(/^.+\.(.+)/,'$1') //↓マッチしない場合(拡張子なし)、(どちらもは除く) if(lext==l){ if(rext!=r)return -1; } else if(rext==r) return 1; //↓拡張子あり、(またはどちらもなし) lext = lext.toLowerCase(); rext = rext.toLowerCase() if(lext > rext)return 1; if(lext < rext)return -1; return 0; // 文字列をそのまま大小比較できるのだっけ? } files.sort(sortfunc) WScript.Echo(files.join('\n'))
// 拡張子別の配列の配列を作るとしたら。 function xxxxx(files){ var A = new Array() // A[i].ext にその拡張子、A[i][j] に各ファイル(パス) A[-1] = new Array() // 拡張子ないのは、ここに。 for(var i=0, f, ext, flag; i<files.length; i++){ f = files[i] ext = f.replace(/^.+\.(.+)/,'$1').toLowerCase() if(ext == f.toLowerCase() || ext=='' ){ A[-1].push(f); continue } flag = 0 for(var a=0; a<A.length; a++) if(A[a].ext == ext){ A[a].push(f); flag=1; break } if(flag)continue var Aa = new Array() Aa.ext = ext; Aa.push(f) A.push(Aa) } return A } A = xxxxx(files) // テスト表示 s = '' for(i=0; i<A.length; i++) s += A[i].ext +' '+ A[i].length +'\n\t'+ A[i].join('\n\t') +'\n' s = A.length +' / '+ files.length+'\n'+ s + (A[-1].length ? '- '+A[-1].length+'\n\t'+A[-1].join('\n\t'): '') WScript.Echo( s )
以上は、>289 へ、でした。 ずさんかも。それより、的はずれかな。
296 :
名無し~3.EXE :02/09/21 22:04 ID:89kPHuWY
c:\doc にあるファイルを \\host\share にコピーしたいのですが、 その時パスワードを聞かれるのですが、 どうしたらスクリプト内でパスワード認証通過できますか?
// JScript. var net; net = new ActiveXObject("WScript.Network"); net.MapNetworkDrive("I:", "\\\\computer2\\public","True","jdoe","jdoepassword"); ' VBScript. Dim net Set net = CreateObject("WScript.Network") net.MapNetworkDrive "I:", "\\computer2\public","True","jdoe","jdoepassword"
>>289 NTのバッチファイルなら2行でできる。
for %%i in (*.*) do if not exist %%~xi md %%~xi
for %%i in (*.*) do move %%i %%~xi
フォルダに . がつくけどね。
>289 wsh勉強中の俺にぴったりの課題なのでやってみた。 引数なしで実行するとカレントディレクトリ内を整理、 引数にディレクトリ名を与えるとその中を整理する。 関数 furiwake が>298の2行に相当するが、やっぱり長くなるね。 vbsみたいに for (file in files) とか書けたらいいのにと思う。 var WshShell = new ActiveXObject("WScript.Shell"); var fso = new ActiveXObject("Scripting.FileSystemObject"); var objArgs = WScript.Arguments; if (objArgs.length == 0) { furiwake(WshShell.CurrentDirectory); } else { for (i = 0; i < objArgs.length; i++) { if (fso.FolderExists(objArgs(i))) { furiwake(objArgs(i)); } else { WScript.Echo("フォルダが存在しません: " + objArgs(i)); } } } function furiwake(currentDirectory) { var files = new Enumerator(fso.GetFolder(currentDirectory).Files); for (; !files.atEnd(); files.moveNext()) { var ext = fso.GetExtensionName(files.item()).toUpperCase(); if (!fso.FolderExists(ext)) fso.CreateFolder(ext); fso.MoveFile(files.item(), ext + "\\"); } }
300 :
299 :02/09/22 04:08 ID:YH+heuC8
上のやつ間違ってました。関数 furiwake を以下のもので置き換えてください。 スレ汚し、すんまそん (;´Д⊂ 300ゲトー function furiwake(path) { var files = new Enumerator(fso.GetFolder(path).Files); for (; !files.atEnd(); files.moveNext()) { var ext = fso.GetExtensionName(files.item()).toUpperCase(); if (!fso.FolderExists(path + "\\" +ext)) fso.CreateFolder(path + "\\" +ext); fso.MoveFile(files.item(), path + "\\" +ext + "\\"); } }
>>289 見たら、既に、299-300 が、、、まあ別の方法として。
// .js フォルダー落して。
var set_extA = new Array('log', 'txt', 'zip')
if( 1 != (new ActiveXObject("WScript.Shell")).Popup('実行?', 60, '実行確認', 1) )WScript.Quit()
if( ! WScript.Arguments.length)WScript.Quit()
var path= WScript.Arguments(i)
var FS = new ActiveXObject("Scripting.FileSystemObject")
if( FS.FolderExists(path) ){
for(var i=0, dest; i<set_extA.length; i++) try{
dest = path +'\\'+set_extA[i]
if( ! FS.FolderExists(dest) )FS.CreateFolder(dest)
FS.MoveFile( path +'\\*.'+set_extA[i], dest+'\\')
}catch(e){}
}
> 299-300 の WshShell.CurrentDirectory これ知らなかった。引数ないときは、そこで、という事と思うが、 どこになるか、不定のようだけど。 fso.GetParentFolderName(WScript.ScriptFullName) の方がいいんではないかな、、、 字下げに使っている、  も知らなかった。 " " -- em space 、これって何?、
>>293 の 3 行目
folder = new Enumerator( (new ActiveXObject("Scripting.FileSystemObject")).GetFolder(path).Files )
何で、folder って名付けるかな、files だよな。(次の行で、配列 files がでるからまずいけど)
fldとかflsとか書くなぁ
305 :
名無し~3.EXE :02/09/23 04:08 ID:me6GPEiA
よく、「ログオフするとお気に入りが消える」みたいなFAQがありますが、 それはそれで不便ですね。 小生としては、たとえば 「*.mpgファイルはRecentにいれない」とか 「特定のディれくとrににあるファイルは、開いてもRecentに入らない」とかの オプションがほしいわけですよ。 これはレジストリいじってもできそうもないから、やはり、Wshを使って、 Recentに*.lnkが作られるタイミングを見張っておいて、 指定されたものを削除するのがいいと思うのですね。 これって、Wshでできるでしょうか。 正規表現で該当の*.lnkファイルを消すのはできそうですが、「見張る」のは どうやったらいいかわかりません。 よろしくお願いします。
>305 某掲示板で見つけた常駐監視htaです。適当に変更して使ってください。 下手すると、タスクマネージャから殺さないとダメですのでトリガは適当なものを考えて。 <html><head> <script language="VBScript"> Dim oFS, timerId, sTraceDir sTraceDir = "C:\Documents and Settings\Administrator\Recent" window.resizeTo 0,0 timerId = 0 Set oFS = CreateObject("Scripting.FileSystemObject") Sub tracer() Dim bFlagFound bFlagFound = False For Each oFile In oFS.GetFolder(sTraceDir).Files bFlagFound = bFlagFound Or LCase(oFS.GetExtensionName(oFile.Path)) = "lnk" Next If bFlagFound Then lMes = MsgBox("継続しますか?",vbRetryCancel, "見つけました") If lMes = vbCancel Then window.close End If End If End Sub timerId = setInterval("tracer()", 5000) </script> <hta:application minimizeButton="no" maximizeButton ="no" applicationname="非表示ダイアログ" singleinstance="yes" border="none" borderstyle="raised" showintaskbar="no" ersion="1.00" id="objHTA"> </head></html>
>>301 間違ってる!、
5行目、WScript.Arguments(i) 、i → 0
>>305 >308 は、例えば、こうなるかな。
<script language="JScript">
dir = "%どこか%\\Recent"
TgPathPtnA = new Array( /\.mpg$/i, /.+\\iyada\\[^\\]+$/i )// リンク先パスから一致探すパターン
LnkFilePtn = /\.lnk$|\.url$/i // .url はないか
function 何かする(ファイルパス){ /*お仕事*/ }
window.resizeTo(100,100)// テストなので、0,0 にしてない
FS = new ActiveXObject("Scripting.FileSystemObject")
WS = new ActiveXObject("WScript.Shell")
function tracer(){
var flag, flsA =[], cnt =0
var fls = new Enumerator( FS.GetFolder(dir).Files )
for (; ! fls.atEnd(); fls.moveNext()) flsA.push(fls.item()+'')
for(var i=0, tp; i<flsA.length; i++)
if( LnkFilePtn.test(flsA[i]) && (tp= WS.CreateShortcut(flsA[i]).TargetPath) )
for(var j=0; j<TgPathPtnA.length; j++)
if( TgPathPtnA[j].test(tp) ){ 何かする( flsA[i] ); cnt++ }
if(cnt && ! confirm( cnt+' 、続ける?' ) ) close() // これをどうするか?
}//
setInterval(tracer, 5000) // 5 秒間隔
</script>
>>305 全然知らないのだが、考えてみる。
Windows で何か起きたとして、それを知るには、
Windows から、教えてもらう (HTML中のスクリプトのイベントのように) か、
Windows が記録したものを、周期的に読みにいく(事後になってしまうが)
(この場合は直接 Recentフォルダを調べる) か、、なのかな。
多分ふつうのスクリプトからは、Windows の出来事を、
見張れない、教えてもらう通知してもらう、受取る方法がない?。
なら間隔おいて自分で調べるとすると、スクリプトが終わらぬよう居座り続けないとならない。
( Sleep を繰返す、ちょっと恐いというかずっと続けて大丈夫なものなのか?、
余計な負荷になるのではとか、そのまま本当に眠ってしまうのではとか、、)
窓を持てるスクリプトならどうか?、
でも、HTA にしても、Windows のイベントは、ないみたいだし。
もう一つエクスプローラのフォルダ窓に付属の HTT なら、
フォルダで起こった事を?、(表示に関わる事のみか?)。
MS 以外のスクリプトは、Windowsで起きた事を中継してくれないか?
(上から続き)
他のプログラムから、教えてもらうとしたら?
1、何か起きたら、スクリプトを起動してもらう。
ソフトで、そういうのないか?
Windows のタスク(スケジューラ?)、
これから呼び出すとか考えても、事でなく時が主だし、
それも日単位だし、終了時やログアウト時はないし。
イベントの様なものでは、スタートアップしかないのか、、
2、スクリプトの中で、他のプログラムとやりとりする。
ActiveXうんたら?、COMコンポーネント?。
>>2 ttp://www.roy.hi-ho.ne.jp/mutaguchi/wsh/ の
"関連サイトへのリンク" に色々、紹介されている。
でも、そのプログラム側からこちらに、通知はできないのか?
スクリプト側から、周期的にそのオブジェクトのプロパティを調べるしかないかな。
WSH なら、WScript.CreateObject() の引数に、
イベント時に呼び出してもらう、こちらの関数(の接頭辞)を指定できるというのあり。
でも、WScript だからスクリプトを終わらせない様にしないと。
( Sleep の他に、MsgBox を出しっぱなしにする方法もある?)
よく判らないよ。
313 :
名無し~3.EXE :02/09/24 14:43 ID:fUwhMaE9
314 :
313 :02/09/24 15:26 ID:fUwhMaE9
補足。readmeに書き忘れた。 *.exeでなくて*.vbsを実行したいときは第二引数を "C:\WINDOWS\system32\wscript.exe C:\test.vbs" とか "C:\WINDOWS\system32\wscript.exe \"C:\test test\test.vbs\"" てな感じにしてね。 かなり適当なのでうまく動かない状況が多いかも。
>313 見つかんないよ。 それCOM化してくれたら神。
>>312 Windows のタスク、間違ってた!、
日単位だけでなく、[詳細設定] で、「タスクを繰り返し実行」間隔 分/時
っていうのが、あった。
10分とか1時間に1回程度の実行でいいなら、これを使えばいいのか。
>313 わっ、 でも使えない、残念。MFC70.DLL がない。 readme 補足してある。 js だとだめなのか、、、 望んだ元の 305 は、見に来たかな、、、
>319 しまった、何を見てたんだろう、個人のページを貼ってしまった。 そこの人、ごめんなさい。
>313 mfc70.dll と msvcr70.dll .js でも全然問題ないよ。 第2引数、"wscript X:\〜\xxx.js" でも。 >319 もう一度、VA021021 の kobataku さん、ごめんなさい。
322 :
名無し~3.EXE :02/09/25 10:13 ID:vw6HyGET
>321 リテール版なら再配布は自由なのでOKじゃないの
>>322 個人のページにリンクしたことを気にしているのでは?
気にしなきゃいいのに。
まあvector上だから そんな気にすることたぁないさね
325 :
名無し~3.EXE :02/09/26 03:13 ID:osmhTbQP
登録しておいたアプリケーションを強制終了させる ことってWSHで可能でしょうか。 一々タスクマネージャー開いて、アプリ名探して、殺すのが面倒です。 cgywinのps.exeでPID見えるのですが、killコマンドが弾かれるので、 いちいちマウスで殺して、コマってます。
328 :
名無し~3.EXE :02/09/27 14:32 ID:LtWILKoX
set db = WScript.CreateObject("DAO.DBEngine") と書くと、DAO.DBEngineという名前のオートメーションクラスが見つかりませんでした。 とさ。よくわかってないが、なぜ?
329 :
328 :02/09/27 16:40 ID:LtWILKoX
DAO.DBEngine.36 でしたとさ。
>325 すでに答え出てるけど、前スレ547にもサンプルあるーよ。 XPならtasklist.exeとかtaskkill.exeなんてコマンドもあるーよ(>2のリンク参照)。
>>331 スクリプトが起動した時刻を記録するファイルを作っておいて
スクリプト起動時にはそのファイルをロックして記録、
処理が終わったら解放するようにしておけばどうかな?
起動時にロックされていたら何もしないで終了。
で、チェックは記録されていた時刻と更新時刻を比較する。
333 :
11 :02/09/28 20:14 ID:Kh7JELSG
ファイル生成の監視ですが、WMIを使えば可能らしいです。 私はうまくできなかったのですが…。 ExecNotificationQueryメソッドを使い、"__InstanceCreationEvent"を指定し、 CIM_FileDataのインスタンスの生成を監視するわけです。 実際に書いてみたコードも載せておきます。一応、C:\testの監視をおこなうように作ってます。 しかし、これは正常に動作しないばかりか、暴走してしまいます。 しかもスクリプトのプロセスも殺せません。 どなたか、動くようにする方法を教えてください。 Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator") 'SWbemLocatorオブジェクト作成 Set oService = Locator.ConnectServer 'SWbemServicesオブジェクト取得 Set oEvent = oService.ExecNotificationQuery _ ("select targetinstance.Name from __InstanceCreationEvent within 10 where " & _ "targetinstance isa 'CIM_DataFile' and targetinstance.Drive = 'C:' and " & _ "targetinstance.Path = '\\test\\'") On Error Resume Next Do WScript.Sleep 100 Set oEvt = oEvent.NextEvent(500) If Err.Number <>0 Then Err.Clear Else MsgBox oEvt.TargetInstance.FileName & "が生成しました。" Exit Do End If Loop
334 :
11 :02/09/28 20:14 ID:Kh7JELSG
メール欄を入れ忘れてました…。
335 :
313 :02/09/29 01:29 ID:GDGFvQwi
>>318-319 DLL同梱してなくてゴメン。
.NET Framework入れたらMFC関連のDLLも入ると思いこんでました。
考えてみればMFCは.NETとは関係ないから入らないのね。
.NET+NT系限定だけどJScriptだけでディレクトリ監視。
ただコンパイルしないと駄目っぽいのがニントモカントモ…
コンパイルしてちゃWSHとは言えないかな?
import System.IO;
var watcher : FileSystemWatcher = new FileSystemWatcher();
var result : System.IO.WaitForChangedResult;
watcher.Path = "c:\\temp"; //監視するディレクトリ
// watcher.Filter = "*.txt"; // フィルタ。拡張子とか指定可能
watcher.NotifyFilter = ( NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName );
watcher.EnableRaisingEvents = true;
for (;;) {
result = watcher.WaitForChanged( WatcherChangeTypes.All );
System.Console.WriteLine( result.ChangeType + " : " + result.Name );
}
336 :
313 :02/09/29 01:31 ID:GDGFvQwi
import System.IO; してるくせに System.IO.WaitForChangedResultとか書いちゃ意味ね〜
337 :
313 :02/09/29 02:01 ID:GDGFvQwi
338 :
313 :02/09/29 02:20 ID:GDGFvQwi
あぁ何書いてるんだか。can be created なら問題無いじゃん。 SWbemServicesの方がcannotだったのよ〜と言い訳してみる… 無駄レスばっかでハズカシ.
\\HostA\Shared の情報を取得して、 前回より新しいファイルやフォルダがあったら、 表示するか確認後にフォルダを表示する。 っていうスクリプト出来ますか? ログイン時に 共有フォルダに新しいファイルが存在します。 共有フォルダを表示しますか? はい いいえ こういうことがしたいんです。
>339 それは、仕事に使うものかな。だとしたらやれる事を事前に吟味しておかないと、 更に欲が出てきていっぱいいっぱいになってくるような感じがする。 まずざっと見足りないと思う事。 共有フォルダって言うからには皆が更新する物。 自分が関与しないファイルもあればするファイルもある。 また、ずっと後に関与するものもあるかもしれない。 で、区切りは前回のログオンのみでいいの?後は消しちゃって。 また朝、忙しかったら読み飛ばしちゃうかも。 会社で共有フォルダ管理って、結局数がものすごくなってみてらんない状態になると思う。 あっという間に対応しきれなくなる。 スクリプトに全ファイル監視させるのは良いとして自分が見る上でのフィルタとかはいいのかな? ぱっと見言えるのはそんなとこかな。 この案件では最近の話題の更新したタイミングをシビアに判定するとかは考えなくてもよさそう。 アプローチとしてはデータベース作って格納するのが一番かと思います。 長文スマンス。
341 :
教えて君 :02/09/29 20:14 ID:AiYdhk+3
>341 スクリプトっていうのはじぶんでかきかえるためにテキストで出来ているんだ。 だから一行目はじぶんのすきなようにかきかえるんだよ。
343 :
名無し~3.EXE :02/09/29 22:38 ID:tiAhOVr/
>>341 一行目に
#!/usr/bin/wsh.exe
あるいは
#!c:/Program Files/Windows Scripting Host/WSH.EXE
を忘れずに
>>340 いあ、、自宅です。
父親と生活パターンが違うので、
父親から頼まれたことや、頼むことは
共有フォルダに突っ込んで終わりということが多いので。
突っ込むだけで相手に解れば楽だなと。
345 :
教えて君 :02/09/30 02:01 ID:YQd8Nmnx
>>342 ,343
い、言われたとおりにしたけど、出来ませんでした。
た、助けてください。
346 :
魚 :02/09/30 20:46 ID:Ogl2JPPx
>341>345 なんだか??一行目の("URL","保存先パス") をあなたの有用なものに変えるだけ。 保存先パスをフォルダまでしか指定していないとか?ファイル名まで指定する。 でダメなら一行目だけでも見せてくれ。 >342 ふぅ。それはそれで中途半端かも。 >343 嘘つき。UNI板に(・∀・) カエレ!! >344 おっけ。先走りすまん。なら当初ので作ってみるわ。 変更ファイル名ぐらいは列記します。 >346 実際どうなんだろうね。まともな返答も無いとこは、みんなの認識の表れだと思うけど。
349 :
339 :02/10/02 01:01 ID:7Te+4er2
>>348 おお、、、ありがとうございます。
確かにずれてますね。。
あと、共有フォルダのパスが見つからなかった(相手がオフラインだった)場合にエラーが。。
まぁ、これでも十分実用できるんで有り難いです。
ありがとうございます。
>>333 これ、ウチではちゃんと動いてますよ。
Exit Do を消して、監視するフォルダをRecentにして、
1時間ほど走らせても大丈夫でした。
タスクマネージャでプロセスも殺せるし。
なんで11さんのとこではだめだったのかな?
ちなみにOSはXP Pro(SPとか当ててない)です。
352 :
351 :02/10/03 01:59 ID:bNDTSPtv
# 351は元の依頼主の305さんではありません。念のため。
353 :
331 :02/10/03 03:36 ID:lTDdwMTD
>313 watcher.exe の(使用の)続きと >332 ファイルのロック
単純にそのファイルがあれば止め、なければ作ってスクリプトが終わる時に削除
と試してみたが、どうも関係ない、一つずつ終わってから次が呼ばれているのかなと。
で、直接、watcher.exe から呼び出さず、watcher.exe から呼ぶのは、
スクリプトを呼ぶスクリプトにすれば、ファイルのロックの効果あり。
多分、これで、watcher.exe から呼び出されなくなってしまう事もなくなり、
うまくいくと思うのだが、、、でなければお手上げ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1022248177&res=22 WMI は、98やMeではダウンロードしないとならないし、何となく無縁と思っていたら、
Meには最初から入っているのか。慌てて調べ始め、、英語読めないので眺めているだけだけど。
スクリプトから様々なイベントの通知を要求する事ができる、、
(その要求の仕方・どこの何のイベントをどう指定すればいいのかとか、が、、、)
そして、○.nextevent() で待機し受取る、、
でも今の所、例題で試してみても云とも寸とも言わないのだが、、
と思ったら、確かに 11 氏のは暴走する。Query だけでそうなる、
.NET は更に判らない。import や : 、何だろう、、
なにぶん、ファイルの共有ってなんだっけとか、しばらく考えてしまうレベルなので。
MSDN で迷って色々見てたら、こんなのあった、「イベントのスクリプティング」
ttp://www.microsoft.com/japan/msdn/columns/scripting/scripting04092001.asp VBSでは新しい事は何も書いてないと思うが、 JS+HTMLで、:: なんて知らなかった
354 :
331 :02/10/03 03:43 ID:lTDdwMTD
XP ではならないと。 305さんは?、お題に使わせもらっただけです
355 :
名無し~3.EXE :02/10/03 11:18 ID:6LFz1Z7L
で、結局WSHに適したエディタってどれ?
356 :
名無し~3.EXE :02/10/03 15:02 ID:P5KaGb0m
357 :
名無し~3.EXE :02/10/03 17:32 ID:AlIxbRN6
358 :
名無し~3.EXE :02/10/03 17:36 ID:xL+22D4K
にゃ
359 :
:02/10/03 18:07 ID:tFV6PnVF
>>355 VBそのものや、OfficeのVBエディタ作成・編集。
コードをTextエディタコピペ・保存。
これ西京。
360 :
:02/10/03 18:09 ID:tFV6PnVF
付け加え 参照設定に使いたいOLEのライブラリファイルを 登録しとけば、メソッド・プロパティ補完もしてくれる。 まぁ、基礎の話だが。
361 :
339 :02/10/04 10:07 ID:/KKA8WnK
>>350 レス遅れて申し訳ないです。
試してみましたが、接続可能な共有フォルダを指定しても
フォルダ\\hoge\hogeが見つかりません
接続が可能な状態になったら再試行してください。
と言われてしまいます。
こちらの共有フォルダをローカルパス/ネットワークパスで指定してもダメでした。
もしや、2バイト文字が原因か?と思って、英数字のみのフォルダを指定してみましたが、
やっぱりダメでした。。。
関係なさそうでしたが、一応、環境依存の部分も変えて試してみましたが、ダメ。
逆に、相手がオフラインだとsearcher.vbsでエラーが出てしまいました。
---
行: 19
文字: 1
エラー: パスが見つかりません。
コード: 800A004C
ソース: Microsoft VBScript 実行時エラー
sony_humanResource = HumanResource.new("sony") sony_finance = Finance.new("sony") sony_activeField = ActiveField.new("sony") sony_convention = Convention.new("sony") sony_participant = Participant.new("sony") sony_newCommer = NewCommer.new("sony") sony_oldCommer = OldCommer.new("sony") sony_purpose = Purpose.new("sony") のように連続的にオブジクトを作って、出来上がったsony_XXXXってオブジェクトを グループ化させたいんですが、どのような方法がありますか。 ------------------------------------------------------------------------ 厨な方法: store(HumanResource, sony_humanResource) store(Finance, sony_finance) store(ActiveField, sony_activeField) store(Convention, sony_convention) store(Participant, sony_participant) store(NewCommer, sony_newCommer) store(OldCommer, sony_oldCommer) store(Purpose, sony_purpose)
363 :
362 :02/10/04 19:00 ID:8rno8yQ2
すれ違いです。すみません。
>361 すまねっス。思い違いをしていたようだ。 13・14行目をこれに差し替えてください。 sCommonFolder = csCommonFolder Do Until oFS.FolderExists(sCommonFolder)
365 :
339 :02/10/06 00:52 ID:+xvAjjJy
366 :
名無し~3.EXE :02/10/07 01:15 ID:Cil0OTne
今表示してるホームページを IE右クリックのメニューから テキスト形式で保存できるスクリプト キボンヌ…
367 :
ai :02/10/09 03:47 ID:sL2zw+rV
質問があります。 wshからexcelではなく、excelVBAを操作することって出来ますか? 例えば、excel起動していない時に、VBAで【*.xls→*.csv】を行うとか、 特定のブックの特定のRange.valueをクリップボードに送信する、みたいな 処理ってできますか? その辺りに詳しい方いらっしゃいますか?
>>367 Set oEXCEL = CreateObject("Excel.Application")
とか宣言すれば
Set oBOOK = oEXCEL.WorkBooks.Open(filename)
でfilenameを開いたり、
つまりExcelのオブジェクトがそのまま使えます
369 :
ai :02/10/09 15:56 ID:sL2zw+rV
>>368 いえいえ、excelのオブジェクトとexcelのVBAインタプリタって違いますよね。
excelのブックを開いたら自動的にVBAを実行するようにして、WSHからその
ブックを開くようにすればいいのでしょうけど、直接WSHからVBAのインタープリタ
を操作できないのかなと思いました。
例えば、マクロを記述していないワークブックに対して、WSHからVBAエンジンを
操作して、そのワークブックの内容に変更を加えたりできないのかということ
です。
370 :
ai :02/10/09 16:11 ID:sL2zw+rV
>>368 すみません。私の勘違いでした。
>Excelのオブジェクトがそのまま使えます
Excelのオブジェクトがつけえれば、Windows上からあらゆるメッセージを
遅れるのですね。勉強になりました。
WMI 勉強中、
オブジェクト・ブラウザ?のようなものができる事までは判ったが、
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1022248177&res=23 中身はさっぱりわからない。MSDNを見にいくのもつらい、、、
↑試す場合、Directoryの付くクラスで、[インスタンス]のボタン押すと凍ります。
HTA です。
3日前に戻る >366 デジャブ?
右クリック→ソースを開く、エディタから保存、でだめなのは何故?
前スレにあった、"Microsoft.XMLHTTP" と、"ADODB.Stream"
使った事なかったので、試してみた。(次に)。
ローカルのHTMLから使えるのはいいのだけど、、、
(この場合、既に中身があるのに、また取って来るなんて無駄だが)
と思ってついでに、FileSystemObject も試してみたら何も言わずに動く。
拡張(右クリック)メニューでない場合は、ちゃんとダイアログが出るのだが、
そういうものなのか?、
<script type="text/javascript"> var saveFolder = "C:/ユーザー/机/一時保存/" // 保存先のフォルダ。既にある所でないとだめ。 var useTitle = 0 // 保存するファイル名にタイトルを使うか var pW if(window.external && (pW =external.menuArguments) ) {// IE拡張(右クリック)メニューからなら var url = pW.location.href if( ! /[\\\/]$/.test(saveFolder)) saveFolder += '/' var path = saveFolder.replace(/[\/]/g,'\\') + ( useTitle ? pW.title.replace(/["\\*:\/<>?|]/g, function(c){ return '%'+(c.charCodeAt(0)).toString(16) } )//" : url.replace(/.+[\/]/,'') ) +'.txt' // ← 更に .txt と付けるなら var ans = prompt('保存先ファイル名、?', path); if(ans){ path = ans.replace(/\0.*/,''); xxxxx(url, path) }/// 有効な保存先のパスかどうかは確認してない } function xxxxx(url, path){ var XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP") XMLHTTP.open( "GET", url, false ) XMLHTTP.send() // 「指定されたリソースは見つかりません」 xmlBody = XMLHTTP.responseBody // 待たなくてもいいの? var ADODB_Stream = new ActiveXObject("ADODB.Stream") ADODB_Stream.Type = 1 // binary ADODB_Stream.Open(); ADODB_Stream.Write(xmlBody); ADODB_Stream.Savetofile(path, 2); // 1 上書きしない?、 2 上書き? } </script>
373 :
名無し~3.EXE :02/10/10 12:02 ID:rfv83ovk
タスクスケジューラからプログラム実行することは可能なれど, プログラム中からタスクスケジューラに登録されたタスクを実行するのは不可能?
a
wshを利用すれば、 インターネットショートカットのリンク先を修正する作業をコマンドラインで できますか?
>373 そういう作成・実行するCOM Addinがリソキに入っていたような気がするんだけど、 Scheduler.SchedulingAgentなProgId持つやつ。 持っていないので、なんともいえない。 タスクってセキュリティコンテキストを違うところにできるしね。自動に作成・実行できたら穴なんじゃないかな。 >375 できますよん。説明するのが面倒なので、 mk:@MSITStore:C:\Program%20Files\Microsoft%20Windows%20Script\ScriptDocs\Script56.CHM::/html/wsmthcreateshortcut.htm をみてね。
377 :
373 :02/10/11 09:03 ID:4r94Tb6C
>>376 ども。
確かに実行できたら穴です(w
しかし諸事情で,Admin権限でしか動かないスクリプトを制限ユーザが動かす必要が出てきました。
しかもフリーソフトは使わずに軽作業で…。
更に,ユーザの好きな時に実行できる必要があります。
1つ考えたのは,タスクスケジューラでログオン時実行にして常駐させ,普段は隠しておく,
なんてのですが,何か他に画期的な方法はないものか。。
378 :
373 :02/10/11 09:05 ID:4r94Tb6C
ちなみに,タスクとパスワード設定は管理者権限で作成するので,問題はないです。
VBA見たくF1押すだけでヘルプ起動し、キーワード入れてくれたら名ァ……
380 :
379 :02/10/11 12:40 ID:qUec8PhK
あ、例えば、オブジェクトブラウザで参照設定した後、各オブジェクトを閲覧 しているときにF1押したら、ヘルプで検索してくれる機能(VBAなど)も Wscriptで出来たら名ァ……
381 :
名無し~3.EXE :02/10/11 14:25 ID:Ihh3hJW+
テキストファイルから 正規表現 [a-zA-Z0-9\._-]*\@[a-zA-Z0-9\._-]* にマッチした単語だけ抜き出してテキストファイルに書き出す スクリプトありませんか
つーかその正規表現ならfor-nextでなんとかなるだろう。
>377
そういうことならユーザ偽装かなぁ。スクリプト実行時だけユーザを変えるってやつ。
ASPのサンプルがMSDNにあったと思ったんだけど、今見たらASP.NET版にリニューアルしてしまって使えん。
ADSIでADsを操作してユーザ変更してCACLS.EXEをEcho付で実行して権限取得みたいなの。
具体的にはうろ覚えにて説明できん。すまん。
>379
こっちはCHMヘルプクンで実現してますよ。
>380
こっちはWSH補完クンがズバリそのものなんだけど…、680さんお願い。オブジェクトツリーでのフィルターたのんます。ダメ?
リンクは
>>85 参照のこと。
>381
smtp.freeserve.ne.jpみたいなボトルメールがやりたいの?
Adultサイト巡ってもいないのにアワビを大量にお届けされちゃったりしてあんま幸せな思い出がないんだよなー。アレ。
逆にSPAM元のアドレス大量にもってFrom:・To:・X-Mailer:・Reply-ToをAnd:一致でメールボックスから削除するスクリプトきぼーんしたいほど。
385 :
名無し :02/10/11 23:30 ID:dwredRMK
ど初心者なんですが、どなたかお答えください。 WSHでダイアログを使いたいと考えてます。 で、某SeraphyScriptDialog をDLしてきたんですが、動かす事すらできません・・・ 「Regsvr32.exeにDLLへのフルパスを指定して実行するだけ」らしいんですが、それすらできない人間は使うなということでしょうか?
みささん、シェル環境はDOSですか?エクスプローラですか。 ぼくはDOS窓内でCygwinのbashを使ってますが、 bashを使っていると、 explorer(エクスプローラー)、iexplorer(IE)などが起動しません。 notepadは起動しますが…… 環境変数PATHはちゃんと、通っているのですが…… DOSに帰るとちゃんと実行されるのですが……
387 :
名無し~3.EXE :02/10/11 23:42 ID:emTxdOPM
サスペンドやシャットダウンする スクリプトって可能ですか?
388 :
385 :02/10/11 23:57 ID:dwredRMK
家のパソコンでいろいろやったらできました。 ご気分を害された方申し訳ありません。
>>387 可能。
Windows.FAQに、
Microsoftが配ってるサスペンドやシャットダウンするスクリプトへのリンクが載ってるページがある。
>386 私はみさではないのでシェル環境についてはスルーしますが。 Cygwin使う時はパスはPATH環境変数も取ってくるけど、基本的には mount C:\Program Files\Internet Explorer /bin とかで入れるんでないの?違う?Cygwin使った事ないんで分からんわ。
>>386 (OS書いてないから予想だけど、多分)Win9xのDOS窓だから。
NT系のコンソールなら問題ない。
>>386 試しにフルパスでやってみたら?
で、フルパスでならうまくいく場合は、
which explorer
とかの結果を確かめる。
393 :
386 :02/10/12 23:36 ID:cdV2XjZk
x on windowsってのを使い出してから、この現象っす。 Win2000で、Win+Rから cmd /k bash --login -i で、起動してるっす。 [a]~$ which iexplorer.exe /usr/bin/which: no iexplorer.exe in (/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/cygdrive/d/WINNT/s ystem32/:cygdrive/d/WINNT/:cygdrive/d/app/:/cygdrive/d/HOLON/XonWindows/home/Administrator/bin) Sat Oct 12 (23:36:45) [a]~$ which explorer.exe /usr/bin/which: no explorer.exe in (/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/cygdrive/d/WINNT/sy stem32/:cygdrive/d/WINNT/:cygdrive/d/app/:/cygdrive/d/HOLON/XonWindows/home/Administrator/bin) Sat Oct 12 (23:36:51)
>>384 >>380 はWSH補完クンとは全く関係無いような・・・。
>オブジェクトツリーでのフィルター
現時点ではちょっと難しいです。すみません。
#名無しさん募集中。。さんってDana使ってたんじゃ・・・。
>394 確定したワードなら、調べるとこなんかCHMヘルプクンそのものかな・・・と。 ツリーだとフルパスをキーとして持たないといけないからデータが大変そうですね。 わっかりました。では.NET Framework補完クンを座して待つことにします。(違 #補完クン・ヘルプクンが便利なのでTeraPadの方に傾向していて現在併用中です。 #でもカスタマイズしすぎて、なかなか移行には程遠いんですけれどね。
396 :
392 :02/10/13 14:20 ID:ZwanlkiY
>>393 which の結果がそれだと、パス通ってないと思う。
ところで、スレ違いなのでこれ以上続けるならCygwinスレでどうぞ。
X on Windowsスレでもいいけど。
397 :
999 :02/10/13 14:51 ID:23DFWQTt
補完クンがTeraPad起動時に自動起動してほすぃ
398 :
999 :02/10/13 16:04 ID:23DFWQTt
perlからWin32oleを利用することが多いんですけど、 補完クン・ヘルプクンを使いたいために、いったんvbsでファイル作成してから .plに変更してます。 なにかいい解決法ありませんか? それから、補完クンですが、Ctrlキーで候補一覧が消えないようにできませんか?
>>397 「ツール」→「ツールの設定」→「編集」で「ツールの編集」を出し、
左下の「起動時に実行」にチェック
>>398 「簡易JScript/VBScriptコード補完ツール」ですから・・・。(^^;
私がperl知らない(使わない)っていうのも大きいですが・・・。
出来ますけど、消えてくれないと不便じゃないですか?
TeraPad以外のエディタはキーカスタマイズできるんで、
何が割り当てられてるか分からないですし。
400 :
400 :02/10/14 12:45 ID:29a5tg6u
親フォルダを取得しようとして、二つの書き方を見つけたけど結果が異なります。 このスクリプトを、日本語名フォルダとASCII名フォルダに入れて比べてみてください。 親フォルダが日本語の場合、sdnは親フォルダが日本語でなくなるまでさかのぼって返すんですが。 Windows98SE, WSH5.6日本語版。 ...バグ? Set objFile = CreateObject("Scripting.FileSystemObject") sfn = WScript.ScriptFullName sdn = objFile.GetFile(sfn).ParentFolder sdn2 = objFile.GetParentFolderName(sfn) MsgBox"This file : " & sfn & vbCrLf & _ "Parent folder : " & sdn & vbCrLf & _ "Parent folder2: " & sdn2
>396 見ても答えられなかったので、指針&誘導ありがとー。 >399 補完クンの方で仕様を拡張できるなら->を.と同一視するとか。 元質問者の方で全自動置換マクロみたいな物を作るか。 択一ですね。.は正規表現とかでよく使うから置換判別は難しそうですね。 でも、HTMLや、XMLのコメントを書く時に-->って使うんだよなー。. 興味あるけど、関係はないのでsage。 >400 ParentFolderは9x系だとそういう動作するんですよね。 NT系だと正常な動作します。 直接その問題と関係ないけどその書き方だとsdnにはFolderオブジェクトを入れようとして 入らないから、代わりに規定のPathプロパティの内容が入っているという状態ですよ。
402 :
400 :02/10/14 18:27 ID:29a5tg6u
>401 了解しました。おとなしくGetParentFolderNameを使います。 結構有名なバグなんでしょうか…?(しかし、くぐっても見つからなかった) あと思い違い指摘にも感謝です。
>402
ttp://www.oak.dti.ne.jp/~niku/R3_temp.swf?inputStr=%96%7B%93%96%82%BE%81%41%47%6F%6F%67%6C%65%82%C5%82%E0%8C%A9%82%C2%82%A9%82%E7%82%C8%82%A2%81%49 VBスレで見かけたのをWSHでリライト。
Const adSaveCreateOverWrite = 2
Const adTypeBinary = 1
Const adTypeText = 2
Function GetLupin(DT)
Dim astWord, i, sDest, oFS
Set oFS = WScript.CreateObject("Scripting.FileSystemObject")
Set astWord = WScript.CreateObject("ADODB.Stream")
sTempFile = oFS.BuildPath(oFS.GetParentFolderName(WScript.ScriptFullName), oFS.GetTempName)
astWord.Open:astWord.Type = adTypeText:astWord.Charset = "Shift_JIS"
astWord.WriteText DT
astWord.SaveToFile sTempFile, adSaveCreateOverWrite
astWord.Close
astWord.Type = adTypeBinary:astWord.Open
astWord.LoadFromFile sTempFile
oFS.DeleteFile sTempFile
Set oFS = Nothing
Do Until astWord.EOS:GetLupin = GetLupin & "%" & Right("00" & Hex(AscB(astWord.Read(1))), 2):Loop
astWord.Close
Set astWord = Nothing
End Function
Set window = WScript.CreateObject("InternetExplorer.Application")
window.Navigate2 "
http://www.oak.dti.ne.jp/~niku/R3_temp.swf?inputStr= " & GetLupin(InputBox("タイトル表示したい文字を入力", "ルパン三世風タイトルメーカー"))
window.visible = True
cygwinが駄目なガッコのラボ内のWinマシンで ローカルマシンの階層の深いフォルダを共有にして、アクセスしやすくしてます。 \\lab11\my\experiment \\lab12\my\result 僕はadmin持ってるので、作業開始時に共有化するのですが ログアウトするとき、共有を切るのを忘れてしまいます。 そこで、スクリプトを書こうと思ったのですが、 WMIオブジェ使うみたいです!! しかし、情報すくないっす。共有化をネットワークドライブに割り当てる例は沢山あったけど…… どこか情報ありませんか?探してます。 また、ネットワーク共有をDOSから設定するためNTのコマンドってないですよね。
>>404 net share
とりあえずコマンドプロンプト開いて net help share でヘルプが見れる。
>404 WSHのリファレンス読むべし。 検索:WMI
Live2chで、自動的に、最新のテレ東スレを表示させるスクリプトを書いてみた。
'---------------------------------------------------
set IE=Wscript.CreateObject("InternetExplorer.Application","IE_")
IE.Navigate("
http://live3.2ch.net/weekly/subject.txt ")
do : WScript.Sleep 6300 : loop
sub IE_DocumentComplete(ByVal pDisp, URL)
dim surl,str,line,sstart,send,ic,WSHShell
send = -1 : ic = 0 : surl = ""
str = IE.document.body.innerText
IE.Quit
do
sstart = send+2
send = InStr(sstart,str,vbNewLine,1)
if 0=send then exit do
line = Mid(str,sstart,send-sstart)
ic = InStr(1,line,"テレ東",1)
if 0<>ic then exit do
loop
if 0<>ic then surl = "
http://live3.2ch.net/test/read.cgi/weekly/ " & Left(line,10) & "/"
set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run """C:\Program Files\Live2ch\Live2ch.exe"" " &surl
WScript.Quit
end sub
'---------------------------------------------------
いちおう動くので良かったのですが、不満というか疑問が。
2行目で Navigate したあとは、DocumentCompleteイベントを待つだけなのだが、
無駄ループさせないで終わらせるとイベントが受け取れない。
大した事はないとはいえ、無駄と分かってループするのはドーカと思うので、
イベントを待つだけの処理でスマートな方法ってありませんか。
このスレの300番あたりでも、関係ありそーな話は出てるみたいですが、
違う解決方法に話が移っちゃってるんで分かりませんでした。
>408 イベントハンドラに持っていってもらうのも一つの手だけど、(むしろHTML内スクリプトではそっちしか書けない) バッチらしい解決法で>39あたりに。 無論、書き方の好みだとは思いますが。
>408
IE.ReadyState が、4 (READYSTATE_COMPLETE)でないなら、
(もっと短い間隔で) Sleep を繰返す、とかは?
IE.Busy の確認も必要なのかな。
HTA にしてしまうとか、
<hta:application windowState="minimize">
<script language="VBScript" for="iframeName" event="onload">
' iframeName.document.body.innerText
window.close()
</script>
<iframe id="iframeName" style="display:none" src="
http:// 〜/〜"></iframe>
htaタグの属性で、もっと、IE.Visible が false と同じような指定が
あるのではと思うけど判らず。
> 403 を見て驚いた。VBS では、SJISコードを取れるのか、知らなかった。
それに、"ADODB.Stream" に文字コードを指定してるし。
<script type="text/javascript"> // HTML
var n, c = prompt('SJISコードは?','あ')
if(c){ execScript( 'n=Hex(Asc(c))', 'vbscript'); alert(n) }
</script> ファイルの文字コードを変えても、SJISコードが返る。
<job> <!-- .wsf --> <script language="VBScript">
Function SJisCharCode(c): SJisCharCode = Asc(c): End Function
Function fromSJisCharCode(i): fromSJisCharCode = Chr(i): End Function
</script><script language="JScript">
String.fromSJisCharCode = function(){ // String.fromCharCode() に合わせるなら?
for(var i=0, str =''; i<arguments.length; i++) str += fromSJisCharCode(arguments[i])
return str }///
String.prototype.SJisCharCodeAt = function(n){ // 文字列.charCodeAt(n) に合わせるなら?
return (code= SJisCharCode(this.charAt(n))) < 0 ? (code <<16 >
>>16 ) : code ; }///
WScript.Echo( fromSJisCharCode(33440) +'\n'+ String.fromSJisCharCode(0x82A0, 33442, 0x82A4)
+'\n'+ SJisCharCode('あ') // Asc(c) から戻ってくるのが、負数?、上位ビットの 1 を 0 に。
+'\n'+ (SJisCharCode('あ') <<16 >
>>16 )+'\n'+ 'あいう'.SJisCharCodeAt(0).toString(16) )
</script></job> 詰め過ぎ、ごめん。
SJISコードが判ったからといって、何か役に立つのと言われると困るけど。
ファイルに書き込もうとすると、エラー起こす文字を、? にするとか、、
var c = '\xa0'// を渡してみる
execScript( 'c=Chr(Asc(c))', 'vbscript'); alert(c) // ?(3f)になる
(長い文なら、window.clipboardData を使うとかの方が、、、)
次に、MSDN を(嫌々)見にいく事に。
//文字コード(セット)の変換、 src_filePath = "x:\\〜\\abc.xxx"; dest_filePath = "x:\\〜\\abc_after.xxx" src_charset = "" // 元のファイルの文字コード dest_charset = "" // 変換後の文字コード // 上二つには、"shift_jis" "iso-2022-jp" "euc-jp" "unicode" など var src_STM = new ActiveXObject("ADODB.Stream") var dest_STM = new ActiveXObject("ADODB.Stream") src_STM.Open() if(src_charset) src_STM.Charset = src_charset // 設定しなければ、"unicode" とみなされる src_STM.LoadFromFile(src_filePath) //var str1 = src_STM.ReadText(10); src_STM.Position = 0 //※ 10文字保存 dest_STM.Open() if(dest_charset) dest_STM.Charset = dest_charset // 設定しなければ "unicode" に変換 src_STM.CopyTo(dest_STM) //dest_STM.Position = 0; var str2 = dest_STM.ReadText(10) //※ dest_STM.SaveToFile(dest_filePath, 2) // 2 新規作成上書き src_STM.Close(); dest_STM.Close(); //WScript.Echo( (str1==str2) +'\n\n'+ str1 +'\n'+ escape(str1) +'\n\n'+ str2 +'\n'+ escape(str2) ) //※ スクリプト中で扱う分には、二つの文字列は同じ、ユニコード。 上では、元のファイルの文字コードがあらかじめ判ってないとならないが、 もし、何かファイルを開いた時、その文字コードを調べようとするなら、 var ascii_STM = new ActiveXObject("ADODB.Stream") ascii_STM.Charset = "iso-8859-1"; ascii_STM.Open() ascii_STM.LoadFromFile(filePath); var str = ascii_STM.ReadText(); ascii_STM.Close() WScript.Echo( escape(str) ); // ここからの判定の仕方は、?、 バイナリで開いても js からはお手上げ、vbs の AscB の様にはいかないみたい。
>411 、判らないけど、こういうような意味かな。
var maxSize = 50;
var FS = new ActiveXObject("Scripting.FileSystemObject"), errStr =''
for(var i=0, path, str, File, Stm, Re; i<WScript.Arguments.length; i++){
if(FS.FileExists( path= WScript.Arguments(i) )){
if( !(File= FS.GetFile(path)) )continue
if( !(Stm= File.OpenAsTextStream()) )continue; str =''
while(!str && !Stm.AtEndOfStream)str = Stm.ReadLine(); Stm.Close()
if(str){ if(str.length >maxSize)str = str.substr(0, maxSize)
str += (Re=File.Name.match(/\.[^.]+$/)) ? Re[0]: '';
if(File.Name !=str)try{ File.Name = str
}catch(e){ errStr += File.Name +' '+ e.description +'\n' } }///
}//
}if(errStr)WScript.Echo(errStr)
>412 >>16 まずった。
>>372 11 行目、
pW.document.title.replace 、document が抜けてた!
>412 16桁ずらして戻してなんてしなくとも、 var n, c; if(c = prompt('SJISコードは?','あ')){ execScript( 'n=Asc(c)', 'vbscript') alert( (n < 0 ? ((n + 65536)+'\n'+(n ^ -65536)) : n) ) } 数字の事で何故かなど考えたくもない(考えても、まっ白になるだけなのだが)。 かといって文字の事も考えたくはない。 var ascii_STM = new ActiveXObject("ADODB.Stream") ascii_STM.Charset = "iso-8859-1" function 文字コード判定(filePath){ ascii_STM.Open(); ascii_STM.LoadFromFile(filePath) var str = ascii_STM.ReadText(); ascii_STM.Close() if(/^[\xfe\xff]{2}/.test(str)) return "unicode" var high = false, esc = 0 // 0x80 以上のバイトと、0x1b(esc) の有無、 for(var i=0, ch; i<str.length; i++){ ch = str.charCodeAt(i) if(ch > 0x7f){ if(ch !=0x80 && ch<= 0x9f) return "shift_jis" // [0x81-0x9f] がある high = 1; i++ } else if(ch==0x1b) return "iso-2022-jp" // 0x1b(esc)、(数が偶数あるとかに?) }/// if(high)return "euc-jp"; return "iso-8859-1" }/// これでは使い物にならないか。 ファイル無理やり覗くと、"utf-8" は、0xEn が、2-3 バイト毎に現われるようだし、 "utf-7" は、+ と - に2バイト文字部分が囲まれているようなのだが、 どうやって他と区別できるのか、、しかしユニコードかと思っていたら全く訳判らない。 スクリプト書くのは、こんな事したいからじゃないし、 内側の仕組みなんかを知りたいからじゃない等と言ってみたくなる。 でもWindowsから教えてくれるサービスがないようなので、自前で何とかしないと、 混在が普通とすれば、ファイルまとめて処理する時など、不便この上ないでしょ。
417 :
411 :02/10/22 09:52 ID:eAcC+WT+
>>414 「一行目→ファイル名」バージョンから
「任意の行、情報→ファイル名」に変更したいのですが、
while(!str && !Stm.AtEndOfStream)str = Stm.ReadLine(); Stm.Close()
をファイル全体行読み取りに変更した後、どのように書けばいいのか
検討が付きそうにないです。なにかいいサンプルあれば教えてください。
それから、みなさんはWindowsで書いたスクリプトを Unix上でも使いたい場合はUnixで動くインタープリタは何使ってます? NJS JavaScript Interpreter とかですか?有名どころとして。
御願いです。助けてください。
じつは、
ttp://member.nifty.ne.jp/masarl/article/ruby-win32ole/excel/xlsjoin.rb にあるxlsjoin.rbというtoolをCygwin環境で使っているんですが、このtoolを
使うことを前提に後輩の卒論のアンケートファイルのフォーマットについて
アドバイスして、このツールを紹介しました。Cygwin環境だから
xlsjoin.rb a.xls b.xls c.xls
がドラッグアンドドロップで出来るものと思っていましたが、標準のruby
ではそれが出来ないみたいなんです。僕のアホな勘違いでした。
そこで、思いついたのが
1.WSH経由でこのrubyスクリプトを呼び出す
2.WSHでこのrubyスクリプトをラッピングする。
3.VBSでxlsjoin.vbsを書いてしまう。
のどれかです。自分で勉強しようと思ってましたが、忙しい後輩に迷惑が
かかると大変なので、皆さんに何かアドバイスを頂きたくてここへきました。
なんでも結構です。アドバイス頂けませんでしょうか?
あ、後輩はUNIXのコマンドをいまさら覚えている暇はなく、 いちいちこのためだけにCygwinのシェルを立ち上げれないわけです。 #あと、大学のすべてのマシンにCygwinが入っていないので、話がややこしい。
>419 ruby知らないんだけど、とりあえず1.に1票。リライトはできる限り避けないとね。 あと、無確認な予想だけど適切なモジュールが入っていないと動かなくない>xlsjoin.rb まぁそこはクリアしたと仮定して、 For i = 0 To WScript.Arguments.Count - 1 sCommand = sCommand & " " & WScript.Arguments(i) Next WScript.CreateObject("WScript.Shell").Run "ruby xlsjoin.rb" & sCommand か。 他のは後々困った事があり次第ということで。 Cygwinが入っていないと、どのように困る可能性がでてくると言うのでも可。 #HP見た限りそういう動作させるなら、自分だったらExcelのVBAで作るけどなぁ。
エクセルからファイルを開くダイアログを呼び出してますが、開くディレクトリを指定できないでしょうか?
>422 前もってカレントディレクトリを指定する。
$ls 今までは、例えば、 c:\tmp(/cygdrive/c/tmp) $ruby xlsjoin.rb a.xls b.xls c.xls としていたのを今回、 c:\tmp(/cygdrive/c/tmp)にxlsjoin-wrap.vbsという名で 頂いたものを置いてみました。複数ファイルをドロップすると 何もおきませんでした。パスの問題でしょうか?
426 :
名無しさん募集中。。 :02/10/23 12:57 ID:QEkxVrDu
>425 申し訳ない。何度か書いているけど、Cygwin関係分からないんだ。 この単純なコマンドラインでダメなら、ばっちり引っかかっているんだろう。 もし答えられるとしても、誰かのフォローがあった後になると思う。(その時点では既に役には立たないだろうが) あと確認なんだけど、1.このコマンドラインはDOSプロンプト上で実行出来るのか。 2.require 'getopts' はいいの? 誰か続きHelpお願いするage。
427 :
425 :02/10/23 13:47 ID:8iCBDeci
>>426 丁寧にどうもです。
僕がrubyにこだわった理由はコマンドラインから実行できるからです。
xlsjoin.rb -o all.xls hoge-*.xls
みたいにshellのグロビングが使えたり、他のツールとの関連が容易だったり
するからです。
でもじつは、ほぼ同じ働きをするVBAコードがあるのですが、
VBAってコマンドラインから実行できないはずですよね?
このコードをVBSから呼ぶようにすればいいと思いますが、やり方判らないんですよ。
そのコード貼った方が話早いでしょうか?
428 :
横レス :02/10/23 14:05 ID:m2YU9OWm
>>425 私は以下の手順でできました.
1. Cygwin 版 Ruby と win32ole をインストール.
2. C:\cygwin\usr\local\lib\ruby\site_ruby に xlsjoin.rb,file-win32.rb,
win32ole-ext.rb,excel.rb をコピー.
3. デスクトップに以下のショートカットを作成.
リンク先 : C:\cygwin\usr\local\bin\ruby.exe C:\cygwin\usr\local\lib\ruby\site_ruby\xlsjoin.rb
作業フォルダ : "C:\Documents and Settings\fumihiko\デスクトップ"
4. マイ ドキュメント フォルダに a.xls,b.xls,c.xls を作成し,これらを
3. のショートカットにドラッグアンドドロップ.
5. デスクトップに xlsjoin.xls が作られる.
環境変数 PATH や RUBYPATH が正しく設定されていれば、ruby.exe や
xxlsjoin.rb へのパスは省略できます。が、自信がないならフルパスを指定
してください。
wsh から呼び出したりラッパーを作ったりする必要はありません。
# >419 の質問の仕方では、具体的に a.xls,b.xls,c.xls を何にドロップした
# のか、どう上手くいかなかったのか分からないです。
429 :
422 :02/10/23 20:12 ID:0JxvCyJR
カレントディレクトリの設定をしようとしましたが、WSHで設定してもNG。 エクセルでやろうとしてもやり方が悪いのかエラーで止まってしまいます。 どういう書式でやればWSHでエクセルのカレントディレクトリを変更できるのでしょうか?
>427 C:\book1.xlsに、 Sub test(data1,data2) Worksheets("sheet1").Cells(1, 1) = data1 Worksheets("sheet1").Cells(1, 2) = data2 End Sub というマクロがあるとして、VBS側に Dim oExcel Set oExcel = WScript.CreateObject("Excel.Application") oExcel.Workbooks.open "C:\book1.xls" oExcel.Run "test","data1","data2" Set oExcel = Nothing で、VBSからVBAマクロを引数付で動かせます。あとは工夫次第でいかようにも。 >428 横レスthx。なんとなくどこら辺に問題を抱えているのかが見当がついた。 確かめていないし、確実な事はこちらの方からは何もいいだせないけれどね。 >429 まぁ、ひとまずおちけつ。こんなコードではエラーも出ないというところまで絞ってから、 積み重ねていった方が良く出来る。 VBAのサンプルドゾー。 Sub test() ChDir "C:\WINNT\SYSTEM32" s = Application.GetOpenFilename() End Sub
Dim StdIn, StdOut Set StdIn = WScript.StdIn Set StdOut = WScript.StdOut Set xlObj = CreateObject("Excel.Application") xlObj.Visible = True xlObj.Workbooks.add Dim l As Integer, i As Integer l = 0: i = 0 Do While Not StdIn.AtEndOfStream str = StdIn.ReadLine ss = str.Split(" ") For i = 1 To ss.Length xlObj.ActiveSheet.Cells(l, i) = str(i) Next i l = l + 1 Loop
432 :
431 :02/10/24 03:26 ID:iq8e0+DH
標準入力から読み取って、スペースを区切りにして excelのセルに入れていくコードがわかりません。 上でエラーになりました。
>432 コードを見てもまだ絞りきっていないようだから今の段階ではエラーの行数を見て潰すしかないね。 たとえば、SplitメソッドはVBSにはない。Split関数ならある。 そもそもSetで代入しない物はVB系では全て値型変数であって参照型オブジェクトじゃない。 値型変数にはメソッド、プロパティは存在しない。 同様に値型配列変数にLengthプロパティはない。UBound関数で上限を取得する。
434 :
427 :02/10/24 22:57 ID:doXOA7zL
>>428 アドバイス有難うございました。
ショートカットを利用すれば出来ることなんですね。
なんとなく知っていたものの今回は思いつきませんでした。
助かりました。
>>430 頂いたコード試しました。これはかなり便利ですね。431にあるような
標準入出力が使えれば、かなり便利にExcelVBAが利用できますね。
頑張って勉強しようと思います。
ところで、430にあるコードですが、スクリプト実行後も
Excelのプロセスが残りません?僕の環境だけでしょうか?
以下のようにして保存すればいいのかな?(但し動かない。意味不明エラー)
Dim oExcel
Dim aa As Workbook
Set oExcel = WScript.CreateObject("Excel.Application")
Set aa= oExcel.Workbooks.open "D:\z\my.xls"
oExcel.Run "est","data1","data2"
aa.SaveAs "D:\z\my.xls"
Set oExcel = Nothing
>434 2:VBSではAs句はつかえません。 4:参照をセットする時は引数を括弧でくくる必要があります。 5:estはコピペミスでしょうか? それとチョンボ。プロセスはこのままでは残りますね。 Excelの開放については、罠が結構あります。 一番見て簡単なApplicationオブジェクトレベルのものに引っかかってしまった状態。 Nothingする前に oExcel.DisplayAlerts = False aa.Save oExcel.DisplayAlerts = True oExcel.Quit が必要です。 つーかデバッグ時は.Visible = Trueしとけって>自分
436 :
名無し~3.EXE :02/10/26 11:30 ID:hRhobfJI
Cygwin は Windows 標準装備じゃないから除外しませんか?
こんな質問過去にありましたか? 例えば、2chスレをブックマークに登録する時に最後のl50ってのを 付け忘れて、いちいちFavorite開いて、右クリックして…… のような操作がめんどくさいのでコマンドラインや 「ファイル名を指定して実行」などからWSHスクリプト走らせて操作するって できますか?
>>437 favoriteへのショートカットつくっとくしか早い気がする
favoreteはエクスプローラだと開くのに数秒待たされます
>436 コマンド(DOS)プロンプトに重なるとこは取れます。コマンドライン・標準入出力ならWSHと連携も出来るし。 もちろん純粋にCygwinの問題に関しては既に誘導もあることだし放置ということで。 >437>439 それが便利なのかよくわからん。 出来ることと、やれば省力または定型化出来ること。メリットのあることを考えてみよう。 IEのお気に入りの変更かい? そんなにたくさんはないような気がするんだが。 見当違いかもしれないのでちょっと判断保留。
>>437 ・過去にそのような質問は(おそらく)無かった
・そのようなスクリプトは(おそらく)作成可能。
誰も作ってはくれないと思うが(作ってくれという依頼でもないし)、
作成自体は可能だと思うので、挑戦してくれ。
作成できたら発表してみると、誰かが助かるかも知れません。
ただ、2chに限定して考えてるなら、
専用ブラウザを使ったほうがいいと思うな。
>>437 つーか「最新50」のアンカーを対象にお気に入り登録したほうが賢明。
443 :
431 :02/10/28 16:17 ID:ByqdDmEP
スペース区切りではない(vbTAB)けどできました。tsv2xls.vbsかな? ----------------- Option Explicit Dim WshShell:Dim objArgs:Dim strPath Set WshShell = CreateObject("WScript.Shell") Set objArgs = WScript.Arguments If objArgs.Count <> 1 Then MsgBox "Usage : cscript tsv2xls.vbs [outputfile]" Else strPath = WshShell.CurrentDirectory & "\" _ & objArgs.Item(0) Call TsvStdIn2Xls(strPath) End If
444 :
431 :02/10/28 16:17 ID:ByqdDmEP
Sub TsvStdIn2Xls(strPath) Dim StdIn: Dim xlApp: Dim wbNew: Dim wsNew: Dim rngDst: Dim vntData: Dim strData Set StdIn = WScript.StdIn: Set xlApp = CreateObject("Excel.Application") Set wbNew = xlApp.Workbooks.Add: Set wsNew = wbNew.Worksheets(1): Set rngDst = wsNew.Cells(1, 1) Do While Not StdIn.AtEndOfStream strData = StdIn.ReadLine vntData = Split(strData, vbTab) rngDst.Resize(1, UBound(vntData) + 1).Value _ = vntData Set rngDst = rngDst.Offset(1) Loop wbNew.SaveAs strPath: wbNew.Close End Sub
445 :
431 :02/10/28 16:19 ID:ByqdDmEP
$ dir | cscript tsv2xls.vbs out.xls みたいに使う。
446 :
431 :02/10/28 16:21 ID:ByqdDmEP
なんどもすみません。 Unixみたく、cscriptって省略できないんですか? 先頭に #!c:\winnt\cscript.exe 入れるみたいにして
448 :
431 :02/10/28 21:14 ID:ByqdDmEP
この場合、 ASSOC .vbs=VBScript FTYPE VBScript=cscript.exe %1 %* のようにしていいのでしょうか? なぜか、新たにエラーが出るようになりました。 #どういうことなんだろう……
>442がいいことを言った。 逆転の発想だけど キャッシュを利用するなら処理対象が多量にあるし、他の利用もありそう。更に2chブラウザでは想定外の隙間を埋められるという意味でも良いかな。 アプローチとしては、 キャッシュから2ちゃんのアドレスをあさる。 見つけたら全て所定のディレクトリ(Favoritesの子ディレクトリを想定)にショートカットを作成。と。 最初の案とはえらく違うがこんなもんではいかがですか?>質問者 >446 wscript //h:cscript で既定のスクリプトホストを変更できるけど。 すでに447さんが答えてた。 >448 今動いているものが掲載したものならエラーのメッセージと行数を告げた方が良いのでは?
450 :
431 :02/10/28 23:13 ID:ByqdDmEP
@V:$ cat abc.tsv 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 @V:$ cat abc.tsv | cscript.exe tsv2xls.vbs output.xls Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. 入力エラー: ファイル拡張子 ".vbs" を持つスクリプト エンジンはありません。 @V:$ cat abc.tsv | tsv2xls.vbs output.xls ./tsv2xls.vbs: Option: command not found ./tsv2xls.vbs: Dim: command not found ./tsv2xls.vbs: line 5: syntax error near unexpected token `CreateObject("' ./tsv2xls.vbs: line 5: `Set WshShell = CreateObject("WScript.Shell")'
451 :
431 :02/10/28 23:15 ID:ByqdDmEP
$ cat abc.tsv | cscript.exe tsv2xls.vbs output.xls で通った段階で、 $ cat abc.tsv | tsv2xls.vbs output.xls がしたいがために、 ASSOC .vbs=VBScript FTYPE VBScript=cscript.exe %1 %* を実行しました。すると上のエラーが出るようになりました。
452 :
431 :02/10/28 23:23 ID:ByqdDmEP
判りました。 ただ、ファイル属性を変更するとき 右クリックするのが面倒なときはよくattribコマンドを 1.コマンドライン 2.ファイル名を指定して実行 などから実行しますが、それと同じ感じで、 「ファイル名を指定して実行」からコマンド打てれば、 ショートカット名の補完も効くし便利、と思いました。 繰り返しますが、 「ファイル名を指定して実行」から hoge \WINNT\system32\dummy のようにしての「dummyのプロパティ」は 開けないのですよね?