WSH(・∀・)スレッド! Part 2at TECH
WSH(・∀・)スレッド! Part 2 - 暇つぶし2ch594:デフォルトの名無しさん
08/01/08 15:01:03
>>591
ShellオブジェクトのFolderオブジェクトを使えばできた。
以下、"F:\temp\test\test"を"F:\temp\test"へ上書きするサンプル。

Set objShell=Wscript.CreateObject("Shell.Application")
set objFol = objShell.NameSpace("f:\temp")
call objFol.MoveHere("f:\temp\test\test", &H10)

595:585
08/01/08 15:54:53
>>594
動作確認できました。
ありがとうございますm(_ _)m


しかしこのMoveHereって移動エラー発生時点で処理が中断されるっぽいですね。
スキップさせるにはやっぱり自分で書くしかないですね。

MoveHere.VBS
URLリンク(www.vector.co.jp)

けっこうみんな苦労してるっぽい
URLリンク(www.roy.hi-ho.ne.jp)



596:デフォルトの名無しさん
08/01/08 16:15:45
>>595
FolderItemオブジェクトのInvokeVerb使って、
"切り取り(&T)"して"貼り付け(&P)"という手もあると思いますが・・・。
まあ、エラーが出れば止まるのは同じでしょうね。

597:デフォルトの名無しさん
08/01/08 16:46:24
shellのmoveはcopy+deleteだから

598:デフォルトの名無しさん
08/01/08 16:52:30
fsoで
if folderexists then deletefolder
movefolder
がいいんじゃないの
on error使ってもいいけど

599:585
08/01/08 17:26:35
>>596
それって裏でMoveHereが動いてるのでは?

>>597
そのようですね。いろいろ実験してると分かりました。

>>598
それだとフォルダとフォルダのマージにはならないような。
移動先のかぶってないファイルも削除されてしまう。


600:デフォルトの名無しさん
08/01/08 17:29:09
movefileでぐるぐる

601:デフォルトの名無しさん
08/01/08 21:50:28
> まずc:\test\foo.txtを削除し、c:\test\test\foo.txtをc:\test\foo.txtに移動させる。
> さらに同名フォルダの場合はそれぞれについて再帰的に処理していく。

ファイル名とフォルダ名が同じだったらどうするんだろ

602:デフォルトの名無しさん
08/01/08 21:58:05
すきにしてくれ

603:デフォルトの名無しさん
08/01/08 22:24:30
つrobocopy.exe

604:585
08/01/09 06:53:12
>>601
そのへんは考えてあります。
MoveHereの標準動作を見ると

移動先に同名アイテムがない → 移動
移動元:ファイル → 移動先:ファイル → コピー先削除 → 移動
移動元:ファイル → 移動先:フォルダ → エラー(中断)
移動元:フォルダ → 移動先:ファイル → エラー(中断)
移動元:フォルダ → 移動先:フォルダ → マージ(再起処理へ)

ということみたいですが、
ファイル-フォルダ、フォルダ-ファイルの場合の中断は問題があるので
ダイアログでも出すか、スキップするかで対応。

605:デフォルトの名無しさん
08/01/09 16:41:28
cronNTで動かすスクリプトはネットワーク上のファイルにはアクセス出来ないのでしょうか?

var objFSO = new ActiveXObject("Scripting.FileSystemObject");
WScript.Echo((objFSO.DriveExists("\\\\Server\\SharedDocs")).toString());;

というスクリプトをcronNTで動かした場合、falseになります。


606:デフォルトの名無しさん
08/01/09 18:12:05
DriveExists?

607:デフォルトの名無しさん
08/01/09 20:35:09
>>605
それ、cronNTじゃない環境では動くの?

608:デフォルトの名無しさん
08/01/09 23:44:50
>>606
URLリンク(msdn.microsoft.com)

>>607
コピペミスで2行目に ; が1個余分に付いてしまったorz

foo.js というファイル名で保存して、コマンドプロンプトから cscript で実行させれば動きます。

共有フォルダに置いてあるDLL(AutoItX3.dll等)を regsvr32 した後、スクリプト中で
ActiveXObject() して使おうと思い、コマンドプロンプトからの動作確認ではうまく動いたので
cronNT に起動スケジュールを書いておいたら動いてはくれず、色々と調べていたら
共有フォルダへのアクセスに失敗している事が分った次第です。

もし、cronNT が原因で他の類似ソフトでは再現しない問題なら他に良い物が有れば
それに乗り換えようとも思ってます。
ただ、VMware Player の中で動かしている都合
(無料版はディスクイメージの容量を後から大きくするツールが付属しない)で、
しかも既に残り容量にも余裕が全く無い為、

Windows Services for UNIX Version
URLリンク(www.microsoft.com)

の様なのでは無く、もっと軽い物でないと無理です。


609:デフォルトの名無しさん
08/01/10 01:57:32
cronNT類似とか関係なく、例えばWSHとかHTML, HTAなど
他のActive Script実行環境でやるとどうなるか試してみろ。

610:デフォルトの名無しさん
08/01/10 09:00:52
>>608
ちょっとかなりスレ違いっぽいが
cronNTサービスのプロパティを開いて
ログオンをローカルシステムアカウントから自分のアカウントに変えてみて

611:デフォルトの名無しさん
08/01/10 11:28:47
Aというディレクトリに a,b,c,d,e というファイルがありました
それをBというディレクトリにmoveしますが途中で終了してしまい
a,b,cまでしかmoveされませんでした
その後もう一度AをBにmoveしたところ上書きしますか?と聞かれたので
「はい」で最後まで完了したのですがBのナカミを見たところ
d,eしかありませんでした
あるOSで実際に起こった出来事です

612:デフォルトの名無しさん
08/01/10 13:53:18
で?

613:デフォルトの名無しさん
08/01/10 15:46:01
>それをBというディレクトリにmoveしますが途中で終了してしまい

「それ」 とは何か。具体的に書け。

614:デフォルトの名無しさん
08/01/10 16:54:33
>「それ」 とは何か。具体的に書け。

単数形だから「Aというディレクトリ」じゃね

615:デフォルトの名無しさん
08/01/10 17:24:00
>611
最初のmoveにより、ディレクトリAからファイルa,b,cが消えた。
その状態でディレクトリAを再びmoveさせれば、ディレクトリBにファイルd,eしかないのも別におかしくないだろ。

616:デフォルトの名無しさん
08/01/10 20:57:58
普通はディレクトリとその中身のファイルは別だからねぇ。
ディレクトリを移動(上書き)というのはディレクトリ自体の移動ではなく中身の移動のことだし。

中身の移動であるという観点から見れば、上書きが発生すること自体おかしな話だわな。

617:デフォルトの名無しさん
08/01/10 21:32:01
なぜ 「それ」 が問題なのかというと、
Aというディレクトリを move せずに
a,b,c,d,e というファイルを move すればよかったんだよ。
「それ」 が A なのか a,b,c,d,e なのかで結果が違ったんだね。

618:デフォルトの名無しさん
08/01/10 21:57:15
Macはどうでもいいよ。

619:デフォルトの名無しさん
08/01/11 17:16:43
a,b,c,d,e なら「それら」だろ

620:デフォルトの名無しさん
08/01/11 20:19:27
>>611
ご愁傷さま


621:デフォルトの名無しさん
08/01/11 20:56:54
URLリンク(www.microsoft.com)
を JScript に移植したくて以下のように書きましたが、実行すると
xxx.js(4, 1) SWbemServicesEx: 無効なクエリです。
というエラーで止まってしまいます。
どこが間違っているでしょうか?

var strComputer = ".";
var objWMIService = GetObject("winmgmts:\\\\" + strComputer + "\\root\\CIMV2");

var colMonitoredEvents = objWMIService.ExecNotificationQuery(
"SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " +
"Targetinstance ISA 'CIM_DirectoryContainsFile' and " +
"TargetInstance.GroupComponent= " +
"'Win32_Directory.Name=\"c:\\\\scripts\"'");

while (true)
{
var objLatestEvent = colMonitoredEvents.NextEvent;
WScript.Echo(objLatestEvent.TargetInstance.PartComponent);
}

622:デフォルトの名無しさん
08/01/11 20:58:28
>>611
次から気を付けようなw

623:デフォルトの名無しさん
08/01/11 20:59:57
>>622
ここが間違ってる

var colMonitoredEvents = objWMIService.ExecNotificationQuery(
"SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " +
"Targetinstance ISA 'CIM_DirectoryContainsFile' and " +
"TargetInstance.GroupComponent= " +
"'Win32_Directory.Name=\"c:\\\\scripts\"'");


624:621
08/01/11 21:09:46
>>623
すみません、書き方が悪かったです。
どこが間違ってるかはエラーメッセージが教えてくれているのでわかってました。
どう直せばいいんでしょうか?

625:デフォルトの名無しさん
08/01/11 21:41:29
デバッグくらい自分でしろ~
他人に投げるな~~

626:デフォルトの名無しさん
08/01/11 21:42:52
var colMonitoredEvents = objWMIService.ExecNotificationQuery(
"SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE "
+ "Targetinstance ISA 'CIM_DirectoryContainsFile' and "
+ "TargetInstance.GroupComponent= "
+ "'Win32_Directory.Name=\"c:\\\\\\\\scripts\"'");

627:デフォルトの名無しさん
08/01/11 22:38:22
wwww

628:621
08/01/15 17:17:28
>>626
ありがとう

629:デフォルトの名無しさん
08/01/18 06:33:04
CreateObject("ADODB.Stream")

上記でエラーがでます。
おそらく、ファイルが必要だと思うのですが、
それはどうやったら手に入りますか?


630:デフォルトの名無しさん
08/01/18 07:29:28
>>629
とりあえずエラーの内容書いてみ

631:デフォルトの名無しさん
08/01/18 21:42:53
>>629
MSからダウンロードに決まってるだろ

632:デフォルトの名無しさん
08/01/18 22:22:49
標準で入ってない環境、まだあったっけ?

633:デフォルトの名無しさん
08/01/19 09:49:15
FileSystemObjectとか称してテキストファイルの読み書きしか出来ないの?
fread,fwriteとかseekのメソッドを提供してるクラスって無いの?

634:デフォルトの名無しさん
08/01/19 09:59:08
出来ない
ADODB.Stream

635:デフォルトの名無しさん
08/01/19 15:46:30
ADODB.Stream ってファイル全体をいっぺんに読み込んでしまうよね?
デカイ動画ファイルの 最初の数バイトだけ 読み込んで処理したいけど
ファイル全体を読み込んでしまうため時間がかかってしょうがない。
何か良い手は無いですか?

636:デフォルトの名無しさん
08/01/19 16:18:25
FileSystemObjectで読む

637:デフォルトの名無しさん
08/01/19 22:25:52
PowerShellやC#に逃げる

638:デフォルトの名無しさん
08/01/20 01:04:11
     ↑
自分の殻に閉じこもる現実逃避型。

639:デフォルトの名無しさん
08/01/20 01:25:31
debugでダンプする

640:デフォルトの名無しさん
08/01/20 17:01:36
殻=shell

641:デフォルトの名無しさん
08/01/20 22:13:18
basp21

642:デフォルトの名無しさん
08/01/20 22:46:52
客先のPCにbasp21がインストールしてあれば苦労しないよ

643:デフォルトの名無しさん
08/01/20 23:24:23
スクリプトをインストール(=使用準備なので何処かのディレクトリにスクリプト置くだけでインストールになる)は可能なのに
COMコンポーネントのインストールは不可なんて馬鹿げたことを言い出すような低レベルな奴など相手にするな

こんなこと言い出すのは、嫌レジストリ厨とか"インストール"の意味を分かってない奴とか、相当な初心者の類だが、
もし"客先"ってのが会社なら、そんな奴がシステム管理においての権限を持ってるなんてゾッとしないねw
まあそれ以前にWSHスクリプトを外注する会社ってのもアレだけどw

644:デフォルトの名無しさん
08/01/20 23:37:16
FileSystemObjectなら使えるだろうに、なぜ使わん?

645:デフォルトの名無しさん
08/01/21 00:12:46
スクリプトの中で COM みつからなかった初回のみ regsrvr32 すれば?

646:デフォルトの名無しさん
08/01/21 00:14:43
>>635
> デカイ動画ファイルの 最初の数バイトだけ 読み込んで処理したいけど
とのことだ。
バイナリは無理だろ。

647:デフォルトの名無しさん
08/01/21 00:15:20
>>646>>644 へのレスね。

648:デフォルトの名無しさん
08/01/21 01:28:09
OpenBinaryFile()

649:デフォルトの名無しさん
08/01/21 01:50:38
> バイナリは無理だろ。

何が?

650:デフォルトの名無しさん
08/01/21 01:55:19
FSOでってことだろ

651:デフォルトの名無しさん
08/01/21 04:47:12
ForBinaryReading

652:デフォルトの名無しさん
08/01/21 10:21:14
それは今回の用途とは違うわけで

653:デフォルトの名無しさん
08/01/21 16:21:14
baspをbase64してwsfに入れて実行時に登録

654:デフォルトの名無しさん
08/01/21 16:36:19
すなおにVBで作って納品46

655:デフォルトの名無しさん
08/01/23 01:59:20
VBSファイルごとにアイコン変える方法おすえて

656:デフォルトの名無しさん
08/01/23 02:11:42
>>655
ショートカット作って、ショートカットのアイコン変えるとか

657:デフォルトの名無しさん
08/01/24 21:41:26
そういうアイコンハンドラを使えばいいんじゃね
なければ作ればいいんじゃね

658:sage
08/01/31 00:57:14
1.WSHを使って指定URLをIEから立ち上げる
2.(1)のURLのHTMLに含まれるjavascriptを解析して
自動で実行したい

WSHで1.はできると思うのですが、2はできますでしょうか?
できるのであればヒントを教えていただけぬか


659:デフォルトの名無しさん
08/01/31 00:59:05
HTMLDocument

660:デフォルトの名無しさん
08/02/01 20:30:46
最近 WSH を始めた者です。
WSHShell の Run メソッドでアプリを起動して使おうとしているんですが、
普通にアイコンをダブルクリックして起動した場合と挙動が違って困っています。

とりあえずわかったことは、そのアプリは ¥Document and Settings¥ユーザ名¥
Application Data¥アプリ名 以下に一時ファイルを作るんですが、WSH から
起動した場合ファイルが生成されないようです。
WSH の場合でもちゃんと走るようになる為には何か別途設定がいるのでしょうか?
今は基本的に WSHShell.Run(アプリのバス, 4, True) を呼んでるだけです。

661:デフォルトの名無しさん
08/02/01 21:42:20
>>660
カレントディレクトリを設定しろ
設定仕方はWSHヘルプに載ってるので嫁

662:デフォルトの名無しさん
08/02/02 07:34:31
>>661
どうもです。

>WSHヘルプ
すみません、実はこれが何を指すのか分からん程度なんですがw

>カレントディレクトリを設定しろ
URLリンク(msdn.microsoft.com)
によると CurrentDirectory というプロパティがあるそうなのでこれを適宜セット
する、で正解ですか?
で、できたらどんな値にセットするかも教えていただけると助かるのですが...
もしかしたらWSHヘルプというものにそれが書いてあるんでしょうか。

逆に考えると、普通にダブルクリックで起動したアプリではカレントディレクトリが
適宜セットされているから動く、ということでしょうか? もしそうなら一体どんな値になって
いる? という疑問がわきますが...

663:デフォルトの名無しさん
08/02/02 08:38:11
右クリック-プロパティ

664:デフォルトの名無しさん
08/02/02 09:38:40
通常はダブルクリックしたものがあるディレクトリがカレントディレクトリとなる。

665:デフォルトの名無しさん
08/02/02 11:10:49
>>662で言ってる CurrentDirectoryって Windows2000にデフォルトで入ってるWSHでは
動きませんよねぇ。なんか代替のメソッド無いですかね?

666:デフォルトの名無しさん
08/02/02 13:14:22
>>665
Win2Kでも、WSH5.6なら、("Wscript.Shell").CurrentDirectryが使える。
インストール直後のバージョンは、どうだったかな‥

古いWSHでも、("Wscript.Shell").Run """ショートカットファイル.lnk""",,False なら
問題ない。False設定しか使えなくなっちゃうけども。

Wscript.ScriptFullName のほうは今回無関係ですかね。


667:デフォルトの名無しさん
08/02/02 16:33:34
そのスクリプトファイルのショートカットを作って作業フォルダを設定しろ

668:デフォルトの名無しさん
08/02/03 02:07:27
WSHでファイルを読み取り専用に変えることはできますでしょうか?

669:デフォルトの名無しさん
08/02/03 02:20:08
readonly属性をつけることならできるな

670:デフォルトの名無しさん
08/02/03 03:43:53
>>669
それです。教えてください。

671:デフォルトの名無しさん
08/02/03 17:41:54
Attributes=1

672:デフォルトの名無しさん
08/02/03 18:09:40
ヘルプみろ

673:662
08/02/04 06:06:35
>>664
なるほど。その値でうまくいくようです。ありがとうございます、

674:デフォルトの名無しさん
08/02/06 16:53:29
質問です。

現在、VBSCriptで各ディレクトリのアクセス権限を
テキストに書き出す仕組みを作成しています。

コマンドは下記のようになっております。
CACLS <ディレクトリ名> >> <出力ファイル>

ディレクトリ名、出力ファイル名はパラメータとして受け取り、
文字列を結合してWshShell.Runに渡しております。 ・・・【1】

ここで問題なのですが、【1】の文字列をコピペして
DOSプロンプトで実行すると、正しく出力がされているのですが、
WshShell.Runにて実行すると、正しく出力されません。

この部分のコードは下記のようになっております。----------*

Command = "CACLS " & DIRName & " > " & ExportFileName
objShell.Run Command ' WShellオブジェクトは生成済み

--------------------------------------------------------*

恐れ入りますが、どなたかこのような現象を経験されておりましたら、
解決策の指南のほどよろしくお願いいたします。

675:デフォルトの名無しさん
08/02/06 18:26:05
>WShellオブジェクトは生成済み

ソース全部貼るべき

「・・・【1】」って違う場所に書いてない?



676:デフォルトの名無しさん
08/02/06 18:27:44
>WshShell.Runにて実行すると、正しく出力されません。
とはどうなるのだ?

677:デフォルトの名無しさん
08/02/06 19:11:25
Set objShell = WScript.CreateObject("WScript.Shell")
Command = "CACLS %cd% > out.txt"
objShell.Run Command

これで試してみたけど、うまくいかないね。

Command = "cmd /c cacls~

ではうまくいくけど。

678:デフォルトの名無しさん
08/02/06 20:04:10
%windir%\system32\cacls.exeと指定したらどう?

679:デフォルトの名無しさん
08/02/06 21:50:01
リダイレクトはシェル(cmd.exe)の機能。

680:デフォルトの名無しさん
08/02/07 06:34:50
フルパス指定でも無理

681:674
08/02/07 09:15:53
皆さんご回答ありがとうございます。

>>WshShell.Runにて実行すると、正しく出力されません。
>とはどうなるのだ?
パラメータ無しで実行したCACLSのように、ヘルプが表示されます。

経過ですが、
>>677さんの"cmd /c cacls~"で試してみたところ、うまくいきました。

大変お世話になりました。

682:デフォルトの名無しさん
08/02/08 12:25:55
タクススケジューラの引数について質問です。

Windowsタクススケジューラで設定した引数が渡ってこない(WScript.Arguments.Count = 0)のです。
同じパス(コマンドライン)で作ったショートカットを実行すると引数が渡ってくる(WScript.Arguments.Count > 0 )のです。

実際に試した記述は、「c:\test.vbs abc」と「c:\test.vbs "abc"」と「"c:\test.vbs abc"」です。

何か特別な記述方法などあるのでしょうか?
先輩方、よろしくご教授ください。

683:デフォルトの名無しさん
08/02/08 13:36:44
cmd /c c:\test.vbs abc

684:デフォルトの名無しさん
08/02/08 15:31:49
先輩!ありがとうございました!

685:デフォルトの名無しさん
08/02/08 21:29:01
ファイルをドラッグアンドドロップしたらパスを表示するスクリプトが動きません。
どこを直せばよいか教えてください。

var strArgument = new Array();
if ( WScript.Arguments.count() == 0 ) {
WScript.Echo ("コマンドライン引数が指定されていません。");
}
else {
for ( strArgument in WScript.Arguments ) {
WScript.echo ( strArgument[i] );
}
}

686:685
08/02/08 21:37:42
スクリプトをダブルクリックした時は正常作動しますが
ファイルをドロップすると何も表示されません。
スクリプトエラーも出ないので困っています。

687:デフォルトの名無しさん
08/02/08 22:03:46
コマンドライン引数が指定されているからに決まってるだろ

688:デフォルトの名無しさん
08/02/08 22:04:54
var strArgument = new Array();
if ( WScript.Arguments.count() == 0 ) {
   WScript.Echo ("コマンドライン引数が指定されていません。");
}
else {
   WScript.Echo ("コマンドライン引数が指定されました。");
}


689:デフォルトの名無しさん
08/02/08 22:18:40
for ( strArgument in WScript.Arguments ) {
WScript.echo ( strArgument[i] );
}
これ、なにしてるの?

690:デフォルトの名無しさん
08/02/08 22:42:40
>>688
var strArgument = new Array();
これ、なにしてるの?

691:デフォルトの名無しさん
08/02/08 22:52:48
URLリンク(msdn.microsoft.com)

692:デフォルトの名無しさん
08/02/08 23:25:21
>>685
// var strArgument = new Array();
if ( WScript.Arguments.count() == 0 ) {
WScript.Echo ("コマンドライン引数が指定されていません。");
} else {
for (i = 0; i < WScript.Arguments.length; i++ ) {
WScript.echo ( WScript.Arguments(i) );
}
}

.vbsファイルしか作った事がないけど、なんとなく.jsファイルはこれで動くんじゃないかなぁと・・?

693:デフォルトの名無しさん
08/02/08 23:56:38
>>692
> if ( WScript.Arguments.count() == 0 ) {
count はメソッドじゃなくプロパティ。

694:デフォルトの名無しさん
08/02/09 00:10:28
>>693
えー?

695:685
08/02/09 00:12:24
>>692
動きました。ありがとうございます。
只今WSHをJScriptで書こうと、vbsのスクリプトを翻訳しながら勉強中です。
でもJSのサンプルコードが少なくて困ってました。
今回は元コードに配列を使っているように見えたので、それらしく書き換えたけど動きませんでした。
なんでここまで違いが出るのか、まだ理解してませんw
↓元のサンプルコード
Option Explicit
Dim strArgument

If WScript.Arguments.Count = 0 Then
WScript.Echo "コマンドライン引数が指定されていません。"
Else
For Each strArgument In WScript.Arguments
WScript.Echo strArgument
Next
End If

696:デフォルトの名無しさん
08/02/09 00:28:24
>>695
実際にはいろいろな書き方ができるので、余計に混乱してるのかも。

元のスクリプトになるべく忠実に対応させるなら、以下のような書き方もできる。

if (WScript.Arguments.length == 0) {
WScript.Echo("コマンドライン引数が指定されていません。");
}
else {
var e = new Enumerator(WScript.Arguments);
for (; !e.atEnd(); e.moveNext()) {
WScript.Echo(e.item());
}
}


697:デフォルトの名無しさん
08/02/09 00:31:07
for (var e = new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext()) {
すっきり

698:デフォルトの名無しさん
08/02/09 00:41:48
>只今WSHをJScriptで書こうと、vbsのスクリプトを翻訳しながら勉強中です。

なぜ?遅いのに。いろいろ細かいことにうるさいのに。などなど

699:デフォルトの名無しさん
08/02/09 01:35:29
マイクロソフトの公用言語はBASIC
ゲイツはBASIC長者
java には裁判で負けた恨みが有る

700:デフォルトの名無しさん
08/02/09 09:13:38
WSHは使うけど、今はもうVBScriptでは書かないなあ。
JavaScript(JScript)のある意味変態的な言語仕様に慣れてしまったら戻れない。

701:デフォルトの名無しさん
08/02/09 14:37:22

変態

702:693
08/02/09 15:58:20
>>694
> >>693
> えー?
といわれてMSDN見てきた。

URLリンク(msdn.microsoft.com)

プロパティとメソッド、両方あるな……。

ふだんはJScriptで length 使うか Enumerator にして扱ってるんで、
確認不足で適当に書いてしまった。スマソ

703:デフォルトの名無しさん
08/02/09 16:38:49
>プロパティとメソッド、両方あるな……。

プロパティを見るとメソッドになってて、メソッドしかないような

704:デフォルトの名無しさん
08/02/09 17:18:48
動きさえすればどっちでもいいよ

705:デフォルトの名無しさん
08/02/09 17:22:03
with (WScript.Arguments) {
    WScript.Echo(Count());
    WScript.Echo(length);
    WScript.Echo(Count); // エラー
}

706:デフォルトの名無しさん
08/02/09 20:48:58
basp21のsocketって非同期通信できませんか?
データ取得できたらコールバック関数を呼びたいんですが。

接続できなかった場合とかタイムアウトになるまで
他の処理ができない



707:685
08/02/09 23:10:36
昨日教えてもらったスクリプトを、テキストに出力しようとしたら働きません。
また教えてください。

var objFso = new ActiveXObject("Scripting.FileSystemObject");
var objFile = objFso.OpenTextFile("testdirlist.txt", 8, true);
var path String();
objArgs = WScript.Arguments;
for (i = 0; i < objArgs.length; i++)
{
path = path + objArgs(i) + "\n";
}
//WScript.Echo(path);//←働く
objFile.WriteLine(path);//←働かない
objFile.Close();

708:685
08/02/09 23:13:59
×var path String();
○var path = String();

709:デフォルトの名無しさん
08/02/09 23:46:55
絶対パスにすれば

710:デフォルトの名無しさん
08/02/10 00:18:19
var path = "";


711:685
08/02/10 00:30:39
>>709
動きました!

712:デフォルトの名無しさん
08/02/11 12:28:54
WSH 5.1(Win2k)環境でカレントディレクトリを変更したいのですが
Set foo = WScript.CreateObject("WScript.Shell")
foo.CurrentDirectory =
と言った.CurrentDirectoryプロパティはWSH 5.6(WinXP)以降の環境でしか動作しません。
もちろんWin2kのWSHをバージョンアップすれば動くのですが、それは手間がかかる為
やらずに解決したいと思っています。

やりたい事は、WSHスクリプトファイル(仮にhoge.vbs)と同じ階層に scriptと言うフォルダがあり、
そのフォルダの中に var.bat と言うファイルがあるとして

Set objShell = WScript.CreateObject("WScript.Shell")
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(".")
objShell.Run f.path & "\script\var.bat"
等として、他のフォルダ内の実行ファイルを実行したいのです。
しかし実際にコレをやると、指定されたファイルが見つかりません とエラーが表示されて実行できません。
確かにファイルは存在しますし、WScript.Echo f.path & "\script\var.bat" とかやってパスを確認しても
正しいパスです。

なので、カレントディレクトリを実行ファイルのある場所に移動しないと実行できないのかなと
考え、CurrentDirectoryを変更する方法を考えているのですが・・・
普通に考えてCurrentDirectoryを変更せずとも実行できるはずですよねぇ・・アドバイス頂けませんか?

713:デフォルトの名無しさん
08/02/11 12:37:49
パスをだぶるくぉーてーしょんで囲みなさい

714:デフォルトの名無しさん
08/02/11 14:26:29
>>713
レスありがとうございます。

strDrv = strCurrent & "driver\install.bat"
↑これで、カレントディレクトリ\driver\install.bat がstrDrv に入ります。
その後
objWshShell.Run strDrv
で、今までは出来ませんでした。なのでこれを" " で囲みます
objWshShell.Run "strDrv"
しかしこうすると、strDrvと言う文字列を起動しようとしてしまい、strDrvが変数として扱われず
単なる文字列として扱われるため動作しません。
objWshShell.Run ""strDrv""
として、"をエスケープしてみてもだめ~ とか考えてたら

strDrv = strCurrent & "driver\install.bat"
strDrv = """" & strDrv & """"
WScript.Echo strDrv
objWshShell.Run strDrv
これでいけました。最初の"が文字列の開始、 中2つの"が 文字列としての純粋な"を表し
(""で"を単なる文字列としてエスケープ)、最後の"が文字列の終了を表すダブルクォート・・・
結局 """" となり、非常に分かりにくいというか、混乱する形になったのですが、こんなもんなんでしょうか?

715:デフォルトの名無しさん
08/02/11 14:47:54
こんなもんです

716:デフォルトの名無しさん
08/02/11 16:13:45
>>714
Python がお勧め

717:デフォルトの名無しさん
08/02/11 16:15:22
strDrv = Chr(18) & strDrv & Chr(18)

718:デフォルトの名無しさん
08/02/11 17:42:26
>Set f = fs.GetFolder(".")
>objShell.Run f.path & "\script\var.bat"

objShell.Run ".\script\var.bat"


719:デフォルトの名無しさん
08/02/11 18:10:32
>>716
>>712

720:デフォルトの名無しさん
08/02/11 23:38:48
>>714
C言語やjavaだって "\"" みたいな、「たいへん分かりにくい混乱する表記」
になるから、こんなもんです。

もし、コードをスッキリさせたかったら、

Const QQ = """"
strDrv = QQ & strDrv & QQ

もしくは

strDrv = Q( strDrv )

Function Q(ByVal str)
  Return """" & str &""""
End Function

みたいな方法がありますよ。(自分は後者をよくつかう)

721:デフォルトの名無しさん
08/02/12 01:25:32
Chr(34)は?

722:デフォルトの名無しさん
08/02/12 07:40:18
"自分は後者をよくつかう"って、使えるの、それ?

723:デフォルトの名無しさん
08/02/12 16:41:25
うん

724:デフォルトの名無しさん
08/02/12 16:56:37
>みたいな

コードはイメージです

725:デフォルトの名無しさん
08/02/12 20:18:12
>>724
実際のコードとは異なる場合があります。

726:デフォルトの名無しさん
08/02/12 20:24:57
>>722
使えない

727:デフォルトの名無しさん
08/02/12 23:32:48
使わない

728:デフォルトの名無しさん
08/02/12 23:43:08
使われない

729:デフォルトの名無しさん
08/02/13 00:07:38
こんばんです。1つ質問させてください。

vbsでプログラムを組んでいるのですが、vbs親プログラムからvbs子プログラムを
起動は出来ないのでしょうか?
~~~~~vbs親プログラム内~~~~~~~~~
Set objWshShell = WScript.CreateObject("WScript.Shell")
strCmdLine = "sub_program.vbs str01 str02 "
objWshShell.Exec(strCmdLine)

この記述で「sub_program.vbs」を引数2つ与えて起動できると思うのですが出来ません。
尚、コマンドプロンプトで[sub_program.vbs str01 str02]実行すると正常に起動します
修正点がありましたらお教えいただけないでしょうか。

730:デフォルトの名無しさん
08/02/13 00:16:04
>>729
strCmdLine = "cscript sub_program.vbs str01 str02 "
または
strCmdLine = "wscript sub_program.vbs str01 str02 "
と記述する必要がある。

コマンドプロンプトでは、"たまたま" cscriptまたはwscriptが省略できる。




731:729
08/02/13 00:23:32
>>730
ありがとうございました。無事起動すること出来ました。
コマンドプロンプトでは"たまたま"省略可能なんですか・・・

732:デフォルトの名無しさん
08/02/13 07:49:15
という事はExplorerでアイコンをダブルクリックすれば起動するのも"たまたま"だね。

733:デフォルトの名無しさん
08/02/13 08:13:26
//H:でたまたまを切り替えられる。

734:デフォルトの名無しさん
08/02/13 09:19:40
どう考えても>>721が正解


735:デフォルトの名無しさん
08/02/13 16:36:06
たまたまだけど、これもできる
strCmdLine = "sub_program.vbs str01 str02 "
objWshShell.Run(strCmdLine)


736:デフォルトの名無しさん
08/02/13 21:57:32
>>735
おまえ、何も解ってないな

737:デフォルトの名無しさん
08/02/14 00:12:08
そうだな、解るように言ってやれ

738:デフォルトの名無しさん
08/02/15 21:53:59
var fso= WScript.CreateObject("Scripting.FileSystemObject");
var d = fso.GetDrive(fso.GetDriveName("Q:\\"));
if(d.IsReady){ ...

とやってDVD-ROMドライブが準備できているかどうか調べているのですが、
DVDを入れて認識している最中にIsReadyが実行されるとウィンドウズ自体が数秒止まってしまいます
バックグラウンドで動かしていてもフォアグラウンドアプリまで停止してしまうので困っているのですが
これを回避するにはどうしたらいいのでしょうか?

739:デフォルトの名無しさん
08/02/15 22:14:09
FSOで問題あるときはShell.Applicationを使ってみるのが定石

740:デフォルトの名無しさん
08/02/16 06:37:35
ドアラ グッドウィルドームに立つ!
再生:654,421 | コメント:123,256 | マイリスト:20,510
URLリンク(www.nicovideo.jp)

凄い勢いで踊るドアラ
再生:482,525 | コメント:28,129 | マイリスト:17,837
URLリンク(www.nicovideo.jp)

ドアラが異端になった経緯
再生:424,284 | コメント:36,521 | マイリスト:9,417
URLリンク(www.nicovideo.jp)

ドアラーズブートキャンプ
再生:241,338 | コメント:18,996 | マイリスト:7,229
URLリンク(www.nicovideo.jp)

741:デフォルトの名無しさん
08/02/16 13:36:40
>>738
ドライブ認識動作中にエクスプローラとかでドライブにアクセスしても凍るから
アクセスするタイミング悪いと凍るのは仕様じゃね?

>>739
Shell.ApplicationにIsReadyはないけどな

742:デフォルトの名無しさん
08/02/16 17:20:40
Shell.Applicationで取れる情報で変化するものを見つければ?

743:デフォルトの名無しさん
08/02/18 16:30:09
Sub プロシージャとFunction プロシージャの違いって
Function プロシージャが戻り値を返すのに対してSub プロシージャが値を返さないって言うだけですか?

744:デフォルトの名無しさん
08/02/18 16:51:11
End XXX
Exit XXX
がちがう

745:デフォルトの名無しさん
08/02/18 19:34:19
>>744
End Sub
End Function
が違うって言うのは分かりますし、Functionの場合のみ Function名 = 値 で値を返す事が出来る
のも分かりますが(Javaで言うコンストラクタに値代入したらreturn文みたいな振る舞いすんのな)

Exit Sub Exit Function というのがあるのですか?それはいったいどういう・・・?
単に終わらせるだけですか? 呼び出し元に戻りますか?

746:デフォルトの名無しさん
08/02/18 21:25:12
Javaなんかのreturnみたいにプロシージャの呼出元へ戻るだけ。

747:デフォルトの名無しさん
08/02/18 21:50:22
>>745
ヘルプも見れないのか

748:デフォルトの名無しさん
08/02/19 22:10:48
WSH(拡張子.vbsのファイル)で
カレンダを表示するプログラムを作成しました。

出力はMsgBoxでしてます。
こんなかんじ
MsgBox strResult, , "カレンダ"

これを、携帯電話からも実行できるようにしたいと考えました。
携帯のカレンダがあるじゃないかと言われると困るのですが・・・
便宜上カレンダと言っているだけで、実際は他の物を出力するので。
イメージ的にはカレンダというと一番伝わりやすいので・・・。

で、そのアイディアとして、サイト上に掲載すればいいと考えました。
携帯のブラウザからそのサイトにアクセスした際に.vbsで作ったのと同じような出力が
得られれば良いのですが、これを実現するのに簡単な方法は無いでしょうか?
今のところ私に考え付くのは JavaScriptを勉強してJavaScriptに書き直して
やるぐらいかなぁと思っているのですが、そんな事しないとやっぱ出来ませんか?
そうなると関数とか文法とかいろいろ勝手が違うでしょうから覚え直しですかね?・・。
.vbsファイルの出力のWeb版を作りたいみたいな感じです。よろしくお願いします。

749:デフォルトの名無しさん
08/02/19 22:16:13
携帯もまだJavaScriptは実行できないぞ。

ASPと言って、Windowsサーバ上でVBScriptやJScriptをCGIのように実行する環境があった。
お前が欲しいのはきっとそれに違いない。

問題は、世間がASP.NETへ移行しつつあるということ。
ASP.NETはC#とかVB.NETとかを使うまた別物。

750:デフォルトの名無しさん
08/02/19 23:00:35
>>749
.vbsファイルを携帯に渡しても実行できるわけないし、じゃあ現状だと携帯でコレを実現
するのは難しいんでしょうか?

仮に携帯で実現するのが難しいとして、ブラウザに実装・・と言うか
第三者がWebブラウザでアクセスしてきた時に表示するようなのは
JavaScriptになりますかね?

751:デフォルトの名無しさん
08/02/19 23:01:39
すれ違い
よそへいけ

752:デフォルトの名無しさん
08/02/19 23:02:43
それって、なんか実行時に入力するパラメータあるんかな?
ないんならタスクマネージャで定期的に実行して、
TXTかHTMLに出力したのをサーバに自動アップするような環境をつくって、
携帯でそれを見に行けばいいような気がするが。

753:デフォルトの名無しさん
08/02/19 23:12:23
>>752
おお!なんか凄いアイディア聴けた!
えっとですね、1日に1回更新されるので、1日に1回実行してやればいいですね。
後はそれをTXT・・・には出来るのかなぁ・・・ ああ、そうか MsgBoxじゃなくてFileに出力
してやればいいんだ・・・ ああ、HTMLからそのTXTにリンクを貼るってのもありだし、
HTMLの中にそのTXTの内容を直接埋め込むのもありか!凄い!なるほど!
ちょっと試行錯誤してみます。ありがとうございましたっ!

754:デフォルトの名無しさん
08/02/19 23:27:45
>>752
ありがとうございました!

Dim objFso, txtFile
Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
Set txtFile = objFso.OpenTextFile("hogehoge.txt", 2, True)
txtFile.Write strResult
txtFile.Close
Set txtFile = Nothing
Set objFso = Nothing

こんなコードで生成できました!後はこの.txtファイルにHTMLでリンク貼れば完璧!
本当にお世話になりました~

755:デフォルトの名無しさん
08/02/19 23:57:23
>>753-754
ただのテキストを吐き出すついでにHTMLにすればいいんじゃないの?

756:デフォルトの名無しさん
08/02/20 00:29:27
>>755
いやーそれが、やろうと思ったのですが、出来なくて・・・。
やろうと思ったらかなり大変だと思いますが、簡単に出来るもんでしょうか?

757:756
08/02/20 00:30:22
Replace strOutStrings, vbCrLf, "<br>"
とかやって、改行を<br>に置き換えようとかやってみたんですが、うまくいきませんでした。

758:デフォルトの名無しさん
08/02/20 00:47:19
>>756
With txtFile
    .Write "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"" ""URLリンク(www.w3.org)"">"
    .Write "<html lang=""ja"">"

...

End With
こんな感じで書き出せばいいだけだろ。

>>757
そのテキストをpre要素の中に入れてしまうというのはどうだ?

759:デフォルトの名無しさん
08/02/20 00:47:33
Dim objFso, txtFile
Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
Set txtFile = objFso.OpenTextFile("hogehoge.htm", 2, True)
txtFile.Write "<HEAD><TITLE>うんこやろ~</HEAD></HEAD>"
txtFile.Write "<BODY>"
txtFile.Write "<CENTER>なんか文句あっか!</CENTER>"
txtFile.Write "</BODY>"
txtFile.Close
Set txtFile = Nothing
Set objFso = Nothing

760:デフォルトの名無しさん
08/02/20 00:51:57
そういえばむかし、こんなんやってたな。

10 OPEN "INDEX.HTM" FOR OUTPUT AS #1
20 PRINT #1,"<HEAD><TITLE>ハナクソ</TITLE></HEAD>"
30 PRINT #1,"<BODY>"
40 PRINT #1,"<CENTER>うんこちんちん!</CENTER>"
70 PRINT #1,"</BODY>"
90 CLOSE #1
100 SYSTEM

これを N88BASIC.EXE /T:RUN"HOGE.BAS" で定期的に動かして
コンテンツを更新してた。
古きよき時代。

761:756
08/02/20 16:22:22
>>758
それやろうとしたんですが、HTMLファイル中の" を ""と置き換えないといけないのが面倒でした。
HTMLって意外と"を使いますし。
それに.txtファイルに出力してしまって HTMLからリンクを貼るだけの方がとても楽だったので・・。

それにしてもWithステートメントかぁ、ヘルプを見て初めて知りましたが、こんな便利なのが
あったんですね。今までだったら txtFile. を何度も書かないといけなかったのに、これを知った
おかげで完全修飾しなくてすむからもっとコードが楽にスッキリかけそうです。ありがとうございます。

>そのテキストをpre要素の中に入れてしまうというのはどうだ?
これもまた素晴らしいアイディアだと思います。考え付きませんでした。
確かにそれなら簡単ですね。なるほどなるほど・・・。
しかしどうして>>757のコードで 改行が <br> に置き換わらないのでしょうか?

>>759
>txtFile.Write "<HEAD><TITLE>うんこやろ~</HEAD></HEAD>"
この行</HEAD>が2個あります。</TITLE>の間違いでしょうか(内側のHEAD)

>>760
へぇ・・・そんな時代があったんですかぁ~・・・。

762:デフォルトの名無しさん
08/02/20 16:34:20
Replaceは結果を戻り値に返すからこう使わないといけないはず。
strOutStrings = Replace(strOutStrings, vbCrLf, "<br>")

""がうざいのは、
ダブルクォーテーションではなくシングルクォーテーションを使うとか、
(属性はシングルでいい。でもDOCTYPEはわからない)
先頭(head要素が終わるまでくらい)をテキストに用意しておいて、
txtFileの頭にそれを書き出すとかでどう。
.Write objFso.OpenTextFile("c:\header.txt", 1).ReadAll

763:デフォルトの名無しさん
08/02/20 16:46:23
>HTMLって意外と"を使いますし。

ならJScriptつかえよ
HTMLタグをつけるメソッドもあるし

764:デフォルトの名無しさん
08/02/20 17:58:02
>>763
DOMのことならVBScriptからでも使えるだろ。

765:デフォルトの名無しさん
08/02/20 18:18:23
Stringオブジェクトのことだろ

766:デフォルトの名無しさん
08/02/20 18:45:06
でもあまり使えるメソッドがないな

767:デフォルトの名無しさん
08/02/20 19:49:38
HTMLタグをつけるメソッドを付けた奴は、きっと浮かれ過ぎていたんだろうな。
後でcreat以上に恥ずかしい思いをしたに違いない。

768:デフォルトの名無しさん
08/02/20 20:09:23
JScriptだから好きなメソッドが追加できるよ
.quote()なんてのもいいんじゃね

769:デフォルトの名無しさん
08/02/20 20:15:50
anchor(anchorString), big(), blink(). bold(), fixed(),
fontcolor(colorVal), fontsize(intSize), italics(), link(linkstring),
small(), strike(), sub(), sup()
確かに今更これらを使う気にならない

770:756
08/02/20 22:51:33
>>762
>strOutStrings = Replace(strOutStrings, vbCrLf, "<br>")
あ、なるほど、確かにそうだ・・・失敗失敗・・・。

>先頭(head要素が終わるまでくらい)をテキストに用意しておいて、
txtFileの頭にそれを書き出すとかでどう。

なるほどねぇ・・・参考になります。

>>763
JScript使った事無いので全然知りません。

>>769
が言っている事がさっぱり分からない・・・

771:デフォルトの名無しさん
08/02/20 23:13:16
俺もJScriptは使わないけど、ヘルプはあるんでJScriptのヘルプより抜粋。

> anchor メソッド参 照
> link メソッド| String Object メソッド | String Object プロパティ
>
> 対象: String オブジェクト
> 必要条件
> バージョン 1
> String オブジェクトに格納されている文字列の前後に HTML の NAME 属性を指定する <A> タグを挿入します。
>
> strVariable.anchor(anchorString)
> 引数
> strVariable
> 必ず指定します。String オブジェクトの名前またはリテラルを指定します。
> anchorString
> 必ず指定します。アンカー タグの NAME 属性に挿入する文字列を指定します。
> 解説
> anchor メソッドを呼び出すと、String オブジェクトから名前付きアンカーが作成されます。anchor メソッドの使用例を次に示します。
>
> var strVariable = "これはアンカーです";
> strVariable = strVariable.anchor("Anchor1");
> 2 つ目のステートメントの実行後、変数 strVariable は次の値になります。
>
> <A NAME="Anchor1">これはアンカーです</A>
> このメソッドの実行時には、<A> タグが既に元の文字列内にあるかどうかの確認は行われません。

後の関数も似たようなもんだろ。さすがにこれはどうかね・・・

772:デフォルトの名無しさん
08/02/23 10:32:49
BASP21のSpaceメソッドほどではない。

# あれは馬場さん自身「作者の無知からくる全くのゴミメソッド」なんておっしゃってたな...

773:デフォルトの名無しさん
08/02/23 10:43:06
|BASP21メソッド編
| 1. BASP21のSpaceメソッドはなんであるの
|   えーとこれは、作者の無知からくる全くのゴミメソッドです。
|   HTML でスペースをあけるのに全角のスペースを使うことがありますが、
|   IMEでなぜか入力できなかったから(IMEのプロパティが半角スペースになっていただけ)。
|   たぶん、誰も使ってないと思いますがどうでしょう。

babaq さんオッチョコチョイ杉ワロタ

せっかくだから今度どこかで無理矢理にでも使ってあげようっと

774:デフォルトの名無しさん
08/02/23 12:50:03
あれはあれで便利だからなくさないで欲しい

775:デフォルトの名無しさん
08/02/23 13:30:14
吉岡照雄のOn Error Resume Nextの正しい使い方とやらを読んだんだが、
こんな面倒なことをしないといけないのか・・・

776:デフォルトの名無しさん
08/02/23 15:11:12
>>775
On Error Resume Nextの正しい使い方教えて~

777:デフォルトの名無しさん
08/02/23 15:23:10
Subプロシージャを毎回作るのはいいけど、さらに複数行の時は入れ子。。。
Subプロシージャだらけになって大変すぎ

778:デフォルトの名無しさん
08/02/23 16:39:25
ファイルの日付をデータベース(ACCESS)に格納できねぇーー

strSQL = "INSERT INTO Log " & _
" (Name " & _
" ,Date " & _
" ,SIZE) " & _
"VALUES ('" & fol.Name & "'" & _
" ,#" & fol.DateCreated & "#" &_ '←ここがおかしいらしい
" ," & fol.Size & ")"

なんか
『Insert into ステートメント の 構文エラーです』
とか出るんだけどなにがおかしいのか・・・

779:デフォルトの名無しさん
08/02/23 17:27:26
文字列にフォーマットし直してから渡せ


780:デフォルトの名無しさん
08/02/23 18:51:51
はぁー?

781:デフォルトの名無しさん
08/02/23 18:55:22
問題はそのフォーマットだろ

782:デフォルトの名無しさん
08/02/23 19:22:20
SQLの構文に合った書式に変換されるとは限らないってこった。
一旦、年月日時分秒をバラバラにして、構文に合わせた書式に作り替えればいい。
書式は自分で調べてくれ。

783:デフォルトの名無しさん
08/02/23 20:40:43
#mm/dd/yyyy hh:mm:ss#
で渡すといいよ。VBScriptはFormat関数ないから面倒だ。

784:デフォルトの名無しさん
08/02/23 21:39:48
コードそのままで[地域のプロパティ] を変更するといいよ

785:デフォルトの名無しさん
08/02/23 22:21:37
capicom.dllが再頒布可能かどうかが調べてもさっぱり分からないんだが

786:デフォルトの名無しさん
08/02/23 22:31:22
WSHってマウスクリックも出来ないし、.SendKeysメソッドで日本語扱えないしで
やっぱりAutoHotKeyには到底かなわない?

787:デフォルトの名無しさん
08/02/23 22:40:13
>>785
URLリンク(www.microsoft.com)
このパッケージには、CAPICOM 2.1.0.1 の再頒布可能なファイルとそのサンプルが含まれています。

788:デフォルトの名無しさん
08/02/23 22:47:45
>>787
そこだけみると、間違いなく再頒布可能なファイル=CAPICOM.dllな気がするんだが、
DLしてライセンス(英語)を読むと、
再頒布可能なのは、REDIST.TXTに記載されたものと書いてあるが、
REDIST.TXTなんてどこにもない・・・

ググってもググってもはっきりどこにも書いてないorz

789:デフォルトの名無しさん
08/02/23 23:40:10
>>788
URLリンク(msdn2.microsoft.com)
ここだと「再配布可能な CAPICOM ActiveX control」と表現してる。
Platform SDK で CAPICOM で ActiveX control なのは capicom.dll しかないので限定できる。

The Platform SDK contains CAPICOM samples, API documentation, and the redistributable CAPICOM ActiveX control.

というか考えすぎと思う。
再配布して意味のあるものは capicom.dll しかないんだし。

790:デフォルトの名無しさん
08/02/23 23:43:07
>>779
#とか'とか何度もやったし
>>781
Accessに設定したフォーマットは、yyyy/mm/dd hh:mm:ssで、
DateCreatedも書式一緒だからそのままにした
>>782,783

Dim day, m, n, strDt, strEd
strDt = "2090/02/23 00:00:00"
day = Split(strDate, " ")
m = Split(day(0),"/")
n = Split(day(1), ":")
strEd = m(1) & "/" & m(2) & "/" & m(0) & " " & n(0) & ":" & n(1) & ":" & n(2)
WScript.Echo strCom

煩雑だ
>>784
[英国]とか[米国]でもダメだけどorz


フィールド名にDateはダメだったの?
Dateから日付に直したらできたよ
ふぉぉぉぉぉっふぉおおおっ!!


791:デフォルトの名無しさん
08/02/24 00:08:27
>>789
確かにそういうことですね。私の考えすぎでした。

これで、capicom.dllを一緒に配布できるってことか。
一緒に配布している例が見あたらなくって、
どうしてMicrosoftからDLさせるところばっかりなんだろう?と、思ってました。

どーもです。

792:デフォルトの名無しさん
08/02/24 00:26:28
>>791
>どうしてMicrosoftからDLさせるところばっかりなんだろう?と、思ってました。

これについてはセキュリティリスクが関係すると思う。

同梱は可能であっても、同梱してしまうとバグやセキュリティ問題で capicom が更新されたとき、
企業責任として製品自体の更新版を出すことを検討しなければならない。
別途ダウンロードさせる場合にはそれは必要ない。


793:デフォルトの名無しさん
08/02/24 02:28:06
>>786の質問に答えてくだされ・・・・

794:デフォルトの名無しさん
08/02/24 02:34:26
そうです、WSHはうんこです。AHKの足元にも及びません。AHKが最高です。よかったね。

795:デフォルトの名無しさん
08/02/24 09:26:00
AHK >>>>>>>>>>>>>>>>>>>>> マウス操作がデフォでできない言語

こんな定義でおk?AHKってどんだけ凄いんだよ(w

796:デフォルトの名無しさん
08/02/24 09:40:34
全盛期のAHK伝説でも貼る流れか?

797:デフォルトの名無しさん
08/02/24 10:05:09
AHKは本当に凄いですよ?AHKにWSHが勝てる点って デフォルトでWindowsに入ってる
標準環境っていうぐらいじゃないですかね?

798:デフォルトの名無しさん
08/02/24 10:24:06
デフォルトでWindowsに入ってる標準環境>>>(越えられない壁)>>>インストール

799:デフォルトの名無しさん
08/02/24 13:03:14
AHKのおかげで身長が2m伸びました

800:デフォルトの名無しさん
08/02/24 13:06:38
AHKから受信料の請求がきましたが、どうすればいいのでしょうか

801:デフォルトの名無しさん
08/02/24 13:29:44
>>800
テレビの横に古いパソコンを置いて「これはパソコンモニタです」って言い張れ。

802:デフォルトの名無しさん
08/02/24 13:43:11
>>786>>793>>797
暇でネタ振ってるんだと思うけど、それならそれで以下を回答してくれ。

・WSHとは何か、具体的に。
・どのように比較してその結論に達したか。


803:デフォルトの名無しさん
08/02/24 15:12:23
A ア
H ホ
K か?

804:797
08/02/24 16:47:52
>>802
WSHとはWindows Script Hostingの事で、拡張子 .vbsのファイルにして実行できる
Windowsのスクリプト(Batとは違うのだよ、Batとは!)です。
Linuxで言うShell Scriptみたいなものかと思っています。

比較は、やはりマウスクリックですね。操作の自動化をしたいので、GUIアプリケーションを操作
する際に、Alt + Key みたいな感じにキーが割り当てられてない、クリックでしか出来ない操作を
自動化しようとするときにWSHだと無理なんですよ。
それと .SendKeysメソッド。日本語を送信できないなんて論外です。

その点AHKなら日本語も送信できるしマウスクリックも出来るし、記述が簡単(インスタンス生成
とか面倒な事しなくても簡単な記述でいい、ただし引数の多さがたまに傷かな)な所が良いと思います。

こんな感じでしょうか?

805:デフォルトの名無しさん
08/02/24 17:22:37
WSHはオートメーションオブジェクトの操作がメインだったりする。
他のアプリの制御はアウトプロセスサーバとして制御してくれ、って方針。
Perlが標準入出力の扱いに最適化されているように、
ATKはGUIアプリの操作シミュレートによる制御に最適化されている、と。
ATKはWMIの制御やりにくいから糞、とか言われても困るだろ?

806:797
08/02/24 17:52:35
>>805
1行目、2行目、5行目の貴方の言っている事がスキルの低い私には理解できません・・・。
意味が分からないです・・・。すみません。

807:デフォルトの名無しさん
08/02/24 17:56:37
操作自動化の方法論が違うから総合的な比較はできないってこと
GUI操作のシミュレートならそりゃそれように作られたもの使うのが当然
WSHはそういう用には作られてないもの

808:デフォルトの名無しさん
08/02/24 18:06:30
>それと .SendKeysメソッド。日本語を送信できないなんて論外です。

日本語が送れるVBのSendKeysと送れないVBSのSendKeysは、
仕組み上でどういう違いがあるのでしょうか?

809:デフォルトの名無しさん
08/02/24 18:13:14
直接Win32API呼び出してるかどうかじゃね

810:デフォルトの名無しさん
08/02/24 18:15:12
Win32API呼び出さないで、SendKeys作れるの?

811:デフォルトの名無しさん
08/02/24 18:22:31
つかってるAPIがちがうんだろ

812:802
08/02/24 21:37:27
>>804
WSHというのは、スクリプト言語からWindows操作をする為の手段(WSHオブジェクト)
の提供と、そのスクリプト言語をデフォルトではVBScriptとJScriptを内包している。

君の比較しているのはVBScriptのようだけど、これは>>805の言っている通り
WSH以外のオブジェクトにもアクセスできる。例えば、IEやEXCEL、WMI....etc
こういう事はAHKでは、どうやるの?

というか、よく見たら>>807が結論出してるね。
GUI操作だけで比較したら、その機能に特化しているAHKが優れているが、
それは総合的な比較じゃないでしょ。理解できた?


813:797
08/02/24 23:23:04
>>812
なるほど、適材適所でWSHもWSHが得意な場面で使えばAHKより使い勝手いいんだ・・・。

814:デフォルトの名無しさん
08/02/24 23:59:03
質問させてください。

ファイルが書き込み不能かどうかを検出するにはどうすればよいでしょうか?
リードオンリ属性ではなく、ファイルを削除するとき稀に出てくる
「ほかのプログラムが使用しているため削除できません」ってやつの状態です。

815:デフォルトの名無しさん
08/02/25 00:01:04
>>814 自己レス。
try仕込むだけでよかったのね orz

816:デフォルトの名無しさん
08/02/25 01:18:15
>>812
> こういう事はAHKでは、どうやるの?
AHK用ActiveXモジュールを使えば良いだけ

逆にWSHでのポインティング操作などは
そういう機能を提供するCOMを使えば良いだけ

このレベルのことなら、やり易さに違いはあっても
結果的に"出来ること"ではWSHもAHKも大差ない

ポインティング操作に限って言えば
WSHは最初からWindowsに入っているが、ポインティング操作機能は後付けになる
AHKはWindowsに対して後付けで入れないと使えないが、ポインティング操作は最初から備えてる
ってだけの違い

817:797
08/02/25 02:18:45
>>816
なんか凄くお詳しいですね・・なるほど、参考になります。
構文とかの簡単さはどちらの方に軍配が上がりますか?
情報量の多さでいくと、WSHの方が色々なところで解説されているだろうし
メジャーだと思います。

AHKはもっと普及してれば敷居低くなるのになぁと思ったり。

818:デフォルトの名無しさん
08/02/25 02:49:55
AHKS

819:デフォルトの名無しさん
08/02/28 09:15:26
FileSystemObjectのTextStreamオブジェクトのReadAllメソッドって
サイズ0のテキストファイルに対して実行するとどうしてエラーになるのかよくわからん
長さ0の文字列返せばいいのに
なんで?

あとVB6でFileSystemObjectのGetParentFolderNameメソッドを使うと親フォルダ名のみだけど
VBScriptだと親フォルダのフルパスが返ってくるけどこれもなんでだろ?
同じFileSystemObjectでもVB6が使ってるのは別物なの?
なんで?

820:デフォルトの名無しさん
08/02/28 20:06:21
ReadやReadLineとの仕様の一貫性かも

DLLは同じなの?

821:デフォルトの名無しさん
08/02/28 21:57:16
ReadAll()する前にAtEndOfStreamを調べなきゃならないようですね

var ForReading = 1, ForWriting = 2;
var Fso = new ActiveXObject("Scripting.FileSystemObject");
var f = Fso.OpenTextFile("null.txt", ForReading);
if (! f.AtEndOfStream)
    WScript.StdOut.Write(f.ReadAll());
f.Close();

822:デフォルトの名無しさん
08/02/28 22:01:31
たぶん、めんどくさかったんだと思う

823:デフォルトの名無しさん
08/03/01 23:17:11
WindowsXP、つまり最新のWSH 5.6だと使えるメソッドでもWindows2000、つまりWSH 5.6未満だと
使えないメソッド(例えば Execメソッドとか・・・)やプロパティがありますよねぇ?

それらを調べたいのですが、何を見ればそういうことがまとまって書かれてありますか?
WSHのヘルプファイルを見てみたのですが、見つけきれませんでした。

やりたい事はWindows2000のWSHを5.6にバージョンアップせずにWindows2000でもXPでも
動作するスクリプトを書きたいのです。だから予めどのメソッドが動作しないとか、
引数が違うとかそういうことを把握しておきたいのです。

824:デフォルトの名無しさん
08/03/01 23:46:07
5.6のヘルプのバージョン情報

825:デフォルトの名無しさん
08/03/01 23:47:24
ただし、障害は載ってないからなぁ

826:デフォルトの名無しさん
08/03/02 08:26:53
最新は5.7よ

827:デフォルトの名無しさん
08/03/02 13:02:12
>やりたい事はWindows2000のWSHを5.6にバージョンアップせずにWindows2000でもXPでも
>動作するスクリプトを書きたいのです。

いまさらやめとけ それに2.0じゃたいしたことはできねー

828:デフォルトの名無しさん
08/03/02 16:42:46
>>825
5.0と5.1の挙動の違いすら、5.6のヘルプのバージョン情報だけでは分からなかったからなぁ・・・

829:デフォルトの名無しさん
08/03/19 11:24:42
5.7なんてあったっけ

830:デフォルトの名無しさん
08/03/19 12:40:52
>>829
最近出た。Vistaに標準搭載で、上から2000, XP, 2003英語版がダウンロード可。
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)

831:デフォルトの名無しさん
08/03/19 15:47:18
ちがいは?

832:デフォルトの名無しさん
08/03/20 03:21:19
0.1

833:デフォルトの名無しさん
08/03/20 03:37:06
>>831
不具合修正・セキュリティパッチの統合もあるが、
JScriptで大量のオブジェクトが生成された時のGC高速化がメインかと。
dramaticallyとまで書かれているあたり、結構凄いのかもしれない。

834:デフォルトの名無しさん
08/03/20 19:20:03
Msxml2.XMLHTTPなんだけど
readyState=2や3の時、status取得できる?
4にならないとエラーになるんだけどこれ普通?

Msxml2.ServerXMLHTTPなら2や3でできるんだよね・・・
最近IEがおかしくなってきてるので
どっか壊れてるんだろうか・・・?

XP SP2+IE6

835:デフォルトの名無しさん
08/03/29 00:32:37
IEとalertがとじれません><

836:デフォルトの名無しさん
08/03/29 02:02:27
すれちがい

837:デフォルトの名無しさん
08/03/29 02:09:26
IE.Quit

838:デフォルトの名無しさん
08/03/29 15:04:13
Exec("iexplore.exe").Terminate

839:デフォルトの名無しさん
08/03/29 17:42:24
>>775-776
これ、気になるんですけど…

840:デフォルトの名無しさん
08/03/29 17:59:25
どんまい

841:デフォルトの名無しさん
08/03/29 18:41:22
ん?検索すれば出てくるだろ?

842:デフォルトの名無しさん
08/03/29 19:05:52
>>841
あれがベストなのか?

843:デフォルトの名無しさん
08/03/29 19:10:55
.wsfに読み込む.vbsファイルの一部の関数を非公開にするのってどうやるの?
.vbs内部だけで使える関数を作りたいんだけど・・・

844:デフォルトの名無しさん
08/03/29 19:13:42
できない
代替するなら
wsc
class
かな

845:デフォルトの名無しさん
08/03/29 19:18:08
>>842
ベストなのを教えて

846:デフォルトの名無しさん
08/03/29 23:13:48
無理言うな、それが出来れば質問しないだろ?

847:デフォルトの名無しさん
08/03/29 23:45:48
>>843
Sub xxx_aaa()
とかで凌げ

848:デフォルトの名無しさん
08/03/30 00:02:50
エラーが起きたら即終了でダイアログが出ないようには
どうすればよろしいでしょうか?

849:デフォルトの名無しさん
08/03/30 00:07:35
try {
    ……
}
catch (e) {
    WScript.Quit();
}

850:デフォルトの名無しさん
08/03/30 00:37:04
On Error Resume Next

851:デフォルトの名無しさん
08/03/30 02:51:51
アニメ「めぐみ」ダウンロードページ
URLリンク(www.rachi.go.jp)

852:デフォルトの名無しさん
08/03/30 04:16:32
>>850 は即終了しないだろ?

853:デフォルトの名無しさん
08/03/30 13:45:44
vbeはwsfでは読み込めないのか…

854:デフォルトの名無しさん
08/03/30 16:10:59
んなことはない

855:デフォルトの名無しさん
08/03/30 17:01:16
vbsをvbeにエンコードしてから、読み込む側のコードの読み込み部分を
<script language="VBScript" src="./hoge.vbs" />
から
<script language="VBScript" src="./hoge.vbe" />
のようにしたんだが、

エラー: ステートメントがありません。
ソース: Microsoft VBScript コンパイル エラー

になってしまって、あきらめていた。"VBScript"の部分を適切なものに変更すればいいのか?
wsfの説明を読んでも分からない…教えてください。

856:デフォルトの名無しさん
08/03/30 17:02:55
VBScript.Encode

857:デフォルトの名無しさん
08/03/30 17:06:38
>>850
Try
 ...
Catch ex As Exception
 WScript.Quit
End Try

858:デフォルトの名無しさん
08/03/30 17:10:18
で、できた。今までできないと思っていたのに…

いろいろ実験に使っていたファイルを使ってやってみたんですが、
vbeファイルの中にPrivate Subと宣言した関数(実験なのでそのままPrivateSubという名前)
を使おうとすると

エラー: 型が一致しません。: 'PrivateSub'
ソース: Microsoft VBScript 実行時エラー

となるんですが、これはたまたまですかね?それともPrivateの効果なのか・・・
vbsを読み込んでいた時はエラーは起こらなかったんですが。




859:デフォルトの名無しさん
08/03/30 18:49:01
>>848 //B


860:デフォルトの名無しさん
08/03/30 19:10:00
>>858
君は>>843かな?

Private(Public)宣言はオブジェクト(クラス)外に公開するか否かの宣言なので
インクルード(wsfのscript要素のsrc属性指定)した場合は関係ないよ

きっと偶々というよりプロシージャ名間違い等、君のミスだろう
プロシージャ名間違いなら、読み込みでエラーにはならないが呼び出しではエラーになるし

一応確認してみたが、vbs内でPrivate宣言したSubプロシージャを
そのvbsをインクルードしたwsf内で呼んでみたが、きちんと実行された

861:デフォルトの名無しさん
08/03/30 19:21:47
VBScriptでなく、JScriptにすれば?

function a(){
WScript.Echo('a');
b();
function b(){
WScript.Echo('b');
}
}
a();
b();//エラー


862:デフォルトの名無しさん
08/03/31 22:40:14
MsgBoxをModelessに出して、後で閉じる方法を教えてください

863:デフォルトの名無しさん
08/04/01 00:41:20
WshShell.Run "MsgBox.vbs"

864:デフォルトの名無しさん
08/04/01 22:03:55
あるサイトに含まれている文字列をカウントして出力する、
VBscript(HTA)を、作成しているのですが、
実際に試してみると、以下のダイアログが出現してしまいます。

「このスクリプトの実行を中止しますか?」
このページのスクリプトが、IEの実行速度を落としています。

このまま実行を続けても検索結果となる数字が出力されません。
この場合、どうしたらよいのでしょうか?
以下に、該当する処理を載せます。
strSerch = document.u_list.key.value
i = 0
If strSerch="" Or strSerch=" " Then
'検索フォームに何も入っていないとき
Else
Do While InStr(webtext,strSerch) '検索キーワードでサイト検索
i = i+1 '検索回数カウント
Loop
End If


865:デフォルトの名無しさん
08/04/01 22:22:47
>>864
無限ループにならないようにすると良いのです

866:デフォルトの名無しさん
08/04/01 23:30:32
ひどいロジックだな。
最近は「フローチャート」とか書かなくなったせいか
こんなのが増えたな。

867:デフォルトの名無しさん
08/04/01 23:37:41
フローチャートなんて日本で「マイコン」が出だした頃でも既に有用性が
否定されていたぞw

868:デフォルトの名無しさん
08/04/01 23:50:25

言うと思った。バカの一つ覚えw

それは、ある程度、論理的な思考ができるヤツがいう事だよ。
>>864 みたいに未熟なヤツは、フローチャートから入らないとダメ。
今からやろうとすることを、目に見えるカタチにしてまとめる。
これは大事なことだよ。

>>867は後輩を育てられないタイプだな。

869:デフォルトの名無しさん
08/04/02 00:15:04
i = UBound(Split(webtext,strSerch)) + 1 '検索キーワードでサイト検索 検索回数カウント


870:デフォルトの名無しさん
08/04/02 00:58:45
found = 0
i = 0
Do
found = InStr(found+1,webtext,strSearch,vbTextCompare)
i = i + 1
Loop While found
i = i - 1

初心者だけど同じ関数で無理やりやってみた。>>869みたいに綺麗に逝きたい…

871:デフォルトの名無しさん
08/04/02 01:10:39
あー、でもこれ"aaaaaaaaaaaa"から"aaa"を検索したいときどう解釈するべきなんだろ。
>>870では10回、>>869では4回?

872:デフォルトの名無しさん
08/04/02 01:16:13
あれ?検索文字列を区切りにしたなら検索された数は要素数-1でないの?
UBoundに+1する必要ないような。

873:デフォルトの名無しさん
08/04/02 02:35:03
i = Len(webtext) - Len(Replace(webtext,strSerch,Mid(strSerch,2)))

874:デフォルトの名無しさん
08/04/03 00:59:23
カッコつけて恥かいちゃったね

875:デフォルトの名無しさん
08/04/03 02:22:25
(恥)

876:ドシロウト
08/04/03 11:45:22
>>870-872が自分のレスだけど、それ以外の人にも、わかってる人は
罵倒レスじゃなくてなんでダメポなんか書いて欲しいな。
スレ見てても参考にならんわ。

>>873は何したいのかわけわかめなんだけど。
i=全文字数-(ヒットした数x(検索文字列の字数-2)) でいいんかな?
この2はどこから出たのやら?
もしかして>>871に対するレスか?

877:ドシロウト
08/04/03 11:54:33
連レスすまん。
カキコした瞬間に勘違いに気づいた。

webtextで検索文字列にマッチした部分を検索文字列の2文字目以降で全置換
→全文字数がマッチした回数x1文字減るから減った数をカウントすればマッチ数がわかる

でOK?

878:デフォルトの名無しさん
08/04/03 17:49:57
i = (Len(webtext) - Len(Replace(webtext,strSerch,""))) / Len(strSerch)


879:デフォルトの名無しさん
08/04/03 17:54:58
found = 1 - Len(strSerch)
i = - 1
Do
found = InStr(found+Len(strSerch),webtext,strSearch,vbTextCompare)
i = i + 1
Loop While found

880:デフォルトの名無しさん
08/04/03 18:28:22
ここ、PC初心者板じゃないよね?

881:デフォルトの名無しさん
08/04/03 18:34:37
>>880
ちがうよ
スレタイも読めないの?

882:デフォルトの名無しさん
08/04/03 18:35:29
何が言いたい?
煽るなら死ぬ気でやれよ

883:デフォルトの名無しさん
08/04/03 18:36:15
っちょ
うざいな

884:デフォルトの名無しさん
08/04/03 18:51:50
>>880
凄いなぁ!尊敬。アッタマいい!かっこいい。
(などと言われてみたい。。。てか?

885:デフォルトの名無しさん
08/04/03 18:54:16
>>880は例の基地外

886:デフォルトの名無しさん
08/04/03 18:57:19
>>864
正攻法はRegExpだろ?

887:デフォルトの名無しさん
08/04/03 19:17:17
>>880 にもチャンスをやろうよ
RegExp使ったコード書いてみ?

888:デフォルトの名無しさん
08/04/03 19:21:46
i = UBound(Split(webtext,strSerch))

すでに答えが出てるだろ。

889:デフォルトの名無しさん
08/04/03 19:38:52
>>868
あのなあ。。

フローチャートってのは「プログラミング言語以外で処理内容を表現するツール」
いうなれば「プログラマ以外の人間の方を向いたツール」であって(だから今でも
ユーザーズマニュアル等には時々出てくる)プログラマが思考の整理に使う道具ではないんだよ。

もう30年も前から言われていることだが、フローチャートってのは
複雑性を縮減する機能が全くないだろう。
ただベタに処理をチャートで表現しただけだからな。
だったらそんなもの書いてる暇があったらとっととコード書けってw

こんな人間が後輩の育成とか釣りではなく言ってるならどんだけ馬鹿なんだよw
っていうかこんな人間に「育成」される人が可哀想だ。

890:デフォルトの名無しさん
08/04/03 19:42:38
>>887
正規表現で指定したい場合なら、何の変哲もないが

With New RegExp
.Pattern = strSerch
'.IgnoreCase = False
.Global = True
found = .Execute(webtext).Count
End With

でいいんじゃね?
IgnoreCaseプロパティは必要に応じて指定すれば良し
>>871の場合の結果は後者

891:kuchigakusaiossan
08/04/04 11:47:41
すいません、スレ異かな。WSHの言葉だけで来ました。
悩んでます。だれか教えぇぇぇぇ~~て

EXCEL2003 VBAで 
 URLリンク(www.happy2-island.com) あたりに
   WScript.Sleep 5000  っていうのがさりげにつかってありますが
    オブジェクトが必要です というエラーが出ますうううぅぅぅぅぅ
 私はどうすればいいのでしょうか。
 悩みと疲労で歯槽膿漏がますますひどくなりますうううぅぅぅ
ぐぐると以下の同じような人もいます。だれか愛の手を
win32のsleepとかはなしで、Wscript.echo もつかいたいし
 
>Excel VBA質問スレ Part5
878 :デフォルトの名無しさん:2008/03/02(日) 23:54:52
物凄く基本的な事で申し訳ないのですが・・・、処理待ちでスリープを掛けたく、
 WScript.sleep (250)
と記述していますが、エラー424 オブジェクトが必要です というエラーが出るのです。

何か参照設定が足りないんでしょうか。。

879 :デフォルトの名無しさん:2008/03/02(日) 23:56:42
ググれよ・・・

880 :デフォルトの名無しさん:2008/03/03(月) 00:01:10
>>878
WScript.exeを参照設定しろー

892:デフォルトの名無しさん
08/04/04 16:05:48
すれちがい

893:デフォルトの名無しさん
08/04/04 17:04:30
ぐぐれもん

894:デフォルトの名無しさん
08/04/04 17:05:30
WScript.exeを参照設定しろ

895:デフォルトの名無しさん
08/04/04 19:36:53
実際問題としてVBAならDeclareが一番楽だと思うんだ

896:デフォルトの名無しさん
08/04/04 21:11:06
Application.Waitのほうが簡単

897:デフォルトの名無しさん
08/04/04 21:15:39
>>887

898:デフォルトの名無しさん
08/04/05 02:12:04
>>889
後輩つぶし必死だなwww
そんなに若者に追い越されるのが怖いのかい?

>そんなもの書いてる暇があったらとっととコード書け

で書いたのが、>>864 だよ。
キミは後輩にこんなコードを書かせて満足してるんか?

899:デフォルトの名無しさん
08/04/05 03:26:18
いいぞもっとやれ

900:デフォルトの名無しさん
08/04/05 04:37:18
よそでやれ

901:kuchigakusaiossan
08/04/06 14:14:28
>>891 自己レスですぅ
誤った解釈は、URLリンク(www.happy2-island.com) はVBAじゃなくWSHのスクリプトそのもらしい。
URLリンク(www.atmarkit.co.jp)
から考えましたが
Wshスクリプトないでは wscriptは暗黙にオブジェクト化されそのまま参照可能である
VBAからはwscript そのもののオブジェクト化はエラーになる
Dim WSH
Set WSH = CreateObject("WScript") ← エラーになる
WSH標準オブジェクトはオブジェクト化できる
Dim WSH
Set WSH = CreateObject("WScript.shell")
WSH.Run ("sleep 3")
WSH.Run ("echo test")
  ↑ はOK sleep echo は意味ありませんが
以上の事で混乱していたみたいです
なぜVBAからWscriptのオブジェクト化ができないのか?回避策は?などは
誰か~~ 知ってる人おらんか。。。。。。 ヨロシク

902:デフォルトの名無しさん
08/04/06 14:30:59
だいたいそういうこと。
WScriptオブジェクトはwscprit.exe/cscript.exeがスクリプトへ与えるもので、
その大半はスクリプトを実行したときでいないと意味を成さない。

例えば、WScript.SleepならVBではWin32 APIのSleep関数を使えばいいという具合に別の方法がある。

903:デフォルトの名無しさん
08/04/06 16:24:34
スレ違い
【OLE】オートメーション総合スレ【ActiveX】
スレリンク(tech板)l5

904:デフォルトの名無しさん
08/04/06 16:33:35
ActiveScript絡みだしギリギリOKじゃね?
OLEオートメーションは一寸戻り過ぎだ。

905:デフォルトの名無しさん
08/04/06 17:12:55
>なぜVBAからWscriptのオブジェクト化ができないのか?

できるけど?

906:デフォルトの名無しさん
08/04/06 17:29:47
Set WScript=GetObject("WScript.exe")

907:デフォルトの名無しさん
08/04/06 17:38:31
WScript.exeをtlbimpした.NETアセンブリを作って、
それをregasmしてVBAから呼び出す。

908:デフォルトの名無しさん
08/04/06 20:34:49
なぜWSHからVBAの関数やステートメントが呼べないのか?回避策は?などは
誰か~~ 知ってる人おらんか。。。。。。 ヨロシク

909:デフォルトの名無しさん
08/04/06 20:56:36
VBAは外部に公開されていないし、ステートメントは論外だろ。
よって回避策も無い。呼び出すこと自体が目的でないなら別だけど。

910:デフォルトの名無しさん
08/04/07 02:23:47
>>905

どうやって作るのかコーディング例希望

ちなみに  >>906 は excel2003VBA では 「オートメーションエラーです」になる。なにかおまじないが必要なら
ご教授ねがいたい。くれぐれも実際に動作する説明でお願いしたい。






911:デフォルトの名無しさん
08/04/07 02:37:28
>>908>>909
回避策でよいなら、Office経由で可能では?
WSHからOfficeのオブジェクト作って、非表示のOfficeのドキュメント内にVBAのコード
動的に登録して実行すればよい
とはいっても最近ではセキュリティの関係でOfficeの外部からVBAコード操作するとエラーになるけど、
これについては設定変えればいけると思う(たぶん)


912:デフォルトの名無しさん
08/04/07 17:19:56
>>910
WScriptは外部に公開されていないし、CreateObjectは論外だろ。
よって回避策も無い。呼び出すこと自体が目的でないなら別だけど。




913:デフォルトの名無しさん
08/04/07 17:22:25
>>910
回避策でよいなら、Office経由で可能では?
WSHからOfficeのオブジェクト作って、非表示のOfficeのドキュメント内にWScriptのオブジェクトを
動的に登録して参照すればよい


914:デフォルトの名無しさん
08/04/07 17:27:23
>>908
Excel.Application.Run (Excel2002以降は不可)
Access.Application.Eval (関数のみ)
FoxPro...

915:デフォルトの名無しさん
08/04/09 23:05:58
htaなんて便利なものがあるのを初めて知った。
まだpowershellはいいや。

916:デフォルトの名無しさん
08/04/10 12:25:35
すれっち

917:デフォルトの名無しさん
08/04/10 22:06:04
Set WSH = CreateObject("ほげほげ")
は、
Set WSH = WScript.CreateObject("ほげほげ")
の WScript を省略したもの。WScript はデフォルトで用意されているから。

>>901 Set WSH = CreateObject("WScript") ← エラーになる

これを長く書くと、こうなる。
Set WSH = WScript.CreateObject("WScript")

なんか変だよね。

918:デフォルトの名無しさん
08/04/10 22:11:34
> Set WSH = CreateObject("ほげほげ")
> は、
> Set WSH = WScript.CreateObject("ほげほげ")
> の WScript を省略したもの。WScript はデフォルトで用意されているから。
違うよ

CreateObjectはVBSのグローバル関数(メソッド)
> CreateObject(servername.typename [, location])

WScript.CreateObjectはWSH(WScriptオブジェクト)の関数(メソッド)
> object.CreateObject(strProgID[,strPrefix])

動作は似てるが引数(得に第二引数)の内容も違う

919:デフォルトの名無しさん
08/04/10 22:41:44
違うよ ここでは

CreateObjectはVBAのグローバル関数(メソッド)

WScript.CreateObjectはWSH(WScriptオブジェクト)の関数(メソッド)
なのでVBAでは使えない

ちなみにWSHでは
Set WSH=
はエラー


920:デフォルトの名無しさん
08/04/11 01:14:52
ADOでExcelに接続してワークシートをテーブルに見立ててクエリ投げる、ってのあるじゃないですか、
Excelが2000・2002(XP)・2003の環境だと問題ないんだけど、今日同じソースでExcel2007で初めて動かしたら
ADO接続のところでエラーになった。 もしてかして2007ってこれ使えない?


921:デフォルトの名無しさん
08/04/11 10:18:52
当然

922:デフォルトの名無しさん
08/04/11 12:33:43
>>921
こういうレスって2007使ってない奴には何が当然かさっぱりわからんわな。

923:デフォルトの名無しさん
08/04/11 18:31:53
>>921
thx!

924:デフォルトの名無しさん
08/04/11 21:49:08
>>922 kwsk

925:デフォルトの名無しさん
08/04/11 22:08:45
>>919
ここでは、って言われても・・・
ここはWSHのスレだろ?VBAのスレじゃ無いよ。

926:デフォルトの名無しさん
08/04/11 23:34:51
質問文の日本語を読めなかったの?

927:デフォルトの名無しさん
08/04/12 01:45:37
質問文の日本語を読めば、ここがVBAスレに変身するのか?

928:デフォルトの名無しさん
08/04/12 11:20:49
ここがWSHスレだから、元レスがWSHの質問文に変身したというのか?

929:デフォルトの名無しさん
08/04/12 14:12:30
>>910
WScript.exe /register

930:デフォルトの名無しさん
08/04/12 14:18:02
regsvr32 WScript.exe

931:デフォルトの名無しさん
08/04/12 16:38:59
>>910
WSC作って
Set WScript=GetObject("script:WScript.wsc")

932:デフォルトの名無しさん
08/04/12 17:01:40
>>929-930
こういう小学生的なレスの意味は?

933:デフォルトの名無しさん
08/04/12 17:12:27
他人の人生の意味なんか考えてても人生の無駄だぜ

934:デフォルトの名無しさん
08/04/12 21:05:43
他人が以下に自分より劣ってるかというのは重要だぜ

935:デフォルトの名無しさん
08/04/12 21:14:35
他人が恥を晒しているのが見れるのは重要だぜ

936:デフォルトの名無しさん
08/04/13 00:56:49
>>932
レベルを相手に合わせてるんじゃないの?

937:デフォルトの名無しさん
08/04/13 01:08:50
そう思ってるのは本人だけ。

938:kuchigakusaiossan
08/04/13 13:15:30
WSHのソース作成&デバッグってみなさんどうしてるの?
vbs をダブルクリック等で起動するようなスクリプトを
VB(A)と同じようようなデバッグ環境でデバッグできますか?

excel2003の Script Editor が使えるのかなと動かしてみたが
これはWEBのVBS用なのかな。。?
スッテップイン させてもブラウザが動いてステップしないし

ぐぐるとWSHではそのままでは動かないような事もでてくるし
URLリンク(www.sio.no-ip.com)

イミディエィトウィンドウがないみたいだし

エクセルVBAで書いてるソフト(自己使用)のメイン部分をWSHにしてエクセルから外にだそうと
考えていいますが、すなおに VB(Visual studio ?)にでもしたほうがいいのかな。。。

よろしく~~~~~~

939:デフォルトの名無しさん
08/04/13 13:26:29
Msgbox デバックだろ。常考。

940:デフォルトの名無しさん
08/04/13 13:32:17
VisualStudio持ってるけど、VBS相手に使ったことないなぁ~

使ってる/使ったことあるひと教えて~

941:デフォルトの名無しさん
08/04/13 13:39:34
wscript //?

942:デフォルトの名無しさん
08/04/14 02:35:34
VisualStudio 2005 Enterprise Edition は
コード補間のできるVBSエディタとして使ってるけど
デバッグは MsgBox や Wscript.Echo だな。
これは VBS に限らず、すべてのプログラミング言語に共通する
基本中の基本だな。

943:デフォルトの名無しさん
08/04/14 08:30:01
MSがscript debugger とかいうの配布してなかったっけ?
おれもmsgboxデバッグ派だけど。

944:デフォルトの名無しさん
08/04/14 11:36:24
デバッガ使うよりメッセージ出力のほうがいい理由って何?

945:デフォルトの名無しさん
08/04/14 12:27:54
デバッガがある環境は限られるが、メッセージ出力はメモ帳があれば追記できる。

946:デフォルトの名無しさん
08/04/14 14:31:09
ScriptDebugger って生VBSで使えたんだっけ?
たしかIEのオプション(?)でASPとか向けだった気がするんだけど。

947:デフォルトの名無しさん
08/04/14 16:00:59
>>941

948:デフォルトの名無しさん
08/04/15 01:00:37
VisualStudio だとVBSのステップ実行できないし変数ウォッチできないだろ

949:デフォルトの名無しさん
08/04/15 01:09:09
つまりScriptDebuggerならステップ実行&変数ウォッチができるってこと?

950:デフォルトの名無しさん
08/04/15 07:44:18
>948 できないよ

951:デフォルトの名無しさん
08/04/15 08:34:13
そのdebuggerってフリーなの?

952:デフォルトの名無しさん
08/04/15 12:58:30
WSHってかvbsは外部コマンドも呼びづらくパイプ処理も面倒で
かといってWin32APIも呼び出せず単体ではモジュール化もできないと制約だらけだな。
これほど使いづらい言語はお目にかかったことがない。

953:デフォルトの名無しさん
08/04/15 13:23:32
>WSHってかvbsは外部コマンドも呼びづらくパイプ処理も面倒で
>かといってWin32APIも呼び出せず単体ではモジュール化もできないと制約だらけだな。

自分の無知を言語のせいにする典型だなw

954:デフォルトの名無しさん
08/04/15 13:57:29
言語を使いこなせない狐が酸っぱい葡萄と言うんだって?

955:デフォルトの名無しさん
08/04/15 14:33:46
WSHでAPI呼べるの?

956:デフォルトの名無しさん
08/04/15 14:40:28
そういうCOM使って呼べる

957:デフォルトの名無しさん
08/04/15 14:44:20
>>955
WSHでもAPIは呼べるよ
ActiveXって種類のAPIなら直接ね
そしてWin32APIって種類のAPIはActiveXから呼べるので
結果WSHからWin32APIを呼ぶことも可能

958:デフォルトの名無しさん
08/04/15 14:47:25
よーするに呼べないってことですね。

959:デフォルトの名無しさん
08/04/15 14:53:11
馬鹿には呼べないってことですね。


960:デフォルトの名無しさん
08/04/15 14:56:35
vbaは外部コマンドも呼びづらくパイプ処理も面倒で

961:デフォルトの名無しさん
08/04/15 15:20:27
言語仕様もひどいもんだしな

962:デフォルトの名無しさん
08/04/15 15:24:15
>ステップ実行

1行ごとにStop文

963:デフォルトの名無しさん
08/04/15 20:40:33
>外部コマンドも呼びづらくパイプ処理も面倒

なのは"WScript.Shell"がへぼいせいで、もっといいCOMを作れっていうの

964:デフォルトの名無しさん
08/04/15 22:25:44
COM作れるんだったらそっちの開発環境で完結すればいいんじゃね
なにもWSHなんぞ使わんでも

965:デフォルトの名無しさん
08/04/15 22:36:02
MSに文句を言ってるんだと思った

966:デフォルトの名無しさん
08/04/16 14:40:24
>なのは"WScript.Shell"がへぼいせいで、もっといいCOMを作れっていうの

だれか作って

コンソールを非表示にできる
StdOut/StdErrにデータがあるかブロックしないで調べられる/取り出せる
できればStdInにreadが掛かってるか分かる

967:デフォルトの名無しさん
08/04/16 14:42:39
WSHにのってるまともなスクリプト使えば一瞬で解決だろ

968:デフォルトの名無しさん
08/04/16 14:53:31
追加
AppActivateでなくFindWindowどまりの機能
SendMessageもついでに

969:デフォルトの名無しさん
08/04/16 21:02:45
>>952

970:デフォルトの名無しさん
08/04/16 21:05:45
COMに手を出す時点で、WSHに拘る理由がなくなるな。
そのまま他言語で書いた方が早い。

971:デフォルトの名無しさん
08/04/16 21:37:36
一時的に目的を達成するだけならね

しかしそういう状況のみではないんだよ
もっと視野を広く持とう

972:970
08/04/16 22:00:06
むしろ、WSHに拘っている方が視野が狭いと思ったわけで。
>>966>>968程度の機能でいちいちCOMコンポーネント書いて、
使うPC毎にいちいちregsvrして、って唯のギャグだろ。

973:デフォルトの名無しさん
08/04/16 22:12:48
そうでもないか

974:デフォルトの名無しさん
08/04/16 23:38:14
>>972
そうそう。
だから、WSH付属のコンポーネントがもっと高機能だったらよかったのにと思う。

975:デフォルトの名無しさん
08/04/17 09:25:24
何故自分にレス?

976:デフォルトの名無しさん
08/04/17 13:27:53
自意識過剰w

977:デフォルトの名無しさん
08/04/19 09:49:46
オプションって//じゃなくて/でもいいの?
1つでも動くっぽいんだけど
cscript /nologo xxxxxxxxxxx
って感じで


978:デフォルトの名無しさん
08/04/19 11:38:38
おk

979:デフォルトの名無しさん
08/04/19 13:49:30
/と//になんか違いはあるの?

980:デフォルトの名無しさん
08/04/19 15:53:43
スクリプトのファイル名の後にオプションを記述するときは
//でなければならない。

981:デフォルトの名無しさん
08/04/19 16:28:44
へー

982:デフォルトの名無しさん
08/04/19 17:07:02
cscript -nologo xxxxxxxxxxx
でもよい

983:デフォルトの名無しさん
08/04/19 18:05:11
どうでもよい


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch