うららさん、ありがとうございました。
調べてみます。
ごぶさたしてます。
◆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はおよびじゃなかったかも)
無知でスイマセン。
情報大変参考になりました。
回答をくださった方々、ありがとうございました。
ドメインに登録されているユーザを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の間に
空白文字があるのが問題のようですが何か対処方法はありませんか?
空白文字のないユーザではエラーは発生しませんでした。
対応策をご存知の方は教えてください。
>>VB6でVBScriptのEval関数を使う方法はないですか?
wscにしてVBScriptを使う方法もあります
フォルダを選択のダイアログボックスで
何も選択せず、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
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
いりや
>> アルジャーノン さん
なぜ、私をご指名なのか良く分かりませんが、とりあえず調べてみました。
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に関する)深い質問があるのならば、他の方に聞かれたほうが良いと思います。
お世話になってます。
VBSで、iniファイルを読もうと思っていますが、API関数の
GetPrivateProfileString などは使えませんよね?
何か、代替関数のようなものがありませんでしょうか?
いろいろ調べては見たのですが・・・
よろしくお願いいたします。
> VB6でVBScriptのEval関数を使う方法はないですか?
どのような意図で使いたいのか、にもよりますが、
Microsoft Script Controlを使えば、呼び出すことが出来ますよ。
コントロール自体は、VBのCD-ROMの奥底に眠っていると思います。(^^;
無ければ、Microsoftのサイトからダウンロードして見てください。
いきなり失礼します。うららさんに質問があります。
私、iisとasp(vbscript)でシステムを作りはじめた者ですが、
Set WSHShell = WScript.CreateObject("WScript.Shell")を実行するために
必要なiisの設定やaspの書き方等あったら、ぜひ教えてもらえないでしょうか?よろしく御願い致します。WScript.ShellはWshom.ocxが提供するものらしい
という事は分かったのですが、どうもうまくWScript.Shellが作成出来ません。
初心者ですいません。
VB6でVBScriptのEval関数を使う方法はないですか?
自分なりに挑戦したり、調べてみたりしたんですけど、全然わかりません。
誰か助けてください。お願いします。
下記の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
'-------------------------------------------------------
weird web site
> InputBoxのOKまたはキャンセルを押したかを判断することは
VBScriptのInputBoxは、キャンセルされるとEmpty値を返します。
従って、IsEmpty関数、VarType関数、TypeName関数の
いずれかを使うことで、キャンセルされた事を判断できます。
(「キャンセル時」と「テキストが空の状態でOKされた時」も区別できます)
ちなみに VB/VBAのInputBoxの場合は、キャンセル時に vbNullString が
返されますので、こちらはStrPtr関数でキャンセルを判定できます。蛇足までに。
Jscriptを使用して、WindowsXP Proのグループポリシーの設定作業を
したいと考えております。
gpedit.mscでグループポリシーを起動し、SendKeyでキー操作を順序だてて
記述していけば、力仕事にはなりますが、実現可能ではあります。
ただし、SendKeyを多用していると、誤ったキー操作やマウス操作、
ポップアップウィンドウによる誤動作が懸案事項となります。
その都度、アクティブウィンドウの設定などを割り込ませてはいるのですが、
より明示的に、グループポリシー内の”この項目”といった指定方法は
ないものでしょうか?
検索エンジンで調べた限りでは、上記の要望を満たすような記述がみつけ
られませんでした。
なにか他によい方法がありましたらご教授願います。
おはようございます。
うららさん、わかりやすい説明を頂きありがとうございました。
条件文をさらに分ければ良かったのですね。
思っていたとおりに出来て大変助かりました。
これからもよろしくお願いします。
おはようございます、うららと申します。
>>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と申します。
少し前から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またはキャンセルを押したかを判断することは
出来ないのでしょうか?
どなたかご存じでしたら教えてください。
よろしくお願いします。
いつも参考にさせて頂いています。
スクリプトでMSNメッセンジャの登録された相手にメッセージを送りたいのですか、方法がわかりません。どなたか教えてください。
レスが遅れて申し訳ありません。
>>いりやさん
先日は「JavaScriptなとこ」でお世話になりました。
今回も回答を頂き有難うございます。
> 他アプリケーションにその部分を切り出してお願いする,という方式でもよ
> いのであれば例えば UWSC [1] というアプリケーションを使う方法が考えら
> れます。UWSC は,対象ウインドウの制御を組み込み関数 [2] として提供し
> ています。
なるほど、まだ良く調べては居りませんが「UWSC」を利用すれば、十分に期待したいてことが出来そうです。
> WSH/JScript + UWSC の応用例として拙作ではありますが一つご紹介します。
素晴らしいです。サンプル・解説とも参考にさせていただきます。
回答有難うございました。
下の書式だと、こんな風にやれば良いようですよ。
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run """c:\Program Files\ehehe\ohoho.exe"""
IEをお使いでしたら、ここの冒頭にある'WSH Lab. 掲示板 記事検索プログラム'を手に入れて検索するとバッチリです。
下の書式だと、こんな風にやれば良いようですよ。
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run """c:\Program Files\ehehe\ohoho.exe"""
IEをお使いでしたら、ここの冒頭にある'WSH Lab. 掲示板 記事検索プログラム'を手に入れて検索するとバッチリです。
昨日から突然 WSH について勉強しだしました(アプリを複数いっぺんに起動したかったので)
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "c:\Program Files\ehehe\ohoho.exe"
とかくと、ダメみたいなんです。空白を含んだフォルダーを含むとだめみたいなんですけど。。。何か良い方法は無いでしょうか?
パスをいちいち通すわけにもいかないので。。。
バンブーさん,
届きました。ちょっとみてみますね。
バンブーさん,
では,iriyak at mcn.ne.jp もしくは iriyak at ma.kcom.ne.jp 宛てまで一式お送りいただけますか?? ASP は得意ではありませんがお手伝いできることが見つかるかもしれません。帰社してからみてみます。。
いりやさん
回答ありがとうございます。
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のソースを送ります。
バンブーさん、
うーん、DoEvents のところはやっかいそうですね。ググってみましたがデンマークの方も同様のポーティングで悩んでいるのだけど、という投函だけ見つかっただけでした。
もし babaq さんの basp21 を使う案も検討の余地として残されているのであれば、ftp オブジェクトにトライしてみてはいかがでしょうか。
http://www.hi-ho.ne.jp/babaq/basp21f.html
muko さん,
>というのも、ページの読み込み中はスクリプトを動作させたくないという思いから。
>アプリケーションが立ち上がり終わったことの確認、
>アプリケーションに送った命令を完全に処理しきったことの確認
特定のアプリケーションを前提にされていらっしゃるならば,CPU 使用率の状態からアプリケーションへの依頼タイミングをはかる,という方式以外にも手があるかもしれません(より確実な)。ちなみにどんなアプリケーションを想定されていらっしゃるのでしょうか。
くまくまさん,
>他のWindows2000Prp端末30台では、問題なくこのVBSを実行できているのですが、1台だけ、上記のエラーが表示されます。
1台だけ起きる,という所にポイントをあててみると,環境要因の可能性が気になりますね。というところで環境の違いを一つ一つつぶさにみていくつぶしの作業が有効に思います。
うららさん,
> スクリプトから特定の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 ファイルを生成します。
いりやさん
ご指摘の通り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秒もかかりません。
うららさん、レスありがとうございます
ご指摘どおりにやったら、うまく行きました
ありがとうございました
バンブーさん,
ftpFile.Protocol = icFTP を
ftpFile.Protocol = 2 にかえてみては??
[ 参考リンク ]
http://www.insightgraphics.com/reference/ITCRetrieval.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>
こんにちは、うららと申します。
>>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といいます
早速ですが、質問があります
拡張子がWSH/VBS/HTAのファイルをエディタで開く際に
秀丸で開こうと思い、秀丸の拡張子関連付け機能で
秀丸と関連付けたところ、WSH/VBS/HTAの各ファイルが
ただのテキストファイルとして認識されるようになり
実行できなくなってしまいました
関連付けを復活させるにはどうすればよいのでしょうか?
ご教授いただけないでしょうか
よろしくお願いいたします
OS=WinXP IE=6.0です
> 起動中のIEを捕まえて、終了することはできますか?
ShellWindowsコレクションオブジェクトを使えばOKです。
とりあえず、VBScriptであればこんな感じで。
'--- VBScript ---
For Each IEApp In CreateObject("Shell.Application").Windows()
IEApp.Quit
Next
> これはできませんでした。
VBScripで「 As Object」は使えませんよ。(^^;)
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台だけ、上記のエラーが表示されます。
どなたか原因、対処法の分かる方、いらっしゃったら返答お願いします。
よろしくお願いします。
こんばんは。
以下の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.
わがまま言いましてすみません。
こんばんは、うららと申します。
お知恵を拝借したく、書込みさせていただきました。
スクリプトから特定の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でもかまいません。
どなたか宜しくお願いいたします。
久しぶりにお知恵をお借りしたく、失礼いたします。
ダウンロードあるいは観覧しようとするサーバーから現地時刻を取得したい
思っています。JScriptで'Timefmt'を使った例を見かけたのですが、内容が
理解できませんでした。VBScriptでの取得法を享受願えないでしょうか。
こちらの環境は次のとおりです
・Mozilla Firebird + Win98SE
・Win95の'Shell32.dll'と'explorer.exe'を使用中
・WSH5.6 + BASP21
IE取っちゃったんで'Shell.Application'が100%使えません(^^;
変な環境で申し訳ないですが、よろしくお願いいたします。
IEレスのWin98SEで
起動中のIEを捕まえて、終了することはできますか?
Dim IEApp As Object
Set IEApp = GetObject("", "InternetExplorer.Application")
IEApp.Quit
これはできませんでした。
複数起動されている場合もあるかと思い、コレクションで
取得できればと考えたのですが、いきずまってしまいました。
タスクマネージャでアプリケーションのCPU使用率がわかりますよね
あれをWSHで参照しようと思ったらどうしたらいいですか?
CPU使用率が高い間はスクリプトをSleepしておいて
低くなったらスクリプトを再開という挙動をとりたいのです。
というのも、ページの読み込み中はスクリプトを動作させたくないという思いから。
アプリケーションが立ち上がり終わったことの確認、
アプリケーションに送った命令を完全に処理しきったことの確認
などをCPU使用率から判断しようと思うのですが可能ですか?
どうかよろしくお願いします。
今、相当悩んでます。
SEED さん,
むたぐちさんの
Lesson10 ショートカットの作成
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/refer/lesson10.htm
が参考になるでしょう。
kana さん,
ページの頭に説明書きがされていますが掲示板記事検索プログラムをつかうと大変べんりですのでご検討ください。
検索というから何となく grep のようなものかと想像しますが,検索機能も備えた掲示板の閲覧ソフトウェアです。記事に埋め込まれた情報からリンクが構成されるので,記事間の見通しがたいへんよくなります。
ショートカットのリンク先を変更する方法を教えて下さい。
>魔界の仮面弁士 さま
回答ありがとうございます。
丁寧な説明、とてもわかりやすかったです!
>1E8は、1.0×10の8乗を表していますので
1E8とは指数表現であらわした数なんですね。
Right関数とCStr関数のところでは何をやってるかわかっていたのですが
指数表現の意味がわからなくて、
16進数かな?と思ったのですが足し算すると変な数になるし。。。
うーん、「1E8」ってなんだろうと思っていたのです。
今回の件、大変勉強になりました。
自分のスクリプトに活かそうと思います。
ありがとうございました。<(_ _)>
》 はた坊 さん 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桁の値が返されても構わないのなら、このような処理は不要です)
>いりや さん
ご回答有難うございます。土屋さんの例題で出来ました。
また詳しい情報の指摘も有難うございます。
過去記事も読んだのですがWSHはじめたばかりで詳しいコメントも出来ませんがどうも。新しい概念がたくさん出てきてついていけませんが、とりあえずソースのコピペで利用させていただきます。