お前ら、WindowsScripting使ってますか? Part3
1 :
名無し~3.EXE :
03/07/22 08:22 ID:mXvbxGuv
2 :
名無し~3.EXE :03/07/22 08:22 ID:ltGk05DV
森山 直太朗 【さくら(独唱)】 サクラッ サクラッ ヽ(゚∀゚ )ノ 彡 (桜 )ヘ ヽ( ゚∀゚)ノ < ( 桜)ヘ 彡 <
3 :
名無し~3.EXE :03/07/22 08:23 ID:mXvbxGuv
4 :
名無し~3.EXE :03/07/22 08:24 ID:mXvbxGuv
5 :
名無し~3.EXE :03/07/22 08:24 ID:mXvbxGuv
中途半端なスレタイ
7 :
名無し~3.EXE :03/07/22 08:45 ID:L02HH9Fr
Host
.zip .cabファイルの圧縮展開はどうやればいいですか? コマンドラインではなくCOMでやりたいのですが。
>1 乙 結構参考にしているのでスレ立って良かった!
WindowsScriptingでぐぐると8件しか出てこない罠
13 :
名無し~3.EXE :03/07/22 13:20 ID:b0tmSvvu
アクセスでデータベースのデザインビューの説明の項目を 取得したいのですが、どうすればいいでしょうか。
14 :
9 :03/07/22 13:35 ID:kJLa1zTg
>>11 できればOS標準の機能を使いたいのですが。
圧縮解凍ができるAPIとかあったっけ?
16 :
11 :03/07/22 14:17 ID:jMrqRMix
18 :
名無し~3.EXE :03/07/22 21:13 ID:7n8zB16V
1)WSH(VBS)でIEで表示しているページを印刷させたいのですが、どのようにすれば良いでしょうか? 2)また、現在表示してるページの文字列(ソース)を取得するにはどうすれば良いでしょうか? 教えて君で申し訳ないのですが、このような情報をどうやって調べるかも教えていただければ助かります。 会社の仕事で、トップページを指定すると全てのリンクをたどって印刷する必要があるのです。 宜しくお願いします。
19 :
13 :03/07/22 22:04 ID:kSIjvv99
1。ExecWB でできますがなにか? 2。innertextとか。。 答えてあげたので、漏れの答えもキボン
20 :
1様 :03/07/22 23:01 ID:mXvbxGuv
>>18 2) の回答です。Windows2000で動作確認。
------------------------------------------
set http = createobject("msxml2.xmlhttp")
sURL = "
http://www.microsoft.com/ms.htm "
http.open "GET",sURL,false
http.send
sHtml = http.responsetext
msgbox sHtml
------------------------------------------
>>このような情報をどうやって調べるか
臆せずに英語サイトを徘徊すれば、すぐに見つかります。
今回は「vbscript htm get source」でぐぐりましたよ。
確かそれってUnicodeだよね?
22 :
1様 :03/07/22 23:42 ID:mXvbxGuv
23 :
4864968 :03/07/22 23:45 ID:K93L1mQj
まずいとは言ってないけど…
25 :
平民 :03/07/23 23:05 ID:WKUX6Oxz
現在開いているIEのウインドウの右上の[X]が押されるのを認知してイベントを起こす方法、解る神様いらっしゃいませんか???
>>25 ウインドウハンドルを監視する。
もしくは、IEをスクリプトから起動すれば、終了後になんらかの処理が可能。
言語に関係なく、アルゴリズムで悩んでるやつ多すぎ。
Dim objIE Set objIE = WScript.CreateObject("InternetExplorer.Application", "Event_") objIE.Visible = True objIE.GoHome() Do WScript.Sleep 100 Loop Sub Event_OnQuit() MsgBox "閉じるイベント" End Sub
28 :
平民 :03/07/24 07:28 ID:YTx4JcSn
回答ありがとうございます。 回答いただいたスクリプトについてですが これをIEのhtmソースに組み込む場合、Wscript.Sleepが使えないと思うのですが どのようにしますか?
29 :
27 :03/07/25 01:37 ID:9cGWvKD0
htmlでやるのなら、シンプルにbodyタグのonUnload属性ではダメなの? ページ切り替え時もイベント起きるけどね。
30 :
平民 :03/07/30 22:22 ID:g73wqP0y
結局それでやりました。age
31 :
直リン :03/07/30 22:23 ID:25+DqMIw
なんかインストの後しばらく使ってると、どこかが壊れてしまうのか まともに機能しなくなって、ブラウザでサイト開いたときや 右クリックでスクリプト使うメニュー動かしたときにエラーがでるようになる。 その度に js56njp.exe や WindowsScript56JP.exe を当て直して いちおうはエラーがでなくなるけど、ひと月くらいでまたおかしくなる。鬱…
∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
未決あったんちょっと見逃した。悪い。解決したかもしれないが、とりあえずサンプルだけ書いとく。 >13 Const dbHiddenObject = 1 Const dbSystemObject = &H80000002 Set oFS = CreateObject("Scripting.FileSystemObject") Set Application = CreateObject("Access.Application") Application.OpenCurrentDatabase "C:\Documents and Settings\hogehoge\My Documents\toaru.mdb" Set Database = Application.CurrentDb For Each TableDef In Database.TableDefs With TableDef If ((.Attributes And dbSystemObject) Or (.Attributes And dbHiddenObject)) = 0 Then sOutput = sOutput & .Name On Error Resume Next sOutput = sOutput & "/説明:" & .Properties("Description") On Error GoTo 0 sOutput = sOutput & vbNewLine End If End With Next oFS.OpenTextFile("toaru.lst", 2, True).Write sOutput
スクリプトにもかかわらずタイプ量が無駄に多いのはいかがなものか。
これをCで書いたらどれくらいの長さになるもんだか…
>>35-36 たぶんどっちの言ってることも正しい(w
スクリプトといえど目的によってはそれなりのコーディング量になってしまうのであれば、
スクリプトの魅力は半減だし、いっぽうで、言語でコーディングすれば、
やっぱりそれなりのコーディング量になるわけで。
「こんなことできないかな」が、スクリプト数行でできてしまうのは、スクリプトの醍醐味だし、
7行プログラミングじゃないけど、短くて実用的なものが書けたときはスクリプト冥利に尽きるね。
38 :
名無し~3.EXE :03/08/04 23:04 ID:rze7uNKQ
.chmファイルにキーワードを指定して開きたいんですが コマンドライン引数の指定の仕方が分かりません。 どう指定すればいいですか?
>>38 開いてから
SendKeys('%(NW){END}+{HOME}{DEL}KEYWORD{ENTER}');
で流し込めば?
>>38 hh.exeを前提としているのであれば、引数にキーワード指定はないので
コマンドラインからの実行は諦めるしかない。
>>40 アプリはどうやってキーワードを渡してるんですか?
42 :
13 :03/08/06 20:59 ID:b2M0lgd/
>>34 ありがとう。
見捨てられてるかとオモターヨ。
なぜか、漏れのAccessでは、
テーブル名しか取得できなかった。
多分、Fields コレクション取得してないのが
原因だと思うのだが、どうすればイイ?
たびたびスマソ。
>42 Ifブロック中の最後の方で For Each Field In TableDef.Fields sOutput = sOutput & "フィールド: " & Field.Name & vbNewLine On Error Resume Next sOutput = sOutput & "/説明:" & Field.Properties("Description") & vbNewLine On Error GoTo 0 Next 動作は確かめてないけど、こんな感じで良いんじゃないのかな。 ここいらを詳しく知りたいときはDAOのオブジェクトモデルを調べること。
45 :
42 :03/08/07 15:39 ID:dRZ2D5+c
>>44 サンクス。
今度はうまく逝ったようだ。
> ここいらを詳しく知りたいときはDAOのオブジェクトモデルを調べること。
DAOならアヤたんとこで知ってたんだが、Accessのオブジェクトから
取得する方法は知らなんだ。
勉強になたーヨ。
ShellUIHelperのAutoScan メソッドの使い方 を教えてください。
47 :
名無し~3.EXE :03/08/09 12:10 ID:ksFxcMI1
Win98/IE5.5sp2、WSH ver5.1を使ってます。
2chのお気に入りスレのログを定期的に保存するスクリプトを書こうと思っています。
2chサーバの場合、存在しないファイルにアクセスすると
404 Not Found でなく
302 Found と Location: ヘッダ等を返してきますが、
とりあえずVBScriptでこのようなものを書いてみて実行すると
---
Set xh = WScript.CreateObject("microsoft.xmlhttp")
xh.Open "HEAD", "
http://pc2.2ch.net/hoge ", False
xh.Send
Msgbox xh.Status
---
ステータスとして HTTP/1.1 302 Found を返してくれず、なぜか
Location で飛んだ先までアクセスして HTTP/1.1 200 OK を返してきてしまいます。
メソッドをHEADでなくGETにしても同じでした。
これは microsoft.xmlhttp の仕様なんでしょうか?
最初に返ってくるステータスを取得する方法はないでしょうか?
#basp21 の W3get なら戻り値を使うだけですぐできますが、
#なるべくそういった追加のソフトを使わないで実現したいのです…
48 :
名無し~3.EXE :03/08/09 12:45 ID:/nGaS3A5
そのパーサのバグってどんな内容ですか?
>46 ShellUIHelper::AutoScanなら板&スレ違い、APIかC++関係で聞いて下さい。 external.AutoScanメソッドならスクリプトがらみでこっちでも良いですけど。 >47 ウチの環境では取得できない場合、エラーが出る。(Win2k,IE6,WSH5.6,msxml3.dllのver8.30.9926.0) だので想定の域を出ないのだが、Request-URIとContent-Locationを比較するってのは解決方法にはならないかな? >48 MDACは修正効かない場合があるから逆じゃなくてよかった。
51 :
47 :03/08/10 01:41 ID:NdwTzMAI
>>50 レスどうもです。
GetAllResponseHeaders メソッドを使って Content-Location ヘッダを探すということですか?
しかしレスポンスヘッダには Content-Location が見当たらないようです…
っと、書きながら気づきましたが、datを落とすのだけが目的なら
Content-Type が text/plain(2chのdatファイルの形式) か
text/html(2chの302エラーページはほとんどこの形式?) かで判断できそうです。
しかし場当たり的で気持ち悪い。
Perlでも導入してはどうです。 いろいろ出来ますし、他のOSに移行しても過去の資産が有効活用できます。
53 :
46 :03/08/10 10:09 ID:1vl5ww6v
>>50 > external.AutoScanメソッドならスクリプトがらみでこっちでも良いですけど。
オブジェクトとしては同じなので、そちらで結構です。
(前者がVBScript、後者がJavaScript)
よろしくお願いします。
54 :
11 :03/08/10 10:50 ID:/T1SkZv4
55 :
11 :03/08/10 11:21 ID:/T1SkZv4
>>47 私も>50さんと同じ環境なため、やはり同じくxh.Sendの時点で「アクセスが拒否されました」という
エラーになります。
でもエラーというのもおかしな挙動だなぁ。IEで接続する限りは、ちゃんと302を返すんですが。
ちなみに、ドキュメントが無い場合404を返すWebサーバーなら、問題なくxh.Statusに404が入ります。
302とXMLHTTPは相性が悪い(?)んですかね。
私は半ば諦めモードで、httpを扱うときはBASP21に頼ってます。
で、datを取得するという目的に限定するならこんなのはいかがでしょう。
たとえば
http://servername.2ch.net/dat/threadkey.dat の生存を確認するには、
http://servername.2ch.net/test/read.cgi/bbsname/threadkey/1 をGET(これは必ずHTTP/1.1 200 OKを返す)して、
レスポンスに「そんな板orスレッドないです。」という文字列があれば、
threadkeyは存在しない。
「このスレッドは過去ログ倉庫に格納されています。」という文字列があれば、
threadkeyはdat落ち。
その他ならスレは生存している。
のように判別する手もあります。もちろん決してスマートではないですが。
(あと、人大杉の時も使えない手だな)
56 :
48 :03/08/10 11:24 ID:8qzH3XTz
57 :
11 :03/08/10 11:48 ID:/T1SkZv4
>55の補足ですが、2chのCGIを呼ぶときは、こちらのリクエストヘッダがデタラメだと、 容赦なく302を返してきます。 幸い、XMLHTTPはリクエストヘッダを省略時でもそこそこ適当に付けてくれるので、 デフォルトのままでも弾かれることは無いようですが。 GET / HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.0.3705; .NET CLR 1.1.4322) Host: 127.0.0.1 Connection: Keep-Alive デフォルトではこんな感じです。User-AgentはsetRequestHeaderメソッドで上書きしない限り、 IEと同じになります。(.NET Framework 1.0に1.1を上書きしたのがバレますね) IEのキャッシュに残ってればIf-Modified-Since:なんかも勝手に付けてくれます。 …それより、XMLHTTPが日本語テキストのレスポンスをまともに デコードしてくれないという問題があることを忘れてた(w
58 :
46 :03/08/10 20:25 ID:1vl5ww6v
>>11 さん
ありがとうございます。
いままでの疑問が氷解しました。
自分の場合は、.comのURLに飛ばされました。
いま応用とか考えていますが、IEのオブジェクト
(ShellWindowsやInternetExplorer.Application)
とかにこれを利用するには、どうすればいいでしょうか。
ダイヤルアップネットワークを制御することってWSHでできますか? (接続したり、切断したり)
バッチですら出来まっせ。 rasphone.exe
61 :
59 :03/08/12 00:13 ID:6yVB1Lxv
ttp://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list12.shtml を発見。これを参考にして↓を書いてみました。Win98用。
---
Set Shell = WScript.CreateObject("Shell.Application")
For Each oItem In Shell.NameSpace(17).Items
If oItem.Name="ダイヤルアップ ネットワーク" Then
Set oFolder=oItem.GetFolder
For Each oSubItem In oFolder.Items
If oSubItem="接続/切断したいプロバイダの接続設定名をここに入力" Then
If oFolder.GetDetailsOf(oSubItem,3)="接続" Then
oSubItem.InvokeVerb "切断(&I)"
Else
oSubItem.InvokeVerb "接続(&O)"
End If
End If
Next
Exit For
End If
Next
---
ただこれだと、切断は一発ですが、接続の時にダイアログの「接続」ボタンを押す必要が…
もう少しがんばってみます。
失礼しました。
62 :
59 :03/08/12 00:16 ID:6yVB1Lxv
入れ違いになってしまいました。
>>60 windowsのフォルダ内にはそのファイルがありませんでした。
63 :
59 :03/08/12 00:19 ID:6yVB1Lxv
win98では rundll32.exe rnaui.dll,RnaDial エントリ とやるんですね…無知で恥ずかしい。
64 :
59 :03/08/12 00:30 ID:6yVB1Lxv
Else oSubItem.InvokeVerb "接続(&O)" End If だったところを Else oSubItem.InvokeVerb "接続(&O)" Wscript.sleep 1000 WshShell.AppActivate("接続") Wscript.sleep 1000 WshShell.SendKeys "~" End If で解決ですね…スレ汚し失礼しました。
65 :
名無し~3.EXE :03/08/21 23:56 ID:lcHR3fX/
見よう見まねでVBSをつかってますがWMIに突入しようとするといきなり訳わからなくなりますね・・・ やはりきちんとVBから勉強すべきなんでしょうか? VB6.0とか.netとかありますけどどっちがいいですかね
66 :
名無し~3.EXE :03/08/22 01:33 ID:yI6YAMhl
MS03-033 あげ MDAC2.5-2.7 が影響を受けるそうです(2.8 は影響を受けない)。
67 :
66 :03/08/22 01:36 ID:yI6YAMhl
.NET Framework標準搭載なLonghornがでたら wshの位置付けってどうなるんだろ。 尻すぼみになるのかね。
ショートカットのようにアプリ名、引数、ディレクトリを指定して 実行するにはどうすればいいですか? WScript.ShellのExecやRunではディレクトリは指定できないようです。
>>69 その起動したいアプリにはディレクトリ指定するオプションはないの?
>69 全てを設定したショートカットを Run する
71補足 ショートカットはスクリプトで作成可能 (WshShell オブジェクトのCreateShortCutでWshShortcutオブジェクトを生成し、WorkingDirectoryプロパティ等を設定)
>>69 実行する前ににカレント ディレクトリを変えてあげれば良いのでは?
74 :
名無し~3.EXE :03/08/30 09:02 ID:YVCpZKrK
VBSで、ある特定のフォルダの共有設定をしたりその設定を解除したり みたいなことは可能でしょうか。 (フルアクセスかリードオンリーかというような細かいところも含めて)
75 :
74 :03/08/30 18:10 ID:4kf09Ugs
ヘルプファイルみたいなもの見つけて、「WSH ネットワーク管理者サンプル スクリプト」って項目見てたら何だかそれっぽい解説がのってました。 ちょっとかじりついてみます。 失礼しました。
あと、DOSコマンドの NET SHARE を叩いてみるとか。 これはあんまり細かい設定はできないんだっけ。
難問ですが、IIS(ASP)のWEBに埋め込んだスクリプトから Exchange(MAPI)にログオンして会議通知を出すことってできないでしょうか。 神様教えてください。
埋め込みスクリプトじゃなくて、サーバーサイドのASPから BASP21でも叩いて単純にメール発射するだけじゃだめ?
79 :
77 :03/09/08 20:19 ID:TxNAMb3v
あなたはBASPでMAPI操れるんですか。 そうでないとしたら、仕様要求が満たされてないです。 しかしなぜBASP?メールならIISの標準機能で間に合わせませんか?普通…
WEBに埋め込んだスクリプトっていまいち意味がわからんけど、 MAPI.Session でぐぐればちょこちょこ出てくるやつとは違うのか?
>81 ちょっとまじめに考える。まだスクリプトは作らんけどね。 また、現時点では作るか作らないかの判断も保留にさせていただく。 手始めに要求仕様の分解から。 >今まで焼いた動画を これは、誰か管理しているの? 管理していないのだとすればカタログから作る必要がある。 現データがHDDにあるという前提で一対一の関係? フォルダ構成は同一? その中のファイル構成は漏れ・別焼き等は無い? こういった場合には、よくボリュームラベルがIDに使われる。同一のボリュームラベルは無い? 現状のカタログデータに参列していない場合の追加と削除はどのように考える? >ファイル名+焼き.txtを作り スキーマはどうする? 特に指定が無ければMD5等のハッシュ、焼き先のフルネーム、更新日時が加算されたカタログを作成することになるだろう。 真空波動研というアプリがどういったスキーマを生じるさせるのか? 全てを列記する必要がある。 一対一の対応で無い場合の処理は? また、こういった場合自分はXMLで定義するのが好き。上記程度は必須でいいけど それ以上細かい打ち合わせしなくても大抵の場合先方で加工できるからね。 >元の動画を削除 同様に一対一の対応で無い場合の処理は? ぱっと見考えられるのはこのぐらいかな。ルーチンワークといっても手作業と言えるところは全てチェックする。 またこういうものは択一化したほうが後で整理されていて見やすいと思えるから、できれば作業も固定してこれだと言えるやり方をもっておく。
DExploreをスクリプトから操作したいんですが、 スクリプトが終了すると作成したDExploreも終了してしまいます。 これをIEのようにスクリプトが終了しても作成したプロセスが残るようにする方法はあるんでしょうか?
>>83 小難しく考えすぎな気が。スクリプトなんだからこの程度じゃ駄目?
yakizumi.js とかで保存して動画ファイルをD&D。
消した動画ファイルはゴミ箱に入らない無いので注意。
var Shell = WScript.CreateObject( "WScript.Shell" );
var Argu = WScript.Arguments;
var Fso = new ActiveXObject("Scripting.FileSystemObject");
var IE = new ActiveXObject("InternetExplorer.Application")
IE.Navigate("about:blank");
for ( var i = 0; i < Argu.length; i++ ) {
var target = Argu.Item(i);
Shell.Exec( "C:\\temp\\sinkuhadouken\\SinkuHadouken.exe " + target );
WScript.Sleep(800);
Shell.Sendkeys( "^c" ); WScript.Sleep(100);
Shell.Sendkeys( "%{F4}" ); WScript.Sleep(100);
var data = IE.Document.frames.clipboardData;
var file = Fso.CreateTextFile( target + "_焼き.txt" );
file.WriteLine( data.getData("text") );
file.Close();
Fso.DeleteFile(target);
}
86 :
83 :03/09/15 09:48 ID:vBMxDNYv
>84 確認するけどDExplorerってMicrosoft Document Explorerの事だよね。 Runメソッドでそんな振る舞いをするの? ウチでは普通に起動するのだが、別の操作方法があるか、そもそも別物? 解答ではなくすまないが、.NETでWSH Helpクン見たいな事ができないか模索しているとこなので。 >85 おお、すまねっス。 風呂敷広げすぎて、下手したら今週か来週の休日半日ぐらい潰すとこだった。 多分そこまで要求していないとは思ったけど、使い方が分からない以上必要十分を満たすまでは提示して無いと。 OLSで前出で言った感じ+サムネール機能まで備えたものとかがありそうな気もするし。 徒労はたいした事ではないが、再発明はコストかかり過ぎと思えたので。
>>85 ありがd。ラクチンでよいですね
しかし、手動では取得できるんですが
ファイルによって必ず「ファイルのオープンに失敗」になります
多分真空波動研側の問題っぽいですけど
88 :
名無し~3.EXE :03/09/17 23:05 ID:d7ZBtWRC
>>87 ファイル名やディレクトリ名にスペースが含まれているとか。
Shell.Exec( "C:\\temp\\sinkuhadouken\\SinkuHadouken.exe " + target );
↓変更
Shell.Exec( "C:\\temp\\sinkuhadouken\\SinkuHadouken.exe " + "\"" + target + "\"" );
sage忘れた…回切首升。
同じ環境で(ハードウェア構成のみ違う)片方だけWSHでエラーが出ます。 エラーは 行 20 文字 1 エラー 0x80041013 コード 80041013 ソース (null) で、スクリプトは(上12行は改行エラーに引っかかるので削って有ります) SamurizeDir = "C:\progra~1\Samurize" '---- これ以降は恐らく触らないように Dim WshShell Set WshShell = CreateObject("WScript.Shell") for each Process in GetObject("winmgmts:").InstancesOf ("win32_process") if Process.name = "Client.exe" then Process.Terminate() end if next WshShell.run chr(34) & SamurizeDir & "\Client.exe" & chr(34) です。 WSHも最新版入れてみたんですけど駄目でした。 片方は正常に動作してるんですけどもなぜでしょうか? XPSP1a
そのエラーはWMIのライブラリがおかしいか、In-proc-providerがregsvrされていないか どちらにせよXPだと外部コンポーネントでは無いので直すのはきつそうだね。
win98のペイントに SendKeys を使って 起動/変形(I)/キャンパスの色とサイズ(A)/ の ダイアログを開くところまでの .vbs を書きました。 このあとダイアログ内の幅・高さの値として それぞれの枠内へ共に 16 を打ち込ませる記述の仕方を教えて下さ。
95 :
90 :03/09/21 18:22 ID:zUh2oDNn
>91 ありがとうございました。SP2出たら再インスコします。 他に特に不具合無いですし、dll書き換えしてあるから面倒なので。 その間に解決法もう少し探してみます。
wsfファイルに <?xml version="1.0" encoding="Shift_JIS" standalone="yes"?> <job id="hoge"> <script language="JScript"> for(i = 0 ; i < 10 ; i++) { WScript.Echo("hoge"); } </script> </job> これを実行すると「temp.wsf(4, 17) Windows Script Host: 適切な名前を指定してください。」とエラー。 なんでだろ? ちなみに一行目のxml宣言を消去するとエラーが出ません。
<![CDATA[ ]]>
>>97 即レスサンクス。
; って実体参照に変換されてしまうんでしたっけ。
たしか参照実態になると思う。
あ、< が使えないんだった・・・。 < にすればいいのか。
ドキュメントの嘘ハケーン InputBoxでキャンセルを押すと""(空文字列)が返ると書いてあるが 返るのは未定義値じゃないか。
>102 MsgBox TypeName(InputBox("")) OK →String キャンセル→Empty 当方Win2kWSH5.6
104 :
103 :03/09/24 22:58 ID:PLBE2AqK
あ、TypeName(vbNullString)もTypeName("")もStringだった。 疑って失礼。それで桶。
105 :
102 :03/09/24 22:58 ID:1oDMEKKm
>>103 EmptyってJScriptでいうundefinedですよね?
JScript側でその変数を受けるとundefinedになるもんで。
106 :
教えて君 :03/09/24 23:36 ID:t9Wfbtkd
皆様の足元にも及ばない、まるで教えて君で申し訳ないのですが パスワードの設定に関して妥当性を正規表現で評価する方法を探しています。 もし皆様のなかで優れた方法をご存知でしたら、教えてください。 VBSで評価しようとしています。(お恥ずかしい話です) 条件は色々あると思いますが、私が想定しているのは -8文字以上 -14文字以下 -アルファベット(大文字小文字)どこにあってもよく各1文字以上 -数字 どこにあってもよく各1文字以上 で作られていることです。
おい藻舞等! \Program files\ディレクトリ内にあるアプリを4つほど一定間隔(2,3秒)あけて実行するようなスクリプトってどういう記述なのか教えてください。 おねがいします。
var exeList = ["exe1","exe2","exe3","exe4"]; var path = "略\\Program files\\"; var w = WScript; var wsh = w.createObject("WScript.Shell"); for(var i = 0; i < exeList.length; i++) { wsh.run(path + exeList[i]); w.sleep(2500); }
92
>>93 ありがとうございます。
WshShell.SendKeys "^e1{TAB}1{ENTER}^vy" として
起動・キャンバスサイズ調整・貼付までを以前より随分楽できるようになりました。
WSHでメッセージダイアログを常に最前面に表示する方法ってありますか?
shell = new ActiveXObject('WScript.Shell'); shell.Popup('Message', 0, 'Title', 0x40000); とか MsgBox "Message", &H40000, "Title" とか。
113 :
111 :03/10/10 01:14 ID:XYjFDDZh
>>112 レス遅くなってすみません。
Popupメソッドにそういうのがあったなんて知りませんでした。
出来ました〜ありがとうございます。
WSHで現在のCPU使用率と 送受信の速度と物理メモリ残量、 アクティブタイトルウィンドウの名前を テキストファイルに吐き出させるのって どういう記述なのですか? 教えておながい。 携帯にこれらの情報をメールで送りたいのです。
>114 上の3つは解説尻侍のページに載ってるけど、タイトルの名前だけはいかんともし難い。APIが使える言語で取得するのがお勧め。
Windows のメモ帳が いつも同じウインドウの位置とサイズで起動するような VBS ください。
118 :
114 :03/10/18 08:57 ID:qyKObo/h
>115 >117 レスサンクス。最近ActivePerl入れたばかりなので 頑張ってみるっす。ありがとうございました。
119 :
114 :03/10/20 22:15 ID:znpZc9CR
dim objWMI, objProcess, strProcessesSize Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}") Set objProcess = objWMI.InstancesOf("Win32_process") For each Process in objProcess strProcessesSize = strAllProcesses & Process.WorkingSetSize & vbcrlf Next Set Fs = WScript.CreateObject("Scripting.FileSystemObject") Set ts = Fs.OpenTextFile("mem.txt",8,1,0) ts.Write Date & " " & TIME & vbCrLf & strProcessesSize これでメモリ使用量を取得できたんだけども これだとプロセスごとのメモリサイズがByteで表示されてしまう。 プロセスごとではなく合計のメモリ使用量をMB換算で得るには どう書けばいいんですか?
>>119 win2k、xp限定、利用可能な物理メモリ量だけど
Win32_processじゃなくてWin32_PerfRawData_PerfOS_Memoryを使い
AvailableMBytesでMB単位で取得できます。
あとbyte単位だけど、Win32_OperatingSystemで
TotalVisibleMemorySizeからFreePhysicalMemoryというのはどうでしょう。
MBが良ければ割ればいいし。
122 :
114 :03/10/21 20:04 ID:oL/Yjexx
svr = "localhost" Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objService = objLocator.ConnectServer (svr, "root/cimv2") strOSQuery = "Select * from Win32_OperatingSystem" set objOS = objService.ExecQuery(strOSQuery) for each machine in objOS Set Fs = WScript.CreateObject("Scripting.FileSystemObject") Set ts = Fs.OpenTextFile("memory.txt",8,1,0) ts.WriteLine FormatNumber(machine.FreePhysicalMemory / 1024,0) & "MB" next これで表示することができーたよ ありがとう。あとは送受信の速度だけだ。 アクティブタイトルウィンドウはもういいや
123 :
121 :03/10/21 20:48 ID:3JpVx+Zc
>122 出来たみたいなので今更だけど>121の修正。 × あとbyte単位だけど、 ○ あとkilobyte単位だけど、 × TotalVisibleMemorySizeからFreePhysicalMemoryというのはどうでしょう。 ○ TotalVisibleMemorySizeからFreePhysicalMemoryを引くというのはどうでしょう。
124 :
名無し~3.EXE :03/10/22 00:08 ID:UDOmLW+j
固定長のファイルを開いて特定の位置を参照しに行って そのフィールドの内容が変わったらその内容をファイル 名として保存。 を出来なくなるまで繰り返すと言う構文を誰か作ってくれませんか?
データの置き換えをしたいのですが、 バイナリファイルを書き換えるスクリプトの書き方がわかりません。
126 :
名無し~3.EXE :03/10/22 12:44 ID:GwH1gVPa
おまいらこの分野で飯くっていけるんじゃね?
128 :
114 :03/10/22 22:11 ID:7N37iGyL
>>126 取得できたー
お昼休みにつくれちゃうんだ。すげぇ
ぐぐってた時間より短いかも。
ありがd
COMコンポーネントっつーのは便利だね
また一歩前進しますた
129 :
124 :03/10/24 00:28 ID:4F38giwl
>>11 さん
例えば
aaa123ffaaabbb
aaa123ffaaabbb
aaa124ffaaabbb
aaa124ffaaabbb
aaa125ffaaabbb
と言うテキストファイルが有った場合、
4バイト目から3バイトと指定すると上から2レコードを[123]
3・4レコードを[124]、5レコード目を[125]と言うファイル名で
分割保存する構文を作って頂けないでしょうか・・・
>>129 こんな感じか。元ファイルはソートされていると仮定、
且つ「4バイトから3バイト」じゃなくて「4文字目から3文字」だけど。
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
var inFile = fso.OpenTextFile( "inFile.txt", 1 );
var line, oword, nword, outFile; oword = "";
while ( line = inFile.ReadLine() ) {
if ( oword != ( nword = line.substr( 3, 3 )) ) {
if ( oword != "" ) { outFile.Close(); }
outFile = fso.CreateTextFile( nword );
oword = nword;
}
outFile.WriteLine( line );
}
inFile.Close();
131 :
130 :03/10/24 13:29 ID:aQiPIRxb
>>130 ループ失敗。
while ( !inFile.AtEndOfStream ) {
line = inFile.ReadLine();
>>132 WSHマクロの記録機能を持ったエディタって他にもあるんですか?
135 :
名無し~3.EXE :03/10/25 21:38 ID:Hw2+CnR3
136 :
名無し~3.EXE :03/10/25 22:23 ID:UGZkVwHC
WMIの情報ってまとまってどっかにありますか? 普段見てるところとか。 英語かなーやっぱり。
wshって何て読むの?
うしゅ
140 :
_ :03/10/26 00:53 ID:1w01ydiz
>138 windowsのヘルプに訊いてみれ
テキストファイルの最後の行だけ書き出すってどうすればいいんですか? winampのプラグインに現在演奏中の曲情報をテキスト書き出すやつがあるんですけど、 新しい曲の情報は前の曲の情報が書かれている次の行に書かれてしまうので、 演奏中の曲の情報は常に最後の行にあるのでつ。 Option Explicit Const ForReading = 1 Dim objFS, objTS Dim strLine Set objFS = WScript.CreateObject("Scripting.FileSystemObject") Set objTS = objFS.OpenTextFile("C:\songs.txt", ForReading) strLine = objTS.ReadLine Set objTS = objFS.OpenTextFile("playlist.txt",2,1,0) objTS.Write strLine これだと最初の行、つまり一番古い情報しかとりだせない。ヽ(`Д´)ノウワァァン お前ら、教えてつかーさい。おながい。
Do Until objTS.AtEndOfStream = True strLine = objTS.ReadLine Loop
>>142 なるほど。無事できました。
ありがとうございました。
144 :
129 :03/10/26 21:06 ID:OjBserzL
>>130-131 ちょこっと勉強して、basic言語の方(拡張子.vbsの方)
で作ってみました
dim fs
dim inFile
dim outFile
dim line
dim oword
dim nword
oword=""
set fs=WScript.createobject("scripting.filesystemobject")
set inFile=fs.OpenTextFile("test.txt",1)
do until inFile.AtEndOfStream
line=inFile.ReadLine()
nword=mid(line,4,3)
if oword <> nword then
if oword <> "" then
outFile.Close()
end if
set outFile=fs.CreateTextFile(nword)
oword=nword
end if
outFile.WriteLine(line)
loop
inFile.Close()
145 :
名無し~3.EXE :03/10/26 21:32 ID:0UDkjOLo
sendkeysメソッドがうまく動かないときがあります。 処理にはsleepで充分待ち時間を持たせていますがダメです。 どうにか安定して動作させられないでしょうか。
146 :
126 :03/10/26 23:11 ID:dxECXyGU
あのー、winampのメインウィンドウのクラスであるWinamp v1.x に次の曲を演奏させるキーコード[40048]を送りwinampを 操作するようなことはWSHで可能なんでしょうか?
149 :
名無し~3.EXE :03/10/27 23:52 ID:SDkI7BUP
>>147 >>4 にある「DynaCall - Win32APIコール」が必要だけど、簡単に出来た。
ただし、ウィンドウクラスが"Winamp v1.x"なのはver 1.x or 2.xなので注意。
ver 3.x は"BaseWindow_RootWnd"かな?
var WM_COMMAND = 0x0111;
var WM_USER = 0x0400;
var UserWrap = WScript.CreateObject("DynamicWrapper");
UserWrap.Register ( "USER32.DLL", "FindWindow", "i=ss", "f=c", "r=h" );
UserWrap.Register ( "USER32.DLL", "SendMessage", "i=huuu", "f=c", "r=l" );
var hWnd = UserWrap.FindWindow( "Winamp v1.x", 0 );
var result = UserWrap.SendMessage( hWnd, WM_COMMAND, 40048, 0 );
150 :
147 :03/10/28 01:04 ID:rFgJP0ul
>>149 148氏による斡旋により、winampのディベロッパーなんちゃらのページを
みてデルファイやコンパイラなどをインストールしましたが、
さっぱり使いこなせず困っておりました。
作っていただきありがとうございます。
これは値を変えればほかのアプリにも利用できそうですね。
しかし、next.jsとして実行するとこんなエラーが出てしまい、処理できないです。
"0x6b71fd81" の命令が "0x000c0000" のメモリを参照しました。メモリが "read" になることはできませんでした。
DynaCallも登録したのになんでだぁー・゚・(ノД`)・゚・。
>>150 f=c を f=s に変更する。
UserWrap.Register ( "USER32.DLL", "FindWindow", "i=ss", "f=c", "r=h" );
UserWrap.Register ( "USER32.DLL", "SendMessage", "i=huuu", "f=c", "r=l" );
の2行を
UserWrap.Register ( "USER32.DLL", "FindWindow", "i=ss", "f=s", "r=h" );
UserWrap.Register ( "USER32.DLL", "SendMessage", "i=huuu", "f=s", "r=l" );
に変えてみて。
152 :
147 :03/10/28 12:56 ID:rFgJP0ul
できました。 一時停止や前の曲に戻るなども送ることができました。 マウ筋っていうマウスジェスチャソフトに登録して使ってます。 かなり(・∀・)イイ!! サンクス。
153 :
名無し~3.EXE :03/10/29 12:44 ID:6qUS970B
質問なんですが同じ名前のアプリを同時起動してる場合は AppActivateの引数で指定するとどちらがアクティブになるんでしょうか? 例えば Dim WSHShell Set WSHShell = WScript.CreateObject("WScript.Shell") WSHShell.AppActivate("無題 - メモ帳"); このときメモ帳が2つ開いていた場合です。
名前が title と一致するアプリケーションのインスタンスがいくつかある場合、アクティブになるインスタンスは不定です。
Syrup16g - 明日を落としても 4:58 2003/11/04 0:19:52 っていう文字列を artist:Syrup16g title:明日を落としても time:4:58 date:2003/11/04 0:19:52 このように表記するためのvbスクリプトきぼん
>>156 msgboxに表示させたいのであれば、ダイアログクリエータ(名前間違ってるかも)というソフトを使えばいいかと。ベクターのジョークソフトカテにある。
>>156 入出力をどうするつもりか知らないけど。
str1 = "Syrup16g - 明日を落としても 4:58"
str2 = "2003/11/04 0:19:52"
Set bobj = WScript.CreateObject("basp21")
out = bobj.Replace("s/(.*) \- (.*) (\d+:\d\d)/artist: \1\ntitle: \2\ntime: \3\n/k", str1)
out = out & "date: " & str2
Set bobj = Nothing
MsgBox out
なんか .* の使い方がいいかげんな気はするけど、いちおう動くな。
で、慣れてるBASP21使っちゃったけど、こういうのってRegExpオブジェクトではどう書くの?
Set re = New RegExp
re.Pattern="(.*) \- (.*) (\d+:\d\d)"
MsgBox re.Replace(str1, "\1 \2 \3")
とか試してみてもうまくいかないし。
ExecuteしてMatches参照するのもなんか違うような。
159 :
11 :03/11/04 14:20 ID:4ZmepCbj
Set re = New RegExp str1 = "Syrup16g - 明日を落としても 4:58" str2 = "2003/11/04 0:19:52" re.Pattern="(.*) \- (.*) (\d+:\d\d)" out= re.Replace(str1, "artist: $1" & vbCrLf & "title: $2" & _ vbCrLf & "time: $3" &vbCrLf & "date: " & str2) MsgBox out
160 :
158 :03/11/04 15:39 ID:ZPgYCqbJ
はっ、\1 \2 \3 じゃなくて $1 $2 $3 でしたか。 たしかにMSDNにもそう書いてある。 勘違いはずかしー、どもっす。
161 :
156 :03/11/04 18:13 ID:Oi7xTTpY
レスサンクス。 ホームページに演奏中の曲を表示させてみたかったんッス (perlだけでできるのかもしれないけど) 無事表示させることができた。 お前等、ありがとう。勉強になったよ
>>161 文字処理はむしろperlの領分だろ……
うんざりするほど大量にあるWord Document, Exel Sheetに テキスト全置換かけることになりました。 とりあえずそれぞれのアプリでVBAマクロとして全置換操作を 記録させ、そのコードを表示させてパクり、WSHとして外から CScriptで置換してみたのですが、テキストボックス等の図中の テキストが置換対象になりません。 どうやら、ActiveなDocumentなりWorkSheet上でCtrl-Aによって 選択できる範囲のみが、置換対象となる模様です。 テキストボックスなどの図を含めて、全置換を行うには、 どうしたらよいでしょうか。知恵を貸してください。
>>163 WSH使わないでVBAだけでやった方が良いんじゃない?
あんまりスマートじゃないけど、
予め処理したいファイルのパスを配列に格納しておいて、
順次Documents.Open、置き換え、Closeすれば行けそう。
VBAスレ探して聞いた方が良いかもね。
それって普通にアプリ上から全置換操作をかけたときには置換対象どうなるの?
>165 手動による置換では、DocumentやWorkSheet中のテキストは全て置換されます。 その操作を記録したマクロを実行してもダメなようですね。同様に、その マクロをパクッたWSHスクリプトでも、置換残しが発生します。
Excelテキストボックス検索置換ツール なんてもんがあったんで どんなことしてるのか参考にしてみようと思ったら、 シェアウェアなのでコード見せてくれない。ドケチ。 まあWSHっていうより完全にVBAの問題だけどな。
テキストファイルに書いてある先頭の5行だけを表示するには どうすればよいですか?
ReadLine() 使って何とかしろ
>>170 <!------------------------------ここから------------------------------>
<job id="js">
<script language="JScript">
var WshShell = new ActiveXObject("WScript.Shell");
// 電卓が起動していなければ起動
if(!(WshShell.AppActivate("電卓"))){
WshShell.Exec("calc.exe");
WshShell = null;
WScript.Quit();
}
WshShell.AppActivate("電卓");
WScript.Sleep(100);
WshShell.SendKeys("%{F4}");
WshShell = null;
</script>
</job>
<!------------------------------ここまで------------------------------>
上記のものを適当な名前(例えばCalc.wsf)で保存し、ダブルクリックすれば希望する動作が(一応)可能。
終了はSendkeysを使用しているので、Sleepを長めに変更しないとうまく行かないこともあります。(デフォルトは100ms)
ファイル名は拡張子を『.wsf』で保存しないと動作しないので要注意!
こんなんでどう?
>>168 こんな感じか?
Txtfile = "hoge.txt"
Set WShell = WScript.CreateObject("WScript.Shell")
WShell.Run "notepad """ & Txtfile & """"
WScript.Sleep(1000)
WShell.Sendkeys("{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}+^{END}{DEL}")
>>172 間違ってCtrl+s押しちゃうと怖いから、
ReadLine()で5行読み込んで新規ファイルに保存してそれを開く方が良いんじゃないかな。
どうやってReadLine()で5行だけを読み込むの?
175 :
名無し~3.EXE :03/11/07 23:19 ID:H0SLYH01
>>171 終了させる部分だけね。
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 == "calc.exe" ) {
pf.Terminate();
}
}
ReadLine()を5回使う
>>174 for ( var i = 0; i < 5 && !file.AtEndOfStream; i++ ) {
str += ( file.ReadLine() + "\n" );
}
>>170 です。
レス頂いた皆様に感謝しながら感謝します。
内容読んでよーく勉強します。ありがd
vbsでモニターの電源がONかOFFなのかを みわけることってできる?
できるよ、たぶん。 消費電流を測るセンサーをモニタに取り付ける →その結果をPCで読み出すCOMコンポーネントを作る →vbsで呼び出す
ハードがいるのか・・ PCの電源切るとモニタがスタンバイ状態になるので 取得できると思ったが、あれはモニタ側が感知 してるんだった。
vbsでGetFolderを使うと、フォルダのなかにあるファイルの数を調べたり、 サブフォルダの数を調べたり、フォルダのなかにあるファイルの オブジェクトを返すことが出来ますが、C言語で同じことをするには どうしたらいいでしょうか。
>>182 Cつっても色々だしな。
unix系なら#include <dirent.h>してopendir、readdir、closedir。
windowsならFindFirstFile、FindNextFile、FindClose。
ボーランドの処理系もdirent.hあるらしいからunix系と同じで可かな。
>>179 とりあえず、JScriptで作ってみたがこんなのはどう?
//----------------------------------------------------- ここから -------------------------------------------------------
var e= new Enumerator(GetObject("winmgmts:").InstancesOf("Win32_DesktopMonitor"))
var A_state = new Array();
A_state[1] = "Other"; A_state[2] = "Unknown"; A_state[3] = "Running/Full Power";
A_state[4] = "Warning"; A_state[5] = "In Test"; A_state[6] = "Not Applicable";
A_state[7] = "Power Off"; A_state[8] = "Off Line"; A_state[9] = "Off Duty";
A_state[10] = "Degraded"; A_state[11] = "Not Installed"; A_state[12] = "Install Error";
A_state[13] = "Power Save - Unknown"; A_state[14] = "Power Save - Low Power Mode"; A_state[15] = "Power Save - Standby";
A_state[16] = "Power Cycle"; A_state[17] = "Power Save - Warning"; A_state[18] = "Paused";
A_state[19] = "Not Ready"; A_state[20] = "Not Configured"; A_state[21] = "Quiesced";
for (;!e.atEnd();e.moveNext()){
var DesktopMonitor = e.item();
WScript.echo (A_state[DesktopMonitor.Availability]);
}
//----------------------------------------------------- ここまで -------------------------------------------------------
WMIを利用しているのでDefaultで使えるのはWin2k/XPのみだけど、WMI SDKをインストールすれば、Win98とかでも使えるはず。
スクリプトの内容は、WMIのWin32_DesktopMonitor Classをコレクションに入れて、配列に当てはめた文字列を呼び出しているだけなのでVBScriptでも同じことが出来るはず。
Win32_DesktopMonitor Classに関しては
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_desktopmonitor.aspを参照されたし 。
185 :
179 :03/11/17 18:51 ID:nRzsi6TW
>>184 こんなクラスがあったとは知らなんだ。
某掲示板過去の記事にも載ってなかったYO。
リンクまで貼ってくれてありがd
リンク先で勉強してきまつ。
186 :
182 :03/11/18 04:30 ID:cKQr6PFc
187 :
180 :03/11/18 04:33 ID:hrSaSO12
!!! 同じくこんなクラス知らなんだ。 めちゃめちゃ勉強になったです。ありがd
188 :
179 :03/11/18 06:06 ID:Y24V+OlW
モニタの電源をOFFにして実行してもRunning/Full Power になる。なぜ?
>>188 電源状態はグラフィックボードの出力状態であって
実際のモニターの電源状況じゃないんじゃないの?
手動でモニターの電源を切ってもPCは判別出来ないんじゃないの?
janeで書き込んだ後に、adslモデムを切断して再接続させるwshをください。
192 :
名無し~3.EXE :03/11/19 02:27 ID:tuh5bMJr
194 :
189 :03/11/19 10:07 ID:0Vo1qZxr
>>192 ありがとうございます。
しかし、目的のhtmlがフレームとjavascriptでうまく隠蔽されているようで、通常のhtmlを操作することはできますが、このページだけはオブジェクトが取得できないです。。。
195 :
184 :03/11/19 20:54 ID:9g/8/ljW
>>188 たぶんそうです。
>>194 こんなのはどうでしょう?
<!------------------------------ 自動ログイン:廣田証券.html ここから------------------------------>
<script language="JavaScript">
// 任意の値を設定してください。
account_0 = "ユーザID";// アカウント名
password_0 = "パスワード";// パスワード
// 設定ここまで。
hParent = external.menuArguments;
pageURL = "
https://trade.hirota-sec.co.jp/HRP02/TRADE/SV ";
formNumber = 0; submitTag = "INPUT"; submitNumber = 6;
accountTag_0 = "userID";
passwordTag_0 = "password";
DoLogin(hParent.document);
function DoLogin(objDoc){
var document = objDoc;
try {
document.forms(formNumber).elements(accountTag_0).value = account_0;
document.forms(formNumber).elements(passwordTag_0).value = password_0;
document.all.tags(submitTag).item(submitNumber).click();
return true;
} catch(error){
return false;
}
}
</script>
<!------------------------------ 自動ログイン:廣田証券.html ここまで------------------------------>
196 :
184 :03/11/19 21:05 ID:9g/8/ljW
上記を適当な名前(例えば、廣田証券.html)で保存し、うりゅそふとのIE MenuExtなどで登録すればIEコンテキストメニューから動くはず。
こちらで試した限りでは、IE6.0とSleipnirではOKみたいだったよ。
(ログインIDを持ってないので正確なチェックは不可能)
後は違うページでは動かないように分岐命令でも組み込んでちょうだい。
作成に当たっては、SleipnirのAutoLoginCreatorとうりゅそふとのゆなデュプリケートを参考にしてます。
ちなみに、うりゅそふとの URL は
http://www.uryusoft.com/ だよ。
197 :
184 :03/11/19 21:21 ID:9g/8/ljW
198 :
189 :03/11/20 18:50 ID:wPBUdrDV
>>195-196 ありがとうございます。
こちらも解決しました。
IE.document.frames("viewFrame").document.all("userID").value
で代入できました。
こういうのってヘルプないから困るなぁ・・・。
そちらのやり方も試してみます。
janeで書き込んだ後に、adslモデムを切断して再接続させるwindowsscriptinghをください。
>>199 それをやってもID変わらない可能性が大きいんじゃないか?
>>200 いや、いつもそうやって自分の書き込みを援護している。
ちなみにこれね。 FLASHWAVE 2040 M1
>>201 ∧_∧ / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オマエモカー
( ) \_____
| | |
(__)_)
>>203 ∧_∧ / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オマエモカー
( ) \_____
| | |
(__)_)
やっぱり需要高そうだな>199
>>204 つーか、そんなレベルで馴れ合ってどうする(w
しかも、その後レスつかないし(泣
207 :
184 :03/11/22 02:42 ID:aFqgt2RD
>>206 正規表現で何とかなるはず。
<!--------------------------------- ここから ---------------------------------->
<job id="main">
<script language="VBScript">
'InputBoxを呼び出す関数
function vbinput(strprompt)
vbinput = InputBox(strprompt)
end function
</script>
<script language="JavaScript">
var InputStr = vbinput("文字を入力して下さい。");
var re;
re = /
http:\/\/jbbs.shitaraba.com\/game\/bbs\/read.cgi\?BBS= (.+)&KEY=(.+)/igm;
WScript.Echo(InputStr.replace(re, "$1"));
WScript.Echo(InputStr.replace(re, "$2"));
</script>
</job>
<!--------------------------------- ここまで ---------------------------------->
とりあえずテスト用スクリプトを作ってみた。
上記を『適当な名前.wsf』で保存して試してみて、OKならこの正規表現パターンを流用すればよいかと。
209 :
199 :03/11/22 13:27 ID:NWN1IDtl
>209 モデムの操作は、機種固有のコマンドが関わるので汎用スクリプトは無理だよ。 あなたが使っているモデムのメーカーと機種名・切断・再接続のコマンドと引数を晒してみれば 誰かが作ってくれるかもしれない
211 :
199 :03/11/22 14:16 ID:DFwAjyaA
212 :
199 :03/11/22 14:17 ID:DFwAjyaA
ID変わってるけど、>209,211 同じ人。 という具合に良く使ってる。
PPPOEとrasphoneで何とかならんか。半自動だけど。
wshでALT+TABのタスク切替えを表示させたままにしたいと思っています。 そこでSendKeysを使って作ったのですが、一瞬で消えてしまいます。 ALTを押しっぱなしにする必要があると思うのですが、 キー押下時間の指定方法を教えていただけませんか? Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "%{TAB}"
win98でwshV5.6をインストールしてみたんですが どうやったらこれをアンインストールできますか?
217 :
215 :03/11/26 11:24 ID:6p/o2oLJ
>>216 ありがとうございます
きれいにアンインストールはできないみたいですね
XP 上で WSH を使って、画面の設定等を変更してみたいのですが、 どこら辺から手をつけるといいのでしょうか?
>>219 ある程度間隔をあけながらなら出来そうだね。
短い間隔だとスクリプトでCPU占有しつづけそうな気がする。
質問です。 Set f = Fs.GetFolder(foldername) Set fn = f.Files For Each f1 in fn list_out.WriteLine f1.name Next こんな風にしてフォルダにあるファイルリストを出力してるんですが、 このファイルリストをソートした状態で出す方法ってありますか? Forが終わってから自分でソートしないとダメですか?
223 :
名無し~3.EXE :03/11/29 09:13 ID:Tde9ir6h
Option Explicit Dim buf(9999) ' 本番ではredimできるように改造 Dim Fs, f, fn, f1, j, n Set Fs = WScript.CreateObject("Scripting.FileSystemObject") Set f = Fs.GetFolder("C:\") : Set fn = f.Files n = 0: For Each f1 in fn : buf(n) = f1.name : n = n + 1 : Next qsort buf, 0, n - 1 For j = 0 to n - 1 : WScript.Echo buf(j) : Next ' クイックソート Sub qsort(a(), Low, Hi) Dim m, t, i, j If (Hi <= Low) Then Exit Sub m = a((Low + Hi) \ 2) : i = Low : j = Hi While (i <= j) If (a(i) >= m And a(j) <= m) Then t = a(i) : a(i) = a(j) : a(j) = t : i = i + 1 : j = j - 1 Else If (a(i) < m) Then i = i + 1 If (a(j) > m) Then j = j - 1 End If Wend qsort a, Low, j : qsort a, i, Hi End Sub
224 :
221 :03/11/29 11:46 ID:JAJQbviS
>>222 FATとNTFSの違いがあったんですね。
自分では両方使っていて、実行するとファイル名順に出たりでなかったりして
原因がわからなかったんですがFATだと並ばないということなら納得がいきました。
>>223 やっぱりソートするしかないんですかね…
おとなしく自前ソートすることにします。
ありがとうございました
HTAを作成の際にHTML部分を自動で作成してくれるソフトを探しております。HP作成支援ソフトをいろいろ試しましたがどうもしっくりきません。 使いやすいソフトを紹介してもらえませんでしょうか
ttp://www.angelfire.com/tv2/doko/edf.txt 11氏のサイトをザーッと読んで
再帰的に作業フォルダ内の指定ファイルを全て削除して、
空フォルダを削除するスクリプトを書いてみました。(既出ですが;)
ここに既にある余分なフォルダの階層を省略するようにしたいのですが、
うまく移動・削除する方法がありましたらご教授お願いします。(BuildPathを弄っては居るのですが…)
※D:\tempを指定し、一階層のフォルダにファイルを引き上げる。
D:\temp\log_a\user1\user1_hoge.xls -> D:\temp\log_a\user1_hoge.xls
D:\temp\log_a\user2\user2_hoge.xls -> D:\temp\log_a\user2_hoge.xls
D:\temp\log_b\user3\dat\hoge1.dat -> D:\temp\log_b\hoge1.dat
D:\temp\log_b\user4\dat\hoge2.dat -> D:\temp\log_b\hoge2.dat
>>225 ttp://www.pololon.com/koby/software.php?id=J-Scriptor これはどうでしょ。
227 :
名無し~3.EXE :03/11/29 23:18 ID:8I+vekmN
IEからVBScriptを使って Set hoge = CreateObject("Excel.Application") としてExcelを起動してるのですが 起動されたExcelのシートをクリックしても、 フォーカスはExcel側にあるのですが、 起動元のIEが前面に表示された状態になってしまいます。 (タイトルバーをクリックすると切り替わります) これを回避する方法はありますでしょうか?
hoge.Visible = True とかはしてみた?
>>228 しました。ってかそれやらないと表示すらされなかったっす。
ただそれをやらないで
Set hoge = CreateObject("Excel.Application")
Set hoge = Nothing
これだけで症状が再現するのですが
もしかしてうちだけ??
OSは2000とXP、Excelは2000です。
230 :
229 :03/11/30 10:22 ID:feJWYsXV
すみません、229の補足です 「これだけで再現する」とは IE以外の別のアプリケーションのウィンドウが先に表示されてる状態で 229の2行をIEで実行すると、別のアプリをクリックしてもフォーカスはあたるのに そのアプリが前面に表示されない状態になります。(タイトルバークリックはOK) つまりIEが最前面に表示されたままになるようです。 ちなみに、その2行のあとにmsgboxで適当なメッセージを表示すると 回避できるのですが、できればそれは使いたくないです。。 IEは6.0です。
>225 解答ではなく申し訳ないですが、どういうのが使いやすいと思いますか? スクリプト及びID部分の表記がそのソフトのルールで最適化されてしまうものは論外としても 私見で使いにくさの着目点として、 スクリプトとHTML部の作成するタイミングとの兼ね合いで、後解決が多い→バグが入り込みやすい というのが考えられるのでこう云うこととかなら、VIDが良いと思うのですが。 >226 再帰部より先に移動しておくのがセオリーだと思いますが、重複の時のルールはどうなっていますか? DirP┬DirC1─DirG └DirC2 でFという名前が 1)PとC1 2)C1とC2 3)C2とG 4)PとG に存在している場合です。 >227 AppActivateではダメ?
>>231 226です。
重複時は上書きするように考えていましたが、
やはりファイル名末尾に(n)を付け加えて移動させようかと…
>232 1)各々のファイルをフォルダ一階層分引き上げるなら親→子の再帰が必要だよね で、2)空のフォルダを削除したいから子→親の再帰が既にあるわけだ。 なら、別のルーチンで1)をやらないと出来ない。
234 :
名無し~3.EXE :03/12/01 00:46 ID:FZ6o4XMT
>>235 ありがとうございます、その通りです。
もっと勉強しないと…
IEのオブジェクトから、[表示] - [文字のサイズ] で 5段階切り替えしたのと同様の効果になる スクリプト、キボン。 SendKeyは不可の方向で。。。
テキストファイルから読み込んだ日本語の文字列を
URLに送りたいんだけどそのまま読み込んで、
送信すると
http://www.hoge.com/search=繧キ繝 」繝シ繝ュ繝
みたいになってしまう。繧キ繝」繝シ繝ュ繝を%83V%83%83%81%5B%83%8D%83b%83g
みたいにエンコードするにはどうすればいい?vbsで。
>>238 encodeURI(URIString)
240 :
239 :03/12/03 07:40 ID:68QdJX+r
>>238 vbsだったか。hoge.wsfとかで↓。
<job id="TestScript">
<script language="JScript">
function func ( str )
{
return encodeURI( str );
}
</script>
<script language="VBScript">
Dim str
str = "あいうえお"
str = func(str)
WScript.Echo( str )
</script>
</job>
>>239-240 レスサンクス
wsfってどっちも使えるんだ
手を出したことないので知らなかった。
vbsじゃ無理なのですか?
>>238 こんな関数は如何?
Function URLEncode (str)
Dim s, rtnstr
rtnstr = ""
For i = 1 To Len(str) Step 1
s=Mid(str, i, 1)
If Len(Hex(Asc(s))) = 2 Then
s = "%" & Left(Hex(Asc(s)), 2)
Else
s = "%" & Left(Hex(Asc(s)), 2) & "%" & Right(Hex(Asc(s)), 2)
End If
rtnstr = rtnstr + s
Next
URLEncode = rtnstr
End Function
>240の場合はUnicodeでのURLエンコード、こちらの関数はShift-JISでのURLエンコードです。
状況に応じて使い分けると良いかも。
243 :
11 :03/12/03 14:40 ID:mV1Soheb
244 :
238 :03/12/03 18:17 ID:Mlf6KLD2
>>242-243 レスサンクスざます
晒して頂いたスクリプトをコピーし
便利スクリプトフォルダに保存しました。
basp21で妥協しようと思ってたので
とても助かりますた。ありがd。
スクリプトの実行前にあらかじめ起動されているプロセスの 終了を検出したときのみ、指定したコマンドを実行するには どうやればいいのでしょうか。
無理してWSH使わなくても他の言語で作ればいいやん と思った。
>>246 やはりスクリプトではできないですか。
プログラムはまったくの素人なもので。
シェルスクリプトの方がいいんでない?
249 :
名無し~3.EXE :03/12/04 12:17 ID:KhtQppzY
>>245 WMIを使えば、起動しているプロセスを知ることが出来ますから、
指定したプロセスがあるかないかをif文で判断すれば出来るかと思います。
>>249 その方法だとプロセスが起動していないときにも反応してしまいますよね。
終了時にのみ検出するというのはできないでしょうか。
>>250 スクリプトを常駐させて、その中でプロセスが死んだときに、コマンド実行ってことだよね?
それならスクリプト起動時にプロセスチェックしてフラグたてとけば良いだけの話だけど。
予約録画後の休止移行に使いたいので 常にプロセス(録画ソフト)が動いてるとは限らないんですよ。
>>252 いやだからさ、プロセスを検知したらフラグ立てて、
フラグが立ってるときにプロセスが消えたらコマンド実行&フラグ降ろす、でいいんじゃないの?
>>252 情報を小出しにしないで
最初から何のために何がしたいのかちゃんと書いたほうがいいと思う
1) スクリプトはパソコン起動時に実行&常駐 この時点では検出したいプロセスは起動していない 2) 検出したいプロセスが起動 3) 2)のプロセスが終了 これを1)で実行&常駐しているスクリプトで検出する と、こういうことか?>253の言う通り 一定時間毎に起動しているプロセスをチェック、 検出したいプロセスを見つけたらフラグをたてる。 フラグをたてた後、そのプロセスが消えていればコマンド実行。 でいいんじゃない?
ZenToHanはあるけどHanToZenってないね。 ぐぐったがvbsではなかった。誰かもってませんか?
259 :
名無し~3.EXE :03/12/07 02:02 ID:Hk+1MgZq
質問です。 起動時にMapNetworkDriveでネットワークドライブの割り当てをしているのですが、 接続先のパスが見つからない場合に実行エラーが表示されてしまいます。 回避する方法はありませんか?
漏れも文字列操作する便利関数ほしいんだけど、 str="1行が50字とか10字とかで1行の字数が定まっていない文字列" を1行が20字超えてたら改行して、20字以下ならそのままの字数にしたい。 leftやmid使って何とかしようとしたけど、できなかった。 hoge (str,20)でできるようなやつ創ってみてよ
var p = 0; do { Out = Out + Str.substr(p, 20) + "\n"; p += 20; } while (p <= Str.length); でどうよ
すまんJSで書いてもうた
>>259 On Error とかtry catch とか。
VBSに変換できない。・・・_| ̄|○・・・_| ̄|○
>>264 Function FillColumn(str, count)
dim p, result
p = 1
Do
result = result + Mid(Text, p, count) & vbNewLine
p = p + count
Loop While (p <= Len(Text))
FillColumn = result
End Function
みたいな。……vbsは書きづらいなぁ。
厳密には最後、値を返す前に一番後ろの改行を消さなきゃいけないけど。
>>265 ああもうメタメタ。
Function FillColumn(str, count)
dim p, result
p = 1
Do
result = result & Mid(str, p, count) & vbNewLine
p = p + count
Loop While (p <= Len(str))
FillColumn = result
End Function
dクス やっぱmid使うんだ。俺も使ったのにちっともできんかった・・・ これだと改行してできた行とその次の行があわせて20字になるYO。 難しいなぁ。
268 :
名無し~3.EXE :03/12/07 14:47 ID:R4Dl9SOH
>267 こう云うことかい? 改行はvbNewLine固定としてます。 Function FillColumn(str, count) dim p, result, i, asTemp asTemp = Split(str, vbNewLine) For i = 0 To UBound(asTemp) p = 1 Do result = result & Mid(asTemp(i), p, count) & vbNewLine p = p + count Loop While (p <= Len(asTemp(i))) Next FillColumn = result End Function
キタ━━━━━(゚∀゚)━━━━━!!!! そうそう、これです。 早速保存しますた。ありがとう
文字列の中に半角英数と記号以外の文字が含まれていたら Trueを返すような関数きぼん
>>272 //ASCIIコード0x21(!)から0x7E(~)以外が含まれてたらtrue
//初めにパターンを作っておく。初めから展開しておいて直接関数内に置いたほうがスマートだけど
var p = "[^";
for (var i = 0x21; i < 0x7f; i++) p += "\\x" + i.toString(16);
p += "]";
//関数本体
function CheckExceptASCII(checking) {
return (checking.match(p) != null);
}
//VBSバージョン。やってることは同じ。
Dim pattern, i
pattern = "[^"
For i = 33 To 126
pattern = pattern & "\x" & Hex(i)
Next
pattern = pattern & "]"
//vbsだとオブジェクト作らないと正規表現使えないのか……。
Function CheckExceptASCII(checking)
Dim regex
Set regex = New RegExp
regex.Pattern = pattern
CheckExceptASCII = regex.Test(checking)
End Function
まあ、JScriptでもオブジェクトですがそれはさておき。
何故 わざわざ否定の否定で肯定を判定したり、 何故 連続した範囲の文字なのに 全部の文字をいちいち並べるのか 説明キボン。 「半角英数と記号」=「0x21(!)から0x7E(~)」でいいなら、 /[^\x21-\x7f]/.test(string) でいいだろ。(stringに調べたい文字列をいれる) 272の文章そのままを書くだけじゃん。 あ、スペースは「半角英数と記号」に入るのか? だったら \x21 は \x20 だな。
276 :
とにかく :03/12/13 05:20 ID:3hwI2vph
273は深く傷ついたよ。
何がとにかくなのか分かりませんよ。 言いたいことははっきり言わないと。
,. -- 、
,:',ィ;ノ、!;::':,
i::l'- -i::i でも、はっきり ボンクラ なんてゆーたら
l::ト、.ヮ,.ノ::!
>>273 も傷ついてしまうやん?
279 :
名無し~3.EXE :03/12/14 00:24 ID:BywyIZrR
こんにちは。 会社で「Windows起動時にごみ箱を自動的に空にするような仕組みを作れ」 と言われまして、困っていたところ、WSHなるものを知りまして、参考サイト で見たところ、以下のようなコードを見つけました。 Set Win=Wscript.CreateObject("Shell.Application") Set fol=Win.NameSpace("::{645FF040-5081-101B-9F08-00AA002F954E}") Set f=fol.Items.Item f.InvokeVerb "ごみ箱を空にする(&B)" 特殊フォルダであるごみ箱の右クリックメニューをキックしてるのですが、 これを実行すると、「消しますか??? Yes or No?」と聞かれてしまい 作業が自動化できません。 どのようにすれば、岡島部長の念願をかなえてあげることができるでしょうか。
281 :
名無し~3.EXE :03/12/14 11:58 ID:BywyIZrR
>279さん 早速のレスありがとうございます!!! 今日は出勤日なので、さっそく会社で試してみます。 今日帰ったらこのスレに結果報告させていただきます。
282 :
279 :03/12/14 11:59 ID:BywyIZrR
↑ × >279さん ○ >280さん すみません。。。。。。。
>>279 ゴミ箱の設定で「削除の確認メッセージを表示」のチェックをはずせばいいのでは?
284 :
いなむらきよし :03/12/14 15:31 ID:Gr+gcZZZ
キケー!
>>283 それはずしても右メニュから呼ぶと確認取らされるよ
287 :
279 :03/12/14 22:46 ID:BywyIZrR
>>280 さん
今日さっそく会社で試してみました。見事にごみ箱を空にすることができました。
タイムアウト値はこれから試行錯誤して決めていきたいと思います。
今回のことでWSHの勉強をはじめる良いきっかけになりました。これからが
とても楽しみです。ありがとうございました。
>>283 さん
レスありがとうございます。
285さんの仰るとおり、確認されてインタラクティブになってしまいます。
>>286 さん
レスありがとございます。すいません。僕の説明が不十分でしたが、ツール類
を使うなとの条件がついていました。僕みたいな素人が作るスクリプトを使うより
deletedustを使う方がいいような気がするんですけどね(w このツールは
存在を知らなかったので大変勉強になりました。本当にありがとうございます。
実行しているスクリプト自身のファイルパスを取得するには、どうしたらいいんですか? 環境はwin2000, WSH5.6, JScriptです。
>>288 WScript.ScriptFullName
>>289 即レスありがとうございます!
できました。ありがとうございました!!
ExcelのスクリプトをWSHから起動させることって出来ないでしょうか?
>>292 スレ消えていて見えません( ;´Д`)
269たんのFillColumnが激しく便利なんだが、 全角と半角が混ざった文章だと、改行がそろわん。 半角は2文字で1文字としてカウントさせることは できんのでしょうか?
どっちかというと全角は2文字としてカウントすべき。 半角2文字で1文字としてカウント? キモーイ
2バイト
win2k、XPではvbsもUnicodeを使ってると思うから全部2バイトちゃうかな。 98はしらん。
結局そんな都合のいいことはできないってことでつか?
>>300 出来るだろ。
ただ面倒くさくて誰もコードを書いてくれていないだけ。
>269がvbsな時点で読むのを止めたんで何だけど
改行毎にsplitして、
指定文字数に達するまで変数に突っ込んで改行追加、
って感じの処理だろ、多分。
文字列の長さをカウントする前に正規表現なり何なりで
文字種をチェックして、カウント量を変えれば良いんじゃない?
スマートじゃないけど。
やってみまつ。
vbNewLineとvbCrLfって完全に同じなんだっけ? 違う場合もある?
WSHでエクスプローラのファイル検索を実行することはできますか? win2k JScript/WSH5.6で作業しています。
305 :
304 :03/12/19 15:41 ID:W02neB2/
エクスプローラ開いてF3することでできました。 var Shell = WScript.CreateObject("WScript.Shell"); Shell.Run("explorer"); WScript.Sleep(3000); Shell.Sendkeys("{F3}"); 失礼しました。
>>305 var shell = WScript.CreateObject("Shell.Application");
shell.FindComputer();
……手遅れ?
そんなんでいいならWin+Fで十分じゃないのか?
310 :
名無し~3.EXE :03/12/21 02:37 ID:qjcUmfTK
質問させてください。 ScanDisk を WSHから起動するにはどうしたらよいでしょうか?
311 :
310 :03/12/21 02:54 ID:qjcUmfTK
↑すみません。 chkdskを発行すればいいんですよね。お馬鹿なことを聞いて申し訳ありません。
>>309 めちゃめちゃ基本的な質問ですが、
「Microsoft Windows では使用できません」っていうのは、
何で使用できるのでしょうか?
プラットフォームでの指定ってあるけど、Windows以外のプラットフォームってどんなの?
>312 ただ標準としてそういうエスケープシーケンスを使えるってだけ。 エスケープシーケンスを出力しなくても解析したい場合もあるだろ。 「Microsoft Windowsでは使用できません」ってのはもしろ、 Windowsでは使用しても意味ありませんってぐらいの意味。
ウィンドウを常に最前面に表示ってWSHでできますか?
Shell.Execで実行したEXEファイルのリザルトコードが欲しい場合は どうしたらよいのでしょうか?
ExitCodeかな
317 :
315 :03/12/25 10:32 ID:J3kWnMpY
>ExitCodeかな 取れましたありがとう
318 :
名無し~3.EXE :03/12/25 22:58 ID:qi2v5GZf
.wsc(Windows Script Component) で別のタイプライブラリのインターフェースを継承して COMを作成するにはどうすればいいですか? implementsの使い方がよくわからん。
BASP21使わないでVBSでStrConvをするにはどう書けばいいんですか?
>319 See→>257 文字列エンコードするにはファイル化の際にADODB.Streamで。
322 :
319 :03/12/27 14:22 ID:yWGmXC1j
あぼーん
324 :
名無し~3.EXE :04/01/01 11:14 ID:tXeNmX5l
10秒間のWaitをいれたいのですが、何か方法はありますか?
Sleep使えばいいんじゃないの?
WScript.Sleep(10000); // 10秒スリープ
327 :
324 :04/01/01 20:05 ID:dncn+wHr
basp21使わないでmp3のID3v2タグを読みとる にはどうしたらいいですか?
DynaCall + mp3infp(SDK) でDLL呼び出せばできると思うけど、詳しくはわかんないから 成功したら報告きぼん。
thx。やってみる
さっぱりわからん(;´д`)ダメぽ
さっきここで何か聞こうと思っていたんだけどなんだったか忘れてしまった_| ̄|○
>>332 何を忘れたか聞こうとしたのでは? (w
タイプライブラリってどうすれば見れますか?
335 :
名無し~3.EXE :04/01/04 11:32 ID:Fx19U8ex
>>328 mp3infp使えば普通にGetDetailsOfで見れなかったっけ?
338 :
名無し~3.EXE :04/01/06 23:05 ID://8fXjL0
***すれ立てるまでもない質問はここで 第48刷***
http://pc2.2ch.net/test/read.cgi/tech/1071506396/ ↑のスレで質問したんですが、誘導されたのでこちらのスレにやってまいりました。
質問は「vbscriptでレジストリキーを消したいのだが、キーの中に小項目があると、消すことができない」
というものだったのですが、答えは「9X系ではまとめて消せるが、2000,XPではできない」
ということでした。
となると、2000,XPでキーを一度に消去する場合には、他にやり方があるんでしょうか?
再帰的にキー構造を調べて、一つ一つ消していくとか・・・
あまりVBには詳しくないのですが、Jscriptとか、他のスクリプト言語ならできるんでしょうか?
WSHでローカルポリシーを変更する方法ってありますか? MSDNなどなど調べたんですがどうにも見つからないもので・・・ ご存知の方がいればお願いします。(環境はWin2Kです)
>>339 SendKeysで操作を自動化するより他に手がなさそうです。
レジストリの価を書き換える事で一応は実現できるのですが
それやるとサポート対象外になるとMSプレミアより回答ありましたから。
あの、ひょっとして同じ職場の方でつか?
341 :
339 :04/01/09 14:07 ID:iML9hd7I
>>340 サンクスです。うーんめんどそうですな(;´д`)
職場名を晒す勇気は無いですが、某化学企業の工場勤務です。
サポート対象外など無視してレジストリ書き換えまくりなので違う職場だと思われ
エクスプローラーでファイルやフォルダを選択してそれらのファイルオブジェクトを WSHで取得することってできますか? フォルダのカスタマイズからなら取得出来るのは知ったんですけど出来れば単体のスクリプトファイルから操作したいんですが。 いろいろ調べたんですけどエクスプローラーの操作関連はあまりのってなくて、、
343 :
342 :04/01/09 17:49 ID:OEl6q9YS
あっ、すみません、付け加えですw 上の書き方だとWScript.Argumentsで送れる方法もありますが、 やりたい事というのはWSHで任意のフォルダ内のファイルを選択状態にしたいんです。 そういうことって出来ますでしょうか?
344 :
名無し~3.EXE :04/01/10 01:00 ID:24MiGHSB
テキスト検索の結果など、行数の多いテキストを ユーザーに返したいのですが、結果を result として、 WScript.Echo( result ) してダイアログに表示させると、 画面より大きい結果をスクロールさせることができないですし、 選択してコピーもできません。 いちばん良いのは、スクロールバーがついてて 編集できないエディットボックスに result を表示できればよいのですが、 それに近いことでも、なにかいい方法があれば教えてください。
347 :
名無し~3.EXE :04/01/10 13:03 ID:xVi0VBEM
WSHから使用できるDLLを開発したいんですが、あれってActiveXですか?それともただのCOMですか?
>338 2000以降ならWMIで再帰使ってやるのがいいんじゃないのカナ? Const target = "giffile\shell\Edit" HKEY_CLASSES_ROOT = &H80000000 HKEY_CURRENT_USER = &H80000001 HKEY_LOCAL_MACHINE = &H80000002 HKEY_USERS = &H80000003 HKEY_CURRENT_CONFIG = &H80000005 HKEY_DYN_DATA = &H80000006 strComputer = "." Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") DelRegTree oReg, HKEY_CLASSES_ROOT, target Sub DelRegTree(StdRegProv, hDefKey, sSubKeyName) Dim subkey, arrSubKeys StdRegProv.EnumKey hDefKey, sSubKeyName, arrSubKeys If Not IsNull(arrSubKeys) Then For Each subkey In arrSubKeys DelRegTree StdRegProv, hDefKey, Replace(sSubKeyName & "\" & subkey, "\\", "\") Next End If StdRegProv.DeleteKey hDefKey, sSubKeyName End Sub
350 :
名無し~3.EXE :04/01/10 18:47 ID:En3/ud5f
WSHで外部プログラムを使わずに SHIFT-JIS → UTF-8 変換することはできますか? VBSで使用したいのですが方法がわかりません。
現在開いている IE のウィンドウから、ページのタイトルと URL を得て、 クリップボードにコピーしようと試みてます。 で、IE のウィンドウが一つのときは、とりあえずできたんですが、 複数の IE ウィンドウがあるときに、一番上にあるものを選び出す方法が 分からず困ってます。 // 現在開いている IE のウィンドウ(?)を得る。 var Shell = WScript.CreateObject("Shell.Application"); var WindowsShell = Shell.Windows(); for (var i = 0; i < WindowsShell.Count; i++) { if (WindowsShell.item(i).FullName.match(/iexplore.exe$/i)) { var ie = WindowsShell.item(i); break; } } こうすると、一番最初に開いたウィンドウが得られてしまい、目的がかないません。 どうすればいいのか分かる方、助言をください。
353 :
343 :04/01/11 01:41 ID:Slh+hzA9
粘着ウザイ
>>347 ActiveX = COM です。WSHから使うには IDispatchを実装します。
357 :
名無し~3.EXE :04/01/11 10:24 ID:S13q4guY
>>355 thanksです。VBA + APIで作ったモジュールを移植したいのでVB6で適当に作ってみることにします。
>>353 wshファイルは当該フォルダにおけないから(ダブルクリックしたら選択が変わる)
パスを渡すUI作るの面倒くさそう
例えばwindows2000サーバ上で夜間バッチを走らせるとして 1.DBからデータをテキストファイルに抽出 2.ファイル転送ソフトで他企業に転送 3.転送ログチェック みたいなことを皆さんはどうされてるんですか wshをベースにして作ってますか?
>>359 C#.Net, JScript.Netを使ったり,WSHで作ったり,
やりやすいので作ってます。
>>356 のところに行っても何もおきないんだが・・・
SIDはどうすれば取得できるでしょうか・・・
363 :
359 :04/01/13 13:53 ID:jVkrhHWb
>360 ありがとうございました。
質問です。 IEブラウザで改行がない右端折り返しされてる文字列を 改行を挿入して取得するにはどうすればいいのでしょうか? 例: ああああああああああああああああ|←ブラウザの端で折り返し ああああ ↓このようにしたいんです。 ああああああああああああああああ(改行)|←ブラウザの端で折り返し ああああ(改行)
365 :
名無し~3.EXE :04/01/21 06:12 ID:oeBS6s6x
243とかで、でてきた UrlEncode関数、UrlDecode関数のJScript版、きぼーん。 簡易版でも、いいです。
>>365 JScriptだと、実はGlobalオブジェクトにencodeURI/decodeURIメソッドがある。
inputboxから入力されたレジストリ値を入れ替えたいんだけど 変数を経由した値への変更ってできないんですか? RegWrite使用とすると「引数の数が一致していないか不正なプロパティ」で落ちてしまう(´・ω・`) 例えば、↓のAutoShareServerの”0”の値を、 画面から応答入力された”1”や”2”に変更するってのをやりたいんだけど objWshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\AutoShareServer",0,"REG_DWORD" 詳しいひと教えてぷりーず(´・ω・`)
369 :
名無し~3.EXE :04/01/23 18:31 ID:NweawgIP
JScript による Windows Script Host で、複数のスクリプトの排他制御を 行うには、どのように実装するのが一番簡明でしょうか? Perl や C なら flock や bind、java なら synchronized() 等を使う所 ですが、JScript ではどうするべきでしょう? 無理に外部プログラムを 使ったりするのではなく、もっと簡単な方法がありそうなのですが。
そんなもんスクリプトでやることかい
>>368 サンクス
やったことなかったです。
C〜って命令は今まで一度も使ったことなかったので
それを使うことにさえ考えつかなかったというか...
早速やってみますです。
372 :
名無し~3.EXE :04/01/24 16:06 ID:ztDTRir/
VBScript, JScript, Perl, Ruby 以外にWSHで使える言語があったら教えてください
>>372 Pythonとか。
もはや「何故それでWSH?」って気しか起きないが。
MSによると、「利用可能なスクリプトエンジン」の中にREXXっていう 名前があるんだが、何これ?
375 :
374 :04/01/24 17:49 ID:ZFYOcAnl
ググってみたら、元々はIBMの汎用機で動くバッチとかシェルスクリプト みたいな言語だとさ。
376 :
名無し~3.EXE :04/01/24 18:59 ID:ztDTRir/
Python、REXXですかなるほど Script Engineで具具って見たところTCLやLISPもつかるようです。
PerlScriptは、sprintfとか、utimeとか使えて、便利だと思いますた。 JScript、なんでsprintf使えないんだろー!? VBのDate構造体ってやつが、FSOから返されるんだけど、これがPerlScriptでは どう扱ったら言いか判らず、変換部分だけJScriptにしたりして…(w (utimeは、UNIX-timeを要求する) # Lispかぁ…。どこにそういうWSH処理系があるんだろう?
380 :
nil :04/01/25 09:27 ID:U5CJ/2hs
Windows Scripting Hostって、UNIXのシェルスクリプトに比べると たいしたこと出来ないで
Active Bourne Again Shell きぼんぬ
PHPはどうなんだろう?
384 :
名無し~3.EXE :04/01/26 01:16 ID:WIUNIktU
Sleipnirってタブブラウザのオートログインクリエイターが生成するコードを見るとよい
386 :
384 :04/01/26 01:39 ID:WIUNIktU
ありがとうございます。 やってみます!
387 :
384 :04/01/26 02:55 ID:WIUNIktU
たびたび、すみません。 Sleipnirでは自動ログインできました。 しかし、ソースを見ても、 Sleipnir.APIを使っている部分を普通のjavascriptにできません。 お教えいただけないでしょうか?
>>387 コントロールのプロパティとメソッド使えば簡単ですよ。
たとえば、VBScriptですが、Googleにテキストを設定して検索かけるには
Ie.Document.f.q.Value = ”検索する文字列”
Call Ie.Document.f.btng.Click
ってやればOK。
>>388 GETメソッドでわざわざそんなのする必要があるのか……?
>387 SleipnirAPIを使っているのは「SleipnirでアクティブなタブのDocumentオブジェクトを取得する」 部分だと思ったけど。 あーでもそのへん自作オブジェクトでラッピングしてるんだっけか。
>>389 IEオブジェクトのDocumentCompleteイベントで実行。
392 :
384 :04/01/27 01:45 ID:nS9w5VWf
自分で書いた分は、時間待ちしてなかったのでobjectが取得できなかった みたいです。 function WaitLoad() { var stat, dstart; stat = 0; while(true) if(stat == 0) { if(!IE.Busy) if(IE.Document.readyState == "complete") { dstart = (new Date()).getTime(); stat = 1; } } else { if(!IE.Busy && IE.Document.readyState == "complete") { if((new Date()).getTime() >= dstart) break; } else stat = 0; } } こんな関数拾って実行したら解決しました。 みなさん、ご親切にありがとうございました。 本当に勉強になります。
393 :
saku :04/01/30 18:22 ID:QNZCNACG
教えてください。 ヤフーチャットのいつも行く部屋に、HTMLでWindowsScriptingを使い、 簡単に入室するにはどう書けばいいか教えてください。 手動では、最初にHNを選んで、次にjabaか、htmlか選択して、目的の部屋のカテゴリーを選んで、 Yahoo!ルームか、ユーザールームか選んで、部屋名があるページを探して入室。 来れを、HNと部屋名とHTMLか、JAVAかを指定するだけで、入室できないでしょうか?
試行錯誤する前に来るなよ。
395 :
saku :04/01/31 00:28 ID:8l/JEfc0
すいません まったくの初心者なんですが、WindowsScriptingでこれは、作れますか? 初心者には、難しい物でしょうか?
クズだな
>>395 詳しいことはヤフーチャットを見たことないからわからんが、初心者がやるとなると難しいと思う。
同じようなことを考えた人間から助言させてもらうと、スクリプトだけでなくHTMLも勉強する必要がある
>>393 HTMLごときで「勉強」とか言うなよ…
いくら初心者でもみりゃわかるだろうが。
>>393 >>395 java版でログインするとさ、データロード中に画面下の方に
「アプレットの起動に失敗しウインドウが立ち上がらない場合は、ここをクリックしてリロードしてください。」
って書いてあるだろ?
で、「ここをクリック」の「ここ」の部分にリンクが張ってあるから、
そこをクリックしてそのままデスクトップまでドラッグ。
これでその部屋へのショートカットのできあがり。
部屋を選ぶ所でやってもいいけど、これだとjavaアプレットのロードに失敗するっぽい。
というわけで、ぜんぜんWSHとは関係のない方法で解決。
401 :
saku :04/02/01 20:25 ID:mtY0Qktz
>>400 そういう手もあったんですね、自分の環境でそのやり方だと、ボイスが使えないんですが、普通は使えるんでしょうか?
>>397 HTMLの基本は分ります。
>>398 WindowsScriptingできる事はできるんですね。
HNを選んだりjavaか、htmlかを選ぶなんてこともでできるんなら、便利ですね〜。
402 :
名無し~3.EXE :04/02/02 18:38 ID:cV3P0F18
回線切る→シャットダウン これ作ってください。おねがいします。
>>402 どうせシャットダウンするのに回線を切る意味が分からない。
404 :
名無し~3.EXE :04/02/02 19:26 ID:g5p6RLsV
>>403 USBのモデム子機を導入したところ、先に
回線を切らないとシステムの電源が落ちなくなったので。
普段はどーやって回線切ってるの?
406 :
さな :04/02/02 20:57 ID:+vEjljGX
WSHで、 <html> <head> <script language=VBScript> <!-- set WSHShell = WScript.CreateObject("WScript.Shell") と記述するとプログラム全体が動かなくなってしまいます。 しかし、HTMLに組み込まず、ただのVBScriptにするとWScriptを書いていても 動き、HTMLに組み込むときはWScriptをなくすだけでプログラム全体が 動きます。 ただ、どうしてもsleepが使いたいのでどうしたらよいか教えてください。 よろしくお願いします。
>>406 sleep.vbsを作って
それをrunさせればいいんでないの?
age
>>405 タスクトレーの普通のダイヤルアップ接続のアイコンから切ってます。
>>409 なるほど。
それと同じことをさせればイージャンと指摘しようと
思ったが、わからんね。スマソ
ベクターでもいってソフト探してきな。
Iria(ダウンローダー)のIriaAPIにDialup、Hangupといったメソッドが あるのでそういうソフトを導入してみるのも手かも。
青風の作者の単機能ツールに回線切断がある
rasdial コマンドはXPからだっけ?
今見たら2000にもあった
まえにどっかでソースの見られないHTAがあった気がするんだけど、方法がわかりません。 どなたかご存知ないでしょうか?
すれ違い
>>415 Script Encoder で暗号化できるんじゃない?
418 :
名無し~3.EXE :04/02/05 23:26 ID:8i5LyG+H
>>136 やっぱりWMIの日本語情報ってないっすかね
英語わからんし、きついっす
419 :
名無し~3.EXE :04/02/06 00:02 ID:On4WpJL8
vbsでMSXMLを使いxmlのファイルをクライアントに作りたいのですが vbsから呼び出すと正しく動作するのに ブラウザから呼び出すとうまくいきません。 xmlを保存するときにsaveメソッドで止まっているので 権限か何かかと思うのですが、どうやったらうまくいくでしょうか? 環境 OS:WindowsXP pro ブラウザ:IE
EmEditorのようにJScriptやVBScriptを自前アプリケーション上で走らせて パラメータとかを渡したいのですが,どのようにやればよいのでしょうか? あるいはどのAPIを使えばよいのでしょうか? ご教示願います. 環境 Win2K VC++6.0
>>421 IActiveScriptSite で調べてみ
スレッドがからまないなら簡単だよ
423 :
421 :04/02/15 12:36 ID:FOO6YdWP
アクティブX対応スクリプト言語エンジンのProgIDと .wsfでlanguage=""のところで何を書くか はどうやったら分かりますか?
ScriptControlのLanguage に渡せる文字列を列挙する方法はありますか?
426 :
名無し~3.EXE :04/02/16 01:17 ID:nnfj2eSM
Ageてみます
427 :
KingMathematician ◆5lHaaEvFNc :04/02/16 10:48 ID:+Nls/Qip
ちょっと質問。 VBSの動くソフトはIE,WSHの他にメジャーなものはありますか? VBSが動かず、JavaScriptが動くソフトはNN以外にメジャーなものはありますか?
>>427 VBSの動くソフトはIE,WSHの他にメジャーなものはありますか?
ほかには hta くらいかな?
429 :
KingMathematician ◆5lHaaEvFNc :04/02/16 16:46 ID:4U4oPZj8
Re:
>>428 どうもありがとうございます。htaってソフトですか?
久しぶりのウィッシュスレパピコ。 皆さんがんばってください。
>>429 hta は ie5.0 から一緒にある mshta.exe のこと
>>424 ProgID は Active Script Engine の CATID を含んでる clsid を調べれば
わかると思う
433 :
名無し~3.EXE :04/02/17 09:33 ID:xdOBiezt
VBSまたはJSで「c:\hoge\hage\nantoka.exe」を渡したら「c:\hoge\hage\」 が帰ってくるように、フォルダのパスを取得するにはどうすればいいでしょうか。
Left(path, InStrRev( path, "\")
)
>>433 strPath = c:\hoge\hage\nantoka.exe
Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = objFS.GetParentFolderName(strPath) & "\"
438 :
437 :04/02/17 12:55 ID:kUOOlSS7
strPath = "c:\hoge\hage\nantoka.exe" ですた。
チョット話しずれるけど、みんな何のエディタで普段スクリプト書いてるの?
sakura
VxEditor with 補完クン
442 :
KingMathematician ◆5lHaaEvFNc :04/02/18 05:35 ID:vMC64SR+
ヽ(・ω・)/ ズコー \(.\ ノ
>>439 秀丸でVBSのキーワードを色定義して書いてる
漏れも秀丸
つかあんまり意味無い質問じゃね? ほぼ全員「普段から使ってるエディタ」になるんだろうから。 かくいう私はxyzzyのjscript-mode。
。 う r で o ょ す t E し 。 i m ま ス E d め レ や 違 い は
よさそうなソフトハケーン
WSHAssistant
ttp://hp.vector.co.jp/authors/VA036013/ 関数・定数を補完
自分で生成したインスタンスのメソッド・プロパティも補完
クラスのメソッド・プロパティには説明文も出る
引数も表示
「WScript.Argument.Name」みたいなのも補完
補完候補の単語は自分で設定することが可能
すれ違いスマソ次の話題ドゾー
はっきり言って、ぬる度で間に合ってます。
新しいソフトを公開するのは勝手かもしれないけど 既存のソフトを越えないものは何の意味もないよ。 需要も無いのに供給を渡すのはキチガイとやってることは変わらない。
ソフト単位で超える超えないしか基準がない奴に 偉そうなこと言われる作者とかやってらんねぇだろうなw
キチガイはこの世からきえてほしいよ。
454 :
名無し~3.EXE :04/02/19 09:13 ID:JTZpcGuL
VBSでフォルダの有無を確認して、無ければ作成する処理を作っているのですが 現状だと一つの階層毎に「オブジェクト.CreateFolder」をしています。 これを一行で途中のフォルダも作ってくれるようにできないでしょうか? ・駄目例(C:\以下に「1st」フォルダが無い状態から「c:\1st\2nd\3rd\」を作る場合) If (FileOBJ.FolderExists("c:\1st\2nd\3rd\")) = false Then FileOBJ.CreateFolder("c:\1st\") FileOBJ.CreateFolder("c:\2st\") FileOBJ.CreateFolder("c:\3st\") End If
>>451 で、その頂点にいるソフトを作ってるんですね?
個人単位でも企業単位でもソフトなんて何時開発止まるか分からんからなー。 今はちょっとイマイチなソフトでも未来の代替品になる可能性もあるわけで。 選択肢が多い方が楽しいし、ひとつのソフトで万人の要望に適うような事なんてあり得んし。 よほどショボいブツでなければ、何の意味も無いようなソフトにはならないでしょ。
>>454 1行にしたいと思う前に、目的を果たすスクリプトを作れるようになれ。
本題だが、1コマンドでは無理。
良く使うものなのでFUNCTIONかSUBで再帰的に処理させるものを作った方が良いと思う。
どうしても1行で書きたいのなら以下の様にコロンで繋ぐことでできないこともないが、
見にくいだけなので止めた方が良い。
IF 1 THEN MSGBOX "1" END IF:IF 1 THEN MSGBOX "2" END IF:IF 1 THEN MSGBOX "3" END IF
>>449 使ってみたけどかなり気持ち悪い動作をするね。
大文字小文字の扱いとかクリップボードを使ってたりするのも減点かな。
>>451 既存のソフトでそんなすごいソフトってあったっけ?
つーか
>>449 ってどうやって見つけたの?
ググっても出てこないし、更新された直後っぽいし。
ただの宣伝だったのか・・・_Πo
>>460 漏れは
>>449 じゃないけど
OnlineSoft VersionUp.infoで見たよ
462 :
449 :04/02/19 23:50 ID:/3r1Lcfx
463 :
459 :04/02/20 00:19 ID:M7qafsZ0
>>461 >>462 そでしたか、スマソ。
WSH関連ならツール紹介でもよろしいかと。
これからも良さげなモノを見つけたら紹介してください。
464 :
名無し~3.EXE :04/02/20 03:14 ID:GlxOOnD4
dmonkeyならForceDirectoriesしてるから1発で作られる
466 :
454 :04/02/20 16:42 ID:gwQAW54i
>457、464 ありがとうございました。 「CreateFolder」の再帰版メソッドを期待してたのですが やっぱり無いんですね。 前のソース急いで書いたんで思いっきり間違ってますねw いちおう、実際は以下です。 Set FileOBJ = CreateObject("Scripting.FileSystemObject") If (FileOBJ.FolderExists("e:\1st\2nd\3rd\")) = false Then FileOBJ.CreateFolder("e:\1st\") FileOBJ.CreateFolder("e:\1st\2st\") FileOBJ.CreateFolder("e:\1st\2st\3st\") End If
>>458 は無視かよ。再帰はしてないけど。
まあ、Sub MyCreaetFolder() なんていうプロシージャ名を敬遠するのもわかるが。
468 :
名無し~3.EXE :04/02/21 02:18 ID:AkcacTgE
JScriptで未知のCOMオブジェクトのメソッド、プロパティを列挙したいのですが どうしたらよいですか?
>>468 CreateObjectしてからオブジェクト自体をprint?
470 :
464 :04/02/21 04:31 ID:BPVjpF0f
>>466 関数に目覚めた方がいいんじゃない?
関数を放り込んでおけば、後は1行でかけるし。
JScriptのcreateFolder関数はサクサク動いてます。
そろそろ、CLASSに目覚めようかな?
471 :
454 :04/02/21 08:45 ID:IGzrcCBG
>458 上司に隠れて見てるので見落としてた・・・スマソ で、動作OKでした。 俺もこれでほぼ解決です。 >470 実際に使うときはcallで呼ぶようにしてますよw 不要な部分は書き込まないほうがいいと思ってるんだけど
Scripting.Dictionaryオブジェクトのキーってオブジェクト入れられるんだ。 リテラルしか入れられないものとばっか思っていて既定のプロパティ省略したらハマったよ。
473 :
名無し~3.EXE :04/02/25 23:36 ID:5b+XA8FR
WSHでPCをスタンバイ状態にできないでしょうか? タスクで実行→スタンバイで終了 という感じで毎日決まった 操作をさせたいと思っています。
475 :
名無し~3.EXE :04/02/26 13:55 ID:D7i7hkKh
ダイヤルアップルータを使っているのですが、接続要求をPOSTで、 切断要求をGETメソッドで送る仕組みになっています。 GETはショートカットを作って切断していますが、 一々ブラウザが立ち上がってしまいます。 このやり方ではPOSTはフォーム画面からの操作になり面倒です。 これらをブラウザを立ち上げないで実現したいのですが、 いい方法はありませんか?
>475 WScriptからIE呼び出していじるときって、IEのvisibleをfalseにすれば IEのウィンドウを表示することなく操作できなかったっけ?
特定のディレクトリに存在する全ての画像ファイル(bmp)の、 任意の色を、指定した色へ一括置換することはウィッシュで可能ですか?
>>475 もう見てないかな。JScriptだとこんな感じ。
var IE = new ActiveXObject("InternetExplorer.Application");
var uri = "
http://192.168.0.1/ ";
// GETの時
IE.Navigate( uri + "?hoge=fuga&foo=bar" );
// POSTの時
IE.Navigate( uri );
while( IE.busy );
while( IE.Document.readyState != "complete" );
// フォームが複数ある時は幾つ目なのか数えて変更する。nameがあればそれでもokかも
var formItems = IE.Document.forms[0];
// postしなきゃいけないフィールドがあったら値をセットしておける。
formItems.elements[ "hoge" ].value = "fuga";
formItems.elements[ "foo" ].value = "bar";
formItems.elements[ "button1" ].click(); // 送信ボタンのname
482 :
名無し~3.EXE :04/03/03 21:30 ID:uSM/poUa
On Error Resume Nextを使っていて 下のようにエラーが重なった場合、一つ目のエラーのDescriptionを 保持しているのですが、ErrオブジェクトはErr.clearしない限りは エラーが複数発生しても一つ目のエラー情報を保持するのでしょうか? 「Windows Script v5.6 ドキュメント」より。ちょっと変更 On Error Resume Next Err.Raise 6 MsgBox (Err.Description) Err.Raise 7 MsgBox (Err.Description)
Explorer のアイコン表示をwshから設定することはできるでしょうか? 大きいアイコンとか、詳細とかです
>>482 違うと思う。
Err.Raise number だけで生成したエラーがDescriptionを書き換えないだけっぽい。
Err.Raise number, source, description まで指定すれば書き換えられてる。
On Error Resume Next
Err.Raise 6
MsgBox (Err.Description)
Err.Raise 65535, "test", "error test"
MsgBox (Err.Description)
また、Raiseを使わずに発生したエラーでも書き換えられる。
On Error Resume Next
Err.Raise 6
MsgBox (Err.Description)
Err.Description
MsgBox (Err.Description)
485 :
482 :04/03/04 12:49 ID:QUPFlspw
>484 なるほど、Descriptionはそのままでも numberは変わってますね。 これで、納得して先に勧めそうです。有難うございました
WshShellオブジェクトのRunメソッドを用いて
半角スペースを含むフォルダの配下にあるファイルをコマンドライン引数付きで実行する際、
コマンドライン引数がファイルにきちんと渡されないことがあるみたい。
具体的には次の場合が:
NALT (時刻修正ソフト、軽量・レジストリ非使用)
ttp://akky.cjb.net/download/nalt.html は-aオプションをつけて実行すると非表示で起動して終了する。
nalt.exeをC:/tempフォルダに置いて以下のコード:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:/temp/nalt.exe -a"
を実行すると、確かに非表示で起動して終了するけど、
C:/temp/test testフォルダに置いて以下のコード:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """C:/temp/test test/nalt.exe"" -a"
を実行すると非表示で起動しない。
ちなみに、前者の場合では
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """C:/temp/nalt.exe"" -a"
でもきちんと-aオプションが渡されるはずなのに渡されない。
スタートアップスクリプトにこのソフトを組み込みたいんだけど、
このせいでうまくいかない…
コマンドライン引数の渡し方が良くないのかなぁ。
ソフト側の不具合なのかな?
487 :
486 :04/03/04 17:28 ID:S4NPQ77U
>>486 自己レス
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.CurrentDirectory = "C:/temp/test test/"
WshShell.Run "nalt.exe -a"
でとりあえずうまく行ったけど、Runメソッドを使う場合は
必ず作業ディレクトリを変えるべきなのか…
>>487 RunじゃなくてExec使え。
↓これでお望みの動作だと思う。
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Exec( """C:/temp/test test/nalt.exe"" -a" )
489 :
st :04/03/05 01:06 ID:xFU9jTte
質問させてください。 WSHを使ってアプリケーションの印刷を実行したいのです。 具体的には、印刷ページ「ファイルに保存」にチェックを つけて、出力先ファイル名も、ダイヤログを開かせて 入力するのではなく、あらかじめ決めうちのファイルに 出力させたい。 普通に印刷させるだけなら下記のようになると 思うのですが(MS-Wordの例)、それ以上の応用となると さっぱりです(資料が……)。 // 印刷するファイル名 doc = "c:\\test.doc"; // アプリオブジェクト作って読み込み word = WScript.CreateObject("Word.Application"); word.Documents.Open(doc); word.visible = false; // オプション設定して印刷 word.Options.UpdateFieldsAtPrint = true; word.Options.PrintBackground = false; word.ActiveDocument.PrintOut(); //終了処理 word.ActiveDocument.Close(); word.quit();
スクリプトにD&Dした各フォルダの全部の中身をまとめてEasy圧縮に渡して その各々のフォルダの中に、できた圧縮ファイルを置けるようなスクリプトって作れますか? 無圧縮zip.mp3をリネームするときにバラのファイル名を流用することが多いもので……。 最初バッチファイルでやろうとしたんですが、Easy圧縮がワイルドカードを受けつけてくれずできなかったです。。
491 :
名無し~3.EXE :04/03/06 18:12 ID:BBFbPGA+
>>490 あんまりスマートじゃないけどこんなでどうよ。
Easy圧縮の設定で「圧縮元ファイルと同じ場所(I)」と「圧縮完了を通知しない」を選択のこと。
var WShell = WScript.CreateObject( "WScript.Shell" );
var fso = new ActiveXObject("Scripting.FileSystemObject");
var Argu = WScript.Arguments;
var fList = new Array();
var i, target, fld, fc, fn, count = 0;
for ( i = 0; i < Argu.length; i++ ) {
target = Argu.Item(i);
if ( fso.FolderExists( target ) ) {
fld = fso.GetFolder( target );
fc = new Enumerator( fld.files );
for ( ; !fc.atEnd(); fc.moveNext() ) {
fList.push( fc.item().Path );
}
} else {
fList.push( target );
}
}
while ( fn = fList.pop() ) {
WShell.Exec( "C:\\ezc12\\EASYLZH.EXE " + fn );
}
こないだのセキュリティうpデートで user@password:url 形式のURLがそのままじゃ使えなくなりましたよね .Navigate2とかで認証付きのページを何とか利用したく思い、 レジストリ変更でとりあえず現在ログインしているアカウントでは利用可能でしたが、 Win2kでの「タスク」によるスケジュール実行の場合、正しく起動アカウント設定しても なぜか動作してくれませんでした。 別の方法があれば教えてください
>>492 ありがとうございます!
早速拡張子jsで保存しMP3の入っているフォルダをD&Dしてみました。
ところが、MP3ファイルのそれぞれを(一斉に)個別圧縮してしまい、うまく動かないようです……。
album1\
1-1.mp3, 1-2.mp3
album2\
2-1.mp3, 2-2.mp3, 2-3.mp3
↑このフォルダalbum1&2をスクリプトにD&Dすると、圧縮経過を示す
ダイアログが一気に5つ開き、各々のファイルの個別圧縮が始まって
album1\
1-1.mp3, 1-2.mp3, 1-1.zip, 1-2.zip
album2\
2-1.mp3, 2-2.mp3, 2-3.mp3, 2-1.zip, 2-2.zip, 2-3.zip
↑こんな感じに圧縮ファイルが出来上がってしまいます。
圧縮経過ダイアログを一つずつ順繰りに出していって、各々のフォルダ中身全部を
そのフォルダの中に圧縮したものを出すようにしていただけると助かりますです。。
album1\
1-1.mp3, 1-2.mp3, NEW1.ZIP (←1-1.mp3 + 1-2.mp3が圧縮されたもの)
album2\
2-1.mp3, 2-2.mp3, 2-3.mp3, NEW1.ZIP (←2-1.mp3 + 2-2.mp3 + 2-3.mp3が圧縮されたもの)
こんな具合に。
お手数かけてすみません。お願いします……。
もしこちらの勘違いでしたらすみません。
ここは何屋さんですか?
>>495 >492 のスクリプトの動作はそれで正常。だってそうなるようにしたんだもん。
フォルダは丸ごと圧縮だったのな。
圧縮ファイルの保存先は「c:\temp」、ファイル名は「NEW1.lzh」で決めうち。
連番機能で「NEW2.lzh」とかなった時のことはしらん。
D&Dされるのもフォルダに決めうち。ファイルがあった場合はしらん。
var WShell = WScript.CreateObject( "WScript.Shell" );
var fso = new ActiveXObject("Scripting.FileSystemObject");
var Argu = WScript.Arguments;
var i, folder;
for ( i = 0; i < Argu.length; i++ ) {
folder = Argu.Item(i);
var oExec = WShell.Exec( "C:\\ezc12\\EASYLZH.EXE " + folder );
while (oExec.Status == 0) {
WScript.Sleep(100);
}
fso.MoveFile( "c:\\temp\\NEW1.lzh", folder+"\\" );
}
498 :
495 :04/03/07 03:47 ID:A2fo+AfB
>>497 バッチリ動きました、ありがとうございます!
497さんのスクリプトをパクらせていただいて、解凍レンジの個別(順次)解凍のスクリプトもできました。
これでかなり快適になるです。ありがとうございました。
// [解凍レンジで個別解凍] EasyExtract.js
var WShell = WScript.CreateObject( "WScript.Shell" );
var fso = new ActiveXObject("Scripting.FileSystemObject");
var Argu = WScript.Arguments;
var i, fn;
for ( i = 0; i < Argu.length; i++ ) {
folder = Argu.Item(i);
// 解凍レンジへのフルパス+コマンドラインオプション
var oExec = WShell.Exec( "D:\\PROGRAM\\EASYRANGE\\ERANGE.EXE " + "+m -o -v -s +w -a -t +c +j " + folder );
while (oExec.Status == 0) {
WScript.Sleep(100);
}
}
499 :
486 :04/03/07 09:38 ID:QROk9kvq
500 :
st :04/03/09 00:44 ID:5rJiLJqT
>>491 なるほどサンクス。
WordのVBAでマクロ記録したら
それっぽい引数名に空文字列を
渡していたんで、もうちょっとがんばれば
良かったわけだな。
ともあれ感謝。
>>16 (11)
参考にしてやってみたんだが、
確かにCABファイルはできるが
XPで、エクスプローラで解凍しようと
すると
この操作を完了するのに十分な記憶域がありません。
とでるのは、漏れだけですか。
Set cab=CreateObject("MakeCab.MakeCab.1")
cab.CreateCab "Test.cab",False,False,False
cab.AddFile "test1.txt","test1.txt"
cab.AddFile "test2.txt","test2.txt"
cab.CloseCab
Set cab=Nothing
502 :
エタ :04/03/16 21:44 ID:wKnbkTxS
おい、超偉い人教えてくださいませ! _______________________________ ■NTドメイン上のコンピュータアカウントのSIDを得る方法■  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ まじで、お願いします。偉い人。期待してます。
504 :
エタ :04/03/16 23:17 ID:wKnbkTxS
だからって埋もれさせる理由は無いさ
>>502 こういうこと?
var acs = GetObject("winmgmts:{impersonationLevel=impersonate}")
.ExecQuery("SELECT * FROM Win32_AccountSID");
for ( var e = new Enumerator(acs); !e.atEnd(); e.moveNext() ) {
var ac = e.item();
WScript.Echo( ac.Element + "\t" + ac.Setting );
}
506 :
エタ :04/03/17 08:42 ID:m3t8glGg
それはローカルPCまたはその時直接アクセスできるリモートが対象ではないかい? 欲するは、ドメインDBからコンピュータアカウントのSIDを引き出すこと。
507 :
名無し~3.EXE :04/03/20 01:20 ID:GkkE6i7l
wshからのExcelのソートの仕方がわかりません 誰かおせーてください
Set obj = CreateObject( "Excel.Application" ) で、Applicationオブジェクト作ってソートしたいRangeを設定してSortメソッドでできるんじゃないかな
nbtscan.exe
文字置換スクリプトにおいて、SJISコードで下二桁が9Dの時、 そいつを元の文字+@(任意の文字)にしたいのですがうまくいきません。 replStr = "A" setStr = "BG" 現状でAという文字がBGと置換はされるのですが、 文字コードの指定方法がいまいちわかりません。 どなたかアドバイスをくれませんか?
秀丸マクロ
Set ie = CreateObject("InternetExplorer.Application") ie.Navigate("url") ie.Visible = True ってやると、すでにIEが起動している場合、同一プロセスに 相乗りして起動しまいます(別ウィンドウであがりますが・・・)。 これを別プロセスで起動させる方法ってあるのでしょうか?
復帰
IEのお気に入りの中の、URLの特定部分を一括置き換えするスクリプトってありませんか? pc2.2ch.netからpc5.2ch.netへの鯖変更で、URL書き換えがたまらなくマンドクセー
置換すればいいじゃん
ファイル選択が出来るコモンダイアログボックスっぽいの無いでしょうか? フォルダを選択するダイアログボックスは簡単に出来たんスけど。
518 :
名無し~3.EXE :04/04/04 06:40 ID:O4OyPESs
すみません
↓こちら
>>3 にあった個人サイトさまのところにあったJavaScriptなのですが
これをWordでなくOutlookExpressに変えることってできますでしょうか?
こういう風にイベントを拾うことができるのってWordやExcel,IEなどの特殊な
アプリケーションだけなんですかね?(´Д`;)
//Wordを立ち上げる
var objWD = WScript.CreateObject("Word.Application", "WD_");
objWD.Visible = true; //Wordを可視にする
//イベントを待つためのループ
while(true) {
WScript.Sleep(1000); //WSH2.0以上で使える
//不慮の事故でイベントが発生しなかったときのため
if(!objWD.Visible)
WScript.Quit();
}
//終了イベントが発生したときに実行される
function WD_Quit() {
WScript.Echo("Word を終了します");
WScript.Quit();
}
520 :
518 :04/04/04 16:08 ID:O4OyPESs
どーもありがとー^^ 助かりましたー
521 :
518 :04/04/04 23:12 ID:O4OyPESs
一応↓みたいにやれば閉じたときに何かするってできるみたいですねー^^ WSHShell.Run "msimn.exe",,true ただタスクトレイって言うんでしたっけ、右下に常駐させてあるアプリを アウトルック閉じるのと同時に閉じようと思ったんですけどそれはできませんでしたが(´Д`;) WSHってソフト起動はできても終了は難しいんですね(´Д`;)
指定のテキストファイルの最後に D&Dされたファイル名を追加するスクリプトキボンチュ!
echo %1>>abc.txt
524 :
名無し~3.EXE :04/04/05 11:48 ID:bQTMet0d
ど素人でスイマセン。 WSHとはまったく関係ないのですが、Windowsのコマンドプロンプトでfor文を使って、 繰り返し処理を検討しているのですが、現時点で、for文が何回実行されているか を表示する環境変数や方法ってないですか? たとえば、 C:\.arg_test.bat 30000 <内容> for /L %%I IN (1,1,%1) do echo "Counter ?" とした場合、?に、for文の実行回数を表示したいのですが・・・・・・・
for /L %%I IN (1,1,%1) do echo "Counter %%I" でいいんじゃねーの?
>>526 523の書いた一行を、テキストファイル test.bat にコピペして保存。
この test.batをデスクトップとかに置いて、そのアイコン上に任意の
ファイルを D&D すれば目的達成。
>>527 さっきやったら「ECHO は <ON> です。」とか謎のtxtが出てきたけど
ショートカットからやったら出来た。ありがとう
529 :
名無し~3.EXE :04/04/06 14:38 ID:pR0ckaDO
>>525 ありがとごぜーますた。複雑にかんがえておりますた・・・・・・・
複数のファイルでもD&Dされたファイル名のリストが出来る 大丈夫な高度なバージョンキボン
>>530 バッチには詳しくないからそこらで拾った奴。
因みにWindowsの制限で、ある程度以上の数をまとめてD&Dするとエラーがでる。
@echo off
:start
if %1.==. goto quit
echo %1>>c:\documents\a.txt
shift
goto start
:quit
534 :
518 :04/04/07 00:27 ID:YFo0E4OW
おおおおおおおおおお!! 有意義な情報ありがとうございます!! ちなみにプロセスって閉じても問題ないんでしょうかね?(´Д`;) いえ、それしか右下に入ってるの止める方法ないとは思うんですが、 タスクマネージャーでプロセス止めようとするとけっこうな脅し文句(警告)が出るのでちょっと気になりまして・・(´Д`;)
536 :
518 :04/04/07 15:16 ID:YFo0E4OW
うほっ! おとなしく手動で閉じときますw
プロセスの起動、終了イベント取得方法としてはこんなのもある。 // プロセスの起動を検出 var pros = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecNotificationQuery( "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'" ); while ( 1 ) { var pro = pros.NextEvent(); if ( pro.TargetInstance.Name == "notepad.exe" ) { // やりたいこと break; } } __InstanceCreationEvent を __InstanceDeletionEvent に変えると終了を検出。
538 :
名無し~3.EXE :04/04/07 22:41 ID:HmaTY8KC
すんません アルファベットを数字に対応させるスクリプトを作りたいです。 functionに数字を与えると、アルファベットが返ってくるものです。 対応は以下のような感じです。(26進数とでも言いましょうか) 1=a , 2=b , ... , 26=z , 27=aa , 28=ab , ... , 52=az , 53=ba , ... どなたか偉い人、助けてください。お願いします
>>538 とりあえずJScriptで。
もうちょいエレガントにできるような気もするけど……。
function GetRadix26(number) {
if (number < 1) return "";
var integer = number, str = "";
do {
str = String.fromCharCode((--integer % 26) + 97) + str;
} while ((integer = Math.floor(integer / 26)) > 0);
return str;
}
目的には合わないけど、純粋に26進数をやるなら var num = 10; WScript.echo(num.toString(26));
541 :
538 :04/04/08 00:48 ID:zPdfZKvB
>539様 すごいですね。確認しました。 実は私、VBSしか扱えないのですが、このスクリプトはVBSにすることは難しいでしょうか。
VBSは嫌いなり。 Function GetRadix26(number) Dim ret : ret = "" Dim integ : integ = number While integ > 0 integ = integ - 1 ret = String(1, (integ Mod 26) + 97) & ret integ = integ \ 26 Wend GetRadix26 = ret End Function
543 :
538 :04/04/08 08:05 ID:zPdfZKvB
すげえ。。。。。しかもこんな夜中に。。。 あんた神様だ。
>>542 話は全然変わるけど、なんで
>>539 とか
>>542 は
きれいにインデントされて表示されてるの?
>>537 みたくいつも行頭のスペースは削除されてしまって
インデントつかないんだが。
542 からコピペ
While integ > 0
integ = integ - 1
ret = String(1, (integ Mod 26) + 97) & ret
integ = integ \ 26
Wend
新規に入力
for(i=0; i<10; i++) {
if(i != 5) {
WScript.Echo(i);
}
}
& で出来る
ごめ、
>>546 へぇー、なるほど。
そうやってスペースが入力できるんですね。
30年来の謎が解けたよ。
サンキューでした。
下のUWSCのスクリプトなんですけど
ID = GETID("Adobe Illustrator")
DEF_DLL PostMessageA(HWND,Long,Long,DWORD):Bool:user32.DLL
WM_COMMAND = $111
PostMessageA(IDtoHND(ID), WM_COMMAND, 12800, 0)
同じことがやりたくてdynacallを登録し
>>149 を真似ようとしたのですが
PostMessageAのiとかrをどう記述すればいいのかわかりません。
var WM_COMMAND = 0x0111;
var UserWrap = WScript.CreateObject("DynamicWrapper");
UserWrap.Register ( "USER32.DLL", "FindWindow", "i=ss", "f=s", "r=h" );
UserWrap.Register ( "USER32.DLL", "PostMessageA", "i=huuu", "f=s", "r=l" );
var hWnd = UserWrap.FindWindow( "Adobe Illustrator", 0 );
var result = UserWrap.PostMessageA( hWnd, WM_COMMAND, 12800, 0 );
上のスクリプトはresultが1を返してるけど何の反応もありません。
551 :
名無し~3.EXE :04/04/08 23:45 ID:DGOgV8UZ
WSHでどうにかしてDLLを呼び出すことできないですか?
553 :
548 :04/04/09 10:38 ID:knDZVkYP
成功しました。本当に感謝しております。 ちょっとググって見た限りだと自動化には SendMessageのほうが向いてそうなので、 PostMessageAをSendMessageに代えても 問題なく動いてくれました。 参考ついでに、も一つ質問なんですが 12800などのコマンドの番号を調べるには どんな方法があるのでしょうか? 現状では、UWSCのスクリプトを使って 選択したメニューの番号を調べてます。
554 :
名無し~3.EXE :04/04/14 18:17 ID:PHFgj4Kh
VBスクリプトで、シェル内で、Cのヘッダファイルincludeみたいに 他のシェルのソースも呼び込む事って出来ないんでしょうか? いくつかバッチ風のファイル作ったのですが、共通で使うConstの変数とか 結構あるので、それ1ファイルにまとめて最初に呼び込んで、 全部宣言しちゃいたいんですが。
>>554 wsfファイルを使って各vbsをインクルード。
この方法を使うと他の色々なエンジンを組み合わすことが出来て便利。
vbsとPrelとか。
詳しくはMSDNを。
>>554 ,555
wsf ファイルでもいいけど、こういう方法もある。
さらに、Include 内で読み出す文字列をいじってから
ExecuteGlobalするようにすれば面白いことができる。
Include("test.vbs")
' test.vbs の関数
func()
Sub Include(ByVal file)
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(file)
ExecuteGlobal( f.ReadAll() )
End Sub
>>557 「対象をファイルに保存」ってアドレスを右クリックしたときのでしょ。
どこに表示されたアドレスに対してそのメニューを出したいの?
単にIEオブジェクトを使って「ファイルのダウンロード」画面を出したいのなら
Navigateでいけそう。エラーが出るからtry...catchするとかして。
559 :
557 :04/04/19 02:10 ID:nNQBcXcZ
>>558 おぉレスサンクスです。!
どういう状況で出したいのかといいますと、、、
自分が使ってるエディタはEmEditorなんですが、それには他のアプリにコマンドライン付きで
起動させる機能がついているのでエディタで表示しているURLをWSHとかに渡して
ブラウザのようにダウンロードしたいんです。
出来そうっすか?
ダウンロードするだけならDMonkeyで(new HTTP).getFile('url','localfile');でいける
>>560 確かにgetFileで落とせることも出来るのですが、
途中でキャンセルしたい場合とか接続が繋がってるかどうかGUIで分かるから便利なんですが。
まぁDmonkeyでも出来そうだがスキルない・・・
>>561 EmEditorで、カーソル位置のアドレスをIEでダウンロードorファイルに保存。
かなーり適当。IEよりダウンローダーに渡した方が良いと思うけどね。
var IE = new ActiveXObject("InternetExplorer.Application");
document.selection.CopyLink();
IE.Navigate("about:blank");
var clp = IE.Document.frames.clipboardData;
IE.Navigate( clp.getData('Text'), 0 );
while ( IE.Busy );
while ( IE.Document.readyState != "complete" );
if ( IE.document.URL != "about:blank" ) IE.ExecWB( 4, 0 );
>>562 遅レスすいません。
おぉすごい!これいいっすね。
マクロに登録して使い倒します( ;´Д`)
Dim oFS, sTarget Set oFS = WScript.CreateObject("Scripting.FileSystemObject") For Each sTarget In WScript.Arguments.Unnamed If oFS.FileExists(sTarget)Then oFS.MoveFile sTarget, oFS.GetParentFolderName(sTarget) & "/../" End If Next 1つ上の階層へファイルを送るってやつですが、 ファイルのみではなくフォルダであろうが同様の操作をさせるにはどうすればいいですか?
>>564 Windows Scripting Host Laboratoryの
ダウンロードにある
フォルダ内のアイテムを上位フォルダに移動する
スクリプトを使えばいいのでは?
FolderExists のときは MoveFolder すればいいんじゃね?
567 :
名無し~3.EXE :04/04/27 09:47 ID:61+TBcbw
多重起動を抑制するには、どうすればいいのでしょうか? 「ロックファイルにPIDを出力して…」みたいな、定石があれば御紹介ください。
568 :
名無し~3.EXE :04/04/29 08:42 ID:m8J/+GsI
>567 起動を監査する対象がEXEならWMIでいけると。 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'Database.exe'") If colProcesses.Count = 0 Then Wscript.Echo "Database.exe is not running." Else Wscript.Echo "Database.exe is running." End If
実は今、PC初期設定コンプリートの為のスクリプトを書くことを 検討中なのです。 会社に新規に導入したPC100台に対して、一括して 1.IEのプロキシ設定のかき込み 2.あるテキストに1行ごとに登録したIPを各PCに設定 3.おなじくWinsの設定やDNSのかき込み 4.OEのアドレス帳のインポート 5.OEのメールアドレス、パスワードの自動設定>あるテキストから持ってくる とりあえず、これを機械的にばばっとやれるスクリプトを書きたいのですが、これ は物理的にできるのでしょうか?
物理的って??
571 :
名無し~3.EXE :04/04/29 21:07 ID:m8J/+GsI
たしかに物理的って意味がわからん。パソコンの設定に物理が関係あるのか? カッコ良さそうだから使って見たのかい?ぼうや。 だいたいOSは何なんだ? IP設定してないってことは、通信できない状態だろ。 同じ状態のツールをあらかじめ配っておくつもりか? IPが沢山書いてあるテキストから重複なしにどうやって割り振るんだ? ホスト名:IP:MACアドレス の対比表ならできるか・・・ NT系の場合、IEの風呂敷はユーザ単位だぞ。同一ユーザでログオンしたら駄目だぞ。 ADでグル−プポリシー、DHCPサーバを使えばスクリプトなんか要らずに4.5.以外は解決するよな。 会社でOE使ってんのか?まじで? 普通ExchangeServerだろーーーーーーーーー? Outlook2000ならSendkeyメソッドで自動化したことがあるな。 あーつかれた。
ageた上に妙に興奮しているヤツがいるな w
573 :
名無し~3.EXE :04/04/30 15:49 ID:UN+bzQ53
>>569 XPか2000ならスクリプトなんか書かずにできる。
574 :
名無し~3.EXE :04/04/30 19:09 ID:W5RdsvGh
>573 NETSHのことだとしたら、あれも一種のスクリプトだと思うが。
すいません、今VBScriptの本を読みながら、 いろいろ作ってみているところなんですが、 お薦めの書籍とかってありますか? 出来るだけ幅広く、詳しく出ているのが欲しいんですが、 図書館や本屋で探しても、いまいちどれがいいのか・・・
576 :
名無し~3.EXE :04/04/30 22:16 ID:W5RdsvGh
>>575 VBScriptの本を読みながらとあるが、どんな本を(例えば書名とか)読んでいるのかな?
それによってアドナイスも変わってくると思う。
まぁ、WSHの本自体が少ないんだけど。
オライリーのWSHクイックリファレンスは悪い本じゃないと思うが、文字通りリファレンスだから
君の希望に合致するかどうかは疑問。(オブジェクトのリファレンスで関数ははしょってある)
>>576 dクス
オライリーはいいところなんですか。
とりあえず、書店で見てきまつ。
>>577 「VBScriptハッカーズプログラミング」
「VBScriptクイックリファレンス」
書名は怪しいけど、とりあえずマトモな本です。
学校の図書館にはこれ以外はHTMLに埋め込むための本しかなくて・・・
リファレンスブックでいいんですが、関数とかハショらないで
出来るだけ仕様とか詳しく書いてある本がホスィです。
上に書いた本だと、WSHとか、IE・Excelの動かし方とかはちゃんと出てないのです(´・ω・`)
リファレンスそのものはMSDNにあるしなぁ。
ヘルプみれや
582 :
名無し~3.EXE :04/05/06 09:12 ID:X4PfDImF
なお、OS は Windows XP SP1 で、WSH 自体のバージョンは調べ方が分からない状態です。
(´・ω・`)
sage
588 :
名無し~3.EXE :04/05/07 16:19 ID:O+Dx19KU
WSHでプログレスバーを表示する方法はありますか? たとえば、3000個のフォルダに対して操作するときに 「x個中y個完了」とかいう表示を随時見せるような感じに できればいいんですけど…。
Windows標準の奴は難しいんじゃない? IEのウィンドウに表示するとかならできるかな
コマンドラインに表示してやればいいじゃん、と思ってしまう。
591 :
名無し~3.EXE :04/05/07 19:24 ID:RpZtUoso
そういえば、HTAのスレって見ないな。 あったっけ?
Byte型のデータをInteger型に変換する方法はあるでしょうか? ぐぐったのですがVBや.NETでのやり方しか見つけることが出来ず難渋しています。
596 :
594 :04/05/10 17:25 ID:HmTvgj3I
>595 すみませんでした。 CIntでエラーが出るので、出来ないと思いこんでいたのですが原因は別のようです。 あらためて質問なのですが、次のスクリプトでCIntがエラーになるのですが原因は何でしょうか? Const adTypeBinary = 1 Const adSaveCreateOverWrite = 2 set objFileSystem = CreateObject("Scripting.FileSystemObject") strRoot = objFileSystem.GetParentFolderName(WScript.ScriptFullName) strFileName = strRoot & "\tmp.dat" Set objStream = CreateObject("ADODB.Stream") objStream.Open objStream.Type = adTypeBinary objStream.LoadFromFile strFileName l = objStream.Size ReDim a(l) objStream.Position = 0 For i = 0 To 5'l byteBuf = objStream.Read(1) a(i) = CInt(byteBuf) Next objStream.Close set objStream = nothing set objFileSystem = nothing
>>596 > byteBuf = objStream.Read(1)
で返ってくるのは特殊な配列なので、AscB(byteBuf)で変換。
>597 ありがとうございます。解決しました。
多分リストボックス そして無理
HTAならいけるけどな。
VBScriptの正規表現で、以下のようなテキストから<TR>〜</TR>毎に マッチさせたいのだがうまくいかない。 例のように<TR>〜</TR>の間に2行挟まっているような定型的なものだと "<TR.*(\n.*){3}" とすればいいのだが、不定型なものだとうまくいかない。 正規表現で表すことは無理なのかな? だれか分かる人がいれば教えて欲しい。 【例】 --------------------------------------------- <TABLE> <TR> <TD>タイトル</TD> <TD>WSH クィックリファレンス</TD> </TR> <TR> <TD>著者</TD> <TD>羽山博</TD> </TR> </TABLE> ---------------------------------------------
>602 "<TR>.*</TR>"じゃ駄目なの? 俺が質問の意図をくみ取れてないのかな。
あ、ごめん勘違いしてた。
msgboxとかにあるシステムモーダルってどんなときに使うの? 説明には「システム モーダルに設定します。メッセージ ボックスに応答するまで、すべてのアプリケーションが中断されます。」 とかなってたんで試しに ----------------------- MsgBox "test",4116 MsgBox "test1",4096 MsgBox "aaaa",vbSystemModal ----------------------- とか書いて走らせてみても、メッセージ ボックスに応答せず放置してても 何も中断されているようなモノがないような気がするんだけど???
>602 "<TR>(.|\n)*</TR>"でいけるはず。
>>606 それだと *</TR> があるので、最後の</TR>までマッチしてしまう。
そこのところで悩んでいる。
なかなか難しいね。
>607 </TR>までマッチさせてから、Left使って取り除いくのじゃ駄目?
グループ化しちゃ駄目なの? Dim reg, matches, i, text 'textにファイルから文字列読込 Set reg = new RegExp reg.Pattern = "<tr>((?:.*\n)+?.*)</tr>" reg.IgnoreCase = True reg.Global = True Set matches = reg.Execute(text) For Each i In matches WScript.Echo(i.SubMatches(0)) Next
>>605 そういえば、Win3.1のときは全員とまってくれてたな〜
>>607 <TR>(.|\n)*?(?=<\/TR>)
612 :
611 :04/05/13 01:00 ID:wCgJKQju
?:があった方が良いかも。 <TR>(?:.|\n)*?(?=<\/TR>)
602 です。 レスしてくれた方、どうもありがとう。 怪しい書き方だけど、とりあえず解決した。 かなりいい加減な書き方をしているものでも、対応できるようになった。 "(.*<tr.*/tr>)|(.*<tr.*/tr>.*)|(.*<tr((?:.*\n)+?.*)/tr>)"
>>613 なんだよ。最短マッチじゃんかよ。
ウダウダ言ってるからもっとややこしいのかと思った。
"<(?:TR|tr)>(?:\n|.)*?<\/(?:TR|tr)>"
で終わりじゃん。
?:と大文字無くしてスッキリ書いたら
"<tr>(\n|.)*?<\/tr>" これだけだ。
dynacallで、引数なしのAPI(GetForegroundWindowなど)を使う場合、 引数はどう設定すればよいでしょうか?
616 :
615 :04/05/13 09:42 ID:+fb/FC9/
自己解決できました、すいません(._.;)
>>614 "<(tr)(\n|.)*?/\1>" の方がいいと思うが。
それと嫌味な表現をしない方がいいと思うけどな。
WSHやらなんやらで、音楽ファイル(wavやmp3)の曲の長さを得るにはどうすればいいでつか? 何を調べればよろし?
なんだMPEG Audioって簡単には正確に曲の長さ出せないのか;; 計算で大体の値求めるしかないんでつか? 教えてエロい人。
メディアプレーヤ使うか? var player = new ActiveXObject("WMPlayer.OCX.7"); とかして、 player.URL="x.mp3"; とか言う感じで。 で、あとはどうすれば?
ttp://www.geocities.jp/bywnn498/mp3/ Contentsの「再生時間の計算」を読んで619を得ました。
Σ(1152÷サンプリング周波数(Hz))
で出せるはずだけれども、時間かかって実用性無いそうで。
ついでに言えば、その周波数をドコからどうやって取得すればいいんだか...不明。
音楽ファイルの構造についてはサッパリなんで非常に困っとります。
MP3をテキストとして開いたら、再生時間が書き込まれていた!なんてこともないよねぇ。
ファイルのプロパティを一発取得!みたいに簡単な方法ありません?
>>621 XPならエクスプローラーの詳細表示で表示できるから
GetDetailsOf とか使ってそれを取得すればいいんじゃない?
XP以外なら mp3infp 入れれば表示できるし。
今日始めてこのスレ見たので今更ですが、
>>454 さんのやりたかった
ことを関数にしてみました。
Const strPath = "c:\1st\2nd\3rd"
Set FS = CreateObject("Scripting.FileSystemObject")
Call ForceDirectories(strPath) 'フォルダ作成関数呼び出し
Set FS = Nothing
'== フォルダ作成関数(親フォルダが無ければ再起呼び出し) ====
Function ForceDirectories(CreatePath)
Dim ParentFolder
ParentFolder = FS.GetParentFolderName(CreatePath)
If Not FS.FolderExists(ParentFolder) Then Call ForceDirectories(ParentFolder)
If Not FS.FolderExists(CreatePath) Then Fs.CreateFolder(CreatePath)
End Function
もう需要ないですかそうですか・・・_| ̄|○
ところで、下のコードで生成したフォームを表示するには どうしたらいいんでしょうか。 Dim UserForm Set UserForm=CreateObject("Forms.Form.1") UserForm.Caption = "hogehoge" UserForm.Visible = True '←ここでエラー Wscript.Sleep 3000 SetUserForml =Nothing
>>620 var wmp = new ActiveXObject("WMPlayer.OCX.7");
var media = wmp.newMedia( "c:\\hoge.mp3" );
WScript.Echo( media.getItemInfo( "Duration" ) );
これで秒をgetできる。
>>624 .Visibleプロパティがないからエラーになってる
>>626-627 やっぱりダメっぽいようですね。HTAでがんばってみます。
再描画ってどうやるんだろう・・・。
>>628 GUIが必要なら、変にWSHに拘らず
JScript .NETとかC#でやった方が良いと思う。
JScript .NETならスクリプトっぽさはそのままで
.NET クラスライブラリが使えるから簡単に色々なことが出来る。
>>629 レスサンクス
>>588 みたいなことをやろうとしたんですが、会社で使うんで、
勝手にソフト入れられないんですよ。
仕方が無いんで、Excelのユーザーフォームで作っちゃいました・・・。
微妙にスレ違いかも知れない質問ですが、IEの右クリックメニュー用のスクリプト (形式上は *.htm)では WScript オブジェクトは使えないのでしょうか? たとえば <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <script type="text/javascript"> WScript.Echo("OK"); </script> </head> </html> と書いて実行すると「'WScript' は宣言されていません」となります。 単に WScript.Sleep を使いたいだけなので別の解決策があれば それでいいのですが・・・。
ドメインのログオンスクリプトを作成しています。 空いているドライブを検索してマウントまではできたのですが、 既にネットワークがマウントされているかを判別するのに悩んでいます。 例えば"\\Server\Share"がどこかのドライブにマウントされているかを 判別するスクリプトを教えて下さい。 よろしくお願いします。
>>632 うーん、確かに Settimeout は指定時間遅らせて関数を実行
できますが、やりたいのはスクリプト自体の停止なのです。
具体的には、document 中のあるプロパティを見張って
そのプロパティがある値になったら処理を行いたいと。
そこで WSH なら
while(the_value != 3){
WScript.Sleep(1000);
the_value = document......
}
というようにできるのですが、右クリックメニュー用スクリプト
だと今のところ実現できてません。
どなたかお知恵を!
>>635 外部 COM を使ってみてはどうでしょうか。
ttp://www.autoitscript.com/cgi-bin/countdown.pl?AutoIt/AutoItX.zip ------------------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<script type="text/javascript">
WshShell = new ActiveXObject("WScript.Shell");
Ait = new ActiveXObject("AutoItX.Control"); // AutoIt
Ait.Sleep(5000);
WshShell.Run("notepad.exe");
</script>
</head>
</html>
私の使っているタブブラウザ(Moon Browser)に、お気に入りを訪問回数でソートする機能がないので、 IEの履歴から訪問回数を取得しようと思い、以下のような履歴フォルダを走査するコードを書いたのですが、 一応動いてはいるようなのですが、20日分の履歴を処理するのに5分ぐらいかかってしまいます。 もうちょっと速くする方法はないでしょうか? WindowsXP Pro、IE6.0です。 var HistoryFolder = 0x22; var objShell = WScript.CreateObject("Shell.Application"); var objHistoryFolder = objShell.Namespace(HistoryFolder); var cnt = new Array(); function count(folder) { var i, item, url; for (i = 0; i < folder.Items().Count; i++) { item = folder.Items().Item(i); if (item.IsFolder) { count(item.GetFolder); } else { url = folder.GetDetailsOf(item, 0); if (typeof(cnt[url]) == "undefined") { cnt[url] = 1; } else { cnt[url]++; } } } } count(objHistoryFolder);
>>637 履歴は実際にはショートカットファイル群ではなく
c:/Documents and Settings/UserName/Local Settings/History/History.IE5/index.dat
みたいたなindex.datに格納されてるから、
これを直に読み込んで正規表現で抜き出せば速いかも。
perlでやってみたら速かった。
問題はファイル名の取得と抜き出し方法かな。
初心者なのでよくわからないのですが、 aspのwebページをIEで開いて自動でパスワードとか ボタンをクリックしたりできますか?
初心者だったら PM12:38 に書き込んで質問して、答えてもらえるとでも?
>>639 上の方にIEオブジェクトを使って
フォームの項目に値を入れたりボタンをクリックする例がある。
WSHでPCIバスにささっているボードの一覧を取得するにはどうしたらいいですか? Win32_BusクラスからPCIバスの一覧を取得してWin32_PnPEntityクラスから PCIのデバイスを取得しているんだけど、どのスロットに何のボードがささって いるのかを上手く表せません
>>636 遅ればせながら、レスありがとうございます。
残念ながら他のソフトをインストールすることは
できない環境なのです。
ということで諦めモードでフェードアウト。
644 :
名無し~3.EXE :04/06/09 02:33 ID:PXKTCz31
引数をYahoo検索するスクリプトきぼん yとなづけてパスをとおして ファイル名を指定して実行したいのです
646 :
名無し~3.EXE :04/06/09 17:22 ID:mUQxpbDk
VBScriptでInputBoxにパスワードを入力させたいんですが、普通に使うと入力した値が見えてしまい(当たり前ですが・・・)困っています。WSHと組み合わせてうまくできないでしょうか? 教えて下さいエロい人・・・。2000とXPで動くようにお願いします。
できますね
648 :
名無し~3.EXE :04/06/09 17:55 ID:mUQxpbDk
どんなかんじにやればいいですか?
スクリプトでそんなことやって大丈夫か? 入力パスワードの内容ログに出力とか変更されそう。
650 :
名無し~3.EXE :04/06/09 18:16 ID:mUQxpbDk
スクリプト書き換えられなきゃ平気ですか?
651 :
名無し~3.EXE :04/06/09 18:45 ID:mUQxpbDk
具体的にはノートパソコンをローカルネットワークに参加させる処理を自動化させたいんです。途中何回かユーザ名とパスワードを入力しなきゃいけないんで最初にInputBoxに入力して後は自動でやらせようとしてるんですが・・・。
653 :
名無し~3.EXE :04/06/09 21:50 ID:mUQxpbDk
↑どうもうまくいきません・・・。HTML使うと書き方かわるとかないですよね?
655 :
名無し~3.EXE :04/06/10 01:40 ID:9fUFeFIK
ありがとうございます!今携帯からなんで明日やってみます!
656 :
655 :04/06/10 17:23 ID:9fUFeFIK
ありがとうございました。うまくいきました!
657 :
名無し~3.EXE :04/06/11 23:53 ID:hipzp3Lx
フォント名の列挙と日本語と欧文の判別って出来ますか?
VBS、HTAに疲れました GUIをバリバリ使える言語も勉強したいのですが、どんな言語がスムーズに乗り換えられますか
VB.NETって手もある。
Windows Scriptingだけでメールソフトを作りたい。
Windows ScriptingだけでWindowsを作りたい。
664氏光臨の予感! そしてゲイツに訴えられてタイーホの予感
WScript.Echo "Windows"
667 :
KingMathematician ◆5lHaaEvFNc :04/06/12 20:51 ID:mEdTQaHW
Re:
>>666 それは"Windows"と書いているだけでは?
まぁ、インタプリタ言語だけでOSを作るという発想はあまり自然でない気がするが。
あぼーん
>667 ちょっとまえにJAVAScriptで作ったウィンドウシステムのデモをどこかで見た気が。 まぁ、OSじゃないよな。
670 :
名無し~3.EXE :04/06/15 22:00 ID:pC+zyqLp
お知恵拝借させてください。 たとえばメインプロシージャの中で2つのサブプロシージャ(AとB)があるとする。 それぞれのサブプロシージャをメインプロシージャから実行したいが、 Aの処理が終わってからBの処理をする必要がある。Aの実行には1分程度かかる可能性がある。 Aの中からBを呼ぶ以外の方法で、美しい方法はありますでしょうか。 文ではなくてコードっぽくすると Sub Main() Call A() Call B() End Sub これを、A,B順番にやりたいということ。 現状では、Aの実行中にBが実行されてしまいます。 初心者ですみません。
>670 基本的には必ずA()の終了後にB()が実行される。 だから、たぶんA()が処理の途中で終了してるんでは。
>>670 想像だけど、A()の中で何かのオブジェクト作ってメソッド実行してるなら、
別のスレッドが生成されてメソッドの完了前に戻ってきてしまい、B()が動いてしまう鴨。
A()の最後で処理の完了を待つようにループを作るのが定石かな。
A()の中身を書いてみて。
>>672 別のスレッドが生成されてメソッドの完了前に戻ってきてしまい、B()が動いてしまう鴨。
これはありません
674 :
名無し~3.EXE :04/06/16 08:15 ID:MEkw4gYO
675 :
670 :04/06/16 08:20 ID:MEkw4gYO
訂正すんません 誤 Set oTsStdOut = oFS.oPaenTextFile(strTargetFilePath) 正 Set oTsStdOut = oFS.OpenTextFile(strTargetFilePath)
676 :
670 :04/06/16 08:40 ID:MEkw4gYO
>>674 >>672 だろね。
グローバルな変数completedを作って、A()が終わる時にTRUEにする。
A()とB()の間でcompletedがFALSEの間ループを回す。
//WScript.Sleepって使えたっけ……。setTimeoutで代用が効くか。
>>670 pingはコマンドだから、cmd.exeは不要では?
×:oShell.Run "CMD.EXE /C PING -n 1 " & Destination & " >" & FilePath , 0, TRUE
◎:oShell.Run "PING -n 1 " & Destination & " >" & FilePath , 0, TRUE
WshShell.Runメソッドは新しいプロセスを実行するから、じゃないかな。 WshShell.Execメソッドなら子プロセスで実行できるから問題ないような気がする。 但しExecメソッドで実行できるのはコマンドラインのみという制限はあるけど。
>>679 Runは作ったプロセスを同期的に実行できる。
で、それが第三引数のTRUE。
この場合は新しくスレッドを作るsetIntervalが原因。
>>676 質問の答えではないけど、pingの結果をファイルに書き出さなくても
Dim WshShell, oExec, result
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("ping 192.168.0.1")
result = oExec.StdOut.ReadAll()
WScript.Echo( result )
こんな感じで標準出力を取得できる。
682 :
670 :04/06/17 00:24 ID:EJTY6clQ
☆ C:\foo\20040617.txt を移動して、E:\foo\20040617.txt にする。 ☆ ****.txt は常に同じ名前ではない。 ☆ 日付を示してはいるけれど、必ずしも本日ではない。 ☆ C:\fooフォルダには、常にたったひとつの txtファイルしかない(E:\foo にコピーが済んだら削除) 何かやり方ありますか?
684 :
683 :04/06/17 00:51 ID:9JrefVpH
何か質問の仕方が変でしたね 常にC:\foo フォルダにたった一つだけある、名前の決まっていないtxtファイルを、そのまんまの 名前でE:\foo にコピーしたい、と。
>>683 move c:\foo\*.txt d:\foo\
686 :
683 :04/06/17 00:58 ID:9JrefVpH
わ、驚即答 ありがとうございます いまからためします
687 :
670 :04/06/17 01:02 ID:EJTY6clQ
>678 遅レスだけども、CMD.EXE は PING のために使ってるんじゃなくて、リダイレクトのためだよ。 >680 実際そのとおりなんだけど、setintervalの2個使いでなんとかしまそた。 >681 子ウインドウがパカパカ開いてうざいっすね。これがナントカなるなら使えそう。
VBS書いていたら1000行を超えてしまいました。 スクリプトは多数のサブプロシージャで出来ているのですが 機能ごとにスクリプトを分けてファイルに小分けにしておいて 子ファイルをインクルードして実行するってできるんでしょうか。 できるとしたらどっかに資料はありませんか?
>>688 たぶん別の言語や開発環境使ったほうが幸せになれるよ
JScriptでバイナリデータを扱おうとしています。 データはファイルから読み、そのデータを COMに渡したいのですが、BSTRで渡すのは よろしくない様子。実際、COM側でSysStringByteLenで 見てみると、長さが2倍になっていました。Unicode扱い にされているらしいですね、これ。 バイナリデータをCOM側で受け取って、加工するには どのような工夫が必要なのでしょうか。
>Linuxはそれとは違う。 違ってもいるし違ってないともいえる。 Linuxで自分の選択した目的や可能性以外を否定することは間違い。 それこそWindowsやBSDにカエレ!!といいたい。
wshでGDIかD3Dを利用できるような方法ありますか? そもそもブランクのウインドウを表示するような手段ってありますか? ゲームつくるのによさそうなので、どうでしょうか? バリアント型の変数って扱いやすいですよね〜。
>>695 JScript.NETかHSPでも使うが吉。
>>693 WSHのFileオブジェクトはファイルをテキストとしてしか
OPEN出来なかったと思うのですが、その為では?
BASP21 DLLを使うとバイナリデータを扱えたと思います。
またはJScript.NETを使うという手も。
バイナリストリームオブジェクトあるよ。 >596で使ってるADODB.Streamってやつ。
あるんだけどJScriptじゃデータに手出しできない。右から左ならいいんだけど。 VBScriptなら手出しもできたかな。
>699 そうなの?vbsなら"Stream.Write"で一発なんだが・・・。
当然だがJSでも普通に使える。
>>701 > 当然だがJSでも普通に使える。
え、そうなの?
Writeになにを入れればいいのかさっぱり解らないんだけど。
バイト配列型なんてないし。
>>696 さんきゅー。
.NETフレームワークか。
新しく覚えなきゃ・・・。
>702 バイト型じゃないの?
705 :
693 :04/06/20 19:28 ID:NDy4ZpHZ
JScriptでバイナリデータをCOMに渡したい、との 質問をしましたが、よく考えたらこれはScriptの 問題ではなくて、COMの方をどう作るかって 問題ですね。スレ違いな質問、失礼しました。
ファイルシステムオブジェクトを使ってフォルダの中にあるファイルと ディレクトリの一覧を取得することってできるんですか? 知っている方がいたら教えてくださいませ。
708 :
706 :04/06/20 20:57 ID:1LNWSiE+
>>707 ぁぁ、読んでませんでした。。。
サンクス。
>>707 俺にもMSXML、XML Parserのリファレンスクレクレ
Win2000,XP で、ネットワーク接続の接続名 (ローカル エリア接続など)を 取得するメソッゾきぼんむ
>>711 NetConnectionIDがXP出しか使えないのでXP専用。
var nadp = GetObject("winmgmts:{impersonationLevel=impersonate}").
ExecQuery( "SELECT * FROM Win32_NetworkAdapter" );
for ( var e = new Enumerator(nadp); !e.atEnd(); e.moveNext() ) {
var ad = e.item();
WScript.Echo( ad.NetConnectionID );
}
714 :
名無し~3.EXE :04/07/03 15:02 ID:Kgo/Au2M
Windowsupdateに "Critical Update for ADODB.stream (KB870669)" がきてた。 これを適用するとIEでADODB.Streamが使えなくなる。 いいかげんにしろMS
脆弱性攻撃幇助容疑で逮捕
質問です。 VBScript JScriptでc/c++の#Includeみたいなのはどうやればできるのでしょうか?
ま た こ の 質 問 か
>714 HTAだと影響うけなかったっす
>>718 申し訳ありません(´Д`;)
過去ログ呼んだらありました
■■■ 危険 閲覧は自己責任で ■■■ HTMLで、不正なEXEをDLさせるWEBページ発見。 ADODBの脆弱性を対策していないとヤヴァイ。 tp://82.196.67.62/f.html さらに、ms-its(chm)の脆弱性をつくコード tp://lily.only18plus.com/den/a.html ■■■■■■■■■■■■■■■■■■■ ※不正コード作成を助長するもんではないです。 意図せずにリダイレクトされないように IEの制限つきサイトへ登録することをお勧めします。
722 :
名無し~3.EXE :04/07/07 20:12 ID:QVSzmKOy
すみません DOMのonkeyupですが、どうすれば上下左右の矢印キーの動作を検知することが出来ますか?
すみません そこまでは解っているんですが、具体的なコード例はありませんか?
VBSが嫌いなのでJScriptに移植。保存する名前は過去ログに従ってaddgt.htmとでも。何でもいいけど。 インストールはインストーラスクリプト使うよりIE MenuExt使った方がいいと思うよ。 <script language="jscript"> var menu = external.menuArguments; var range = menu.document.selection.createRange(); var element = menu.event.srcElement; var data = clipboardData.getData("text"), ret = ""; if (!data) {data == "";} var datas = data.split("\n"); if (element.tagName == "TEXTAREA" || (element.tagName == "INPUT" && element.type == "text")) { for (var i = 0; i < datas.length - 1; i++) ret += "> " + datas[i] + "\n"; if (datas[datas.length - 1] != "") ret += "> " + datas[datas.length - 1]; } range.text = ret; </script>
席を離れていて今確認しました。 ありがとうございます。早速試してみます。
>>728 ありがとうございました。バッチリでした。
微妙にスレ違いかもしれないですがご容赦をば。 ブラウザの右クリックに登録するスクリプトなんですが、 以下のことを行おうとしてます。 画像上で右クリック ↓ 画像を特定のアプリで開く ですが、ブラウザから取得できるのは、その画像のURLのみで、キャッシュの取得ができません。 クリップボード経由で開こうとも考えたのですが、その手のメソッドも無いようです。 仕方なく、画像の位置をスクリーン座標で取得して、D&Dのエミュレートでアプリにドロップする 力技を考えたのですが、もっとスマートな方法って無いでしょうか?
取得したURLからローカルの%temp%にダウンロードして それをアプリで開くのがまっとうな方法じゃないの。 スマートではないけど。
HTAで開かれたウインドウに、エクスプローラからファイルをドラッグアンドドロップできるようにして そのファイル名を取得する方法はありますでしょうか。 起動時のD&Dに関してはweb上にTIPSがありましたが、起動後に関しては 見当たりませんでした。よろしくお願いいたします。
736 :
名無し~3.EXE :04/07/25 16:51 ID:mkh0oIjL
>>736 Perl2exeでコンパイルするといい
738 :
名無し~3.EXE :04/07/26 22:54 ID:++VwYYZC
指定したテキストデータの文字列を文字コード単位で置換えをしたいです。 F040,8D82 F041,92CB F042,91E5 というようなデータをソースにして、テキストデータに含まれる F040と言う文字コードを8D82と言う文字コード(高)に置き換えるというような 感じなんですが・・・
>>738 VBSだったら普通にできそうだけど?
何が問題?
//JScriptだとShift_jisをまともに扱えない……
>738 intFindWhat = Cint("&h" & "F040") '検索文字コード intReplaceWith = Cint("&h" & "8D82") '置換文字コード strGetFilePath = "c:\xxxx1.txt" '読み込みファイルパス strPutFilePath = "c:\xxxx2.txt" '保存ファイルパス set objFileSystem = CreateObject("Scripting.FileSystemObject") set objGetFile = objFileSystem.OpenTextFile(strGetFilePath, 1, false) set objPutFile = objFileSystem.OpenTextFile(strPutFilePath, 8, true) strBuf = objGetFile.ReadALL strFindWhat = Chr(intFindWhat) strReplaceWith= Chr(intReplaceWith) strBuf = Replace(strBuf, strFindWhat, strReplaceWith) call objPutFile.Write(strBuf) objGetFile.close objPutFile.close set objFileSystem = nothing こんな感じ?ソースとなるデータの形式がわからんと読み込み部分は作れないけど。 (外部から読み込むよりスクリプトに記述する方が楽だし)
>735 ドロップされるのがフォルダだとonLoad()が発生しないため、 ドロップ状況を調べるのにonReadyStateChange()イベントを使う。 ドロップされるのがファイルだけならonLoad()イベントだけでも良い。 (フレームのオブジェクト.)location.href (フレームのオブジェクト.)document.location.href (フレームのオブジェクト.)document.URL 等の値を参照すればファイル名も取得できるはず。
742 :
名無し~3.EXE :04/07/27 23:47 ID:R7D1K+NF
>>740 ありがとうございました!
ファイルから変換文字コードを呼び出す場合は、
F040,8D82
F041,92CB
F042,91E5
というcsvファイルをもう一つOpenTextFileで呼び出して、
readLineをlineと言う変数に代入して、
strBuf = Replace(strBuf, strFindWhat, strReplaceWith)
の構文のstrFindWhatをCint("&h" & mid(line,1,4))にして
strReplaceWithをCint("&h" & mid(line,6,4))にして、
endに到達するまで続ければOKですかね??
>>742 「ですかね??」って、おまいのPCに聞けよ。
>742 いいんじゃね?やってみて動くまで考えるべし。
745 :
名無し~3.EXE :04/07/31 21:41 ID:9ibP/+kO
>>737 遅ればせながらレスありがとうございます。
しかし、Perl2exeで生成されたexeファイル、WSHの部分だけ実行されないっぽいです。
747 :
746 :04/08/05 21:32 ID:4Sj3nBcL
748 :
746 :04/08/07 16:22 ID:53jiu524
>>747 これもウソぽぃ
英語サイトに書いてあったレジストリ修正やったらいけました
なぜ日本語訳した時に内容変えたんだろう…謎
んで、今度は3行目を
Set RemoteScript = Controller.CreateScript("remote1.vbs", "リモートマシン")
でやってみたんですが、同ドメインでないと使えないっぽい感じでした。
ワークグループ環境で使いたいのですが、ムリなのかなぁ、、
どなたか挑戦/成功された方いれば教えてほしいです。
749 :
名無し~3.EXE :04/08/09 04:07 ID:hr5rwgA0
()[]このような括弧でくくられたファイル名の文字列を 括弧の部分だけ削除したいです。 こういうスクリプトはどうやって作ればいいですか?
>749 strFilePath = "c:\xxxx1.txt" 'リネームするファイルのフルパス set objFileSystem = CreateObject("Scripting.FileSystemObject") set objFile = objFileSystem.GetFile(strFilePath) strBuf = objFile.Name strBuf = Replace(strBuf, "(", "") strBuf = Replace(strBuf, ")", "") strBuf = Replace(strBuf, "[", "") strBuf = Replace(strBuf, "]", "") objFile.Name = strBuf set objFile = nothing set objFileSystem = nothing こんな感じか?()の中全部を削除したいならRegExpを使うと思うけど。
すいません、言葉足らずでした。 フォルダを指定してその中のすべてのファイル名から カッコも含めてカッコ内の文字列を消去したいです。 (???)a.avi (???)b[***].mpg [??]c(**).mp3 ↓ a.avi b.mpg c.mp3 こんな感じです。
>751 なんか、何に使うのか疑問だなぁ・・・。 まぁ、予想はしてたんだけど。 >750のReplace使ってる行を↓に置き換え。 Set objRegExp = New RegExp objRegExp.Global = true objRegExp.Pattern = "(\(.*\))|(\[.*\])" strBuf = objRegExp.Replace(strBuf, "") Set objRegExp = nothing
>>752 どうもありがとうございます!
なんとかいじくって自分の思い通りの動作になりました。
あれだな、素直にリネームソフト使えってことだな。
756 :
名無し~3.EXE :04/08/09 22:54 ID:1UcAXWSP
Sleipnir 多段タブ キタキタキタキタ━━━(゚∀゚≡(゚∀゚≡゚∀゚)≡゚∀゚)━━━━!!!!!!!!!!
何でこのスレに(w
758 :
WSHデビュー :04/08/11 11:01 ID:SgisAmoZ
昨日からWSHはじめました。 日々の繰り返す操作(仕事)をどうにかならないものかと思いたちまして。 取り合えず場当たり的ですがSendkey使っいまくって実現できました(w このスレ一日で読破しました。スゲー勉強になりました。 WSHLab.で基礎から勉強してきます(゚Д゚;)
せっかくがんばって覚えても.NETでリセットかかっちゃうんだけどなw
Jscript.NETって難しい?
今がんばってれば 応用は利くでしょ。 もっとも、今から.NETに行っとく方が利口ではあるけど。
762 :
WSHデビュー :04/08/12 13:03 ID:gv6dBU+e
早速頓挫orz CreateObject関数でOutlookExpressは動かせないのですか? IEやExcelはうまく動かせるのだが・・・ ("Outlook.Application")では駄目みたいなんで。 Outlookじゃないと駄目とかってあるんですかね^^; 「任意Dirで数個のtextからdataひぱってメールで自動配信」 という流れのものを書こうとしています。
OEはActiveXに対応してない。
>せっかくがんばって覚えても.NETでリセットかかっちゃうんだけどなw えぇぇぇぇっ!! どういうことなんですか? 僕も最近WSHの勉強を始めたばかりなんですが、 WSHどうなっちゃうんですか?
>>766 なんで.NETにしなかったの?
そっちのほうが興味ある
768 :
WSHデビュー :04/08/15 15:11 ID:kYvJVBXN
>>768 ここは独り言を言うところではないんだが?
バカは完全放置で頼むぜ
JScript .NET ってコンパイルせにゃいけんのかい JScript .NET Scripting Edition の発表まで待つか〜
次世代コマンドシェルと融合したC#風スクリプトならたぶん出る
いい加減雑談やめろ。N速に晒される前はマターリとしたスレだったのに、お前等帰れや
774 :
お前等 :04/08/16 20:01 ID:hGz0+yVS
PCのドライブ一覧を取得するのに Set objDriveSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_LogicalDisk") For Each objDrive In objDriveSet objDrive.Name Next を使っていますが、NTだとこれでドライブ一覧を取得できません。Queryの結果が0件になっているようです。(2000/XPでは問題ないです) NTでPCのドライブ一覧を取得するには、どんな方法があるでしょうか。(上記の改良が不可なら別の手段でも)
>>775 FileSystemObjectのDrivesプロパティは?
777 :
775 :04/08/20 16:31 ID:xn318h+O
>>776 ありがとうございます。
>>775 自体は、全然別の場所に問題がありました…
ソースのケアレスミスを修正したらNTでも問題なく取得できました。すみませんっっ
AD参加のスクリプときぼんぬ。 もちろん、参加失敗時のエラー処理してないと使いもんにならないでし
HTAのウィンドウにドラッグアンドドロップしようとしても禁止マークみたいのが出て、できないんですが、何か定義をしないといけないんでしょうか?
782 :
怒死露鵜徒 :04/08/24 13:20 ID:4Rt6IQz3
MSDNでIEをフルスクリーンにするコードのSyntaxを見つけたのですが、 どうやってコーディングするのか分かりません。どうかお助けください。 見つけたSyntaxは InternetExplorer.FullScreen(bFullScreen)[=bFullScreen] です。Windowsを起動した時にIEが勝手に開いてしかもそれをフルスクリーン にする方法も教えてくれたらとてもうれしいです。
>>782 F11
Alt+F4
準備完了。あとは開くだけ。
784 :
怒死露鵜徒 :04/08/24 13:34 ID:4Rt6IQz3
>>783 やってみたけど上にバーが残りますね。
スクリプトからフルスクリーンにしても結局同じですか?
キオスクモードで起動するとか
>>782 var oIE = new ActiveXObject("InternetExplorer.Application");
oIE.FullScreen=true;
oIE.Navigate("
http://pc5.2ch.net/test/read.cgi/win/1058829737/ ");
oIE.Visible = true;
これを FullScreen.js かなんかいうファイル名で作成。
URLは好きに変えろ。
Windows起動時に実行するなら スタート → プログラム → スタートアップ にでも
ショートカットを貼り付けておけ。
iexplore.exe に -k オプションと url を引数とするショートカット作ればオッケー
788 :
怒死露鵜徒 :04/08/25 08:52 ID:RkWbFlPn
>>786 ありがとうございます。大変助かりました。お礼に穴を貸してあげたいです。
>>787 も書いてるけど、
iexplore -k [Enterキー]でおしまい。
スクリプト使うまでもないよん
790 :
名無し~3.EXE :04/08/27 09:14 ID:nCzyr3jP
スミマセン素人です。 MSアクセスのファイルを開きたいのですが フォルダの階層が深い所に有るファイルで var WShell = WScript.CreateObject("WScript.Shell"); WShell.Run ("msaccess C:\Program Files\xxxx\xxxx\xxxx\xx\db.mdb"); これだとファイルを開けないですがどうしたらよいでしょう?
>>790 引数は半角スペースで区切るわけだから、c:\programが第一引数と取られたわけだ。
半角スペースを引数の中に入れたい場合、ダブルクォーテーションでくくる。
で、JScriptで文字列中にダブルクォーテーションを入れる場合は\でエスケープする必要がある。
ということをまとめると……
って\もそのままか。
\はエスケープ文字という奴で、この直後にくるのは普通の文字じゃなくて制御用の文字と認識される。
文字列中に\という文字を含めたい場合は\\という風に\そのものをエスケープする。
以上をまとめると、
WShell.Run ("msaccess \"C:\\Program Files\\xxxx\\xxxx\\xxxx\\xx\\db.mdb\"");
792 :
名無し~3.EXE :04/08/27 09:36 ID:nCzyr3jP
>>791 有り難うございました、うまくいきました。
793 :
コピペ推奨 :04/08/27 11:02 ID:K+xgnO3X
794 :
名無し~3.EXE :04/08/27 12:08 ID:nCzyr3jP
超初心者です。 下記をjscprtにしたいのですが誰か教えてください。 Dim fs, MyFileName, objWS Set fs = CreateObject("Scripting.FileSystemObject") Set objWS = CreateObject("WScript.Shell") If fs.FileExists("C:\xxx\xxx\xxx\xxx\xx\db.ldb") = False Then MyFileName = """C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE"" ""C:\xxx\xxx\xxx\xxx\xx\db.mdb""" objWS.Run MyFileName else msgbox ("ACCESSを終了させてください。") End If
796 :
名無し~3.EXE :04/08/27 12:20 ID:fSYxHqxP
IEの履歴(index.dat)にアクセスして,格納されているURLを取得する方法はありますでしょうか。
はい
798 :
名無し~3.EXE :04/08/27 20:06 ID:fSYxHqxP
>>797 どのようにすればよろしいのでしょうか。
あるいは,該当するメソッドなりを教えて頂けると幸いです。
こういう言葉面だけ丁寧で自分では考えようとしないの嫌い。
>>638
800 :
名無し~3.EXE :04/09/06 05:02 ID:fMWhSYRu
801 :
名無し~3.EXE :04/09/07 14:29 ID:2X1zFto7
ゲームの鯖を立てているのですが、
鯖が落ちてしまったときに自動で再起動できないものかと考えています。
上の方にもあったのですが、数分ごとにプロセスを監視し
走っていないようであれば指定したプログラムを実行する。
といった感じがいいのかなーと思っているんですが、よくわかりません。
ttp://www.mars.dti.ne.jp/~vwjetta/install.html これが希望に一番近いのですが、exeしか実行させることが出来ないので使えません。
(ショートカットでコマンドを追加して起動させなくてはならないので)
何かいい方法はないでしょうか?
803 :
801 :04/09/07 15:41 ID:2X1zFto7
>801さん レスThxです。今テストしていますが、恐らく問題解決しそうです。 これ、面白いっすねー
804 :
801 :04/09/07 17:18 ID:2X1zFto7
連書スマソ。 問題解決しました。ログも書き出せるので、管理に役立ちそうです。 どうもありがとう:)
あるフォルダを監視して、そこにファイルが作られるか、もともとあったファイルが更新された場合に、 それを検知して、更新または追加されたファイル名を通知するスクリプト だれか持っていませんか?
ちょうど昨日、そういうツールをVB.NETで作ったとこだった。 System.IO.FileSystemWatcherを使えばイベント拾うだけ。 めちゃめちゃ簡単だった。 Visual Studio 2005 Express、いまならβフリーでかなり遊べる。
歯を磨いてうんこしたあと、とりあえずファイルの作成更新検知までを2分で書いてみた。 Const WatchFolder = "C:\hoge\fuga" Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(WatchFolder) f_size = f.Size f_DateLastModified = f.DateLastModified While (f_size = f.Size) And (f_DateLastModified = f.DateLastModified) Wscript.Sleep(1000) Wend MsgBox "更新したぞゴルァ" でもこれだと、ファイルサイズが変わらないファイル更新には対応できない罠。 どっちにしろ、ファイル名を取得せにゃならんなら、監視フォルダ中の全ファイルの ファイル名とDateLastModifiedを保存してつきあわせるしかないだろな。 めんどくさいんでパス。自分でやってくれ。
DynaCall で FindFirstChangeNotification() や WaitForSingleObject() 呼んでみるとか?
くっ 今や.NETの時代か。 Visual Studio 2005 Expressのβを落としてみた。 …… Windows98の時代でもありませんかそうですか。
>811 スクリプトベース希望なので、これを発展させると行けそうですね。 WMIあまり詳しくないのですが、ファイルをハードコーディングしないで この方法でチェックするのはどうしたらいいでしょうか。 fsoでファイル一覧を取ることは出来ますが、このWMIスクリプトにどうつないだら 良いかわかりません。。。 偉い人なら3分以内でできるところでしょうか。
>812
メンドクセー>811の奴と
ttp://www.microsoft.com/japan/technet/community/scriptcenter/filefolder/scrff46.mspx これとを両方走らせれば?
.NETなら、↓前スレより。hoge.jsなどの名前で保存して、
コマンドプロンプトから jsc hoge.js で hoge.exe ができる。
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 );
}
815 :
814 :04/09/08 19:29 ID:m+jCZc1F
間違えた。リンクも同じ奴だし… >814のWMI部分はなかったことに。orz
>>817 たしかに力業ですね。
WinXPHomeの環境では、以下のスクリプトでうまくいきました。
Set WSHShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 1000
WSHShell.SendKeys "^{ESC}U"
WScript.Sleep 1000
WSHShell.SendKeys "H"
WScript.Sleep 1000
ありがとうございました。
Adobe Reader の Adobe Reader を終わらせる×ではなく、 PDF を表示している×を WSH で押すにはどうすればいいでしょうか?
>>819 [ウィンドウ]→[全て閉じる] じゃダメかい?
Set WSHShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 1000
WSHShell.SendKeys "%w"
WScript.Sleep 1000
WSHShell.SendKeys "^{%w}"
821 :
819 :04/09/14 14:57:10 ID:EOsrkN7p
>>820 なるほど。メニューを使えばよかったですね。ありがとうございました。
今さらのようにバージョンアップを重ねるなぁ
おまいらのお知恵をお貸しください。 ブラウザに表示されているフォームのボタンをスクリプトで押す場合 ボタンの名前が'ログインボタン'ならこれで Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Document.all.ログインボタン.Click いけるんですが、もしボタンの名前に'.'が使われていた場合 例:ログインボタン.001 objIE.Document.all.ログインボタン.001.Click 上手く動きません。objIE.Document.forms(0).Submit や SendKeys は事情により使用できない場合、他に'.'を含んだボタン名を 名前の一部として認識させる方法はあるでしょうか?
>>824 Dim button
button = document.getElementByName("buoon.001");
button.Click
//Setって必要だっけ?
objIE.Document.getElementByName("button.001").Click で済むか……。
出来ましたー! 825さんありがとうございました。感謝 Setはサンプルに載ってたんでそのままコピペw
828 :
名無し~3.EXE :04/09/21 20:50:31 ID:u/ckrAgu
vbsでIEのウェブページの更新てどうやればいいんでしょうか? navigateでurl送ってもキャッシュが表示されて更新されないようです。 更新する関数ってあるんですか?
830 :
名無し~3.EXE :04/09/22 11:12:40 ID:sBx0dFla
831 :
名無し~3.EXE :04/09/22 19:30:47 ID:SUizVXMN
失礼します。いまウェブメールだけの環境で
URL:mailtoプロトコルの左クリックには↓のダミーを当てています。
ttp://www.showg.jp/hoge/DummyMailer/index.htm このスクリプト(Vbscript。改変しての再配布はOKとのこと)を書き換えて
メールアドレスをクリップボードに飛ばすことは可能でしょうか?
まったくの初心者でメソッドも何もわかりません。グーグル検索していたら
Vbscriptはクリップボードの操作に対応していないとか(?)
作者さんのBBSは二ヶ月くらい人がいないようなのでちょっと訪れにくく。
そもそも可能かどうか、可能ならどのくらいいじる必要があるのか、
アドバイス頂けたらと思います。よろしくお願いします。
ああああ すげーーー すっげーー 「じゃあ"mailto:" を省く方法はありますか」に質問を変更します。。
んぃんどぅーざっ! すぉくりぇぷてぃーんっがっ ふぅすてぃんーっがっ!
>>834 ありがとうございます!!
でもつなげ方がさっぱりわからないや・・・
そのサイト見て勉強します。
CTRL+Cじゃあ色々余計なのが入ってしまうし。
>>836 ダミーメールのスクリプトの
"'メッセージにURLを含める"の次の行に
Set Ie = WScript.CreateObject("InternetExplorer.Application")
Ie.Navigate "about:blank"
Do While Ie.Busy
Wscript.Sleep 10
Loop
Ie.Document.parentWindow.clipboardData.setData "text",WScript.Arguments.Unnamed.Item(0)
を挿入。上手くいくか分からんが
Script:C:\Documents and Settings\Koast\My Documents\Programs\DummyMailer\DummyMailer.wsf Line:64 Char:3 Error:Variable is undefined: 'Ie' Code:800A01F4 Source: Microsoft VBScript runtime error これはもしかしてwshのバージョンが古くいせいですか?
>>838 ああ、悪い。スクリプトの頭に
Dim Ie
つけてみて。
あ、変数のなんとかですね。よっしゃ。
mailto:sage
きゃーーーできちゃったーーーーーー!!! やったやたた
あとはOKボタンに対応させることですね。自分でできるかな?
>>839 さんまじありがとう!!! びっくりした!
アドレス保存YES/NO設定できました。俺でもできた!!! これでmailto: を削れたらそれなりに使えるツールになるですよ・・・
VBS使いって街を歩いていたら石を投げられるような存在なんでしょうか? VC++使いやVB使いには逆らっちゃいけないんでしょうか?
全然ベツモンだろ VCの方が一般的に敷居が高いだろうが VBSでできる仕事をC++で書いてたらむしろそっちが馬鹿
別に石を投げられることはないよ。 仕事も投げてもらえないが。
例えば、クライアント環境構築や鯖メンテみたいな ちょっとした仕事はスクリプトの分野
会社だとVBS使える人間がまわりにいない・・・ 誰かに仕事を頼むとVCとかで作ってくる
使える言語を使えばいい。 むかしはN88BASICで作った表計算ソフトなんかも売られてた訳だし。
せめてコンパイラとスクリプトくらい使えるようにしとけよって気はするけどな。 特にコンパイラ型の言語使える奴は。
850 :
FeaturesOfTheGod ◆UdoWOLrsDM :04/09/23 21:54:45 ID:gwThE3LZ
Re:>849 Windowsには標準のコンパイラは付いてたっけ?
「標準のコンパイラ」って何だ? 標準なんてあったっけ?
っていうか「コンパイラ型の言語」って何だ? Cのインタプリタだってあるし、JScriptのコンパイラだってある。 ちなみに、xpまでは標準ではついてこないけど NT4や98以上なら、WindowsUpdate からででも Microsoft .NET Framework をインストールしておけば VisualBasic.NET・VisualC#.NET・JScript.NET のコンパイラがついてくる。 WSH用に作ったJSファイルがそのままコンパイルできて実行できてウマー。
>っていうか「コンパイラ型の言語」って何だ? >Cのインタプリタだってあるし、JScriptのコンパイラだってある。 幼稚園児並みの読解力だな。 意味が通じないなら型付けの強い言語とより動的な言語とでも読み替えてくれよ。 どっち道厳密な分類はできないけどな。
強いて言うならば「コンパイル型の言語」だな。
確かに適材適所で言語を使い分けていきたいところだな
>>853 なぜ、そんなに偉そうに自己正当化できるのかな。
単なる無知なだけなのに。
ここまで堂々と開き直れるのも珍しい。 思わずメル欄を確認しちまったよ
そんなトリビアルな事で熱くなれるというのは、なかなか狭くて深い世界だねえ。
さあ、仕切り直しだ。
仕切り直しに質問させてください。 ポスト送信をサイトに送るってWSHできますか?
>860 strURL="サイトのURL" strDATA="POSTするデータ" strtmpFilePath="戻ってきたデータを保存するファイルのパス" On Error Resume Next set objXmlHttp = WScript.CreateObject("microsoft.xmlhttp") objXmlHttp.Open "POST", strURL, False objXmlHttp.Send(strDATA) If Err.Number <> 0 Then strErrMsg = strPostURL & ": " & Err.Description MsgBox strErrMsg WScript.Quit End If On Error Goto 0 Set objStream = CreateObject("ADODB.Stream") objStream.Open objStream.Type = 1 objStream.Write(objXmlHttp.ResponseBody) objStream.SaveToFile strtmpFilePath, 1 objStream.Close set objStream = nothing set objXmlHttp = nothing
862 :
860 :04/09/25 16:38:21 ID:b+FbVlqx
>>861 おぉ!ありがとうございます。
実行したのですが「ファイルが書き込めませんでした。」ってエラー(行19,文字1,エラーコード:800a0bbc,ソース:ADODB.Stream)
が出たんですが以下の整数値を2にすると無事動きました。ほんとにありがとうございます!
objStream.SaveToFile strtmpFilePath, 2
>862 すまん。元々のvbsから切り出すときにミスったみたい。 Const adSaveCreateNotExist = 1 Const adSaveCreateOverWrite = 2 if objFileSystem.FileExists(strtmpFilePath) then intadSaveCreate = adSaveCreateOverWrite else intadSaveCreate = adSaveCreateNotExist end if ↑を最初のあたりに追加して、該当の行を↓のように objStream.SaveToFile strtmpFilePath, intadSaveCreate
864 :
860 :04/09/25 19:45:16 ID:ACYOB/F2
>>863 丁寧にありがとうございます、無事動きました。
細かいようですがFileSystemObjectを(ry
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
>864 そうだね。ごめん。
Cscript とFileSystemObject.GetFolder & Foldersコレクションを使って、DOSプロンプトの Dir /b /s *.* みたいなWSHスクリプトを作っている所です。 このvbs ファイルだけは、Cscript で起動させたいのですが、WSH設定ファイルなどでは 対応できないのでしょうか。 CreateObject("Wscript.Shell").Run("CMD /C dir /b /s *.txt")、などで、確かに代用でき なくはないのですが、できればWSH内で完結させたいです。 CreateObject("Wscript.Shell").Run("Cscript 実行ファイル.vbs")は試した事ないですが、 上手く動くのでしょうか。
何がしたいのかわかんないけど 自動でコマンドプロンプト開いて結果表示したいってこと? アイデアだけ提供すると、 .vbs内でコマンドライン引数を見て、例えば /prompt ってのが指定されてなければ CreateObject("Wscript.Shell").Run("CMD /C Cscript 実行ファイル.vbs /prompt") って自分自身を呼び出して、 /prompt があったときは通常の処理をするようにするとか
869 :
866 :04/09/27 01:33:02 ID:eac+bg+4
>>867 返事ありがとうございます。 Run("Cscript.exe ")の発展型という事なのですね。
何でそんなスクリプトを作っているかと言うと、現在ネットワークディレクトリの中のファイルを全部
CMD dir /b /s \\machine01\doc\*.* | sort >c:\database-machine01.txt
みたいな事して、データベース化してるのですが、 そのあと、不要なキーワードを含む行
を DeleteLine.vbs database-machine01.txt として処理しています。
部分的にCMD を使うと、途中で中間ファイルを作る必要があるので、できればWSH のみ
で処理を完結したほうが、ハードディスクへの書き込み回数も少なくすんで良いかと
思ったのです。
もう1つの理由は、単に、WSHプログラミングのスキルを上げたかったので、そろそろ
CMD.exe を頼りにするのも卒業しようかと思ったからです。
>>868 普段は全くプログラミングとは関係のない仕事をしてるので、しばらく確認できなくて。
うまくやってる人が運良く読んでくれればいいかなと。
>>869 > 何でそんなスクリプトを作っているかと言うと、現在ネットワークディレクトリの中のファイルを全部
> CMD dir /b /s \\machine01\doc\*.* | sort >c:\database-machine01.txt
> みたいな事して、データベース化してるのですが、 そのあと、不要なキーワードを含む行
> を DeleteLine.vbs database-machine01.txt として処理しています。
それだったらオレなら逆にバッチファイル(*.bat)のみで書いてしまうけどな。
最近のcmd.exeはなにげに高機能。(もちろんbashほどじゃないが。)
まWSHの勉強のために書くのはいいことだけど。
>>867 それよりもWScriptオブジェクトのFullNameプロパティを利用したほうがよくないか?
実行ファイル名がcscript.exeかどうかで処理を変えるとか。
872 :
名無し~3.EXE :04/10/01 21:35:52 ID:WnxSNxPq
ボリュームコントロールの CDのをミュートだけをON./OFFしたいのですが やりかたを教えてください
要望: 次スレのタイトルには WSH の文字を入れてください…
いつまでもあると思うな次スレと金
>>873 そういう要望はスレが980まで逝ってから言ったほうがよいと思われ。
なんせ
>>1 の日付を見ろって。
こんだけ便利なのにマイナーなWSHって浮かばれないよな
Longhornで死滅します。
>>876 系統的にエクセルのマクロとかで大活躍してるじゃん。
>876 IEコンポーネント系タブブラウザではわりと活用されてる希ガス
>>878 MSのことだから後方互換性だけはしっかり確保するんじゃねーの?
次期OSではせきゅりてぃ確保のため 実行時にかならず確認ダイアログが表示されます。 なお、OKボタンは表示後5秒経過しないと押すことができません。
>>884 いつMSが後方互換性をしっかり確保したのかと小一時間以下略
ちょと質問。 メールにファイル添付する際「ReadFromFile」メソッド使えばいいんですよね? うまいこと動かないんでできたらご教授願いたいのですが。
888 :
名無し~3.EXE :04/10/06 21:02:03 ID:u8b+Eklu
wshでスクリーンショットを取ってbmpで保存させることは出来ますか?
basp21.SendMail() わりとらくちん。
>>888 Doodle2.CaptureWindow()
Doodle2.SaveToFile()
つか、新キンタマ作り?
>>889 thx。やっぱりbasp21使わんとあかんか。
使わずに送る方法ってのはないのかな?
msdnイテクル
フリーソフトのcmailをbat経由で使う手があるけど、面倒くさいからbasp21を使うようになったな
俺はComBlatJ
894 :
せい :04/10/10 03:15:23 ID:RlItQ142
どなたか DYNWRAP.DLL のバグ取った方いらっしゃいませんか いちおう文字列変数のアドレス取得するDLL作ってクリップボード 読み書きには成功したけど DYNACALL付属サンプルでさえ GetPrivateProfileSection とかまともに動かない。
895 :
せい :04/10/11 00:47:24 ID:GzRkfCMe
自己レス。むかーし某板で熱心に DYANAWRAP.DLL 使用された方のレスで VBSの文字列変数について書かれてましたが、かならずしも UNICODE|ANSI 変換 はちゃんと動いてないようです。私の環境下(Win98)では、アドレスを返す 関数に"i=w""r=l"指定で返った値は確かに文字列変数に関するアドレスですが 文字列自身のアドレスはその値の8バイト先に「格納」されています(文字列定数では 文字列アドレスそのものを返す(?))。だからそのアドレスを所得すればVBSでも文字列は おろかバイナリでもいじり倒せます。ちなみに文字列格納場所の4バイト前が 文字列数、8バイト前が属性情報のようです。無理矢理変数の属性を変える ことも可能かもしれません。
最後の自己レス。一応 DYNWRAP.DLL だけで文字列変数のアドレス取得できました。 Win32APIとChrW()、ビット演算とおよそ VBSにはもっとも不向きな 演算です。COM作る環境持ってない私のような人間には DYNWRAP.DLLは やっぱり便利です。フリーのCOM作成ツールってないのかな?
for %%a in (*.*) do md5.exe %%a これをWSHで書き直したいんですが。
そんな単純なのならほんとbatの方が良いんだけどね。 とりあえずjscript。 ちなみにwscript.exeで動かすとプロンプトがファイル数ぶん開いて非常にうざいのでcscript.exeで実行すべし。 var shell = new ActiveXObject("WScript.Shell"), fso = new ActiveXObject("Scripting.FileSystemObject"); for (var e = new Enumerator(fso.GetFolder(WScript.Arguments(0)).Files); !e.atEnd(); e.moveNext()) { var exec = shell.Exec("md5.exe " + e.item().Path); while (!exec.StdOut.AtEndOfStream) exec.StdOut.ReadLine(); }
WSC(Windows Script Compornent)ファイル内でWScript::sleepメソッド 使いたいんですが、どのようにすればよいかわかる方はいませんでしょうか?? 本やネットでめちゃくちゃ探したんだけど全然わからなくて…。 又は、 Sleepメソッドが使いたいだけなので、Windows2000及びXPで標準 ついている機能のみ(他のコンポーネントのインストール無し)で WSCファイルでSleepできる方法がわかる方、挙手願えますでしょうか??
続けて質問します。
wsfやwscを使用せずにvbsファイルだけでincludeしたいのですが、
>>556 の手法だと、ドラッグドロップ時に私のマシン環境では
うまくスクリプトが動作しません。
例えば以下のスクリプトの場合、
a. test.vbsをダブルクリックする。
→正常に「in func_test()」というメッセージボックスが表示される。
b. test.vbsにファイルをドラッグドロップする。
→「ファイルが見つかりません。」というエラーが表示される。
となります。
'━ test.vbs ━━━━━━━━━━━━━━━━━━━━━━━━━━ include "common.vbs" func_test Sub include(ByVal FileName) Dim objFS, objTXT Const ForReading = 1 Set objFS = CreateObject("Scripting.FileSystemObject") ' for debug -- Set tgtFolder = objFS.GetFolder(".") MsgBox tgtFolder.Path '↑ファイルをdrag&dropすると ' Windows2000の場合はここでカレントディレクトリが"C:\"と表示される。 ' WindowsXPの場合はここでカレントディレクトリが"C:\Documents and Settings\Owner"と表示される。 ' (あくまで私のマシンの環境では…) ' ------------ Set objTXT = objFS.OpenTextFile(FileName, ForReading, False) '←ここでエラー ExecuteGlobal( objTXT.ReadAll() ) End Sub '━ common.vbs ━━━━━━━━━━━━━━━━━━━━━━━━━━ Sub func_test MsgBox("in func_test()") End Sub ' ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
原因はスクリプト実行時のカレントフォルダが、ダブルクリックと ドラッグドロップとでは異なってしまうためのようです。 (カレントフォルダ) ダブルクリック時 :実行するvbsファイルのあるフォルダ ドラッグドロップ時:"c:\"とか。正式にはどのフォルダがカレントディレクトリとなるかはわかってない。 そこでこれに対処する方法がわかれば知りたいのですが、ドラッグドロップしても 問題なくスクリプトが動作するやり方のわかる方、教えてください。 よろしくお願いします。 (どこどこの設定を変えるとか、このサイトに書いてあるとか…)
・フルパスでインクルードファイルを指定。 ・WScript.ScriptFullNameからスクリプトファイルの位置を取得して それをもとにインクルードファイルのフルパスを取得してそれをインクルード。 どちらなりと。
L/Rキター
905 :
902 :04/10/19 00:50:07 ID:jFeBV1yG
>>903 後者は思いつきませんでした。
少し冗長になるのが気になるが、これでOKです。
ありがとうございました。
Set objTXT = objFS.OpenTextFile(FileName, ForReading, False)
↓
Set objTXT = objFS.OpenTextFile(left(WScript.ScriptFullName,instrrev(WScript.ScriptFullName,"\")) _
& FileName, ForReading, False)
906 :
名無し~3.EXE :04/10/19 16:52:28 ID:oXlBCPFA
dos系のバッチファイルの実行ってどう記述するの?
>906 set objWshShell = WScript.CreateObject("WScript.Shell") call objWshShell.Run("batファイルのフルパス") こういう感じ?
908 :
名無し~3.EXE :04/10/20 08:05:33 ID:xn4LtraR
set objWshShell = WScript.CreateObject("WScript.Shell") call objWshShell.Run("batファイルのフルパス") 上記のように記述すると「指定したファイルが見つかりません」 のエラー表示になってしまうのはなぜ?
"batファイルのフルパス" というファイルが見つからないせいだと思います。
もしかして
>>906 の質問はメモ帳の使い方をおしえてほしかったのかな?
910 :
名無し~3.EXE :04/10/21 21:18:23 ID:jTTMvPxN
これらのWSHスクリプトをください。 1「ユーザーの切り替え」 2「ユーザーを指定して切り替え」 3「終了オプション選択画面」 4「IMAPI(CD-Burning COM Service)サービスを開始」
>>911 の情報により、
>>910 じゃないですが、こんな依頼しました。
http://pc5.2ch.net/test/read.cgi/software/1095411685/35-36 でも、自分でも頑張ってやってみて途中まで上手く言ってると思うんですが…
AVIをD&Dした時点で関連付けされてるMediaPlayerが起動して上手くいきません。
同時に、QuickTime側は処理が動作してるのか…一応処理されるんですが、
AVIを読み込めていないので、下手したらアクティブになったウィンドウで処理しちゃってます。
WSFで書いてます。
<job id="IncludeExample">
<script language="JScript">
var WShell = WScript.CreateObject("WScript.Shell");
var oExec = WShell.Exec("QuickTimePlayer");//QuickTimePlayerを起動
WShell.Sendkeys("+E");//キーを送る
WShell.Sendkeys("{ENTER}");//キーを送る
while(oExec.Status == 0)
WScript.Sleep(1000);
WShell.Sendkeys("%FX");//キーを送る
</script>
</job>
あまり賢い方法じゃないでしょうが、初心者なのでこんな感じで始めてます。
現在、色々調べてやってる途中ですがJSもVBSも全くの初心者です。
どなたかアドバイス頂ければ幸いです。よろしくおねがいします。
913 :
名無し~3.EXE :04/10/29 12:52:24 ID:y5f4KQ1x
ユーザーに情報を通知する手段についてですが、 普通にMsgBoxだとユーザーがボタン押さないといけないので 画面の端に一定時間表示されて勝手に消えてくれるような通知方法はないでしょうか?
と思ったけど画面の端には無理だな。
>>913 CreateObjectでIEを生成して、自動で閉じるウインドウを表示するとか。
RubyScriptでWebページ内でHello Worldと表示させるにはどうしたらいいでしょうか。 ↑WSH用のRuby
>>917 print "<html>Hello world</html>"
WSHの勉強を始めようと思って、本を一冊買おうと思ってるんだけど
オススメの本ってある?
>>3 の本は随分古いようなので、今はどうなのかなと思って。
ちなみにおいらは、バッチファイルはある程度書ける、という程度のレベルです。
920 :
919 :04/10/29 23:53:57 ID:Ap0nYukH
>>5 の本は古いし、VBScripばかりなんだよね
>>912 一週間も前だからもうみてないな。
どの時点で上手く行ってないのかがわからないけど、
スクリプトファイルにD&Dしたファイルが起動したQTで開けないってこと?
もしそうなら、QT起動時に引数として渡したらどうでしょ。
var file = WScript.Arguments.Unnamed.Item(0);
var oExec = WShell.Exec( "QuickTimePlayer" + " \"" + file + "\"" );
でもスクリプトにaviをD&DしてもWMPは起動しないし、外してるかな。
923 :
912 :04/11/03 01:47:40 ID:PB9dmDR7
>>922 たまに覗いてます!
ありがとうございました。QTにAVIを送り込むことが出来ました!
>でもスクリプトにaviをD&DしてもWMPは起動しないし、外してるかな。
WMPにAVIが関連付けされてるんですが、そのせいでWMP上でAVIが
再生されちゃうんですよ…。うちの環境だけですかね…。
でも、何とかQTでAVIを開けました。
後は、キーを送るの箇所辺りを弄ってみます。
どうも上手く作動してないっぽいです。
924 :
912 :04/11/03 02:45:25 ID:PB9dmDR7
立て続けにすみません。
>>922 さんのおかげで、何とか1ファイルだけの処理を
上手くこなす事ができるようになりました。
有難うございます。
一つの処理時に次への実行を待機させるようなのは、
やはりSleepメソッドは無いでしょうか?
やたらSleep行が多いもので…。
これがクリアできたら、次は複数ファイルへの対応です!
ボチボチ調べながら自分自身でも頑張ってみます。
925 :
912 :04/11/03 02:46:35 ID:PB9dmDR7
>Sleepメソッドは無いでしょうか? Sleepメソッド以外は無いでしょうか?の間違いです。 スレ汚しスマソ
>912 複数ファイルスクリプトにD&Dして処理するのなら、 WScript.Arguments.Unnamed.lengthで名前なし引数の数を確認して ループで順に取り出していけばいい。 >912のスクリプト、while(oExec.Status == 0) WScript.Sleep(1000); で 起動したQTPの終了を待ってるけど、その後さらにキーを送ってるから ここのステータスチェックでのsleepはいらないんじゃない? 処理待ちSleepは、キーを送ってその処理待ちならSleepで待つしかないかな。
こんな表記も出来るのね。今日初めて知った。 Dim a(2) a(0)=array(0,1,2) a(0)(0)=10 msgbox a(0)(0) ' 10と表示
ショートカットのリンク先に引数足して、 そのショートカットにファイルをドロップすると、 ショートカットで足した引数が WScript.Arguments で取れないみたいなんですが、 これは仕様ですか? ショートカットで足した引数の後ろにドロップしたファイルがきて欲しい。 バッチファイルならいけたのに。
>>928 ほんとだ、出来ない。
スマートじゃないけど
目的のスクリプトを引数付けて呼び出すスクリプトを書くとか?
930 :
912 :04/11/08 04:43:08 ID:2YtLn7z3
>>926 レスありがとうございます。遅くなってすみません。
>WScript.Arguments.Unnamed.lengthで名前なし引数の数を確認して
>ループで順に取り出していけばいい。
初心者なんで、何を言われてるかチンプンカンプン状態ですが、
WScript.Arguments.Unnamed.lengthをヒントにやってみます。
>ここのステータスチェックでのsleepはいらないんじゃない?
そこのsleepは処置待ちでのスリープです。
後、起動時にも即時にキーを送ってるっぽいので、今のバージョンでは、
多数sleep入れてしまっております。
ご教授ありがとうございます!
931 :
名無し~3.EXE :04/11/09 04:46:23 ID:E7QupWoW
932 :
名無し~3.EXE :04/11/09 11:30:22 ID:yAu/BLvf
microsoftのwshのサンプルってどこにありますか?
ヘルプには
>Windows Script Host のサンプルをダウンロードするには
>Microsoft Windows Script Technologies の Web サイト (
http://www.microsoft.com/japan/ ) のナビゲーション ウィンドウ領域にある [Windows Scripting Host] をクリックします。
>メニューにある [ダウンロード] をクリックします。
>ダウンロード ページの [サンプル スクリプト (英語)] をクリックします。[ファイルのダウンロード] ダイアログ ボックスが表示されます。
と書いてありますがそんなページは見つかりません。
また他にもよいサンプルのおいてあるところがありましたら教えてください。
やりたいことは、ファイルとレジストリ操作、ダイアログの表示です。
933 :
名無し~3.EXE :04/11/09 17:50:10 ID:OHm2GMYi
すみません、質問なのですが Set IE=Wscript.CreateObject("InternetExplorer.Application") ↑の場合の「InternetExplorer.Application」の部分は、どうやったら調べられるのですか?
935 :
名無し~3.EXE :04/11/09 23:03:44 ID:OHm2GMYi
>>934 レスありがとうございます。
win2000のサイトのようですが、このoleview.exeは、XP SP2でも使えますか?
まあまずは試してみ。
939 :
名無し~3.EXE :04/11/10 00:32:10 ID:dH38g6sq
WSHかバッチファイルでデスクトップのスクリーンショットを取って bmpかjpgでファイルに保存することはできるでしょうか?
>>939 そういうCOMを探すより、そういうEXEを探したほうが早いでしょう。
941 :
935 :04/11/10 00:59:55 ID:0IqHZxsT
>>938 どうもです。
>>934 のをインストールしてみたら、「iviewers.dllがない」って言われたので
ネット検索して見つけだしてコピー、ついでにoldバージョンの日本語化パッチを見つけたので
一工夫して日本語化、そしてOleviewには検索機能がないらしく、見方を把握するのに
手こずっていたら、こんな時間になってしまいました。
ProgID というのが該当部分なのですね。分かってしまえば便利ですね。
というわけで、
>>934 のはXP SP2でも問題なく動作しました。
>>938 のリソースキットも面白そうなのでダウンロードしました。
ありがとうございました。
943 :
m :04/11/10 12:00:00 ID:PmMEJcSc
あるキー配下にあるキー名を取得したい場合ってどうするんですか? 具体的には HKCU\Softwareの中にあるキーを片っ端からゴニョゴニョしたいんです。 ってか他のキーにもゴニョゴニョする事を考えいるので、配下のキーを全部・・・的な 動作を知りたいです。
Win98でもWMIを手動インストールはできるのか。知らなかった。
947 :
m :04/11/10 15:01:48 ID:PmMEJcSc
> 944-955 ぬおぉぉ、助かりました まさにこんな動きです。 WMIって良く解らんかったので頭が回りませんでした。
948 :
名無し~3.EXE :04/11/10 16:14:53 ID:Qneit69U
レジストリを検索して特定の文字列を見つけたら削除するスクリプトなんて WSHで実現できないでしょうか? ファイルやレジストリキーの削除は検索して出来るようになったのですが、 量が多いとめんどくさいので検索機能を使って一気にやりたいのです。
>>948 > WSHで実現できないでしょうか?
できるよ。
すぐ上でやりとりされてるのを参考にすればいい。
//でもぶっちゃけ一気に数十台のマシンをとか言うんでない限りスクリプト書くより適当なレジストリエディタ使う方が早そうだが。
950 :
948 :04/11/10 18:00:06 ID:u2p4OJfV
>>949 レスありがとうございます。
ちょっと前のやりとりを参考に読んで自分でできるか試してみます。
ちなみにそのレジストリエディタはどのようなものでしょうか?
Vectorでちょっと見てみたのですが、検索して削除ってのはWinに付属の
レジストリエディタとあまり変わらなかったみたいなので。
よかったら教えてください。
951 :
948 :04/11/10 18:34:13 ID:0pHBdo5H
二つほど教えてください。 1、vbsの拡張子だと実行するファイルの拡張子をWSFにするとエラーになりますけど、 これは何か宣言すれば動作するようになるのでしょうか? 今まで実害が無かったのでずっとvbsのままにしていましたが気味悪いので。 2、もうひとつですが、ファイルの名前を今日の日付にしてあるファイルをコピーしたい のですが、これはどうすればできますか? ファイル操作は初めてでコピーのやり方や日付情報の取り方すら分かりません。 ここのログを検索してもファイルの削除の方法は書いてあったのですが、 コピーの方法はどこにも書いてありませんでした。
放置放置
まあ取りあえずMSDN読め。 Google使え。
MsgBoxでvbYesvbNo等以外にすること出来る? 例えば、4つぐらいのボタンを並べるとかやりたいんだけどYes No Cancel以外できなくて。
MsgBoxとはそんなもんだ。 簡単に出せるけど、できることが限られてる。 IEを起動して、MsgBox風の外観にして、 HTMLでボタンを並べて、入力結果を元のスクリプトに返してやればいい。
初心者が増えてきたな。良いことだ。
958 :
名無し~3.EXE :04/11/11 16:12:50 ID:fZTohmvy
空白のあるフォルダや実行ファイルに引数を送るときは通常 """c:hoge\hoge.exe -x""" でやるよね? でも、フォルダ名や引数が場合によって変わるからどうしてもこの形式が 使えないんだけど、こういうときに空白のフォルダ名や引数を送るには どうしたらいいの? ショートカットを作るとなると大量になるのでそれも無理です。 できたら、Wscript.run "C:\"+hogedir+"hoge.exe " +hoge 見たいな形でできたらいいんだけど、これって無理ですか?
例も日本語もむちゃくちゃだが、適当に引数の前後に"を付け加えるQuote関数でも作るとか。
960 :
958 :04/11/11 16:31:00 ID:CBKbTJ5A
""""で解決しました。すみませんでした。
961 :
名無し~3.EXE :04/11/11 18:28:40 ID:ENl8B5W0
わざわざ「2ちゃんのスレ」などと書く必要はないな。URL文字列の、とかなら分かるけど。
Split関数(VBScript)/splitメソッド(JScript)で文字列配列にして、
適切に処理して、
"/"なりなんなりを間に挟んで再結合とか。
//先頭の
ttp://は事前に削除しといた方がやりやすい 。
963 :
名無し~3.EXE :04/11/12 11:26:57 ID:uCMuzyOf
961です。 やってみたのですが、どうしてもできません。 とりあえずURLを入力させて各要素をひとつずつ表示させようと しているのですが、それすらできません。 lengthやsplitの使い方が間違っていると思うのですが、 どなたか教えていただけないでしょうか? MSDNに当たっても function SplitDemo(){ var s, ss; var s = "The rain in Spain falls mainly in the plain."; // スペースの位置で分割します。 ss = s.split(" "); return(ss); } と言う例があるだけでそれを真似たのですが出来てないみたいです。 以下、ソース Dim i,RURL,ss RURL=inputbox("input URL") ss=split(RURL,"/") 'ss=RURL.split("/")でも出来ず for i=0 to ss.length 'ss.countなども試したが出来ず msgbox ss[i] next i Wscript.Quit intMsg
>>963 VBScriptとJScriptがごっちゃになりまくってるね。
JScriptならsplitから返ってくるのがArrayオブジェクトなので、そのlengthプロパティを参照できる。
VBScriptだと、配列は配列なのでUBound関数を使って配列長を取得する必要がある。
大抵は、同じような機能をJScriptはオブジェクトベースで、VBScriptは関数ベースで解決しているから、
異なる言語のサンプルを見る時はそれに対応した自分の扱う言語上での表現に留意しないといけない。
あと、JScriptは配列要素へのアクセスは[index]だけど、VBScriptだと(index)になる。
965 :
名無し~3.EXE :04/11/12 13:57:16 ID:A+iYBMN8
NTFSのファイルストリームに格納されているコメントの取得と設定のやり方を教えてください。