はじめまして。最近ようやくWSHのことがうっすらとわかってきた素人です.
質問なのですが,WSHで仮想ドライブを作成するのは可能なのでしょうか?
substコマンドで仮想ドライブを作成しても毎回削除されてしまい,
PCを起動する度に入力するのも…と思い,自動化ならwshだ!なんて
勝手に思いこんでるんですが…
どうにか仮想ドライブ作成ソフトを使用しないで
WSHでやってみたいのです.
お忙しいとは存じますがご教授いただけると幸いです.
Dear SIGNAL9 さん
お返事ありがとうございます。
> うーん、それはできないです。
それは残念、ということで、いろいろ調べてみて、CanvasのCopyRectを使ったら簡単にできてしまいました。
お騒がせしました。
DMonkeyに組み込もうと思っています。
(スイスアーミーをめざしたいと思っている昨今の私・・・)
yoanさん
ご返答ありがとうございました。
私の説明不足でした。失礼いたしました。
私が書きたいスクリプトは以下の作業を実行するものです。
1.あるアプリケーションが画面右下のタスクトレイに入っている。
※1.アプリケーションは既に起動されているものです。
2.タスクバーではなく、タスクトレイに入っています。
2.そのアプリケーションを終了させる。
タスクトレイに入っているアプリケーションにSendKeyを送って終了させる方法を考えているのですが、なかなかうまくいきません。
ご存知の方がいらっしゃったら、何卒ご教授の程よろしくお願いいたします。
To: Mura さん
過去記事53-12 管理人むたぐちさん 2001年 11月 26日 00時 17分 52秒
あたりに、関連すると思われる話題が。
そこで、こんなの書いてみましたが...
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("notepad")
WScript.Sleep 500
WshShell.SendKeys "%F"
WScript.Sleep 500
WshShell.SendKeys "O" '開く
WScript.Sleep 500
WshShell.SendKeys "C:\TEST\test.txt"
WScript.Sleep 500
WshShell.SendKeys "%O" '開く
WScript.Sleep 100
WshShell.SendKeys "% N" '最小化。Alt+スペース+N
WScript.Sleep 1000 'わざと長くしてみた
Do Until WshShell.AppActivate(oExec.ProcessID)
WScript.Sleep 100
Loop
WshShell.SendKeys "%{F4}"
最小化するからには、途中でなにか作業が入るのですよね。
それに対処できるかは...
まあ、とりあえず、過去記事をご参照ください。<-- "% N" わからないので、小さくなる(^^;
つちやさん、毎度お世話になります。
>きっとチェックされてるのでは、と思って。。
すみません、最近忙しくてたまにしか覗かせてもらってないです(^^;)
>Doodle2で画像の左右反転とかさかさまにするとかしたい場合は、
>どうしたらいいんですか?
うーん、それはできないです。
>(もしも、まだの場合は、要望にかわったりして、、、)
最近失業しかかってるので、フリーウェアに投入する時間が…(^^;)
お約束はしかねますが、憶えておきますですm(__)m
はじめまして。
マッピーと申します。
NTドメインの管理をしています。
ドメインユーザー一覧を出力するスクリプトを作りたいです。
(NET USER では2050件くらいで切れてしまうのです。)
スクリプトはまるっきり初心者です。
ADSI2.5はダウンロードしました。
どのようにスクリプトを組めばいいか、わかりません。
なにとぞご教授のほどお願いします。
●質問事項
タスクトレイにあるアプリケーションを終了させるWSHスクリプト
●内容
Windowsアプリケーションを「Alt+F4」キーを送信して終了させる
スクリプトを作成しました。
[スクリプト]
set WshShell = CreateObject("WScript.Shell")
WshShell.AppActivate "アプリケーション名"
WshShell.SendKeys "%{F4}"
これを実行すると、アプリケーションを最小化した場合でもアプリケーションを
終了させることができます。
しかし、アプリケーションを最小化してタスクトレイに格納した場合には、
そのアプリケーションを終了させることができません。
タスクトレイに格納したアプリケーションを終了させる方法は
ありますでしょうか?
>>yoanさん
早速の回答ありがとうございます。
わからなかった点は
<>と【】内の削除は別々に行う
文字数を限定するにはmidを使う
ところでした
12文字は文章を12文字のつもり(例文でいうと「沖縄の砂浜に自生 埼玉の」)だったんですが、間違えてました。すいません。
To: 正規表現 さん
<TH><FONT size="2">2</FONT></TH>
<TD><FONT size="2"><a href="http://news2.2ch.net/test/read.cgi/newsplus/1043545150/l50">【新種キノコ】沖縄の砂浜に自生 埼玉の高3が日本で初確認</a></FONT></TD>
<TD align="right"><FONT size="2">5</FONT></TD>
という文字列の入ったC:\TEST\test.txtを読み、
2 沖縄の砂浜に自生 埼 5
と表示するメッセージボックスを出すスクリプト。
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Set Fl = Fs.OpenTextFile("C:\TEST\test.txt")
Set objReg = New RegExp
objReg.IgnoreCase = True
objReg.Global = True
Do Until Fl.AtEndOfStream
myStr = Fl.ReadLine
objReg.Pattern = "<[^>]*>"
myStr = objReg.Replace(myStr, "")
If InStr(myStr,"【") <> 0 And InStr(myStr,"】") <> 0 Then
objReg.Pattern = "【.*】"
myStr = objReg.Replace(myStr, "")
myStr = " " & Mid(myStr,1,10) & " "
Else
myStr = myStr
End If
output = output & myStr
Loop
MsgBox output
12文字、というのがよくわかりませんが、半角スペース込みならば、上記のとおりかと。
まあ、別ファイルを行ごとに読み込み、InStrで検査するという手法なので、正規表現さんのリクエストには応えられていないかもしれませんが...
最初にこれがでる c:\WINDOWS\syashin3.vbs助けてーm(__)m
はじめまして。
正規表現でわからないことがあるので、質問させて頂きます。
<TH><FONT size="2">2</FONT></TH>
<TD><FONT size="2"><a href="http://news2.2ch.net/test/read.cgi/newsplus/1043545150/l50">【新種キノコ】沖縄の砂浜に自生 埼玉の高3が日本で初確認</a></FONT></TD>
<TD align="right"><FONT size="2">5</FONT></TD>
のような文字列から、【】を除くタイトルを12文字だけ表示させ、タイトル前後に半角スペースを入れて、タグを抜き、
2 沖縄の砂浜に自生 埼 5
のように表示させたいのですが、タグ抜きまでしかわかりません。
どなたか、教えてください。
Set objReg = New RegExp
objReg.IgnoreCase = True
objReg.Global = True
objReg.Pattern = "<[^>]*>"
output = objReg.Replace(output, "")
Set objReg = nothing
To: 鞠 さん
> 安全ダイアログのみが出て、はい、いいえには関係なく、そのまま落ちているようです。
こちらでも確認しました。(イントラゾーン)
以前は動いていたのですが、いつのまに使用禁止になっていたようですね。
レジストリ書き換えるか、FSOでローカルに書き写してから実行とかしか思いつきません。
> myNewRow.insertCell(0).innerText=""
> のようにして、セルにテキスト文を追加する事が可能なのはわかりましたが、
> セルないに、セレクトボックスの選択肢を指定する<OPTION>の項目を追加したいのですが可能でしょうか?
optionsコレクションにaddメソッドがあります。
To: たる さん
>WMIの方は調べていませんが、RemoteScriptでは戻り値は返せないと思います。
>意図的にエラーを発生させてそれを受け取るとかぐらい。
私もそれで回避する位しかないかなーと思ってました。
誰か他に良い方法があれば、教えて下さい。
下記の件ですが、
安全ダイアログに、はい、と答えた場合に、
「 ランタイムエラーが発生しました。 エラー:書き込み出来ません。」とメッセージが出て、
いいえ、と答えると、そのまま終了してしまいます。
ただ、先ほどはそのエラーダイアログが出ていましたが、今確認してみましたら、
安全ダイアログのみが出て、はい、いいえには関係なく、そのまま落ちているようです。
C:\VBS\aa.htmlだと、フォルダ参照ダイアログが出ますが、UNIX上の\\Or\aa.htmlを開いて、
フォルダ参照を行うとすると、フォルダ参照のダイアログが開かないのです。
もう一つ質問をさせてください。
myNewRow.insertCell(0).innerText=""
のようにして、セルにテキスト文を追加する事が可能なのはわかりましたが、
セルないに、セレクトボックスの選択肢を指定する<OPTION>の項目を追加したいのですが可能でしょうか?
以上、すみませんが、宜しくお願い致します。
To: ジョエル さん
> マクロを使用しているエクセルシートを開く時にマ「クロを使用しますか?」
> みたいなポップアップが出ますが、それを出さないようにする事ってできますか?
そのマクロを認証(:\Program Files\Microsoft Office\Office\Selfcert.exe)してください。
一回目は、その認証を信用しないといけませんが、それ以降は出なくなります。
To: NKD さん
> リモート実行したVBScriptの戻り値を取得することは可能でしょうか?
> もし可能であれば、その方法を教えて頂けないでしょうか?
> リモートスクリプトの起動は、WSH内でのWMIリモートプロセス起動か、リモートWSHを考えています。
WMIの方は調べていませんが、RemoteScriptでは戻り値は返せないと思います。
意図的にエラーを発生させてそれを受け取るとかぐらい。
To: いちご さん
ちょっと一辺には答えられなさそうですね。
下記を直してからもう一度再質問すると吉。
> S_OutputName = C:\TESt.txt
""で閉じていない?
> O_Excel.Workbooks.open S_OutputName,1,1,1,false,false, _
> false,true,false,false,false, _
> Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1),)
このArray必要?
To: 若葉マーク さん
> Set tdbobj=fs.OpenTextFile(fn)
> fn ="http://127.0.0.1/test/a.txt"
> とURLで指定すると
> 「ファイル名が不正です」
FSOはURL表記が出来ないと…、
48-43 管理人むたぐち さんによる
ADODB.StreamオブジェクトによるWebコンテンツのダウンロード方法があります。
To: 鞠 さん
> 自分のローカル環境では作成した下記のフォルダ参照ダイアログが開き使用する事が出来るのですが、、これを、サーバ(UNIX)機において実行すると、「このページのActiveXは安全でない可能性があり〜」というダイアログが出た後に、
> (※1)▲薀鵐織ぅ爛┘蕁爾・・犬靴泙靴拭エラー:書き込み出来ません。
> (※2)「ActiveXコンポーネントはオブジェクトを作成出来ません」
> というエラーが出て、フォルダ参照のダイアログが開きません。これはなぜなのでしょうか?理由を教えて頂けませんでしょうか、願い致します。
答えるその前にちょっと質問。
安全確認ダイアログにいいえと答えてから(※1)以降になるのですか?
はい でなる Or 問い合わせが出ないのならちょっと想定外なもんで。
すみません、【2】.は解決いたしました。
Set myNewRow = document.all.myTBL.insertRow(1)
myNewRow.bgColor = "White"
myNewRow.insertCell(0).innerText = "test"
myNewRow.insertCell(1).innerText = "test2"
myNewRow.insertCell(2).innerText = "test3"
【1】.の回答をよろしくお願い致します。
はじめまして。
VBScriptにてフォルダ参照ダイアログを作成し、ダイアログで選択したフォルダ内にあるファイルをテーブルに追加し一覧表示するものを作成しています。
下記の件について質問をさせて下さい。
【1】.
自分のローカル環境では作成した下記のフォルダ参照ダイアログが開き使用する事が出来るのですが、、これを、サーバ(UNIX)機において実行すると、「このページのActiveXは安全でない可能性があり〜」というダイアログが出た後に、
(※1)▲薀鵐織ぅ爛┘蕁爾ニ_犬靴泙靴拭エラー:書き込み出来ません。
(※2)「ActiveXコンポーネントはオブジェクトを作成出来ません」
というエラーが出て、フォルダ参照のダイアログが開きません。これはなぜなのでしょうか?理由を教えて頂けませんでしょうか、願い致します。
Set Shell = CreateObject("Shell.Application")
Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択", 1, "c:\\") (※1)
Set Fs = CreateObject("Scripting.FileSystemObject")(※2)
【2】.
【1】の参照ダイアログからフォルダを選択し、その中にあるファイルの、名前とサイズ、メタ情報をテーブルに書き込みし表示するものをVBScriptにて作成しています。
Set myNewRow = document.all.myTBL.insertRow() ’行を追加
set oCell = myNewRow.insertCell()
oCell.innerText = "test"
:
<TABLE name="myTBL" id="myTBL" table border=0>
:
として、テストを行ってみると、
1行目の1列目のセルに値を入れる事が出来ます。
2列目、3列目のセルに値を入れるにはどのように書いたらよろしいのでしょうか?
また、行は追加され値は入るのですが、テーブルが全て黒で塗りつぶされて表示されてしまいます。
これは、<TD>へのcolorの設定等が必要になるのでしょうか?
その方法も教えていただけますか、以上、すみませんが宜しくお願い致します。
To: スクリプトビギナー さん
どういたしまして。
私はというと、出力したテキストファイルをD&Dしたりと、やはり誤爆っている(--;
ところで、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/wsproarguments.asp
によると、
「Arguments プロパティには WshArguments オブジェクト (引数のコレクション) が格納されます。このコレクションから個々の引数を取得するには、ゼロから始まるインデックスを使用します。」
ん、つまり、私がサンプルで
Set Fl = FS.OpenTextFile(Args(I))
としていた部分は、ひとつのテキストファイルを渡すだけなら、
Set Fl = FS.OpenTextFile(Args(0))
としておけばよいわけか。
なにせ、よくわからんまま、切り貼りコーディングしているもので(^^;
はじめまして。
VBSをただいま勉強中です。
4行のテキストファイルを読み込んで、その内容を既存の4つのフォーム(テキストボックス)表示させたい、という内容のHTTP埋め込みスクリプトを作ったところ、
sub go()
dim fn
dim fs
dim doc(0,3)
fn ="c:\\a.txt"
set fs= CreateObject("Scripting.FileSystemObject")
Set tdbobj=fs.OpenTextFile(fn)
cnt = 0
do while tdbobj.AtEndOfStream<>true
str=tdbobj.ReadLine
doc(0,cnt)=str
cnt=cnt+1
loop
a.value=doc(0,0)
b.value=doc(0,1)
c.value=doc(0,2)
d.value=doc(0,3)
tdbobj.Close
end sub
ではきちんと動作しますが、
テキストファイルを指定してやる部分、
fn ="c:\\a.txt"
の所を仮に
fn ="http://127.0.0.1/test/a.txt"
とURLで指定すると
「ファイル名が不正です」
と怒られてしまいます。
ローカルだけで動かそうとした場合、このようなURLでのファイルパスの指定は不可能なのでしょうか?
どなたかどうぞよろしくお願い致します。
こんばんは。
To yoanさん
続編&サンプル提示ありがとうございます。
早速試してみたところ、エラーがでてしまい原因を調べてみると、WSH5.1
なのがまずかったようです。WSH5.6を入手し再度ためしてみたところ、
期待通りの結果が得られました。
Nbtstatもバッチリでした。あとはこの出力結果から、正規表現で
パターンマッチした必要な情報のみ出力させれば目標到達です。
→難しいと思いますががんばってみます!
どうもありがとうございました。
昨晩の続きです。
過去記事にあったpingをスクリプトから実行する方法、別ヴァージョンから、D&D版。
参考にした過去記事がどこだったかは、不明。
'-------------------------------------------------------------------
'あて先を行ごとに記入したテキストファイルをD&Dすることで、pingを実行
'結果をPin.txtに書き出す
'-------------------------------------------------------------------
Set Args = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
Set Fl = FS.OpenTextFile(Args(I))
Set Shell = CreateObject("WScript.Shell")
Do Until Fl.AtEndOfStream
IpAd = Fl.ReadLine
Shell.Run "%SystemRoot%\system32\cmd.exe /c ping -n 1 -w 1000 " _
& IpAd & " >> C:\DDPing\Pin.txt",1,true
Loop
Fl.close
あいかわらず、nbtstatはわかりません。NetBIOS over TCP/IPは使っていないので、、、
はじめまして。
過去ログを見させて頂いたのですが、
エクセルで、CSV形式のTXTファイルを読み込ませる方法が分かりませんでした。
具体的な方法がある岡山の鉄人さんのHPの方も閉鎖されてしまっており、
どなたか教えて頂ける方がいらっしゃいましたらお願いします。
’ファイルパス名
Dim S_OutputName
S_OutputName = C:\TESt.txt
' エクセルオブジェクト作成
Set O_Excel = Server.CreateObject("Excel.application")
O_Excel.Workbooks.open S_OutputName,1,1,1,false,false, _
false,true,false,false,false, _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1),)
この記述だとエクセルファイルは生成されるのですが、
TXTファイルをCSV形式として読み込めません。
私の方はASPの方でファイルを読み込ませています。
基本的な書き方は変わらないと思いますのでよろしくお願いします。
リモート実行したVBScriptの戻り値を取得することは可能でしょうか?
もし可能であれば、その方法を教えて頂けないでしょうか?
リモートスクリプトの起動は、WSH内でのWMIリモートプロセス起動か、リモートWSHを考えています。
こんにちは。
マクロを使用しているエクセルシートを開く時にマ「クロを使用しますか?」
みたいなポップアップが出ますが、それを出さないようにする事ってできますか?
どなたか教えてください。
こんにちわ。
WSHに「WSHShell.Run"プログラム名"」と記述するのと、DOSのバッチファイルに「プログラム名」を記述するのでは何か違いがあるのですか?と、いうのはゲームの起動をWSHで行なおうとしたのですが、「CDドライブにメディアが入っているか確認して下さい〜」とのメッセージが出てしまいます。
(CDドライブが認識出来ていない?)DOSバッチでは問題無く起動出来ます。
プログラムをほとんど書いた事が無いので、もしかすると変な質問をしているかもしれませんが教えて頂けると助かります。よろしくお願いします。
To: スクリプトビギナー さん
スクリプトもコマンドもビギナーのyoanです。
過去記事51、52あたりに、pingをスクリプトで実行する話題がありました。
これを参考に、こんなスクリプトを作ってみました。
strCommand = InputBox("コマンド入力")
Set Shell = CreateObject("WScript.Shell")
Set Exec = Shell.Exec(strCommand)
Do While Exec.Status = WshRunning '実行が終わるまでループ
WScript.Sleep 50
Loop
Rep = Exec.StdOut.ReadAll
MsgBox Rep
ping、ipconfig、netstatは動作しました。
ドラッグアンドドロップは、途中で落としてしまいそうで(誤爆もこわいので)、使ったことがありませんでしたが、、、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/wsdraganddrop.asp
だそうです。
そこで、過去記事51、52あたりと、上記コマンド入力スクリプト、及び、MSのサンプルを組み合わせてみたのが、次のスクリプト。
'------------------------------------------------------------------
'IPアドレス、または、ホスト名を行ごとに記入したテキストファイルを
'ドラッグアンドドロップすることで、pingを実行
'------------------------------------------------------------------
set Args = WScript.Arguments
set FS = CreateObject("Scripting.FileSystemObject")
set Fl = FS.OpenTextFile(Args(I))
Set Shell = CreateObject("WScript.Shell")
Do Until Fl.AtEndOfStream
IpAd = Fl.ReadLine
Set Exec = Shell.Exec("ping -n 1 -w 1000 " & IpAd)
Do While Exec.Status = WshRunning 'ping実行が終わるまでループ
WScript.Sleep 50
Loop
Rep = Exec.StdOut.ReadAll
MsgBox Rep
Loop
ドラッグアンドドロップで動作しましたが、こんな書き方でよいのかな?
結果をそのままテキストに出力するには、スクリプトでcreateTextFileでよいかと。
この掲示板の下の方に、webページをテキストで保存する話題があります。
nbtstatは知らないので、参考になるかどうか、、、
こんばんは。
DOSコマンド、たとえばNbtstatとかの実行結果をスクリプトの中で変数に
格納するにはどのようにすればよいのでしょう?
Nbtstat自体もスクリプトから実行したいのです。
実行イメージとしては、以下のような感じ・・。
1.テキストファイルに対象PC名を列挙
2.D&DでVBSにテキストを渡す
3.VBSはNbtstatの結果を結果テキストファイルに出力
(可能ならPC名、ドメイン名、ユーザ名 といった形式にしたい)
Nbtstatの結果をパイプでスクリプトに渡し、標準入力として処理する方法は
知ったのですが、Nbtstatもスクリプトから始動したいのです。
どうかアドバイスを・・。
To: hoge さん
> 説明不足で申し訳なかったのですが、実は10秒かかるという処理自体が
> IEを起動する処理なんです。。。x_x
うーん、打つ手なしです。
自分なら、何らかの入力を促しつつ裏で準備するけど…
IEなら.Visible = True にせずにNavigateしておくとか
たるさん、情報提供ありがとうございます。
説明不足で申し訳なかったのですが、実は10秒かかるという処理自体が
IEを起動する処理なんです。。。x_x
このJavaScriptの中では
・IEオブジェクト作成
・指定のページへ遷移
・そのページからさらに別のWindowをopen
しています。初期起動画面からいきなりメニューバーを隠したかったのと、
windows.close()時に「ウィンドウは表示中のWebページにより・・・」
というダイアログを出さないようにするためです。
ところがへぼいクライアントだと、最初のIE起動にやたらと時間がかかります。
この間メッセージが出せないと、動いているのかどうか判断ができないのです。
何か良い方法は無いものでしょうか。。。
To: hoge さん
> 10秒ほど時間がかかるJScriptのファイルがあり、これを実行している間、
> 何らかの方法で「実行中」という旨のメッセージを出したいと思っています。
IE使うとか。
以前、そんな用途に使えるようにクラスを作ったことがあったのですが、
お蔵入りしてしまって一度も使っていない。
長いけどこんな感じ。
JScriptで作られているということですが、これはVBScriptです。使用する際はクラス定義部を切ってwsfでインクルードしてやってください。
'プログレスバークラスの作成
Option Explicit
Class ProgressBar
Public IsCancel
Private window, document
Private bOpenDialog, lProgress, lMax, lText, sSrc, lTopOffset
Private Ie, bCancelEnable, sTitle, sCaption, lHeight, bWhite, oEvtClick
Private Sub Class_Initialize
lText = 20
IsCancel = False
bWhite = False
lTopOffset = 0
lMax = 100
lHeight = 100
bCancelEnable = True
lProgress = 0
sTitle = "進捗状況"
sSrc = ""
sCaption = ""
Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")
Ie.Navigate "about:blank"
End Sub
Private Sub PosChkBefore()
If sCaption <> "" Then lTopOffset = 26
If sSrc <> "" Then lTopOffset = 36
End Sub
Private Sub PosChkAfter()
If sSrc <> "" Then
document.all.progressAnim.runtimeStyle.visibility = "visible"
End If
If lTopOffset > 0 Then
document.all.compressText.runtimeStyle.posTop = styleValue(document.all.compressText.currentStyle.top) + lTopOffset
document.all.cmdCancel.runtimeStyle.posTop = styleValue(document.all.cmdCancel.currentStyle.top) + lTopOffset
document.all.txtPercent.runtimeStyle.posTop = styleValue(document.all.txtPercent.currentStyle.top) + lTopOffset
End If
If sCaption<>"" Then document.all.txtCaption.innerText = sCaption
If bCancelEnable Then
document.all.cmdCancel.focus()
Else
document.all.cmdCancel.disabled = True
End If
If IsObject(oEvtClick) Then Set document.all.cmdCancel.onclick = oEvtClick
End Sub
Private Function styleValue(str)
Dim oReg, oMatches, lVal, oSubMatch, oMatch
Set oReg = New RegExp
oReg.ignoreCase = True
oReg.Pattern = "(\d+)(mm|cm|in|pt|pc|em|ex|px|%)"
Set oMatches = oReg.Execute(str)
Set oMatch = oMatches(0)
Select Case LCase(oMatch.SubMatches(1))
Case "px" lVal = CLng(oMatch.SubMatches(0))
Case "pt" lVal = CLng(oMatch.SubMatches(0))
End Select
Set oReg = Nothing
styleValue = lVal
End Function
Sub completion()
lProgress = lMax
DisplayProgress
End Sub
Sub increase()
lProgress = lProgress + 1
DisplayProgress
End Sub
Private Sub DisplayProgress()
If (lProgress/lMax)>0.5 And Not bWhite Then
bWhite = True
document.all.txtPercent.runtimeStyle.color = "captiontext"
End If
document.all.txtPercent.innerText = CLng(lProgress*100/lMax) & "%"
document.all.compressText.innerText = String(CLng(lProgress*lText/lMax),"■")
End Sub
Public Default Sub Show()
Do While Ie.readyState<>4
WScript.Sleep 100
Loop
Set document=Ie.Document
Set window=document.ParentWindow
PosChkBefore
With Ie
.Top = (window.screen.availHeight - lTopOffset - lHeight)/ 2
.Left = (window.screen.availWidth - 396) / 2
.Width = 396
.Height = lHeight + lTopOffset
.AddressBar = False
.MenuBar = False
.StatusBar = False
.ToolBar = False
.Resizable = False
End With
document.Write "<html lang='ja'><style type='text/css'><!--img, span, input, div {position:absolute;}body{border-style:solid;border-color:menu;overflow:hidden;background-color:menu;margin:0;font-size:10pt;} div,span{font-family:'MS UI Gothic','Arial Narrow';}img#progressAnim {visibility:hidden;margin:0;width:32;height:32;left:10;top:5px;}input.cancel{top:40px;left:150;}div.progress{top:12px;left:20pt;border-style:inset;border-width:1pt;width:244pt;height:16pt;color:activecaption;font-size:14pt;padding:0 0 0 1;overflow:hidden;text-align:left;letter-spacing:-2pt;}div.percent{top:15px;left:180;width:20;text-align:center;color:menutext;}--></style><body><img src='' id='progressAnim'/><span id='txtCaption' style='top:18px;left:70'></span><div class='progress' id='compressText'></div><input type='button' value='キャンセル' class='cancel' id='cmdCancel'/><div class='percent' id='txtPercent'>0%</div></body></html>"
document.title = sTitle & string(60," ")
Ie.Visible = True
bOpenDialog = True
PosChkAfter
End Sub
Sub Cancel()
Ie.Visible = False
IsCancel = True
End Sub
Property Set Canceled(a)
If Not bOpenDialog Then
Set oEvtClick = a
Else
Err.Raise 445
End If
End Property
Property Let progress(a)
progress = a
DisplayProgress
End Property
Property Get progress()
progress = lProgress
End Property
Property Let caption(a)
sCaption = a
If bOpenDialog Then
document.all.txtCaption.innerText = sCaption
End If
End Property
Property Get caption()
caption = sCaption
End Property
Property Let src(a)
sSrc = a
If bOpenDialog Then
document.all.progressAnim.src = sSrc
End If
End Property
Property Get src()
src = sSrc
End Property
Property Let cancelEnable(a)
If Not bOpenDialog Then
bCancelEnable = CBool(a)
Else
Err.Raise 445
End If
End Property
Property Get cancelEnable()
cancelEnable = bCancelEnable
End Property
Property Let Max(a)
If Not bOpenDialog Then
lMax = CLng(a)
Else
Err.Raise 445
End If
End Property
Property Get Max()
Max = lMax
End Property
Property Let Height(a)
If Not bOpenDialog Then
lHeight = CLng(a)
Else
Err.Raise 445
End If
End Property
Property Get Height()
Height = lHeight
End Property
Property Let Title(str)
If Not bOpenDialog Then
sTitle = str
Else
Err.Raise 445
End If
End Property
Property Get Title()
Title = sTitle
End Property
Private Sub Class_Terminate
Ie.Quit
Set Ie = Nothing
End Sub
End Class
Dim oBar
Set oBar = New ProgressBar
oBar.title = "Sample"
'oBar.Caption="とても難しい計算をしています"
'oBar.src="MODicon_32.gif"
Set oBar.Canceled = GetRef("evtCancel")
'oBar.cancelEnable = False
oBar.Max = 50
oBar.show
Do
WScript.Sleep 100 'ここに処理を記述
oBar.increase
Loop Until oBar.Max<=oBar.Progress Or oBar.IsCancel
If Not oBar.IsCancel Then
oBar.completion
Msgbox "Complete",,"結果"
End If
Set oBar = Nothing
Sub evtCancel
oBar.Cancel
Msgbox "ユーザーによってキャンセルされました。",,"結果"
End Sub
>このようなCOMサーバを操作する場合、CreateObjectで操作するのが正解でしょう。
>こちらのページなど参考になるのではないでしょうか
>http://softplaza.biglobe.ne.jp/text/1999sp/wsh/wsh3-6.html
読んで学んでやってみたのですが
エクセルに起動がかかり 自動実行は、してくれたのですが
objXL.Visible = 0 で、スタートバーで実行してくれるのかな と思ったのですが
実行してくれません 裏で、実行する形をとりたいのですが 方法ないでしょうか?
それから エクセルのヘルプから Cells を探しても出てこないし
上記URLにも 「これらの公開されているインターフェースの情報を得るには
現在のところそれほど簡単では、ありません」 と
書かれているのですが みなさん何処から使い方を探されるんでしょうか?
CADの本に OLE準拠て書かれているのですが こんなアプリだと
VBSが使える事を意味するんですよね ?
よろしくお願いいたします
'エクセルの起動
Set objXL = CreateObject("Excel.Application")
'表示
'objXL.Visible = TRUE
objXL.Visible = 0
初めて投稿させていただきます。
10秒ほど時間がかかるJScriptのファイルがあり、これを実行している間、
何らかの方法で「実行中」という旨のメッセージを出したいと思っています。
(ログオンスクリプトとして自動実行させるつもりです)
JScriptで直接非同期(?)のダイアログを出せればいいのですが、WScript.Echo
や、Wscript.Shellオブジェクトを作ってPopupさせる方法では、待ち状態に
なるダイアログしか出すことができませんでした。
cscriptで実行すればWScript.Echoでメッセージが出るのでちょうどいいの
ですが、バッチファイルとセットで利用する方法しか知らないもので、要件に
うまく合致しません。
何かよい方法をご教授いただけないでしょうか?
今、aspのページを作っているのですが、asp1から、asp2へ遷移したあとに
ブラウザの戻るボタンをおして、asp2から、asp1へ戻らないようにしたい
のですが、いい方法をしっている人がいたら教えてください。
METAタグなんかも試してみているのですが、なかなかうまくいきません。
お助けください〜。。。。。。
WSH(Windows Script Host)で、FTPでファイルをアップするサンプルを作ってみ
ました。
某MLに投稿したのですが、せったくだからこちらにも。。。(確信犯)
'=====================================
'Shell32を使えるようにします。
Set objShell = WScript.CreateObject("Shell.Application")
'FTPサイトの設定をします。(もちろん、書き換えて下さい)
Set objFolder = objShell.NameSpace("ftp://user:password@svrname/directory/")
'転送ファイルの設定をします。
Set objItem = objShell.NameSpace("C:\Work").Items.Item("abcd.txt")
'ファイルを転送します。
objFolder.CopyHere objItem
MsgBox "終了後にOKを押して下さい。"
'=====================================
Dear SIGNAL9 さん
きっとチェックされてるのでは、と思って。。
Doodle2で画像の左右反転とかさかさまにするとかしたい場合は、
どうしたらいいんですか?
(もしも、まだの場合は、要望にかわったりして、、、)
自己レスです。
2003年01月08日 23時17分58秒の件ですが、解決致しました。
リモートで実行させるスクリプト(test2.vbs)は、事前に
リモートコンピュータ側に登録しておかなければいけないのかと
勘違いしていました。
リモートで実行させたいスクリプト(test2.vbs)はローカル側に
登録しておけばよかったとは・・・
また、c:\test1.vbsを実行するユーザと同一なユーザ(パスワードも同一)が、
リモートコンピュータに登録していないとダメだったんですね。
DCOM設定については、Windows 2000であれば特別な設定も必要なかったですね。
マイクロソフトの日本語ページで、記載されている『RemoteWSHをセットアップ』
に記載されている内容に誤りが
>自分のユーザー アカウントをリモート コンピュータのローカル管理者グループ
>に追加します。
>サーバー上で Poledit.exe を使用して、リモート WSH を有効にします。
英語サイトでは、レジストリを変更しろって書いてあるし・・・
これは、過去ログにありましたね^^;
板汚してしまって、すみませんでした。
to 素人 さん
> エクセル側からファイルメーカーを開き、
VBA?
更新部分のデータをCSV等で保存し、
そのファイルをインポートするファイルメーカのスクリプトを
実行すればいいんじゃないですか?
はじめまして
WSHを使って、初めてリモートPC上でバッチを起動させるスクリプトを
作成しています。
ローカルで動作させるには、問題なく動作するのですが、リモートPC上の
スクリプトを起動させようとすると、
『Windows Script Host』エラーダイアログが表示されます。
エラー:書き込みできません。
コード:800A0046
ソース:Microsoft VBScript実行時エラー
ローカルPCとリモートPCの環境を以下に示します。
ローカル/リモートPC OS :Windows2000 Pro
ローカル/リモートPC WSH:WSH5.6
ローカル/リモートPCの\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Windows Script Host\Settings\Remoteに1を設定
DCOM設定(dcomcnfg.exe)は、ローカル/リモートPCでどのように何を設定すれば
いいのか全然不明で特に設定は行っておりません。
『このコンピュータ上で分散COMを有効にする』にチェックが入っていることを
確認しているだけです。
ローカルPCとリモートPCは、同一のネットワークセグメントで同一のワークグループに存在します。
恐縮ですが、スクリプトの内容は、次のとおりです。
【ローカルPC側】
c:\test1.vbs
---------------------------------------------------------------
Set objArgs = WScript.Arguments
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript(objargs(0), objargs(1))
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute
Do While RemoteScript.Status <> 2
WScript.Sleep 100
Loop
Sub remote_End
WScript.DisconnectObject RemoteScript
WScript.Quit 0
End Sub
Sub remote_Error
WScript.DisconnectObject RemoteScript
WScript.Quit 1
End Sub
---------------------------------------------------------------
【リモートPC側】
c:\test2.vbs
---------------------------------------------------------------
Set WSHShell = WScript.CreateObject("WScript.Shell")
return = WSHShell.Run ("cmd /C copy c:\vg0 c:\aa.www",1,true)
If Return <> 0 then
Err.Raise 1
End If
---------------------------------------------------------------
ローカルPC上での起動方法は、『c:\test1.vbs "\c\test2.vbs" "REMOTEPC"』
【動作内容】
ローカルPC上のc:\test1.vbsを起動し、リモートPC("REMOTEPC")上の
c:\test2.vbs(登録済状態)を実行。
大変申しわけございませんが、何卒御教示の程御願いいたします。
二重書き込みになり、申しわけございません
はじめまして
WSHを使って、初めて慯按PC上で舗`を起動させる集慳瀋を
作成しています。
朧禽で動作させるには、問題なく動作するのですが、慯按PC上の
集慳瀋を起動させようとすると、
『Windows Script Host』閑粟涓越五が表示されます。
閑亜Ы颪X「澆任C泙擦鵝」
紺爪:800A0046
唇宗ァMicrosoft VBScript実行時閑ー
朧禽PCと慯按PCの環境を以下に示します。
朧禽/慯按PC OS :Windows2000 Pro
朧禽/慯按PC WSH:WSH5.6
朧禽/慯按PCの\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Windows Script Host\Settings\Remoteに1を設定
DCOM設定(dcomcnfg.exe)は、朧禽/慯按PCでどのように何を設定すれば
いいのか全然不明で特に設定は行っておりません。
『この際盆O西紊琶ケカCOMを有効にする』に選Wが入っていることを
確認しているだけです。
朧禽PCと慯按PCは、同一の発嬬宛掌渙歡で同一の椣幻湶位澆紡減澆靴泙后」
恐縮ですが、集慳瀋の内容は、次のとおりです。
【朧禽PC側】
c:\test1.vbs
---------------------------------------------------------------
Set objArgs = WScript.Arguments
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript(objargs(0), objargs(1))
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute
Do While RemoteScript.Status <> 2
WScript.Sleep 100
Loop
Sub remote_End
WScript.DisconnectObject RemoteScript
WScript.Quit 0
End Sub
Sub remote_Error
WScript.DisconnectObject RemoteScript
WScript.Quit 1
End Sub
---------------------------------------------------------------
【慯按PC側】
c:\test2.vbs
---------------------------------------------------------------
Set WSHShell = WScript.CreateObject("WScript.Shell")
return = WSHShell.Run ("cmd /C copy c:\vg0 c:\aa.www",1,true)
If Return <> 0 then
Err.Raise 1
End If
---------------------------------------------------------------
朧禽PC上での起動方法は、『c:\test1.vbs "\c\test2.vbs" "REMOTEPC"』
【動作内容】
朧禽PC上のc:\test1.vbsを起動し、慯按PC("REMOTEPC")上のc:\test2.vbs
(登録済状態)を実行。
大変申しわけございませんが、何卒御教示の程御願いいたします。
はじめまして。
やってみたいことがあって、wshの勉強を始めています。
簡単なものは理解することができるようになってきたのですが、
目標にはほど遠く困っております。
実際、に下記のような事がwshにて可能かどうかご教授ください。
また可能であれば、どのような手順が必要かご教授いただければ幸いです。
当方、win xp、使用ソフト excel2000 filemaker5
エクセルにて作成した表をファイルメーカーへのインポートを
自動化して行いたいと思っています。
エクセル側からファイルメーカーを開き、
ボタンか何かで更新部分だけインポートしたいのですが。
ファイルメーカー側からインポートの作業を普通に行うと、
エクセルのどのシートを選びますか?等
確認作業がいくつかあり、できたらその作業もwsh側で指定し、
インポートできないかと考えています。
乱文になってしまい申し訳ありません。
よろしくお願いします。
> まーちんさん
そういう場合そのActiveXObjectに
<param name="〜">で指定したのと
同じ名前のプロパティが公開されてませんか?
そうであれば(スクリプトですが。それにJScriptですが)これでできます
<script type="text/javascript">
document.getElementById("sample").NUMBER =
parseInt(document.forms[0].elements["number"].value);
</script>
他の方法は知らないねぇ
yoanさん
たしかにURLの管理がらくでとてもよいです。
私のような初心者につきあってもらって申し訳ありませんでした。
本当にありがとうございました。
始めまして。
年明け早々から悩んでいます。
HTML内で宣言したActiveXへの引数として、
そのHTML内にあるテキストエリアに入力されたテキストを渡したいのですが、
上手くいきいません。
なにかよい方法はありますでしょうか?
※サーバーサイドでPARAMにセットしHTMLを作成し直す方法ではなく、
あくまでもクライアント内で完了したいのですが。
なにとぞ宜しくおねがいいたします。
-----------------------------------------------------------
<html>
<FORM>
<input type = "text" NAME="number"/>
</FORM>
<OBJECT id=sample classid=CLSID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX>
<PARAM NAME="X" VALUE="10000">
<PARAM NAME="Y" VALUE="3000">
<PARAM NAME="NUNBER" VALUE=???> ←ここにinputエリアで入力されたnumberを入れたいのですが。
</OBJECT>
</html>
まだまだ正月モード、あいかわらず酔っていますが...
Andyさん、目的としていたものができたとのこと、よかったです。
私も、活用させていただきます。
ちなみに、私のコーディングにあったCtrとは、カウンターのこと。
For 〜 Next でいくつ処理したか、MsgBoxに表示させるために置いています。
ループ中、Ctr = Ctr + 1 として、件数をカウント。
件数表示が不要であれば、MsgBox "終わり" とでもしておいてください。
ところで、Andyさんのコーディングで、可変項目としてスクリプト内で編集している部分を、List.txtにURLを行ごとに登録しておき、スクリプトファイルは直接さわらない仕様で、書いてみました。
これなら、コピペが少しはらく?
'----------------------------------------------------------------
'List.txtに登録したページのdocument.bodyをテキストで保存する
'----------------------------------------------------------------
MsgBox "動作保証なし。くれぐれも確認のほどを。責任は負わない。"
Const ForReading = 1,ForWriting = 2,ForAppending = 8
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Set Fl = Fs.OpenTextFile("C:\IEtext\List.txt",ForReading)
Do Until Fl.AtEndOfStream
i = i + 1
url = Fl.ReadLine
Set IE = WScript.CreateObject("InternetExplorer.Application","IE_")
IE.Navigate(url)
IE.visible = false 'true:webページを表示する
Do While IE.Busy: WScript.Sleep 1000:Loop '動作確認のうえ、調整してください。
Set ts = Fs.createTextFile("C:\IEtext\web" & i & ".txt")
ts.Write IE.document.Body.InnerText
ts.Close
Ie.Quit
Loop
Fl.Close
MsgBox i & "件"
って、なんだか、掲示板がさみしいので、あげてみました。
| ∧
|ー゚) 早くみんなこないかなぁゥ
⊂ )
|ノ
yoanさんの(78-02)(78-03)の記事を参考にして、一応自分の
目的としていたものができたので御報告します。
登録しておいたurlのホームページをテキスト形式で保存するもの
です。
エラーがでる時はWScript.Sleepの値を大きくするとうまくいくか
も。WScript.Sleep 2000では失敗することがありました。
textfile名をIE.document.titleにすると、空白のあるtitleでは
保存に失敗したのでweb1 web2 ...としています。
ここから
'変更可能項目
'ここから
Dim str(4),complete
str(0) = "http://........."
str(1) = "http://........."
str(2) = "http://........."
str(3) = "http://........."
str(4) = "http://........."
For i = 0 To 4
'ここまで
Set IE = WScript.CreateObject("InternetExplorer.Application","IE_")
Set Fs=WScript.CreateObject("Scripting.FileSystemObject")
IE.Navigate(str(i))
IE.visible = true 'false:webページを表示しない
Do
WScript.Sleep 3000
Loop while complete=false
Set ts=Fs.createTextFile("C:\IEtext\web" & i+1 & ".txt") '自分の環境に合わせて下さい。
ts.Write IE.document.Body.InnerText
ts.Close
Ie.Quit
Next
MsgBox Ctr
Sub IE_DocumentComplete(pdisp,surl)
complete=true
End Sub
ここまで
アドバイスありがとうございました。
yoanさんありがとうございました。
このサイトは勉強になりますね。
またいろいろ参考にさせてください
さきほどの投稿ですが、
Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")
は、次のIf文の後(hozonmei = Fs.GetBaseName(FL)の直後)におくべきだったかな。
初めての書込みです。
正月なので、ほろ酔い気味ですが、あしからず、、、
>複数のwebページを、それぞれ違うテキストファイル名でsaveする...(出来ればtitle
をファイル名にしたい...)
Andyさんの、書込みを見て、なるほど、ためこんだ過去記事をテキストで保存できると便利だな、
と、思い、Andyさんの参照した8-25に、ちょびっと加筆。
'ここから
Set Fs=WScript.CreateObject("Scripting.FileSystemObject")
Set Fol = Fs.GetFolder("C:\TEST")
For Each FL In Fol.Files
Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")
If Right(FL.name,4) = ".htm" Or Right(Fl.name,5) = ".html" then
url = "C:\TEST\" & FL.Name
hozonmei = Fs.GetBaseName(FL)
Ie.Navigate url
Do
WScript.Sleep 100
Loop while complete=false
Set document = IE.Document
Set ts = Fs.CreateTextFile("C:\TEST\" & hozonmei & ".txt")
ts.Write document.Body.InnerText
ts.Close
Ie.Quit
Set Ie = Nothing
Ctr = Ctr + 1
End If
Next
MsgBox Ctr
Sub IE_DocumentComplete(pdisp,surl)
complete=true
End Sub
'ここまで
webページを、ローカルのフォルダに保存したことを前提。
webのtitleは拾わず、ローカルにいったん保存したファイル名を使用。
hozonmei = document.titleとしてしまうと、各ファイルで重複する...(__)
と、まあ、とりあえず、、、
管理人さん、常連さんの推敲(「だーめだこりゃ!」を含め)お願いします。(なにせ、つぎはぎコーディングなもので、、、)
初めて質問させていただきます。
Palmでホームページを見たいと思い、HTML等をテキストに変換し
て保存する方法がないかと検索していたところ、この提示版を見
つけ過去記事(8-25)を参考にスクリプトを作ってみました。たい
へん参考になりました。
ところで、複数のwebページを、それぞれ違うテキストファイル名
でsaveする方法を教えていただけませんでしょうか(出来ればtitle
をファイル名にしたいのですが)。
初心者の質問で申し訳ありませんが、よろしくお願いいたします。