わさ さん 2003年 12月 16日 09時 39分 24秒

To:魔界の仮面弁士 さん
ありがとうございます。
RegisterAsDropTargetについて調べてみます。

> もしかしたらVBScriptからだと、Canelの指定は行えないのかも知れません。
そうですか、なんかさびしいですね。

魔界の仮面弁士 さん 2003年 12月 15日 23時 17分 49秒

》 owl さん
> (Javaは苦手なもので。)
いりやさんの提示されたコードは、Javaではなく、JScriptですよ。(^^;
名前は似ていますが、JavaとJavaScriptとJScriptは別物です。

# JavaScript≒JScript≠Java、という感じかな?


> とりあえず、以下のようにしたらできました。
(中略)
> IF InStr(pDict.Item(i), "txt") > 0 Then

これですと、
  "C:\sample01.txt" …正しく取得される。
  "C:\filename.TXT" …拡張子が大文字のため、取得されない。
  "C:\txtFile.dat" …拡張子はdatだが、取得されてしまう。
という結果になってしまいそうですね。

とりあえず、こんな感じで如何でしょうか。

Option Explicit

Const FolderPath = "C:\"

Dim Dict
Dim Title
Dim FSO, File

Set Dict = WScript.CreateObject("Scripting.Dictionary")
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Title = FSO.BuildPath(FolderPath, "*.txt")
For Each File In FSO.GetFolder(FolderPath).Files
'GetExtensionNameメソッドで、ファイルの拡張子を調べ、
'それをLCase関数で小文字化してから、比較しています。
'(条件が複雑になる場合は、RegExpオブジェクトを使うと便利です)
If LCase(FSO.GetExtensionName(File.Path)) = "txt" Then
Dict(File.Path) = True
End If
Next
Set FSO = Nothing

MsgBox Join(Dict.Keys(), vbCrLf), vbInformation, Title

Set Dict = Nothing


# 上記では、C:\の直下にある*.txtだけを抽出しています。
# もし、サブフォルダの下にあるファイルまで探したい場合は、
# 各フォルダを再帰的に処理してみて下さい。

owl さん 2003年 12月 15日 20時 48分 07秒

いりや さん

回答ありがとうございます。
純粋にスクリプト(vbsファイル)として、簡単なファイル整理をしたかった
ので、できればVBScriptのコードを教示頂ければありがたかったのですが、
(Javaは苦手なもので。)

でも、参考になりました。ありがとうございます。

とりあえず、以下のようにしたらできました。
かなり不細工ですが・・・。

Dim pFSys, pDict
Dim pFldr, pFile, pKey
Dim i

Set pFSys = CreateObject("Scripting.FileSystemObject")
Set pDict = CreateObject("Scripting.Dictionary")
Set pFldr = pFSys.GetFolder("c:\")
Set pFile = pFldr.Files

i = 0
For Each pKey in pFile
pDict.Add i, pKey.Name
i = i + 1
Next

For i = 0 To pDict.Count - 1
IF InStr(pDict.Item(i), "txt") > 0 Then
MsgBox pDict.Item(i)
End IF
Next

はるか さん (p-top@104.net) 2003年 12月 15日 18時 46分 49秒

はじめてご質問させていただきます。
現在、下記のような動作をするようなVBScriptを作りたいと
考えておりますが、何分初心者ゆえ、これといった情報の
サイトを発見できずに困っております。
何卒皆様のお力をお貸しください。

 ・環境:Windows2000 Professional
 ・Windowを表示して、そこに入力したIPアドレスを
  PINGコマンドで実行させる。
 ・コマンドプロンプトを呼び出す際は、CMD.exeを
  Administrator権限で実行する。

Administrator権限での実行方法は、右クリックメニューの
【別のユーザーとして実行】メニューを利用して、ユーザー名と
PWを入力させて実行させようと考えております。

上記のVBScriptを作成したいのですが、参考になるような情報を
お教えいただけましたら幸いです。

以上、何卒宜しくお願い申し上げます。

魔界の仮面弁士 さん 2003年 12月 15日 14時 59分 20秒

》 わささん
> ショートカットをドラッグ&ドロップされると
この点は、RegisterAsDropTargetをFalseにする事で回避できます。


> BeforeNavigate2イベントのCancelにTrueを指定したのですが、
試してみました。なるほど、確かにキャンセルされませんね。
pDisp.Stop でも駄目なようですし。。。

InternetExplorerのインターフェイス定義を確認してみたところ、Cancel引数は、
「ByRef As Variant」ではなく、「ByRef As Boolean」として定義されていましたので、
もしかしたらVBScriptからだと、Canelの指定は行えないのかも知れません。

いりや さん 2003年 12月 15日 13時 38分 29秒

akinon さん、

| とりあえず、コンテキストメニューの表示は行っても、行わなくても構わないのですが、
| IE上で「対象をファイルに保存(A)...」を行い、リンク先のファイルをローカルディス
| クの特定のファイルとして保存するには、どのようにすればよいのでしょうか?

実際に保存しようと思っている対象によっていくつか方法があります。一つご紹介する
と、うららさんの以下のスクリプトでは、COM Object の Microsoft.XMLHTTP を使用し
て対象 URL のデータを取り込んでいます。

うららさん、CyberSyndrome Proxy List 取り込みスクリプト
http://www.geocities.co.jp/SiliconValley-PaloAlto/9030/

GetHttpStr コンストラクタで、Microsoft.XMLHTTP を使いやすいように text(), body
() メソッドを用意しています。実際に使用しているのは 184 行目、231 行目〜 238 行
目です。(Ver1.3a の場合)

いりや

わさ さん 2003年 12月 15日 12時 29分 32秒

InternetExplorer.Applicationを使ってVBSを使ったツールのGUIが作ったんですが、アドレスバーやリンクを消してもショートカットをドラッグ&ドロップされると他のページへ移動されてしまいます。
そこで、BeforeNavigate2イベントのCancelにTrueを指定したのですが、続けて他のページに移動されてしまいます。
そもそもイベントハンドラに渡された引数の値を変更する といった手法自体が私には不明なんです。
あっさり割り切って記事番号93-17のむたぐちさんの「他のページを見ようとすると、強制的に終了するスクリプト」を使うのが早道だとは思うのですが、入力項目が多いとそれもできません。
どなたか ご教授ねがえませんでしょうか。

akinon さん 2003年 12月 15日 11時 21分 54秒

初めて書き込みます。

どなたか、ご存知の方、お知恵をお借りできませんでしょうか?
IEの自動ナビゲーションをWSHで作成しようとしています。
特定のページに移動するところまでは何とかできたのですが(ここまでのサンプルはネット上で公開されているものも多いので)、このページからリンクの張られているファイルのダウンロード(右クリックして、「対象をファイルに保存(A)...」)を行いたいのですが、どのようにコーディングしたらよいのか分からないで困っています。
リンクにフォーカスを合わせて、コンテキストメニューを表示できれば、SendKeysで何とかなるかとも思ったのですが、そもそもコンテキストメニューを表示させる方法がわかりません。
とりあえず、コンテキストメニューの表示は行っても、行わなくても構わないのですが、IE上で「対象をファイルに保存(A)...」を行い、リンク先のファイルをローカルディスクの特定のファイルとして保存するには、どのようにすればよいのでしょうか?

よろしくお願いします。

感謝 さん 2003年 12月 15日 00時 06分 32秒

初めてWSHを知りました

最近、タスクバー右クリックで選択できる「ウィンドウの整列」を
アイコン化してクイック起動できる方法を探していたのですが、
ここを見て解決しました。
ありがとうございました。

スクリプトは???な私でしたが、非常にわかりやすく解説されてあって
理解しやすかったです。




いりや さん 2003年 12月 12日 22時 26分 51秒

owl さん、

こんばんは。いりやと申します。

| VBSでフォルダ内に存在するファイル名すべてを「*.txt」のように形式を指定
| して取得したいのですが、どのようにすれば良いでしょうか?

基本的な流れは、

(1) 当該 Folder オブジェクトを生成して、files プロパティーの値を使って格納され
  ているファイルの集まりを得ます。

(2) その集まりの要素にたいして *.txt という条件に合致するか否かを検査して、
  合致するものだけを抽出する。

(3) 抽出されたファイルの要素に対して、処理を行う。

このような感じになると思います。

VBScript ではありませんが WSH/JScript で、ちょっと書いてみましたのでご参考にな
さってください。


[ 概要説明 ]

使用者の指定したフォルダ中の中で使用者が与える条件に合致したファイルのみ集めま
す。

スクリプトでは c:\tmp フォルダを検索対象とし、抽出条件として、

  discriminator1 : ファイル名が .doc で終わる
  discriminator2 : ファイル名が [0-4].doc
  discriminator3 : ファイル名が 1[0-9].doc

というものを与えてやって、それぞれに抽出された結果 (fileArray) に対して、ファイ
ル名を表示するプログラムです。


[ 実行の仕方 ]

(1) c:\tmp に適当なファイルを作っておきます。(0.doc とか 14.doc など)
(2) ファイルをコピーし detect-sample.js というファイル名で保存します。
(3) コマンド・プロンプトなどから、

  C:\Documents and Settings\iriyak\デスクトップ>cscript //nologo detect-sample.js

  みたいに実行します。

[ 実行例 ]

※表示結果を簡単にコピーするために cscript.exe を使用しました。
 ファイルをダブルクリックして wscript.exe を使用して動作させても構いません。

// ここから

C:\Documents and Settings\iriyak\デスクトップ>cscript //nologo detect-sample.js
Discriminator: [function (each) { return (/.doc$/.test(each.name)) }]
['C:\tmp\0.doc', 'C:\tmp\1.doc', 'C:\tmp\10.doc', 'C:\tmp\11.doc', 'C:\tmp\12.do
c', 'C:\tmp\13.doc', 'C:\tmp\14.doc', 'C:\tmp\15.doc', 'C:\tmp\16.doc', 'C:\tmp\
17.doc', 'C:\tmp\18.doc', 'C:\tmp\19.doc', 'C:\tmp\2.doc', 'C:\tmp\3.doc', 'C:\t
mp\4.doc', 'C:\tmp\5.doc', 'C:\tmp\6.doc', 'C:\tmp\7.doc', 'C:\tmp\8.doc', 'C:\t
mp\9.doc']

Discriminator: [function (each) { return (/^[0-4].doc$/.test(each.name)) }]
['C:\tmp\0.doc', 'C:\tmp\1.doc', 'C:\tmp\2.doc', 'C:\tmp\3.doc', 'C:\tmp\4.doc']


Discriminator: [function (each) { return (/^1[0-9].doc$/.test(each.name)) }]
['C:\tmp\10.doc', 'C:\tmp\11.doc', 'C:\tmp\12.doc', 'C:\tmp\13.doc', 'C:\tmp\14.
doc', 'C:\tmp\15.doc', 'C:\tmp\16.doc', 'C:\tmp\17.doc', 'C:\tmp\18.doc', 'C:\tm
p\19.doc']


C:\Documents and Settings\iriyak\デスクトップ>

// ここまで

[ スクリプト (WSH/JScript) ]

// ここから

function detect(discriminator) {
    var resultArray = new Array();
    for (; !this.atEnd(); this.moveNext()) {
        var each = this.item();
        if (discriminator(each))
            resultArray.push(each);
    }
    return resultArray;
}
Enumerator.prototype.detect = detect;

function printString() {
    var stringArray = new Array();
    var q = String.fromCharCode(39);
    stringArray.push('[');
    for (var i = 0; i < this.length - 1; i++)
        stringArray.push(q.concat(this[i], q, ', '));
    stringArray.push(q.concat(this[i], q));
    stringArray.push(']');
    return stringArray.join('');
}
Array.prototype.printString = printString;

function doForEach(aFunction) {
    for (var i = 0; i < this.length; i++)
        aFunction(this[i]);
}
Array.prototype.doForEach = doForEach;

// detectFiles()
//
// folderPath 中のファイルのうち discriminator の条件に合致するものを
// 集めた Array オブジェクトを返す。要素は File オブジェクト。

function detectFiles(folderPath, discriminator) {
    var aFileSystemObject = new ActiveXObject('Scripting.FileSystemObject');
    if (!aFileSystemObject.folderExists(folderPath))
        return null;
    else {
        var files = aFileSystemObject.getFolder(folderPath).files;
        var anEnumerator = new Enumerator(files);
        return anEnumerator.detect(discriminator);
    }
}

// Main

var folderPath = 'c:\\tmp'; // c:\tmp フォルダを対象
var discriminator1 = function (each) { return (/.doc$/.test(each.name)) }; // ファイル名が .doc で終わる
var discriminator2 = function (each) { return (/^[0-4].doc$/.test(each.name)) }; // ファイル名が [0-4].doc
var discriminator3 = function (each) { return (/^1[0-9].doc$/.test(each.name)) }; // ファイル名が 1[0-9].doc
var discriminatorArray = new Array(discriminator1, discriminator2, discriminator3);

var testBlock = function (discriminator) {
    WScript.echo('Discriminator: [' + discriminator + ']');
    var fileArray = detectFiles(folderPath, discriminator);
    if (fileArray != null) {
        // fileArray を使って様々な処理を書く。ここでは単純に表示させた。
        // WScript.echo(fileArray.toString()); // Array.prototype.toString()
        WScript.echo(fileArray.printString()); // 定数リテラル表現の形式で表示
    }
    WScript.echo('');
}

discriminatorArray.doForEach(testBlock);

// ここまで

owl さん 2003年 12月 12日 18時 21分 07秒

はじめて投稿します。

VBSでフォルダ内に存在するファイル名すべてを「*.txt」のように形式を指定
して取得したいのですが、どのようにすれば良いでしょうか?

VBのDir関数は使えないし、FileSystemObjectではできないみたいなので。
宜しくお願い致します。

こば さん (koba777@sc5.so-net.ne.jp) 2003年 12月 11日 15時 03分 42秒

自己レスで申し訳ありません。
ユーザー定義用紙の登録の件、解決しました。

http://support.microsoft.com/default.aspx?scid=kb;en-us;282474
にサンプルを発見しました。

お騒がせ致しました。

こば さん (koba777@sc5.so-net.ne.jp) 2003年 12月 11日 12時 22分 36秒

こんにちは。

プリンタに予め定義されている以外のユーザー定義用紙を使用したいの
ですが、この用紙定義操作をWSHでできないかと考えてみました。
MSサイトや他のサイトで調査したのですが、手段が見つかりません。
もしご存知の方がいらっしゃったらお教えください。
(対象OS:WinXP Pro)

手動で登録する場合は、「スタート」−「プリンタとFAX」でドライバ
の一覧が表示されたら、「ファイル」−「サーバーのプロパティ」から
登録ができます。

どうぞよろしくお願いいたします。

魔界の仮面弁士 さん 2003年 12月 11日 02時 57分 59秒

解決されたようですが…。

> If Sh Is Nothing Then
>  MsgBox "エラー無し。WSH使用可能。"
> Else
>  MsgBox "エラーあり。WSH使用不可。"
> End If

すみません。これ、判定が逆でした。m(_ _;)m

ti さん 2003年 12月 10日 14時 20分 53秒

魔界の仮面弁士さん
>>VB/VBS/VBAの「Null」は、C言語やJScriptの null とは、意味が異なります。
大変参考になりました。
ここを上手く確認出来なかったのがそもそもの始まりだったでしょうか...
また参考スクリプトで確認出来ました。
ありがとうございました。

魔界の仮面弁士 さん 2003年 12月 09日 23時 11分 13秒

》ti さん
> その変数の値がNULL?の時はエラーとしたいと考えました。
VB/VBS/VBAの「Null」は、C言語やJScriptの null とは、意味が異なります。

『Null』
 未定値を表します。主に、データベース関連で使われます。
 判定には、「If IsNull(x) Then」などを利用します。

『Nothing』
 オブジェクトが空である事を表します。主に、ActiveX関連で使われます。
 判定には、「Is x Is Nothing Then」などを利用します。

『Empty』
 初期化されていない値を表します。数値としては0、文字列としては""と同義です。
 判定には、「If IsEmpty(x) Then」などを利用します。


> Set Sh = CreateObject("WScript.Shell")
オブジェクトが生成できなければ、この行の実行時にエラーが発生します。
そのため、On Errorステートメントを使って、エラーをトラップします。

 On Error Resume Next
 Set Sh = CreateObject("WScript.Shell")
 If Err.Number = 0 Then
  MsgBox "エラー無し。WSH使用可能。"
 Else
  MsgBox "エラーあり。WSH使用不可。"
 End If
 On Error GoTo 0

こんな感じで、チェックできると思います。

もしくは、CreateObjectでエラーが起きた場合、
変数 Sh の内容も変更されないという事を利用して、
 Set Sh = Nothing
 On Error Resume Next
 Set Sh = CreateObject("WScript.Shell")
 On Error GoTo 0
 If Sh Is Nothing Then
  MsgBox "エラー無し。WSH使用可能。"
 Else
  MsgBox "エラーあり。WSH使用不可。"
 End If
などという書き方もできます。


> If Sh != NULL Then
VB/VBS/VBAには、「!=」という演算子はありません。
等しくない事を表す演算子は、「<>」です。
(もっとも今回は、<>でも比較できませんけれどね)

yuka さん 2003年 12月 09日 21時 03分 21秒

>いりやさん

大変親切なご回答ほんとにどうもありがとうございます。
なんとかがんばってみます。
いろいろとありがとうございます。

ti さん (iwai-t@kkk.bias.ne.jp) 2003年 12月 09日 19時 46分 02秒

はじめまして
プログラミングやら初心者です。
VBSをつかいはじめました。
色々なサイトを参照して単純に使い方とかが分かって?きたのですが、
WSHを使用出来るか出来ないかの判断を(殆ど必要性はないでしょうが)、したいため単純にオブジェクト作成を変数に設定して、その変数の値がNULL?の時はエラーとしたいと考えました。しかし、考え方が全くおかしいのかそれとも構文がおかしいのかわかりませんが、IF文の後の設定により、"構文エラー"になったり、"オブジェクトでサポートされていません"などと表示されたり良く分からなくなってしまいました。以下スクリプトから何がいけないのか指摘して頂ければと思っています。
よろしくお願いします。(以下の場合は構文エラーです。!を抜かすと後者のエラーになります。)
Set Sh = CreateObject("WScript.Shell")
If Sh != NULL Then
MsgBox "OK"
Else
MsgBox "Error"
End If


いりや さん 2003年 12月 09日 15時 19分 23秒

| サーバー、クライアント共にWindowsで、インターネット経由で転送を
| 行いたいのですが可能でしょうか?

可能です。仮に友達同士でファイル転送を ftp プロトコルを利用して行う場合を考えて
みます。

(1) ネットワークとマシンの設定確認

最近は ADSL モデム内臓ルータに簡易 Firewall の機能を搭載したものが出回っていま
すので、サーバ側で ftp プロトコルのリクエストを許すためのアクセス・リストの設定
を行ってやる必要があります。

友人の PC の発信元 IP Address が特定できるのであればそれでアクセスを絞ってやる
のが一般的です。クライアント側もサーバになりうるのであれば双方で設定します。

また PC 自身も Firewall の機能をもつソフトウェアがインストールされている場合が
あります。例えば Norton Internet Security など。そちらについても同様にアクセス
制限を一部開放する設定を行います。

(2) まず ftp サーバを立ち上げる

サーバ側で ftp サーバ・アプリケーションを立ち上げます。Win の環境だとどんなソフ
トウェアがポピュラーなんでしょう。Vector で検索してみると、かたおかまさとさんの
Orenosv なんかよさそうですね。。
http://www.vector.co.jp/soft/winnt/net/se196446.html

(3) クライアント側で ftp の確認をする

コマンド・プロンプトから ftp コマンドを利用してサーバにアクセスすることを確認し
ます。ftp コマンドをどう使ったらよいかについては、グーグルで沢山使用法がヒット
しますのでそちらをどうぞ。

(4) いよいよ WSH で

いったん (3) でうまくいったら、あとはそれを WSH でどう自動化するか、です。ftp
の機能そのものは WSH の組み込み関数で搭載していませんから、WSH の外の誰かにお願
いすることになります。

過去記事なんかをたぐるとコマンド・プロンプトで ftp コマンドをあやつってやる方法
や ftp の機能を搭載した Component Object Model を利用する方法などが紹介されてい
るようです。

前者であれば、インターフェイスは WshShell Object>>run() メソッドや WshShell
Object>exec() メソッド、また WScript object.{stdIn, stdOut, stdErr} プロパティー
などを使うことになると思います。後者であれば、ActiveXObject を生成してそのオブ
ジェクトを駆使することになると思います。

それではがんばってください。


[ 参考例 ]

(a) ftp コマンドを利用した事例 - 1

WSH Lab 過去ログから

  78-16 つちや さん 2003/01/13 12:06
  77-08 たる さん 2002/11/30 22:10
  76-45 WSH初心者 さん 2002/11/22 16:53
  73-46 つちや さん 2002/09/13 19:11
  73-43 筑集眺餅 さん 2002/09/13 12:43
  73-42 加茂歯科 さん 2002/09/13 10:25
  73-16 筑集眺餅 さん 2002/09/04 19:44


(b) ftp コマンドを利用した事例 - 2

AYA さん, Windows Scripting Host 17 FTP,
http://member.nifty.ne.jp/aya/wsh/wsh17.htm
http://member.nifty.ne.jp/aya/


(c) COM を利用した事例

babaq さん, BASP21 DLL, BASP21 FTPオブジェクト
http://www.hi-ho.ne.jp/babaq/basp21f.html
http://www.hi-ho.ne.jp/babaq/basp21.html

@らんくる さん 2003年 12月 09日 10時 51分 24秒

うらら さん

早速の解答ありがとうございます。

rasdial.exe、rasphone.exe共にWin2000で使えるようです。

rasdial エントリ名 [ユーザ名 パスワード] で接続が出来ました。
エントリ名だけで接続出来ると思うのですが、
エラー691が表示され接続できないので現在調べています。

yuka さん 2003年 12月 09日 09時 48分 24秒

>いりやさん

yukaです。

ご返答ありがとうございます。
すみません。説明不足で(^^;)

サーバー、クライアント共にWindowsで、インターネット経由で転送を
行いたいのですが可能でしょうか?

hasimoto さん 2003年 12月 08日 20時 50分 03秒

うららサン、つちやサン有難うございます。
パスを通す必要があったのですね。知りませんでした。本にも書いてありませんでした。(見落としたのかな?)とにかく有難うございました。
(つちやサンはあのファイルメーカーの部屋で名前を目にしたことがあります。こんなところで助言を頂いて光栄です。)

いりや さん 2003年 12月 08日 20時 48分 40秒

yuka さん、

どのプロトコルを使用して実現するか、によっていろいろとバリエーションが考えられます。

例えばの話、サーバ (Win) のネットワークドライブの割り当て機能で、クライアント (Win) が共有するフォルダを割り当てるような環境が可能ならば、ダウンロード (サーバ→クライアント) は、単なるファイルのコピー操作という方式を採用できます。

いま検討されているネットワーク環境はどのような環境でしょうか??

yuka さん 2003年 12月 08日 20時 17分 59秒

はじめまして。
ActiveXならびに、WSHを勉強中の初心者です(^^)

このサイトの過去記事を見たのですが、
なかなかわからないので重なってしまうところもあると思いますが
質問させてください。

WSHを使ってサーバー側からクライアント側へフォルダごと
ファイル転送(ダウンロード)って出来るのでしょうか?
複数ファイルの転送(ダウンロード)はやはり出来ないのでしょうか?
圧縮しないで転送したいのですが、知っていれば教えてください。

ちなみにJScriptを使用したいと思っています。

タイゾー さん 2003年 12月 08日 16時 30分 21秒

はじめまして。
いつも独学でWSHを勉強しているときにこのサイトを利用させてもらっています。
そんな中、ちょっと行き詰まってしまっておりまして、
知恵を借りたく投稿させていただきます。

モノは”の扱いについてなのですが、
やりたいことは、いつの間にか誰かが変更してしまうDOS窓系(Prompt、Telnet、FTP)のデフォルト値を
それぞれのモニタ(PC)のサイズに合わせて再設定したいのです。

で、こちらのtechnicにあるように"HKCU\Console\%SystemRoot%_System32_telnet.exe\〜〜"を"""で囲ってみればできるかも、と思ってみたものの、
変数を使ったレジストリ設定時にエラーで落ちてしまいます

こういう場合の"の扱いは違ったりするのでしょうか?
他の方法があれば教えていただければと思います
ご存じの方よろしくお願いします


================================
OPTION EXPLICIT
Dim ObjWS,PcName,StrRet,PcNameC
Set ObjWS=WScript.CreateObject("WScript.Shell")

'Host Chck(PC名の上4文字でPCのタイプを識別させる)
PcName = ObjWS.ExpandEnvironmentStrings("%COMPUTERNAME%")
PcNameC = Left(PcName,4)

Select Case PcNameC
Case "DELL":
StrRet=ObjWS.Popup("Setting Dell",3,"PC Name",vbOKOnly)
Const Siz="3473483" 'WindowSizeの設定値(Dell PC用)
Case "IBM_":
StrRet=ObjWS.Popup("Setting IBM",3,"PC Name",vbOKOnly)
Const Siz="1048647" 'WindowSizeの設定値(IBM PC用)
Case Else:
MsgBox"タイプ未登録(" & PcName &")/実行中断",48,"Cancel"
WScript.Quit
End Select

'↓MsgBoxでの表示では問題なさそう
MsgBox "Target → " & """HKCU\Console\%SystemRoot%_System32_telnet.exe\WindObjWSize""" & "," & Siz & "," & """REG_DWORD"""


'↓RegWriteでは”引数の数が一致していないか不正なプロパティ”のエラーで落ちる
ObjWS.RegWrite """HKCU\Console\%SystemRoot%_System32_telnet.exe\WindObjWSize""" & "," & Siz & "," & """REG_DWORD"""


'↓ここから下(固定値)の部分は問題なく動く
ObjWS.RegWrite "HKCU\Console\%SystemRoot%_System32_telnet.exe\WindowPosition" ,0,"REG_DWORD"
ObjWS.RegWrite "HKCU\Console\%SystemRoot%_System32_telnet.exe\ScreenBufferSize",655294539,"REG_DWORD"
MsgBox "処理終了"
WScript.Quit
================================

うらら さん (urara@goukaku.com) 2003年 12月 08日 15時 54分 28秒

こんにちは、うららと申します。
>>@らんくる さん

dllの呼び出しでのダイアルアップが無理なようであれば、rasdial.exe を
利用されては如何でしょうか?
コマンドリファレンスに関してはWindowsのヘルプに記載されていますので
参照されれば使用法は簡単にわかると思います(Win2k/XPで使用可能)

手元にWin2kのマシンがないので確認できないのですが rasphone.exe という
コマンドがあれば、そちらも利用可能です。
こちらは普通のダイアルアップと同じようなGUIが表示されます。
(XPの場合、C:\WINDOWS\system32\rasphone.exe が標準インストール先です。)

その他には http://www.borncity.com/WSHBazaar/WSHRas.htm にあるActiveX
コンポーネントを利用するという方法もあります。

@らんくる さん 2003年 12月 08日 13時 28分 09秒

はじめまして @らんくるです
WSHを最近勉強し始めた初心者です。宜しくお願いします。

ダイアルアップ接続の質問です。

過去のログに実現方法として
Set WSHShell = WScript.CreateObject("WScript.Shell")
ap=WSHShell.RegRead("HKCU\RemoteAccess\InternetProfile")
WSHShell.Run "rundll.exe rnaui.dll,RnaDial " & ap,1,True
と書かれています。

私のPCはWin2000なのですが、上記のコードを実行すると
「エンティティの参照に問題があります」
と表示され実行できません。
調べてみるとrnaui.dllがWin2000には無いようなのですが、
代わりに何を使用するのでしょうか?

すいませんが、ヒントでも構いませんので教えてください。

@らんくる さん 2003年 12月 08日 13時 27分 55秒

はじめまして @らんくるです
WSHを最近勉強し始めた初心者です。宜しくお願いします。

ダイアルアップ接続の質問です。

過去のログに実現方法として
Set WSHShell = WScript.CreateObject("WScript.Shell")
ap=WSHShell.RegRead("HKCU\RemoteAccess\InternetProfile")
WSHShell.Run "rundll.exe rnaui.dll,RnaDial " & ap,1,True
と書かれています。

私のPCはWin2000なのですが、上記のコードを実行すると
「エンティティの参照に問題があります」
と表示され実行できません。
調べてみるとrnaui.dllがWin2000には無いようなのですが、
代わりに何を使用するのでしょうか?

すいませんが、ヒントでも構いませんので教えてください。

うらら さん 2003年 12月 07日 22時 45分 42秒

書かなくてもわかるとは思いますが、一応補足です。
エンコードされたファイルはエンコード元ファイルと同一フォルダに出力されます。
このスクリプトを利用する際は当然ながらscrenc.exeにパスを通す必要はありません。

うらら さん 2003年 12月 07日 22時 39分 28秒

エンコード用スクリプトを作ってみました。
このスクリプト若しくはスクリプトのショートカットにドロップするだけでエンコード可能です。
対応ファイルはjsとvbsで、複数ファイルの同時受付も可能です。
エンコーダのパスはデフォルトでインストール先になると思われる場所を指定しておりますので恐らくそのままでも使用可能だと思われます。
動作確認は Win98 + WSH5.6 の環境で行いました。

//-------------------------- ScriptEnc.js ここから ----------------------------
// メッセージウィンドウの待機時間の設定。デフォルトは5秒です。
// 1秒以上の整数値で設定が可能です。
// Waitを0に設定した場合はボタンを押すまで確認ウィンドウは閉じなくなります。
var Wait = 5;
var WaitMessageTitle = Wait+"秒後に閉じます";
if(!(Wait > 0)){
Wait = 0;
WaitMessageTitle = "確認して下さい";
}

objArgs = WScript.Arguments;
var WshShell = new ActiveXObject("WScript.Shell");
var InputFile, OutputFile,ExecCommand;
var ScrEnc = "\"" + "C:\\Program Files\\Windows Script Encoder\\SCRENC.EXE" + "\"";

for (i = 0; i < objArgs.length; i++){
InputFile = objArgs(i);
if(objArgs(i).match(/vbs$/i)){
OutputFile = objArgs(i).replace(/vbs$/i,"vbe");
} else{
if(objArgs(i).match(/js$/i)){
OutputFile = objArgs(i).replace(/js$/i,"jse");
}
}
ExecCommand = ScrEnc + " /s \"" + InputFile + "\" \"" + OutputFile + "\"";
WshShell.Run(ExecCommand, 0, true);
}

WshShell.Popup("エンコード完了。", Wait, WaitMessageTitle);
WshShell = null;
//-------------------------- ScriptEnc.js ここまで ----------------------------

つちや さん 2003年 12月 07日 21時 05分 19秒

Dear hasimotoさん

screnc.exeは、システムフォルダなどのPathの通ったフォルダか、カレントフォルダ(C:\JUST)にありますか?
ない場合は、screnc.exeのファイル名をフルパス(空白を含む場合は""で囲って)で指定してみましょう。

参考までに、D&Dで受け取ったファイルをエンコードする例が過去ログの51-18(2001年 11月 05日 13時 32分 04秒)にあったりします。

ちなみに、screnc.exeを使わずに、WSHだけでエンコードすることもできた気がします。

うらら さん 2003年 12月 07日 20時 56分 16秒

>>hasimoto さん
まさかとは思いますが Windows Script Encoder はインストールされていますか?
もしインストールされていないのなら、http://www.microsoft.com/downloads/details.aspx?FamilyID=2976ee94-bec5-4314-84fd-8d7ec891c1c5&DisplayLang=ja からダウンロードしてインストールしてください。
インストールされている場合でも、Script Encoder のインストールディレクトリには自動的にパスは通っていない筈なので環境変数PATHに追加するのもお忘れなきよう気をつけてください。

hasimoto さん 2003年 12月 07日 20時 17分 40秒

申し訳ございません。
SCRENC a000012.vbs a000012.vbeとやったのですが、同じエラーが出ます。
ファイル名も間違いないことを確認しました。なぜ出来ないのでしょうか?

hasimoto さん 2003年 12月 07日 20時 00分 52秒

うららさん早速の回答感謝いたします。
なっなにーそうですか。スクリプトエンコーダのヘルプを見て"Script Encoder の使用"というページに『SRCENC』と書いてありましたので、そのまま信じてやったのですが、これはヘルプミスを発見しました。
後で一段落ついたら『SCRENC』で試してみます。(おそらくこれが原因と思います。)
有難うございます。

うらら さん 2003年 12月 07日 16時 41分 54秒

>>hasimotoさん
こんにちは、うららと申します。
スクリプトエンコーダのコマンドは『SCRENC』です。
ですので『SRCENC』ではコマンドまたはファイル名が違いますと出てしまいます。

hasimoto さん 2003年 12月 07日 15時 16分 48秒

エンコーディング。

今スクリプトをエンコードしたいのですが、上手くいきません。
OS98、スクリプトVer5.6。今MSDOSプロンプトから、目的のディレクトリ(C:\JUST)に移動して、SRCENC a000012.vbs a000012.vbeでエンターしたのですがコマンドまたはファイル名が違いますと出ます。

何か間違っているでしょうか?よろしくお願いします。

Coco さん 2003年 12月 02日 21時 03分 48秒

魔界の仮面弁士 さんへ

第4引数: "D:\"
初期設定という言葉が誤解を招いてしまったようです。

失礼しました。

WScriptのScriptFullName
を使ってみます。

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


魔界の仮面弁士 さん 2003年 12月 02日 12時 16分 55秒

>> 残念ながら…BrowseForFolderメソッドでは、
>> 初期選択されるフォルダを指定する事はできません。
> BrowseForFolderメソッドでも、
> パス"D:\"をハードコードすれば初期設定は可能ですよ。
あれ? SDKを見た限りは、初期設定用のパラメータは見つからないのですが…。
BrowseForFolderのパラメータって、4つだけですよね?

第1引数: ウィンドウハンドル
第2引数: ダイアログのタイトル
第3引数: BROWSEINFO.ulFlagsに指定可能なオプション値
第4引数: ルートとして指定するフォルダ(省略時はデスクトップ)

http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/objects/shell/browseforfolder.asp

後学のために、どこでデフォルトのフォルダを指定するのか、教えてください。m(_ _)m


> ただ、カレントディレクトをCurDir()のように
> コーディングできれば良いなと思いまして。
実行中のスクリプトのディレクトリの取得なら、WScriptのScriptFullName、
カレントディレクトリの取得なら、WshShellのCurrentDirectoryを使うとか。

Coco さん 2003年 12月 02日 10時 57分 30秒

魔界の仮面弁士 さんへ

>残念ながら…BrowseForFolderメソッドでは、
>初期選択されるフォルダを指定する事はできません。

BrowseForFolderメソッドでも、
パス"D:\"をハードコードすれば初期設定は可能ですよ。

ただ、カレントディレクトをCurDir()のように
コーディングできれば良いなと思いまして。




魔界の仮面弁士 さん 2003年 12月 01日 10時 48分 45秒

》 Coco さん
残念ながら…BrowseForFolderメソッドでは、
初期選択されるフォルダを指定する事はできません。

Coco さん 2003年 12月 01日 10時 13分 33秒

こんにちは、Cocoです。

宜しくお願いします。

フォルダを選択のダイアログボックスで
何も選択せず、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月 30日 15時 22分 59秒

》パル さん
そのEXEが、ActiveX EXE として作成されており、かつ、
TextBoxの内容を、(プロパティやメソッドにて)取得できるように
作成されていれば可能でしょう。

パル さん 2003年 11月 28日 23時 51分 00秒

外部アプリケーション(VBで作成したフォームにテキストボックスが数個
あるようなEXEファイルをWSHでそのテキストボックスの内容を取得したりすることはできますか?

小西 さん 2003年 11月 27日 22時 22分 55秒

うららさん
さっそくのご返事ありがとうございました!WSH5.6はWindows95に対応していないというのを以下のURLで見たため、WSH5.5を探していました。
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
ちなみに、上記URLの”Windows Script5.5のダウンロードページ”のリンクはリンク切れになっております > 管理人さま

うららさんが見つけていただいたWSH5.5のダウンロードページでは、Windows95対応と明記していないのが気になります。が、とりあえずWSH5.5(scr55jp.exe)をインストールしてみようと思います。結果は追って報告したいと思います。

nullnull さん 2003年 11月 27日 13時 06分 30秒

ドメインに登録されているユーザを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の間に空白文字があるのが問題のようですが何か対処方法はありませんか?
空白文字のないユーザではエラーは発生しませんでした。
ちなみに """.....""" ではエラーがでます。

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

うらら さん (urara@goukaku.com) 2003年 11月 27日 10時 18分 42秒

追加です。
如何してもWSH5.5(scr55jp.exe)が必要であれば下記からダウンロード可能です。
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=cb4c0d9f-23b3-49c1-87e6-0da0592a7e1a

うらら さん (urara@goukaku.com) 2003年 11月 27日 10時 13分 08秒

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

>>小西さん
> ・WSH5.5をインストールする(scr55jp.exe)

と書かれていますが、WSH5.6では駄目なのでしょうか?

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/wsconwhatiswsh.asp

上記のURLのなかに
> Windows Script Host は、Microsoft Windows 98、Windows 2000、および Windows Me に
> 組み込まれています。Windows 95 の場合は、Microsoft Windows スクリプト テクノロジ
> Web サイト (http://www.microsoft.com/japan/developer/scripting/default.htm) から
> Windows Script Host 5.6 をダウンロードして利用できます。

という記述がありますので、WSH5.6をインストールされれば使用できるのではないかと思います。

randy さん 2003年 11月 27日 10時 05分 27秒

いりやさん、つちやさん、どうもありがとうございました。
がりがりと作ってます。
INIファイルごときで・・・いやいや、違いますね。
またよろしくお願いいたします。

はぁ、疲れた・・・

小西 さん (ryuji_guitar@yahoo.co.jp) 2003年 11月 27日 07時 20分 27秒

皆さん始めまして!小西といいます。前々からこのサイトを利用してきたのですが、掲示板に書き込みするのは初めてです。
実は、仕事でどうしてもWindows95でWSHを動かす必要があるのですが、MicrosoftのサイトでWindows95のWSHを検索しても、すでにWindows95のサポートが終了してしまっていて、何もダウンロードさせてくれませんでした。
これはWSHに限らず、Windows95に関するあらゆるサポートは終了してしまっているようです。仕事場ではまだまだ現役なのに・・・

いろいろ調べた結果、Windows95でWSHを動作させるには、以下の条件が必要なことがわかりました。
・IE4.0以降をインストールする
・DCOMをインストールする(dcom95.exe)
・WSH5.5をインストールする(scr55jp.exe)

職場のパソコンはIE4.0がインストールされているため、あとはDCOMとWSH5.5が必要なのですが、DCOMに関しては以下のページからダウンロードできました。
http://www.microsoft.com/japan/com/dcom/dcom95/dcom13.asp
しかし、WSH5.5が見つかりません。おそらくMicrosoftのサポートも終了してしまって削除されてしまったんだと思います。IE4.0のダウンロードもできないようですね。
そこで、どなたかscr55jp.exeをお持ちのかたはおられませんでしょうか?

おやねこ さん (no@nakayoshi.cc) 2003年 11月 26日 23時 59分 10秒
URL:null

WSHでActiveDirectoryユーザーのOUの移動をする方法ってありますでしょうか?
出来れば、サンプルコードをお願いします。

Return