新米MCP さん 2006年 06月 01日 20時 43分 08秒

>管理人むたぐち さん 2006年 06月 01日 18時 24分 10秒

さっそく拝読しました。
ところどころギャグが入ってるのもステキです。
第2回も楽しみにしてます。頑張ってください〜。

管理人むたぐち さん 2006年 06月 01日 18時 54分 15秒

To: やまださん

kernel32.dllのバージョンも5.0.2191.1で同じですね。

WMIのWin32_OperatingSystemクラスのCaptionプロパティを使えばよいと思います。

詳しくはこちら
http://www.microsoft.com/japan/msdn/columns/scripting/scripting08132002.asp

管理人むたぐち さん 2006年 06月 01日 18時 24分 10秒
URL:http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh01/cformwsh01_01.html

チェック式 WSH入門
―― 演習方式で身につけるWSH超入門 ――
第1回 WSHを始めよう
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh01/cformwsh01_01.html

このたび@ITで、WSHの初心者向け連載を持つことになりました。
ここの皆さんにはレベルが低すぎるかもしれませんが、2006年度の
最新スクリプト事情をそれなりに踏まえているので、よかったら
ごらんいただければと思います。

やまだ さん 2006年 06月 01日 11時 09分 54秒

VBScriptでOSの種類を取得しようとしています。

始めはWSHのRegReadメソッドで、レジストリ
「HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion」
を取得し、判別する方法をとっていたのですが、
これだとWindows2000proとWindows2000Serverで同じ「5.0」という値が設定されている為判別できませんでした。

何か他にいい方法はないでしょうか?
ご存知の方がいらっしゃいましたら知恵をお貸しください。

ばとー さん 2006年 05月 31日 15時 21分 20秒

>新米MCP さん 2006年 05月 27日 01時 25分 04秒
ありがとうございます。

もう少し、いろいろ自分で試してみます。
また質問するかもしれませんが、
よろしくお願いしまする

ありがとうございました。

しょういち さん 2006年 05月 30日 17時 01分 19秒

自己レスですが、

XMLHTTPは通信を主眼においてる様なので、
CGIで生成された「現在表示中の」htmlは読めないっぽいですね . . .

逆に、XMLHTTPを使えばCGIにpostするところから出来ますね。
なるほど、、、、しかし大変だ(笑)

しょういち さん 2006年 05月 30日 16時 09分 27秒

AKA さん

レスありがとうございます。

>うーむ・・・私にはわかりませんが、そのURLは書けないですか?
社内のイントラなので無理ですが(^_^;)、
フレーム内が動的に変わるページは駄目なようです。たとえばこことかです。

http://msdn.microsoft.com/library/ja/


>フレーム内HTMLのアドレスに対して試しにXMLHTTP使ってみるとか。
ほう、それは知らない方法ですね。
アドレスが動的に変わっても対応可能でしょうか?、、、
調べてみます。
ありがとうございます。

itcertpass さん (itcertpass-jp@hotmail.com) 2006年 05月 29日 13時 42分 59秒
URL:http://www.itcertpass.com

はじめまして、突然の書き込み失礼致します。
当社は資格認定業務をやってます。
春になったら資格を取ると思う方がたくさんいた。
でも、なかなか取れないですね、どうすればいいかな?
このホームページを見たら分かる。
http://www.itcertpass.com
お問合せ:Email/MSN:itcertpass@hotmail.com

ちゃっぴ さん 2006年 05月 29日 01時 49分 18秒

To ces さん 2006年 05月 28日 20時 25分 44秒

> QueryPerformanceCounter(),QueryPerformanceFrequency()
> を使ってやってみたいのですが

これは、Win32API で CPU の周波数によって現在経過した時間を取得するものですね。
# そのまま、PerformanceCounter が返ってくるわけでないので要注意

ちなみに、Win32API は WSH から直接呼び出せないので注意が必要です。
# それこそ、AKA さん の DW の出番となるんでしょうが・・・

とりあえず、私も

> 別々の計測でなかなか同じになることは難しいんじゃないでしょうか。タイミングが違えば正反対の結果になるのが当たり前の世界ですから・・・

そう思っていますので。

MS の premire support に perfomance 関連の support を依頼しても、performance counter を取得して送ってくれというので、これで問題になることこそそれこそ少ないと思いますが・・・

ces さん 2006年 05月 28日 20時 25分 44秒

>AKA さん 2006年 05月 28日 11時 53分 05秒

AKAさん、返信ありがとうございます。

QueryPerformanceCounter(),QueryPerformanceFrequency()
を使ってやってみたいのですが
ちょっと使い方がわかりませんでした・・・。

使ってる言語を書いていませんでした。すみません。
VBScriptの方になります。
Webで検索をするといくつか出てくるんですが
そのサンプルをVBScriptで実行するとなぜか
エラーが出てしまって実行できませんでした。
(VBScript自体は今回の為に少し勉強してる程度しか
なくて何が問題なのかちょっと分からない状況です)

もし使い方をご存知でしたら
よろしければ簡単な例でも教えて頂けませんでしょうか。
よろしくお願いします

http://www.adras.com/QueryPerformanceCounter.t2935-52.html
http://www.happy2-island.com/excelsmile/smile04/capter00305.shtml

新米MCP さん 2006年 05月 28日 17時 04分 53秒

>ひろ さん 2006年 05月 28日 16時 00分 38秒

Windows Script 5.6のドキュメント
http://download.microsoft.com/download/winscript56/Install/5.6/W98NT42KMe/JA/scd56jp.exe

Runメソッドの解説に、非表示での実行方法が明記されています。

ひろ さん 2006年 05月 28日 16時 00分 38秒

wgetコマンドを利用してWeb画面をダウンロードする処理を考えている最中です。
下記のスクリプトを動かすと、ダウンロードはできるのですが、DOS窓が開いてしまいます。DOS窓を開かずに処理を完了する方法はあるのでしょうか?


set ws = CreateObject("WScript.Shell")
ws.Run "wget -O TEST-1.htm http://www.yahoo.co.jp/"

AKA さん 2006年 05月 28日 11時 53分 05秒

>>ces さん 2006年 05月 28日 01時 07分 51秒

別々の計測でなかなか同じになることは難しいんじゃないでしょうか。タイミングが違えば正反対の結果になるのが当たり前の世界ですから・・・

QueryPerformanceCounter()
QueryPerformanceFrequency()

多分この関数を使うんじゃないかとは思いますが・・・

AKA さん 2006年 05月 28日 10時 40分 31秒

あ、しまった・・・

新CreateObject.exeのアドレスは
http://winscript.s41.xrea.com/upload/source/No_0002.lzh
でした。古い方を書いてしまった・・・

後、「htmlfileでクリップボード」のコードは
g_dw.OleInitialize C_NULL
より前に
Const C_NULL = 0
を入れてください。入れなくても動きはするでしょうが・・・

ces さん 2006年 05月 28日 01時 07分 51秒

PCのタスクマネージャーのパフォーマンスで表示される
CPU使用率のや物理メモリやカーネルメモリの取得を
行いたいと思って色々試してます

現在はPCの稼働率を取得したいと思ってるんですけど
最初にWin32_ProcessorのLoadPercentageを
取得して表示してみたところ
タスクマネージャーと比較しながら見てたら
微妙に値が違う気がしてたので

色々調べてたら以下のサイトに
こんな内容が書かれてたので

■1
http://www.microsoft.com/japan/technet/scriptcenter/resources/wmifaq.mspx#ERPAC
■2
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/example__obtaining_raw_performance_data.asp

1の方法だとXPにしか対応してないという事なので
2の方法で試してみたんですが、
微妙にまだタスクマネージャーと違うのですが
これは仕方ないのでしょうか。
(勘違いかもしれませんが
感覚としてはこのCPUの使用率を取得してる
プログラムの負荷分が加算されていないような
感じなのですが・・・)

何か別の方法がありましたら教えて頂けませんでしょうか。

よろしくお願いします

かんぽり さん 2006年 05月 27日 09時 06分 29秒

>新米MCPさん
ファイル名まで指定したら正常に動作しました。
ありがとうございました。

AKA さん 2006年 05月 27日 07時 01分 48秒

>>しょういち さん 2006年 05月 26日 18時 35分 06秒

うーむ・・・私にはわかりませんが、そのURLは書けないですか?

フレーム内HTMLのアドレスに対して試しにXMLHTTP使ってみるとか。

ゴミレス申し訳無い。

AKA さん 2006年 05月 27日 06時 07分 11秒

htmlfileでクリップボードを使うという、ばんのしゃーによかばんたさんの記事

>>list102.htm
>ばんのしゃーによかばんた さん 2004年 04月 02日 18時 55分 39秒
>SetDataはWScript/CScriptが死にます。

>>list103.htm
>ばんのしゃーによかばんた さん 2004年 04月 25日 18時 21分 41秒
>訂正です。
>>Set Document=GetObject(WScript.FullName,"htmlfile")
>このままだとWScript/CScriptが死にます。

これって、はっきり書いていないんですけど、list102の方でWScriptが死んでいたのは、SetDataしたからではなく、WScript.FullNameしていたからなんですよね?

私が試した所、

GetObject(WScript.FullName, "htmlfile")

した場合、

Win98 + IE5.5: getData/setData共に落ちる。
Win2000 + IE6.0: getData/setData共に落ちない。

という結果になりました。

さらに、

Set doc = GetObject("?", "htmlfile")
doc.parentWindow.clipboardData.setData "Text", "ABC"

このようなコードを実行してみると、

Win98 + IE5.5: クリップボードがクリアされる。
Win2000 + IE6.0: 何も起きない。

という結果です。もちろんセキュリティ設定は'貼り付け許可'です。


で、何でhtmlfileだとsetDataがクリアになったり何も起きなかったりするのか?

これはOLE初期化法が原因です。

WSHはOLE初期化にCoInitialize()を使っていますが、OLEのクリップボードデータ処理APIを使うためにはOleInitialize()をしなければなりません。そうでないとクリップボードは正常には使えません。
IEを起動すると、IEのプロセス空間内ではOleInitialize()されるので、HTML内のスクリプトや、IEオブジェクトを使った場合は大丈夫です。
これは、WSHがCoInitialize()でなくOleInitialize()すべきなのだとは思いますが、はっきりWSHのバグとまで言えるかどうかは微妙です。

で、DWを使ってみます。

Set g_dw = CreateObject("DynamicWrapper")
g_dw.Register "OLE32", "OleInitialize", "i=l", "r=l"
g_dw.Register "OLE32", "OleUninitialize", "r=l"
g_dw.OleInitialize C_NULL

Set doc = GetObject("?", "htmlfile")
doc.parentWindow.clipboardData.setData "Text", "ABC"
set doc = Nothing

g_dw.OleUninitialize

これでhtmlfileでクリップボードにデータをセットできるようになりました。

上のコードで一つ注意があります。

Set doc = Nothing

は、必ず最後のg_dw.OleUninitializeより先に実行する必要があります。そうでないとクリップボードにデータがセットされません。(ただしOleUninitializeしないのであれば必要ありません)


前回投稿したCreateObject.exeですが、バグがありました。なので修正しました。

http://winscript.s41.xrea.com/upload/source/No_0001.lzh

新米MCP さん 2006年 05月 27日 01時 25分 04秒

>ばとー さん 2006年 05月 25日 17時 44分 28秒

私はそのサイトのURLもHTMLもわかりませんし、
あなたの書いたスクリプトも見ていませんので、
ご自身で原因を特定していただけなくては何もできません。
スクリプト内の変数やプロパティの内容を順に表示させて確認しましょう。

>かんぽり さん 2006年 05月 26日 19時 29分 57秒

ファイルのコピー先のパスは、ファイル名まで指定してあげてください。

かんぽり さん 2006年 05月 26日 19時 29分 57秒

ドラッグアンドドロップしたファイルをスタートアップに登録できるプログラムを作っているのですが、エラーが出て困っています。

Dim NamePath
Dim FilePath
Set WSHA = WScript.Arguments
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set WSHS = WScript.CreateObject("WScript.Shell")
FilePath = WSHA(0)
NamePath = WSHS.SpecialFolders("Startup")
FSO.CopyFile FilePath, NamePath

最後の行でエラーコード[800A0046]が出てきて書き込みができません。
アクセス権の問題だということまでは調べたのでAdministratorでも実行してみたのですが、それでも同じエラーが出てしまいました。
このエラーには、どのように対処すればよいのでしょうか?

しょういち さん 2006年 05月 26日 18時 59分 07秒

書き忘れました . . .
環境はwindows xp / IE6.0 です。

しょういち さん 2006年 05月 26日 18時 35分 06秒

VBSで、起動中のIEのソースを取得するプログラムを作っています。

CreateObject("Shell.Application").Windows
これでウィンドウのコレクションを取得し、その中から、

if TypeName(objWindow.document) = "HTMLDocument" then
とかすれば、目的のウィンドウを絞り込めますよね。

そして、目的のhtmlは、サブフレームの中にあるので、
objWindow.document.frames("subFrameA").document.all
とフレームの名前を指定してやれば、htmlが取得できました。

しかし、ここで問題発生です。
CGIでフレームのURLが切り替わるページなので、postメソッドなどで表示が更新された状態にしてあります。この状態ならCGIが吐き出した後の(フレームが切り替わった)htmlが取得できる筈です。

しかし、取得出来たhtmlは、ページの初期状態のものでした . . .
サブフレームのURLが初期表示のURLになっています。

どうやら、frames("subFrameA") の時に、ページの読み込みなおしが行われているようです。
初期表示ではなく、現在表示中のhtmlを取得する方法は無いでしょうか?
よろしくお願いします。

(ちなみに、フレームを使用してないページだと、この問題は発生してません)

ばとー さん 2006年 05月 25日 17時 44分 28秒

>新米MCP さん 2006年 05月 22日 22時 57分 24秒
ありがとうございます。
遅くなりすみません。

>値が取得できるのであれば、ちゃんと入力されたか確認してダメなら再試行、というのも…。
>所詮はSendKeysですし、数回で諦めさせるようにしておかないと、ループになっちゃいますけどね。
そうですよね・・でも値が取得できないんです・・・んーー。

objWindow.Document.frmIn.UPFILE.value
とやると、"サポートされてません。"とエラーが表示されます。
JavaScriptでかかれているようですが、あまり詳しくないんですが、
フォーム名が"frmIn"とかかれているのでフレームか!?と思いつつ、
でも <frameset><frame> のタグはないんです。

objWindow.document.getElementsByTagName("INPUT")(i)
で取得しようとしても
objWindow.document.getElementsByTagName("INPUT").Length = 0
なので、"オブジェクトはありません"と表示されます。


>とやって、URLが違うところになっていないか確認してみてください。
一応、"Shell.Application"でIEかどうか調べて、IEだったら次に
目的のページの URL かチェックしてから処理するようにしているんです。
URL はあってるような気がします。


>目的のページに既にスクリプトが置いてあって、内容が書き換えられているとか、
>という可能性はないでしょうか。
これは、URLは同じだけど中身が違うということでしょうか?
そうだとしたら、いまIEで表示されているものと、表示されているものの、
ソースが違うってことですか?

NAR960 さん 2006年 05月 24日 20時 57分 43秒

新米MCPさま
ありがとうございます。
試してみます。

新米MCP さん 2006年 05月 24日 20時 07分 40秒

>NAR960 さん 2006年 05月 24日 16時 53分 56秒

ハイパーターミナルというアプリケーションそのものを操作する方法はわかりませんが、
BASP21をインストールすれば同等のことはできるようです。

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

試したことがないので、参考になるかどうかはわかりませんが。

NAR960 さん 2006年 05月 24日 16時 53分 56秒

ハイパーターミナルの制御も行うことができますか
テキストファイル転送をバッチファイルのように行いたいのですが
どなたかご存じないですか?

bgr さん 2006年 05月 23日 19時 56分 30秒

新米MCPさん
なるほど、非常に参考になりました。ありがとうございます。
またご質問させていただくかもしれませんが、よろしくお願いいたします。

新米MCP さん 2006年 05月 22日 23時 07分 00秒

すいません、さっきの投稿ですが、 &lt; は < に置き換えて読んでください。
余計なことしちゃった(汗

新米MCP さん 2006年 05月 22日 23時 04分 23秒

>bgr さん 2006年 05月 22日 22時 00分 38秒

先にHTMLを用意しておくのであれば、HTMLの書き換えたい部分に何かのタグをIDつきで書き込んでおき、
その部分を書き換えてやるという方法はどうでしょうか。
テキストだけを書き換えたいときはInnerText、タグごと書き換えたいときはInnerHTMLを使います。

具体的には、書き換えたい場所に

&lt;span id="testtag">&lt;/span>

とタグを入れておき、

testtag.InnerText = "HELLO WORLD!"

とやればテキストだけが置き換わりますし、

testtag.InnerHTML = "&lt;u>HELLO WORLD!&lt;/u>"

とやれば下線付きのテキストを書き込むことができます。
一部分だけ書き換えたいときは、こちらの方法が便利ですよ。

新米MCP さん 2006年 05月 22日 22時 57分 24秒

>ばとー さん 2006年 05月 22日 17時 41分 46秒

>ほとんどうまくいきますが、やはりたまに上手くいかないことが・・・

ファイルパスのような長めの文字列を入力させると、途中までしか入らないことがありますよね。
値が取得できるのであれば、ちゃんと入力されたか確認してダメなら再試行、というのも…。
所詮はSendKeysですし、数回で諦めさせるようにしておかないと、ループになっちゃいますけどね。

操作がうまくいかない方は何でしょうね…。
objWindowがうまく取得されていないのであれば、objWindow.LocationURLでURLがわかるので

WScript.Echo objWindow.LocationURL

とやって、URLが違うところになっていないか確認してみてください。
別のURLが開いているのなら、それでわかるはずです。

あとは、その目的のサイトに目立たないフレームが使われているとか、
meta http-equiv="Refresh"などで別ページに飛ばされてタイミングによってURLが違うとか、
目的のページに既にスクリプトが置いてあって、内容が書き換えられているとか、
という可能性はないでしょうか。

それから、スクリプトのイベントを呼び出すようになっているタグ
要するにOnClickとかが指定されているタグですが、
これはDocument.all.tagsで取得できないそうです。

bgr さん 2006年 05月 22日 22時 00分 38秒

新米MCP さん、
 ありがとうございます。

>どうせならHTMLのファイルをVBSから作成して、それを開くようにすれば楽なんじゃないでしょうか。
そうも考えたのですが、固定部位も多いので、常にすべて書き出すのもどうかと思い、既にあるHTMLファイルを使って、必要な部位のみ補う形にしたいと考えています。

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True 
objIE.Navigate "filename.html"
objIE.document.frm.AAA.Value = strAAA
objIE.document.frm.BBB.Value = strBBB

という具合に、名前のついたフィールドにvalueとしてセットしていく方法はわかったのですが、これに追加でHTMLタグを書きたくて、
objIE.document.Write "<B>AAAA</B>"
とすると、そのwriteした行のみになってしまいます。

追記するにはどうしたらよいのでしょうか?
引き続き申し訳ありませんが、よろしくお願いいたします。

ばとー さん 2006年 05月 22日 17時 41分 46秒

>新米MCP さん 2006年 05月 20日 14時 33分 14秒
ありがとうございます。
なかなか簡単にはいかないですね

>確実性を求めて作成したスクリプトで動作の安定しないSendKeysを使用するのでは本末転倒ですね。
新米MCPさんのいわれるとおりSendKeyでやると、本末転倒になりますが
どういう感じになるのか確認したいので、試しにやってみました。
ほとんどうまくいきますが、やはりたまに上手くいかないことが・・・

>ファイルの選択があっても、他の項目は操作できます。
>あくまでもファイルの選択のみの制限のようです。
他の項目が操作が上手くいかないので
いろいろ調べていくと、

WScript.Echo objWindow.document.getElementsByTagName("INPUT").Length
とすると、件数が 0 になってしまいます。

WScript.Echo objIE.document.Title
とすると、<TITLE> 〜 </TITLE>のタグの部分が表示されると思います。
しかし、表示されたものは "AAA"
ソースの<TITLE> 〜 </TITLE> の部分は "BBB"
となっています。
そこで、ソースを表示しようと思い、
WScript.Echo objWindow.Document.all.tags("HTML")(0).innerHtml
としてみました。
すると、VBScriptから表示したソースと、
IEの[ソースを表示]で表示したソースが、
異なっているんです。
これは、どういうことなんでしょうか?

他のIEが隠れて起動していて、そっちを見ているのかなとも思いましたが、
SendKeyは上手くいくんです。


またまたわかりにくい説明ですみません。
よろしくお願いします。




ぶっつ さん 2006年 05月 22日 17時 36分 07秒

>新米MCPさん

ありがとうございます。
やはり、その手しかないですよね。
そうします。

新米MCP さん 2006年 05月 21日 15時 48分 23秒

>bgr さん 2006年 05月 21日 00時 09分 47秒


>ゼロからタグをすべて書くのではなく、すでに存在しているHTMLファイルをopenして、そこに追加で
>タグを記述してをそれを開く、というようなことはできないでしょうか?

できます。
Ie.Navigate "about:blank"
でわざわざ空白ページを開いているわけですから、
ここで任意のHTMLファイルを開いてやればいいのです。

WScript.SleepやIEのbusyプロパティなどを使って、
HTMLが開くのを少し待ってやらなきゃいけませんが。

>もしくは、HTMLの一部をすでにある別のファイルをインクルードさせるようなことはできないのでしょうか?

ファイルシステムオブジェクトなどを使用してテキストとして読み込み、
それを書き出してやればよいと思います。

>改行コードが含まれないせいか、そのスクリプトの部分は機能しません。

改行コードは
"文字列" & vbCrLf
という感じで追加してやれば、任意の場所に入れられます。
それでスクリプトが動くかどうかまでは試したことがないですが。


どうせならHTMLのファイルをVBSから作成して、それを開くようにすれば楽なんじゃないでしょうか。

bgr さん 2006年 05月 21日 00時 09分 47秒

vbsからHTMLを内部的に生成し、ページを表示させるプログラムを考えています。
Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")
Ie.Navigate "about:blank"
としてから
document.Write "<html>"
document.Write "<head>"
 ・
 ・
としてHTMLタグを発行して行こうと思っています。

1.ゼロからタグをすべて書くのではなく、すでに存在しているHTMLファイルをopenして、そこに追加でタグを記述してをそれを開く、というようなことはできないでしょうか?
 もしくは、HTMLの一部をすでにある別のファイルをインクルードさせるようなことはできないのでしょうか?

2.生成するHTMLの中にJavaScriptのタグを書きたいと思っています。このとき、単純に
document.Write "<script language='vbscript' id='clientEventHandlersJS'>"
document.Write "<!-- "
document.Write "Sub Button1_onclick "
 ・
 ・
としていくと、改行コードが含まれないせいか、そのスクリプトの部分は機能しません。何らかの解決策はないでしょうか?
 また、
document.Write "<html>"
document.Write "<head>"
としているところも、出力のソースを見ると当然改行コードが入りません。入れるためにはどう記述すればよいのでしょうか?

よろしくお願いいたします。

まさ さん 2006年 05月 20日 16時 43分 46秒

新米MCPさん ありがとうございます。

正常にWindowsの終了ができました。

まさ さん 2006年 05月 20日 16時 43分 33秒

新米MCPさん ありがとうございます。

正常にWindowsの終了ができました。

新米MCP さん 2006年 05月 20日 14時 33分 14秒

>ばとー さん 2006年 05月 20日 08時 32分 20秒

>フォームのファイル選択は値の参照も出来ないんでしょうか?

参照はHTAでやったことがありますが、可能でした。
ですから、選択内容が正しいかどうかチェックするようなスクリプトは可能です。
でも悪用できそうな機能なので、IEのセキュリティ設定が厳しいと
もしかすると止められるかもしれないですね。

>ファイル選択があると他のものも操作出来ないんでしょうか?

ファイルの選択があっても、他の項目は操作できます。
あくまでもファイルの選択のみの制限のようです。

>まさ さん 2006年 05月 20日 04時 24分 43秒

こちらのテクニック集にあるWindowsの終了は、Windows9x系用ですね。
WindowsXPではコマンドでshutdown.exeというのが用意されているのでそれを使用するか、
以下のURLのような方法があります。

http://www.microsoft.com/japan/technet/scriptcenter/scripts/desktop/state/dmstvb08.mspx

ばとー さん 2006年 05月 20日 08時 32分 20秒

>新米MCP さん 2006年 05月 19日 23時 07分 52秒

ありがとうございます。

そうなんですか・・・ここ2・3日悩んでたんですが、だめなんですね。
残念残念です。

参考までに聞かせてください。
1.フォームのファイル選択は値の参照も出来ないんでしょうか?
2.フォームの中に、ボタンとかもあるんですが、ファイル選択があると
  他のものも操作出来ないんでしょうか?

よろしくお願いします。

AKA さん 2006年 05月 20日 06時 01分 42秒

CreateObject.exe

http://winscript.s41.xrea.com/upload/source/No_0001.lzh

これはかなり特殊なプログラムです。探してもこういうものはあまり見当たらないかもしれません。

このプログラムは、スクリプトからWshShell.Run等で実行すると、そのスクリプト内に任意のオブジェクトを生成することができます。オブジェクトの指定はProgIDではなくファイル指定なので、登録していないコンポーネントからオブジェクトを生成することができます。(どういうこと?と思うかもしれませんが、使ってみればわかります)
このプログラムを使えば何も追加登録していない標準状態のコンピュータで未登録のオブジェクトを好き放題に使うことが可能になります。
すなわち、全く何も登録せずにDWを使うことが可能になるわけです。なお、9xでは動作しません。


TLBDUMPの使い方ですが、以前からある質問で、CreateObject()できるオブジェクトってどうやってわかるのか、というのがありますよね。
もちろんレジストリに登録されていればわかりますが、TLBDUMPでCoClassのフラグを表示させると、CANCREATEというのが付いているものがあります。絶対ではないですが、これが一つの目安になるでしょう。

で、CANCREATEがあってもレジストリに登録がなければCreateObject()はできません。
そこでちょっと前に投稿したUCOBJの出番になります。これを使うと好きなCoClassをDLLに直接命令して作成することができます。

CANCREATEがあってもオブジェクトが作成できるとは限らないですが、これでやってみると、思わぬオブジェクトが作成できるかも。
あと、UCOBJではCLSIDも指定可能なので、タイプライブラリにCoClass名が登録されていないオブジェクトも作成を命令することができます。まああてずっぽうなCLSIDではなかなか隠しオブジェクトに当たるのは難しいと思いますが・・・


そういえば最近、ウィルス所持禁止法、というのが成立したとか。

これはまあ、例によって、と言うか、ウィルスの定義は書いてないんだそうです。

単に、ホームページを開かずに投稿したり、アカウントのアクセス権を変更したりするだけでも言い様によってはウィルスだと言われかねないような・・・

特に問題なのは頒布しなくても所持だけで有罪ってとこですよね・・・ ちょっと作るだけ作った、とかでもすでに有罪。うかつにUPなどできないですね・・・

技術的な興味でちょっと変わった事をやると逮捕されてしまうのかも。誰か第三者がソフトを使って大手企業や官公庁が嫌がるような事をやったら作者は間違いなくコレで逮捕だろうな・・・
フリーソフトの作者が何人も逮捕されている状況と言い、日本での個性的なソフト開発の未来は暗いですな・・・


あと、訂正。
前々回の書き込み(list155)の
          Save docx, title & "_" & i

          SaveDoc docx, title & "_" & i
でした。


>>管理人さん

今回から新ローダを使わせていただきます。

私のためだけではないとは思いますが、私がたくさん使ってしまっているので代表してお礼を述べさせていただきます。旧ローダ、新ローダ、ともにどうもありがとうございます。m(_ _)m

うーむ・・・なぜか削除できん・・・

まさ さん 2006年 05月 20日 04時 24分 43秒

WSHを使ってWINxp終了をしたいのですが、テクニック集のソースがXPでは動きません。

初歩的な事で申し訳ありません、対処方法を教えて頂けますでしょうか?。

OSはWindows XP Home sp2 です。

新米MCP さん 2006年 05月 19日 23時 07分 52秒

>ばとー さん 2006年 05月 19日 15時 53分 19秒

フォームでのファイルの選択は、スクリプトなどで値を設定することができません。
参考:http://www.tohoho-web.com/html/input.htm

これはセキュリティ上の理由でそうなっているので、
仮に制限を回避できたら、それは脆弱性ということになってしまいます。
たとえばHTAなどでも、ファイルの選択は値を設定することができないようになっています。

例外として制約を受けないSendKeysという方法もあるにはありますが、
確実性を求めて作成したスクリプトで動作の安定しないSendKeysを使用するのでは本末転倒ですね。
残念ながら、その部分は手作業ということになると思います。

ばとー さん 2006年 05月 19日 15時 53分 19秒

よろしくお願いします。

取引先のサイトに、CSVのファイルをアップ/ダウンロードしたいんです。
手動でするとミスもあるので、自動的にしようと思いVBSで作っています。

ID/PASSWORDを入力して、メニューからボタンをクリックして・・・
というとこまではできました。
最後に、送信するファイルをフルパスで指定して、
送信ボタンをクリックするだけなんです。
ファイルを指定するところがうまくいきません。

[INPUT TYPE=FILE] の場合は、指定出来ないんでしょうか?
もしも出来ないのなら、他に方法はあるでしょうか?

VBSは始めたばかりで、修行中の身です。
説明が下手でわかりにくいかと思いますが
よろしくお願いします。




新米MCP さん 2006年 05月 19日 00時 52分 35秒

>ともこ さん 2006年 05月 18日 12時 42分 53秒

secedit /configure
を既に使用されているのであれば、設定できたかどうかはログファイルに出ていませんか?
ログファイルはUNICODEのテキストなので、ファイルシステムオブジェクトで読むときは
UNICODEを読めるようオプションをつけてくださいね。

secedit /analyze
とすれば、作成したSDBの中身を見ることもできます。

>百式 さん 2006年 05月 18日 18時 14分 11秒

色々なことができる分、複雑になってしまう部分はあるかもしれないですね。
単純な命令を出すだけのときは、コマンドにやらせた方がいいこともあるでしょう。
そこはまあ適材適所ってことで。

百式 さん 2006年 05月 18日 18時 14分 11秒

>新米MCP さん 2006年 05月 17日 23時 35分 22秒
ありがとうございます。別の仕事をしなくてはならなくなったので、
すぐに試せないのが残念ですが、ありがとうございます。

思ったより簡単にできるんですね。
*.bat や *.sh ほど簡単じゃないのに軽くショックでしたけど…


管理人むたぐち さん 2006年 05月 18日 18時 04分 07秒

Amazon.co.jp:Ajax、Railsから自作言語まで スクリプト言語まるごとブック日経BPパソコンベストムック: 本
http://www.amazon.co.jp/exec/obidos/ASIN/4822228363/249-6266634-9209160

こんな本(ムック)が出ています。ここ2〜3年の間日経ソフトウェアに載ったスクリプト関係の記事がまとめられています。WSH、HTAの記事もあります。GUIDを取得したりRSSリーダーを作ったりと結構マニアックなトピックもあるのでいいですね。ほかのスクリプト言語についてもまとまっているので2006年現在のスクリプト情勢を概観するという意味でもおすすめです。

ともこ さん 2006年 05月 18日 12時 42分 53秒

>新米さん
ありがとうございます。設定は、iniファイルを使い seceditからやっています。

ただ、設定後、手で確認するのが面倒ですから、スクリプトで、txtかなにかに落として、一度に確認したく思っています。
vbsではできないのでしょうか。

新米MCP さん 2006年 05月 17日 23時 35分 22秒

>ぶっつ さん 2006年 05月 17日 16時 27分 54秒

コマンドを使った方が良いような…。
ユーザーの登録はnetコマンドで

net user ユーザー名 パスワード /add

アクセス権の設定はcaclsコマンドで設定できます。

cacls /?

でヘルプが見られます。難しくないですよ。
どちらもexeですから、スクリプトからRunで普通に起動できますし。


>ともこ さん 2006年 05月 17日 18時 06分 06秒

パスワードのポリシーは、iniファイルを作っておいて、
seceditコマンドで設定できます。
これもexeですから、スクリプトからRunで普通に起動できます。

作りかけのサイトで申し訳ないですが、説明すると長くなるのでURLを見てください。
http://wscript.name/index.php?secedit


>百式 さん 2006年 05月 17日 19時 20分 42秒

標準出力を取得したいときは、RunではなくExecを使用します。
以下のような使い方をします。


Set WshShell = CreateObject("WScript.Shell")
Set objExec = WshShell.Exec("cmd.exe /c set")

strStdOut = objExec.StdOut.ReadAll
WScript.Echo strStdOut


objExec.StdOutはテキストストリームなので、
Do Until objExec.StdOut.AtEndOfStream
     strLine = objExec.StdOut.ReadLine
     WScript.Echo strLine
Loop


というように1行ずつ読んだりもできます。

百式 さん 2006年 05月 17日 19時 20分 42秒

はじめまして。

いつもこちらのサイトを参考にさせてもらっています。
アプリケーションの実行でわからない箇所があるので、ご存知の方が
いましたら教えて下さい。

Runを使用してあるプログラム(仮にhoge.exeとします)を実行したのですが
このhoge.exeの標準出力をファイルにリダイレクトできるのですか?

MS-DOSでやれば
C:\hoge.exe > hoge.txt

になります。

ともこ さん 2006年 05月 17日 18時 06分 06秒

wshを使って、ローカルグループポリシーの中のパスワードポリシーで設定している値を表示したく考えています。
どなたかお知恵をお貸しください。
また、パスワードポリシーで設定している値は、レジストリでいえばどこになるのでしょうか?最悪レジストリで表示してもいいかなと思っています。

Return