アルジャーノン さん 2003年 11月 26日 23時 58分 40秒

うららさん、ありがとうございました。
調べてみます。

つちや さん 2003年 11月 26日 22時 21分 02秒

ごぶさたしてます。

◆INIファイルの操作◆
http://www.serialscripter.com/scripts/class_ini.html
に、INIファイルを扱うVBScriptのクラスがありますので、これを使う手もありますね。

◆Eval関数をVBで◆
試しに、ScriptControlを使うVBScriptを作ってみました。

Shiki = "1000 * 0.05"
Set SC = CreateObject("ScriptControl")
SC.Language = "VBScript"
SC.AllowUI = True
SC.AddCode("Function MyEval(Line) : MyEval = Eval(Line) : End Function")
MsgBox SC.Run("MyEval",Shiki)

うまくいけばVBに貼り付けて実行できるかも。(試してません)
Windows2000かMe以降じゃないとMSScriptControlが使えないかも。
(その場合は、MSサイトからダウンロードすることが可能です。)

WSCは、私のXPでは登録に失敗して使えないので、サンプルも作れませんです。m(_`_)m
(SCTなら通るのですが、SCTって誰も知らないと思うので、、ごにょごにょ)

◆FindWindow関数をWSHで◆
DynaCallというコンポーネントがAPI操作を生業としてますので、きっと使えるのでは。
昔かなり話題にのぼりましたので、過去ログを検索すれば情報があると思います。
(私自身は、自分でコンポーネントを自作して使ってますので、使ったことないですが。。。)

Rubyなら(きっと)簡単に使えますよ。(最近はもっぱらこっちです。でもRubyはおよびじゃなかったかも)

pagaya さん 2003年 11月 26日 20時 00分 07秒

無知でスイマセン。

情報大変参考になりました。
回答をくださった方々、ありがとうございました。


nullnull さん (Hiroyuki.Sato@aventis.com) 2003年 11月 26日 18時 22分 48秒
URL:null

ドメインに登録されているユーザをLocal サーバへ登録しようと
したところ、失敗してしまいました。

Option Explicit
'On Error Resume Next
Dim oNw,ComputerName,User,Group
Set oNw = CreateObject("WScript.Network")
ComputerName = LCase(oNw.ComputerName)

Set User = GetObject("WinNT://Domain/Server Administrators,user")
Set Group = GetObject("WinNT://Domain/" & ComputerName & "/Administrators,group")
Group.Add (User.ADsPath)
Group.SetInfo

どうやら、Set User = GetObject("WinNT://Domain/Server Administrators,user")で Server Administratorsの間に
空白文字があるのが問題のようですが何か対処方法はありませんか?
空白文字のないユーザではエラーは発生しませんでした。

対応策をご存知の方は教えてください。

ひょん さん 2003年 11月 26日 18時 00分 27秒

>>VB6でVBScriptのEval関数を使う方法はないですか?
wscにしてVBScriptを使う方法もあります

coco さん 2003年 11月 26日 17時 37分 35秒

フォルダを選択のダイアログボックスで
何も選択せず、OK もしくは Cancelを押した場合、
にWScript.Quitで強制終了をさせたいのですが、
デフォルトでMy Documentが選択されていますので、
OKを押された場合、My Documentが対象になってしまいます。

このような判断はできないのでしょうか?

また、何故かデフォルトのフォルダ指定がMy Document
なのですが、これをvbsファイルの存在するカレントディレクトリ
にしたいのですが、この方法もございますでしょうか?

APIでは""これでカレントディレクトリになってくれます。
CurDir()でもできませんでしたし。

Set WSell = CreateObject("WScript.Shell")
Set FS = CreateObject("Scripting.FileSystemObject")
Set Shell = WScript.CreateObject("Shell.Application")

Const BIF_EDITBOX = &H10
Const BIF_DONTGOBELOWDOMAIN = &H2
Const BIF_RETURNONLYFSDIRS = &H1

On Error Resume Next

Set oFolder=Shell.BrowseForFolder(0,"フォルダを選んでください。",BIF_EDITBOX+BIF_DONTGOBELOWDOMAIN+BIF_RETURNONLYFSDIRS,"")

If oFolder Is Nothing Then WScript.Quit

いりや さん 2003年 11月 26日 16時 41分 20秒

randy さん、

// VBSで、iniファイルを読もうと思っていますが、API関数の
// GetPrivateProfileString などは使えませんよね?
// 何か、代替関数のようなものがありませんでしょうか?

Win32 API セットを包んだ COM Component が提供されていればそれを使うという
選択肢がありますが、なければ、自前以外には手はないと思います。

ちなみに直近では、過去ログ (記事リスト 92) で、ini ファイルへのアクセスと
いう課題を議論しました。またその中で JScript のインプリメント例のポインタ
情報を紹介しています。ご参考になさってください。

92-23 いりや さん   2003/10/08 13:21
92-14 Rui さん    2003/10/07 10:05
92-10 いりや さん   2003/10/06 17:54
92-09 いりや さん   2003/10/06 17:47
92-08 Rui さん    2003/10/06 17:32

いりや

うらら さん (urara@goukaku.com) 2003年 11月 26日 11時 14分 07秒
URL:http://www.geocities.co.jp/SiliconValley-PaloAlto/9030/

>> アルジャーノン さん
なぜ、私をご指名なのか良く分かりませんが、とりあえず調べてみました。

http://www.microsoft.com/japan/msdn/thisWeek/vbcom/ryo990428.asp

上記のURLの後半のほうに「ASP を利用して、COM コンポーネントを呼び出し、IIS上で利用する」という項目があり、その中で

> Set obj = Server.CreateObject("Object.Class")

と記述されています。
通常WSHを使うときオートメーションの親は「WScript」で、IISで動かす時は親が「Server」で無いと動かないと言うことだと思います。
当然、作成するオブジェクトも("WScript.Shell")に変わる物で無いとIISでは動かないと思われます。

http://www.microsoft.com/japan/msdn/library/ja/jpiis/iishelp/iis/htm/asp/asps0d6b.asp?frame=true
http://www.microsoft.com/japan/msdn/library/ja/jpiis/iishelp/iis/htm/asp/iiwacomu.asp?frame=true
上記のURLにはスクリプトを作成する上で役立ちそうなサンプルが幾つかあります。

あとはhttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpiis/iishelp/iis/htm/asp/aspguide.aspから辿ってみていけば情報は色々見つかると思います。

ちなみに、私は普段使用しているのはJScriptなのでVBScriptは詳しくないです。
これ以上(VBScriptに関する)深い質問があるのならば、他の方に聞かれたほうが良いと思います。

randy さん 2003年 11月 26日 10時 58分 37秒

お世話になってます。

VBSで、iniファイルを読もうと思っていますが、API関数の
GetPrivateProfileString などは使えませんよね?
何か、代替関数のようなものがありませんでしょうか?

いろいろ調べては見たのですが・・・
よろしくお願いいたします。

魔界の仮面弁士 さん 2003年 11月 26日 03時 08分 45秒

> VB6でVBScriptのEval関数を使う方法はないですか?
どのような意図で使いたいのか、にもよりますが、
Microsoft Script Controlを使えば、呼び出すことが出来ますよ。

コントロール自体は、VBのCD-ROMの奥底に眠っていると思います。(^^;
無ければ、Microsoftのサイトからダウンロードして見てください。

アルジャーノン さん 2003年 11月 25日 23時 53分 39秒

いきなり失礼します。うららさんに質問があります。
私、iisとasp(vbscript)でシステムを作りはじめた者ですが、
Set WSHShell = WScript.CreateObject("WScript.Shell")を実行するために
必要なiisの設定やaspの書き方等あったら、ぜひ教えてもらえないでしょうか?よろしく御願い致します。WScript.ShellはWshom.ocxが提供するものらしい
という事は分かったのですが、どうもうまくWScript.Shellが作成出来ません。


pagaya さん (not_gets@hotmail.com) 2003年 11月 25日 18時 16分 26秒

初心者ですいません。

VB6でVBScriptのEval関数を使う方法はないですか?
自分なりに挑戦したり、調べてみたりしたんですけど、全然わかりません。
誰か助けてください。お願いします。

nemo さん 2003年 11月 25日 17時 23分 02秒

下記のVBSをタスクスケジューラで起動していますが動作が不安定です。
「エクセルが起動しない」場合や
「エクセルの処理まではうまく走るけどWindowsが終了しない」場合があります。
動作確認は起動直後で、ネットワークドライブの割り当ては他にありません。
OSはWindows2000です。なにかアドバイスはありませんでしょうか?

'-------------------------------------------------------
'ネットワークドライブの割り当て
On Error Resume Next
set WshNet = CreateObject("Wscript.Network")
WshNet.MapNetworkDrive "X:","\\server\dir",,"user","pass"
Set WshNet = Nothing

'エクセルの起動
Set objXL = WScript.CreateObject("Excel.Application")
Set WShell = WScript.CreateObject("WScript.Shell")
WShell.Run("X:\○○○.xls")
Set WShell = Nothing
Set objXL = Nothing

'マクロ警告の回避
WScript.Sleep(5000)
Set WshShell = CreateObject("WScript.Shell")
WshShell.AppActivate "○○○.xls"
WshShell.SendKeys "{RIGHT}{ENTER}"
Set WshShell = Nothing
'マクロにより処理後は自動終了

'ネットワークドライブの切断
WScript.Sleep(60000)
On Error Resume Next
set WshNet = CreateObject("Wscript.Network")
WshNet.RemoveNetworkDrive "X:"
Set WshNet = Nothing

'Windowsの終了
On Error Resume Next
Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem")
For Each objSystem In objSystemSet
objSystem.Win32Shutdown 8
Next
'-------------------------------------------------------

jeremy さん (cooldeal28328@yahoo.com) 2003年 11月 21日 22時 38分 20秒

weird web site


魔界の仮面弁士 さん 2003年 11月 20日 19時 41分 17秒

> InputBoxのOKまたはキャンセルを押したかを判断することは

VBScriptのInputBoxは、キャンセルされるとEmpty値を返します。

従って、IsEmpty関数、VarType関数、TypeName関数の
いずれかを使うことで、キャンセルされた事を判断できます。
(「キャンセル時」と「テキストが空の状態でOKされた時」も区別できます)

ちなみに VB/VBAのInputBoxの場合は、キャンセル時に vbNullString が
返されますので、こちらはStrPtr関数でキャンセルを判定できます。蛇足までに。

IKGFIELD さん 2003年 11月 20日 16時 39分 19秒

Jscriptを使用して、WindowsXP Proのグループポリシーの設定作業を
したいと考えております。
gpedit.mscでグループポリシーを起動し、SendKeyでキー操作を順序だてて
記述していけば、力仕事にはなりますが、実現可能ではあります。

ただし、SendKeyを多用していると、誤ったキー操作やマウス操作、
ポップアップウィンドウによる誤動作が懸案事項となります。
その都度、アクティブウィンドウの設定などを割り込ませてはいるのですが、
より明示的に、グループポリシー内の”この項目”といった指定方法は
ないものでしょうか?
検索エンジンで調べた限りでは、上記の要望を満たすような記述がみつけ
られませんでした。
なにか他によい方法がありましたらご教授願います。

IMP765 さん 2003年 11月 20日 10時 01分 50秒

おはようございます。
うららさん、わかりやすい説明を頂きありがとうございました。
条件文をさらに分ければ良かったのですね。
思っていたとおりに出来て大変助かりました。
これからもよろしくお願いします。

うらら さん (urara@goukaku.com) 2003年 11月 20日 05時 53分 45秒
URL:http://www.geocities.co.jp/SiliconValley-PaloAlto/9030/

おはようございます、うららと申します。

>>IMP765 さん
> InputBoxのOKまたはキャンセルを押したかを判断することは
> 出来ないのでしょうか?

Windows Script V5.6 ドキュメントのVBScriptリファレンスによると
Enterを押すか[OK]を押した場合の戻り値はテキスト ボックスの内容、[キャンセル]の場合の戻り値は長さ 0 の文字列 ("") という事です。

ということは変数mykeyの中身を比較すれば判別可能ということになります。

If objDic.Exists(mykey) Then
PrinterPath = ("\\jmb00001\" & mykey)
WshNetwork.AddWindowsPrinterConnection PrinterPath
WshNetwork.SetDefaultPrinter PrinterPath
ElseIf (mykey="") Then
Msgbox "プリンタ名が入力されていないか、キャンセルされました"
Else
Msgbox "不正なプリンタ名が入力されました"
End If

VBScriptはあまり使用したことがないので、ステートメントの使い方が間違っているかもしれませんが、概ねこんな感じにすればいいのではないでしょうか?

IMP765 さん 2003年 11月 19日 18時 44分 41秒

はじめまして。IMP765と申します。
少し前からWSHを勉強しはじめて業務でも使用出来る
スクリプトを作成中です。
エンドユーザーに通常使うプリンタを選択させたいと考え
以下のスクリプトを作成しました。
---------------------------------------------------------------
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set objDic = CreateObject("Scripting.Dictionary")
objDic.Add "PR111","PR111"
objDic.Add "PR222","PR222"
objDic.Add "PR333","PR333"

mykey = InputBox ("通常使うプリンタ名を入力して下さい","","")

If objDic.Exists(mykey) Then
PrinterPath = ("\\jmb00001\" & mykey)
WshNetwork.AddWindowsPrinterConnection PrinterPath
WshNetwork.SetDefaultPrinter PrinterPath

Else
Msgbox "不正なプリンタ名が入力されました"
End If
---------------------------------------------------------------
指定されたプリンタ以外を入力して[OK]を押すとメッセージボックスが
表示されるのは良いのですが、[キャンセル]を押しても同じメッセージが
出てしまいます。
InputBoxのOKまたはキャンセルを押したかを判断することは
出来ないのでしょうか?
どなたかご存じでしたら教えてください。
よろしくお願いします。

OCN さん 2003年 11月 18日 18時 51分 57秒

いつも参考にさせて頂いています。
 スクリプトでMSNメッセンジャの登録された相手にメッセージを送りたいのですか、方法がわかりません。どなたか教えてください。

うらら さん (urara@goukaku.com) 2003年 11月 14日 23時 00分 48秒
URL:http://www.geocities.co.jp/SiliconValley-PaloAlto/9030/

レスが遅れて申し訳ありません。
>>いりやさん
先日は「JavaScriptなとこ」でお世話になりました。
今回も回答を頂き有難うございます。

> 他アプリケーションにその部分を切り出してお願いする,という方式でもよ
> いのであれば例えば UWSC [1] というアプリケーションを使う方法が考えら
> れます。UWSC は,対象ウインドウの制御を組み込み関数 [2] として提供し
> ています。

なるほど、まだ良く調べては居りませんが「UWSC」を利用すれば、十分に期待したいてことが出来そうです。

> WSH/JScript + UWSC の応用例として拙作ではありますが一つご紹介します。

素晴らしいです。サンプル・解説とも参考にさせていただきます。
回答有難うございました。

HP011 さん 2003年 11月 13日 19時 01分 27秒

下の書式だと、こんな風にやれば良いようですよ。

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run """c:\Program Files\ehehe\ohoho.exe"""

IEをお使いでしたら、ここの冒頭にある'WSH Lab. 掲示板 記事検索プログラム'を手に入れて検索するとバッチリです。

HP011 さん 2003年 11月 13日 19時 00分 53秒

下の書式だと、こんな風にやれば良いようですよ。

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run """c:\Program Files\ehehe\ohoho.exe"""

IEをお使いでしたら、ここの冒頭にある'WSH Lab. 掲示板 記事検索プログラム'を手に入れて検索するとバッチリです。

けんた さん 2003年 11月 13日 16時 21分 12秒

昨日から突然 WSH について勉強しだしました(アプリを複数いっぺんに起動したかったので)

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "c:\Program Files\ehehe\ohoho.exe"

とかくと、ダメみたいなんです。空白を含んだフォルダーを含むとだめみたいなんですけど。。。何か良い方法は無いでしょうか?
パスをいちいち通すわけにもいかないので。。。

いりや さん 2003年 11月 13日 11時 35分 32秒

バンブーさん,

届きました。ちょっとみてみますね。

いりや さん 2003年 11月 12日 19時 23分 47秒

バンブーさん,

では,iriyak at mcn.ne.jp もしくは iriyak at ma.kcom.ne.jp 宛てまで一式お送りいただけますか?? ASP は得意ではありませんがお手伝いできることが見つかるかもしれません。帰社してからみてみます。。

バンブー さん (bamboo@shovel.or.jp) 2003年 11月 12日 18時 02分 59秒
URL:http://sgp00100.hp.infoseek.co.jp/index.htm

いりやさん
回答ありがとうございます。
BASP21でもサーバーに入れて試しましたが、
HTMLのフォームでINPUT TYPE=FILEに値があれば転送は可能なのですが、
ラジオボタンの条件によっては、ファイルを選択せずにHDDのローカルファイルを転送を行いたいのです。

以下ソースBASP21版ソース

添付ファイルの選択
select case Wk_mode
case "1"
ATTA1 = bsp.formfilename(bin,"attachment")
ATTANAME1 = bsp.form(bin,"attaname")
if ATTA1 ="" then
e_msg = "音声ファイルが添付されていません。<BR>"
call err_out
err_chk ="NG"
end if
case "2"
ATTA1 = bsp.formfilename(bin,"attachment")
ATTANAME1 = bsp.form(bin,"attaname")
if ATTA1 ="" then
e_msg = "音声ファイルが添付されていません。<BR>"
call err_out
err_chk ="NG"
end if
' ATTA1 = "C:\VW\sound.wma"
' ATTANAME1 = "sound.wma"
case "3"
if MSG ="" then
e_msg = "定形メッセージが選択されていません。<BR>"
call err_out
err_chk ="NG"
end if
dmy =left(MSG,2)
ATTA1=dmy & "/" & MSG & ".wma"
ATTANAME1=dmy & "/" & MSG & ".wma"
MSG = dmy & "/" & MSG & ".wma"
case else
e_msg = "音声メッセージが選択されていません。<BR>"
call err_out
err_chk ="NG"
end select



'BASP21でのFTP転送
sub ftp_trans(prm,mode)
Set ftp = Server.CreateObject("basp21.FTP")
rc = ftp.Connect("www.XXXXXX.jp","XXXXXX","XXXXXX")
if rc<>0 then
response.write "FTP Connection Error"
end if
set fso = Server.CreateObject("Scripting.FileSystemObject")
'Make Upload Directry
rc=ftp.Command("CWD " & "/sound-one/music4new/asp/nakamura/" )
rc=ftp.Command("MKD " & prm)

if mode =1 then '音声のみ
if Wk_mode <> "3" then
strpath = fso.buildpath(server.mappath("./"& prm & "/"),fso.getfilename(set_msg(58)))
lng=bsp.formsaveas(bin,"attachment",strpath)
dmy=right(ATTANAME1,4)
rc=ftp.RenameFile("./" & prm & "/" & ATTANAME1,"./" & prm & "/pre_sound" & dmy)
ATTANAME1 = "pre_sound" & dmy
end if
end if
if mode =2 then '画像のみ
strpath = fso.buildpath(server.mappath("./"& prm & "/"),fso.getfilename(set_msg(59)))
lng=bsp.formsaveas(bin,"attachment2",strpath)
dmy=right(ATTANAME2,4)
rc=ftp.RenameFile("./" & prm & "/" & ATTANAME2,"./" & prm & "/pre_pic" & dmy)
ATTANAME2 = "pre_pic" & dmy
end if
if mode =3 then '画像と音声
if Wk_mode <> "3" then
strpath = fso.buildpath(server.mappath("./"& prm & "/"),fso.getfilename(set_msg(58)))
lng=bsp.formsaveas(bin,"attachment",strpath)
dmy=right(ATTANAME1,4)

rc=ftp.RenameFile("./" & prm & "/"& ATTANAME1,"./"& prm & "/pre_sound" & dmy)
ATTANAME1 = "pre_sound" & dmy
end if
strpath = fso.buildpath(server.mappath("./"& prm & "/"),fso.getfilename(set_msg(59)))
lng=bsp.formsaveas(bin,"attachment2",strpath)
dmy=right(ATTANAME2,4)
rc=ftp.RenameFile("./" & prm & "/" & ATTANAME2,"./" & prm & "/pre_pic" & dmy)
ATTANAME2 = "pre_pic" & dmy
end if

ftp.close
end sub
HTMLのフォームはMULTIPARTになっている為、
バイナリーで値が入ります。

上記前述ソース前半のWk_modeが2のとき
現在コメントになっていますが、
ATTA1 = "C:\VW\sound.wma"
ATTANAME1 = "sound.wma"
でATTA1に値がはいりません。
というより、FILE属性のエリアに値がセット出来ないため、
バイナリーデータとして値が入らないため、
BASP21でもFTP転送が出来ないと解釈しました。

整理すると、multi/partのフォームで
ラジオボタンの条件により固定のバイナリーファイルをサーバーに転送する。
という事がしたい訳です。

最悪、ActiveXDLLで作成しようかと思っていますが、
ActiveXのOCXは作成したことがあるのですが、
DLL版はMSDNのCDを紛失した為HELPが出ない状態で、
ネットでぐぐってもインターフェースの部分がなかなか出てこない状況に手を焼いています。
VBscriptとActiveXDLLのやりとりのサンプルソースがあれば、
トライできるのですが、現在市販の解説本を取り寄せてる最中で、
手元に届いてないため手のつけようがない状態です。

ラジオボタンの条件別にHTMLを分割するれば自分の力でも可能ですが、
なんせソースが入力チェックを含めて、
HTMLが約3000ステップ、ASPも2000ステップほどあるので、
分割はしたくないのが実状です(^^ゞ

fileに初期値を設定できればそれも解決できるのですが、
無理ですよね(^^ゞ
もし興味があればメール下されば、formとASPのソースを送ります。

いりや さん 2003年 11月 12日 17時 38分 22秒

バンブーさん、

うーん、DoEvents のところはやっかいそうですね。ググってみましたがデンマークの方も同様のポーティングで悩んでいるのだけど、という投函だけ見つかっただけでした。

もし babaq さんの basp21 を使う案も検討の余地として残されているのであれば、ftp オブジェクトにトライしてみてはいかがでしょうか。

http://www.hi-ho.ne.jp/babaq/basp21f.html

いりや さん 2003年 11月 12日 17時 30分 59秒

muko さん,

>というのも、ページの読み込み中はスクリプトを動作させたくないという思いから。
>アプリケーションが立ち上がり終わったことの確認、
>アプリケーションに送った命令を完全に処理しきったことの確認

特定のアプリケーションを前提にされていらっしゃるならば,CPU 使用率の状態からアプリケーションへの依頼タイミングをはかる,という方式以外にも手があるかもしれません(より確実な)。ちなみにどんなアプリケーションを想定されていらっしゃるのでしょうか。

いりや さん 2003年 11月 12日 17時 27分 52秒

くまくまさん,

>他のWindows2000Prp端末30台では、問題なくこのVBSを実行できているのですが、1台だけ、上記のエラーが表示されます。

1台だけ起きる,という所にポイントをあててみると,環境要因の可能性が気になりますね。というところで環境の違いを一つ一つつぶさにみていくつぶしの作業が有効に思います。

いりや さん 2003年 11月 12日 17時 11分 02秒

うららさん,

> スクリプトから特定のHWND若しくはプロセスID等を指定してWindowをコントロール(最大化・最小化など)する方法は無いでしょうか?
> WSHだけで出来ないのであれば、外部のCOMコンポーネントを利用する方法でもかまいません。

他アプリケーションにその部分を切り出してお願いする,という方式でもよ
いのであれば例えば UWSC [1] というアプリケーションを使う方法が考えら
れます。UWSC は,対象ウインドウの制御を組み込み関数 [2] として提供し
ています。

WSH/JScript + UWSC の応用例として拙作ではありますが一つご紹介します。

UWSC を支援するツールスクリプト [3] で WSH/JScript (+ UWSC) でつくり
ました。このスクリプトでは IE のファイル選択ダイアログ機能を間借りし
ているところがります。

それで,このダイアログは最初アクティブになっていないという課題があり
ました。

この課題をクリアするために,UWSC のスクリプトを動的に生成し別プロセス
として起動して,当該ダイアログの window id 取得,アクティブ化,の二つ
の処理を請け負わせました。

ご参考になれば幸いです。

いりや

[1] うみうみ屋さん, UWSC
  http://www002.upp.so-net.ne.jp/umiumi/

[2] UWSC help, CTRLWIN() 関数

|   // Window コントロール
|   CTRLWIN( ID, 命令)
|   引数
|    ID: Windowを識別するID
|    命令 
|      CLOSE (終了)
|      ACTIVATE (アクティブ )
|      HIDE (非表示)
|
|      SHOW (表示)
|      MIN (アイコン化)
|      MAX (最大化)
|      NORMAL (サイズ戻す)

[3] いりや, UWSC R option builder
  http://iriyak.adam.ne.jp/uwsc.html
  http://iriyak.adam.ne.jp/arc/uwsc/031012_UWSC_R_option_builder.txt

例えば build (interactive).js の openFileDialog() の

| var anInternetExplorer = new ActiveXObject('InternetExplorer.Application');
| anInternetExplorer.navigate('about:blank');
| waitUntilLoadingHasCompleted(anInternetExplorer);
| invokeRunMethodWith(doubleQuote(generateActivateFile('ファイルの選択', '#32770'))); ★

★印がそうです。

generateActivateFile() は,

C:\Documents and Settings\<ユーザ名>\Local Settings\Temp 配下に,対象
ダイアログをアクティベートする activate.uws ファイルを生成します。

バンブー さん (bamboo@shovel.or.jp) 2003年 11月 12日 09時 53分 33秒
URL:http://sgp00100.hp.infoseek.co.jp/index.htm

いりやさん
ご指摘の通りftpFile.Protocol = 2を変更してエラーは消えました。
ありがとうございます。
しかし、

Do While ftpFile.StillExecuting
DoEvents ' 前の処理が終わるまで待機
Loop
の部分でVBSではDoeventsがサポートされていない為、
そこで下記の用に訂正しましたが
ftpFile.RequestTimeout = 120
Do While ftpFile.StillExecuting
Loop
下記の通りタイムアウトになります。
Active Server Pages, ASP 0113 (0x80004005)
スクリプトを実行する時間の制限を超えました。この制限時間は、プロパティ Server.ScriptTimeout に新しい値を指定するか、IIS 管理ツールの値を変更することによって変更できます。
/asp/ftp_test.asp


そこで、Do 〜 Loopの記述を消すと
Inet (0x800A8BB4)
最後の要求が実行中です。
/asp/ftp_test.asp, line 22
となり、
ftpFile.Execute , "PUT " & local_name & " " & net_name
でエラーとなります。
DoEventsに変わる
VBSの記述はあるのでしょうか?

ちなみにVB6上で実行すると、Do 〜 Loopを実行するのに1秒もかかりません。

edge さん 2003年 11月 12日 08時 55分 53秒

うららさん、レスありがとうございます
ご指摘どおりにやったら、うまく行きました
ありがとうございました

いりや さん 2003年 11月 11日 19時 07分 05秒

バンブーさん,

ftpFile.Protocol = icFTP を
ftpFile.Protocol = 2 にかえてみては??

[ 参考リンク ]

http://www.insightgraphics.com/reference/ITCRetrieval.htm

バンブー さん (bamboo@shovel.or.jp) 2003年 11月 11日 17時 57分 06秒
URL:http://sgp00100.hp.infoseek.co.jp/index.htm

こんばんは バンブーと申します。
VBSでINETコントロールを使用したftpプログラムをくんだのですが、

エラー タイプ
Inet (0x800A8BA9)
このメソッドでサポートされていないプロトコルです。
/asp/ftp_test.asp, line 17

のエラーが出ます。
VBSではINETコントロールは使用出来ないのでしょうか?

・WSHから呼び出せるオブジェクト
を見て作成したのですが根本的に間違ってるのでしょうか?
教えて下さい。

以下ソース

<%
call ftp_trans(1,1,1)
%>
<script language="VBScript" RUNAT="Server">


sub ftp_trans(ftp_dir,net_name,local_name)
Set ftpFile = server.createobject("InetCtls.Inet")
ftpFile.URL = "ftp://XXX.XXXXXX.ne.jp" ' FTPアドレスを指定
ftpFile.UserName = "XXXXXXX" ' ユーザ名を指定
ftpFile.Password = "XXXXXX" ' パスワードを指定
ftpFile.Protocol = icFTP ' 接続方法を指定
ftp_dir ="test"
local_name ="c:\vw\sound.wma"
net_name = "pre_sound.wma"
exec_dir ="/music4new/asp/nakamura/" & ftp_dir
ftpFile.Execute , "CD " & ftp_dir ' ディレクトリの変更
Do While ftpFile.StillExecuting
DoEvents ' 前の処理が終わるまで待機
Loop
' アップロード処理を行う
ftpFile.Execute , "PUT " & local_name & " " & net_name

end sub
</Script>

うらら さん (urara@goukaku.com) 2003年 11月 11日 17時 02分 15秒
URL:http://www.geocities.co.jp/SiliconValley-PaloAlto/9030/

こんにちは、うららと申します。

>>edge さん
スクリプトファイルは標準設定の『開く(&O)』(またはOpen)がスクリプトエンジンから開かれる形に関連付けされていないと動作できません。よって

拡張子htaは『Open』を
『C:\WINDOWS\System32\mshta.exe "%1" %*』に

拡張子js/jse/vbe/vbs/wsf/wshは『開く(&O)』を
『C:\WINDOWS\System32\WScript.exe "%1" %*』に

関連付けすれば大丈夫です。
秀丸エディタから開くようにするのであれば新規に『エディタから開く』などの設定を作成し、コンテキストメニューから開くようにすれば良いでしょう。

edge さん 2003年 11月 11日 16時 21分 07秒

いつも拝見してます、edgeといいます
早速ですが、質問があります


拡張子がWSH/VBS/HTAのファイルをエディタで開く際に
秀丸で開こうと思い、秀丸の拡張子関連付け機能で
秀丸と関連付けたところ、WSH/VBS/HTAの各ファイルが
ただのテキストファイルとして認識されるようになり
実行できなくなってしまいました

関連付けを復活させるにはどうすればよいのでしょうか?

ご教授いただけないでしょうか
よろしくお願いいたします

OS=WinXP IE=6.0です

魔界の仮面弁士 さん 2003年 11月 10日 19時 06分 22秒

> 起動中のIEを捕まえて、終了することはできますか?
ShellWindowsコレクションオブジェクトを使えばOKです。
とりあえず、VBScriptであればこんな感じで。

'--- VBScript ---
For Each IEApp In CreateObject("Shell.Application").Windows()
IEApp.Quit
Next

> これはできませんでした。
VBScripで「 As Object」は使えませんよ。(^^;)

くまくま さん (magekun10@yahoo.co.jp) 2003年 11月 10日 16時 59分 51秒

VBSで以下を記述しています。
=============
'
' 起動スクリプト
'
Set arg= WScript.Arguments
If arg.Count > 0 Then
set IE = WScript.CreateObject("InternetExplorer.Application")
IE.Visible = false
IE.Navigate(arg.Item(0))
Do While IE.Busy
Loop
IE.Quit
End If
=============
このスクリプトを引数を渡して実行すると、
以下のWindows Script Host エラーが表示されます。
  スクリプト:c:\Program files\XXXXXX\XXXXXX.vbs
  行:    6
  文字: 5
  エラー:  指定されたファイルが見つかりません。
  コード:  80070002
  ソース:  (null)
このエラーの箇所は、
 set IE = WScript.CreateObject("InternetExplorer.Application")
に該当します。
他のWindows2000Prp端末30台では、問題なくこのVBSを実行できているのですが、1台だけ、上記のエラーが表示されます。
どなたか原因、対処法の分かる方、いらっしゃったら返答お願いします。
よろしくお願いします。

ミラク さん 2003年 11月 10日 00時 28分 30秒

こんばんは。

以下のVBスクリプトでエクセルブックを起動している場合、
エクセルのOpenイベントに記述しているサブルーチンの
ひとつが読みこまないのですが、ひょっとして、VBスクリプト
から呼び出さないと動作しないのではないかと思っているの
ですが、それが原因であったとしても、そのサブルーチンを
呼びだすコードの記述の仕方がわかりません。

例えば、以下のルーチンを呼び出したいんですが。

Sub wbOpen5()
・・・・
End Sub

--------------------------------------------------
Dim xl 'As Excel.Application
Dim book 'As Workbook
Set FS = CreateObject("Scripting.FileSystemObject")
CurrentPath = FS.GetAbsolutePathName(".")+"\"

f_name="boot.xls"

Set xl = CreateObject("Excel.Application")
Set book = xl.Workbooks.Open(CurrentPath+f_name)


WSHのBBSで場違いですみませんが、
Delphiで同様の目的のコードの実行ファイルも作成している
のですが、どう呼び出したらいいいのか、もしわかる方いましたら、
アドバイスいただけると助かります。

--------------------------------------------------
uses
Windows, SysUtils, ComObj, Variants;

{$R *.RES}

var
objExcel: OleVariant;
FileName: String;
begin
if InitProc <> nil then TProcedure(InitProc);

FileName := ExtractFilePath(ParamStr(0)) + 'boot.xls';

if FileExists(FileName) then
begin
try
objExcel := CreateOleObject('Excel.Application');
objExcel.Visible := False;
objExcel.Workbooks.Open(FileName);
objExcel.Visible := True;
finally
objExcel := Unassigned;
end;
end;

end.

わがまま言いましてすみません。

うらら さん (urara@goukaku.com) 2003年 11月 08日 19時 12分 20秒
URL:http://www.geocities.co.jp/SiliconValley-PaloAlto/9030/

こんばんは、うららと申します。
お知恵を拝借したく、書込みさせていただきました。

スクリプトから特定のHWND若しくはプロセスID等を指定してWindowをコントロール(最大化・最小化など)する方法は無いでしょうか?

<script language="JScript">
function fnShellMinimizeAllJ(){
var objShell = new ActiveXObject("Shell.Application");
objShell.MinimizeAll();
}
</script>

上記のようにすれば、全てのウィンドウに対して最小化・復元・タイル表示が出来ることまではわかったのですが、特定のウィンドウをコントロールする方法を発見することが出来ませんでした。

Sendkeysメソッドは出来る限り使いたくないので、それ以外の方法をご存知であればご教授いただきたいです。
WSHだけで出来ないのであれば、外部のCOMコンポーネントを利用する方法でもかまいません。

OSはWindowsXPでJScriptで実現したいのですが、無理でしたらVBScriptでもActivePerlでもかまいません。

どなたか宜しくお願いいたします。

HP011 さん 2003年 11月 08日 14時 52分 15秒

久しぶりにお知恵をお借りしたく、失礼いたします。

ダウンロードあるいは観覧しようとするサーバーから現地時刻を取得したい
思っています。JScriptで'Timefmt'を使った例を見かけたのですが、内容が
理解できませんでした。VBScriptでの取得法を享受願えないでしょうか。

こちらの環境は次のとおりです

・Mozilla Firebird + Win98SE
・Win95の'Shell32.dll'と'explorer.exe'を使用中
・WSH5.6 + BASP21

IE取っちゃったんで'Shell.Application'が100%使えません(^^;

変な環境で申し訳ないですが、よろしくお願いいたします。


IEレスのWin98SEで

monti さん 2003年 11月 08日 11時 45分 16秒

起動中のIEを捕まえて、終了することはできますか?

Dim IEApp As Object

Set IEApp = GetObject("", "InternetExplorer.Application")

IEApp.Quit

これはできませんでした。

複数起動されている場合もあるかと思い、コレクションで
取得できればと考えたのですが、いきずまってしまいました。

muko さん 2003年 11月 07日 23時 43分 46秒

タスクマネージャでアプリケーションのCPU使用率がわかりますよね
あれをWSHで参照しようと思ったらどうしたらいいですか?
CPU使用率が高い間はスクリプトをSleepしておいて
低くなったらスクリプトを再開という挙動をとりたいのです。
というのも、ページの読み込み中はスクリプトを動作させたくないという思いから。
アプリケーションが立ち上がり終わったことの確認、
アプリケーションに送った命令を完全に処理しきったことの確認
などをCPU使用率から判断しようと思うのですが可能ですか?
どうかよろしくお願いします。
今、相当悩んでます。

いりや さん 2003年 11月 07日 11時 16分 58秒

SEED さん,

むたぐちさんの
Lesson10 ショートカットの作成
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/refer/lesson10.htm
が参考になるでしょう。

いりや さん 2003年 11月 07日 11時 13分 58秒

kana さん,

ページの頭に説明書きがされていますが掲示板記事検索プログラムをつかうと大変べんりですのでご検討ください。

検索というから何となく grep のようなものかと想像しますが,検索機能も備えた掲示板の閲覧ソフトウェアです。記事に埋め込まれた情報からリンクが構成されるので,記事間の見通しがたいへんよくなります。

SEED さん 2003年 11月 07日 11時 05分 44秒

ショートカットのリンク先を変更する方法を教えて下さい。

はた坊 さん 2003年 11月 07日 09時 23分 16秒

>魔界の仮面弁士 さま

回答ありがとうございます。
丁寧な説明、とてもわかりやすかったです!

>1E8は、1.0×10の8乗を表していますので

1E8とは指数表現であらわした数なんですね。
Right関数とCStr関数のところでは何をやってるかわかっていたのですが
指数表現の意味がわからなくて、
16進数かな?と思ったのですが足し算すると変な数になるし。。。
うーん、「1E8」ってなんだろうと思っていたのです。

今回の件、大変勉強になりました。
自分のスクリプトに活かそうと思います。
ありがとうございました。<(_ _)>

魔界の仮面弁士 さん 2003年 11月 06日 20時 21分 51秒

》 はた坊 さん 2003年 11月 06日 18時 04分 20秒
> たとえば、2003/11/06の場合
> lngYMDに入るのは20031106ですよね?
> これに 1E8 を足し算してるのでしょうか??

1E8は、1.0×10の8乗を表していますので、
  100000000
の意味になりますよね。で、これを 20031106 に足すと、
120031106
という値になります。

これをCStr関数にかけて、"120031106"という文字列にし、
Right関数で右から8文字抽出して、"20031106" にしています。


……で。何故このような面倒な事をしているかというと、
『関数の結果を、常に8桁の文字列にさせるため』です。


例えば、「DateSerial(123, 4, 5)」などで作られた日付は、
「西暦123年4月5日」を指しますよね。

そのような場合に、"1230405"ではなく、"01230405"という、
『常に8桁の文字列』が返されるようにしたかったので、
そのような処理を加えてあります。

もちろん、4桁未満の年が渡される事は無い、という前提であれば、
この部分の処理を省くことができます。


しかし元の質問は、"YYYYMMDD" ではなく、"mmddhhnn"形式です。
つまりどうしても、10〜12月は8桁、1〜9月は7桁となってしまいますよね。

この時に、上記の方法を使えば、「常に8桁」で返される…という寸法です。
(7桁の値が返されても構わないのなら、このような処理は不要です)

kana さん 2003年 11月 06日 18時 14分 07秒

>いりや さん
ご回答有難うございます。土屋さんの例題で出来ました。
また詳しい情報の指摘も有難うございます。
過去記事も読んだのですがWSHはじめたばかりで詳しいコメントも出来ませんがどうも。新しい概念がたくさん出てきてついていけませんが、とりあえずソースのコピペで利用させていただきます。

Return