136 :
デフォルトの名無しさん :
2007/07/22(日) 22:35:56 PrintScreenキーを押す方法何かない?
>136 俺ならIrfanViewをコマンドラインで実行し、デスクトップ画面全体または 現在アクティブなウィンドウをファイル化するけどな。
PowerShellならできる?
できるよ
VBSについての質問です WINDOWSからSolarisにFTP接続してファイルを取得するVBスクリプト。 ・ /export/home/backup/mysql/の下にあるファイルを取得 ・ /export/home/backup/www/の下にあるファイルを取得 ・取得したいファイル名をリスト化、そのリストを読み込んで、 1つのファイルをGET.→FTP切断→FTP接続→ファイルGET→FTP切断の繰り返し ・取得したファイルはSolarisから削除 ・日付を管理。最新のを5つだけ残す。一番ファイルを削除 こういったVBSは、さぁどうつくればいいんでしょうか?
143 :
デフォルトの名無しさん :2007/08/03(金) 23:24:29
構成 A ファイル一覧がほしいPC B スクリプトを走らせるPC AとBはネットワークで接続されています BからAに接続してファイル一覧(Cドライブ以下すべて)をもらうスクリプトを作りたいです Bは手元にあり自由に弄れます スクリプトを走らせる事やどんな操作も可能です Aはずっと起動していてポートは開放されていますがPCの操作はできません PCのON、OFFや一定時間PCに触らない事などは依頼することが可能です しかしスクリプトの実行やパソコンの操作を依頼することはできません(ファイル共有などの操作はできない) そしてAは日によって違うPCが接続されています 以上の条件を満たすスクリプトを作成するにはどのような方法があるのでしょうか?
144 :
デフォルトの名無しさん :2007/08/03(金) 23:35:39
疼く、悪の予感
>>143 >以上の条件を満たすスクリプトを作成するにはどのような方法があるのでしょうか?
まずお前さんが質問の仕方の勉強をする事。次に、なんでもいいからプログラミング言語を
一つ学ぶ、という方法がある。
これは、流石に胡散臭すぎだろ。
>>143 ファイル一覧はそもそも秘密情報であり、セキュリティ上、他マシンから参照できては
ならないもの。
A自身に仕込みがなければ無理。
もしかしたらDCOM経由である程度のことはできるのかもしれない。 俺はよくわかっていないけど。
149 :
デフォルトの名無しさん :2007/08/04(土) 01:10:07
セキュリティホールつかないと無理
セキュリティホール(笑)
エスケープシーケンス使って文字列の色を変更したいんですが WScript.Echo で表示するとそのまま出てきてしまってうまくいきません。 なんかいい方法ないですかね?
>>151 WScript.Echo 以前に NT のコマンドプロンプトではエスケープシーケンス自体がサポートされてない。
config.nt ansi.sys でググれ。
153 :
151 :2007/08/05(日) 11:10:55
>>152 ググってみました。コマンドプロンプトではエスケープシーケンスがサポートされてないんですね。
ansi.sys を組み込んでも 16bit で動かない限りうまくいきそうにないので WSH で文字色変えたりするのはあきらめます。
ありがとう。
color/? または powershell
VBSで優先度を指定してIEオブジェクトを生成する方法はないですか? start /low wscript hoge.vbs だと起動されたIEに優先度が継承することはありませんでした。
WMIのあたりを調べてみてはどうだろう。 Win32_ProcessにSetPriorityってメソッドがあるみたい スクリプトからCOMで操作しつつっていう前提だと うまく使えないかもしれないけど
>>156 ありがとうございます。
WbemScripting使ってプライオリティ変えることができました。
158 :
デフォルトの名無しさん :2007/08/16(木) 22:09:55
素直にダウンローダ使っとけよ
>>158 当然出来るよ
まあHTMLの知識とか無かったら無理だろうし
ここはそういうスレでもないから具体的な方法は伏せるけどね
ここはいつからHTMLスレになったの?
>>161 ここはWSHスレだと思うが。
WSHで出来るなら、是非ご教示願う。
WSH自体(WScript.exe)では出来ない WSHから使えるHTMLコンポーネントで出来る このコンポーネントはWSH用ではなくActiveX汎用コンポーネント 因ってWSHからの操作で可能ではあるが WSH専用でもない汎用コンポーネントの使い方や 基本的なHTTPリクエストの出し方とかはスレ違い 車でドライブが可能でも、カーディーラーに行ってドライブコースを聞くのはお門違いなように
?
C言語スレで標準ライブラリのことを聞いたら 「それはC言語ではなくライブラリの使い方だろ。死ねよ」 って言われたような、そんな衝撃
WSHのパッケージ付属コンポーネントにHTML系有ったっけ? FSOやDictionaryが付属してるのは知ってるが
WSHはIE4の付属コンポーネントだったよ。
で?
171 :
158 :2007/08/17(金) 01:02:41
ちょ、おまいら落ち着こうぜ。
>>159 とりあえず春閣下関連を全部一括ダウンロードしようと思って
タグ検索してURI一覧を作るところまではさっき完成したんで
冷静に考えたらあとはSmileDownloadにぶっこめば終わりだね。
>>171 それが正解。
たぶんniconicoってHTMLの中にflvのURL埋め込むとかそんな単純なことしてないと思う。
だから、技術的にはHTTPのコンポーント(XmlHttpとかWinHttp)があれば十分
なんだと思うけど、解析難易度は高くて、HTMLの解析なんてささいな問題じゃないかな。
断片化されたURL情報をFlashの中で復元するなんてしてたら、普通に追いかけても無理。
>>172 IEコンポで検索結果ゲットしてリンク全ゲットして
smileっぽいとこ全抽出しておしまいだったしね。
どうせならWSHで最期までやってみたかったけど
それより閣下に早く会いたかったので妥協した。
JScriptでMSXMLを利用してweb上のxmlファイルから文字列を取得したいと考えています。
以下のようなファイル構造のとき、「あいう」の部分と「かきく」の部分をそれぞれstr1とstr2に代入するには、
どう記述すれば良いでしょうか。
アドレス:
ttp://test/test.xml <?xml 〜 ?>
<aaa name="あいう">
<bbb>
<ccc>かきく</ccc>
</bbb>
</aaa>
responseXML を適当に selectSingleNode とかで XPath 使って検索する
176 :
デフォルトの名無しさん :2007/08/20(月) 23:42:45
すみません、初心者です。 Jscriptで開いたサイトのソース(html)を変数に入れるには、 どうすれば宜しいでしょうか。 ブラウザはIE6です、よろしくお願いします。
178 :
176 :2007/08/21(火) 22:04:01
>>177 Document.body.innerHTMLも試したつもりでしたが、
もいちど、やってみると、、、できたーーー。
すごくうれしいです、ありがとさんでした。。。
>>178 タイミングによるんじゃないの?
Navigateした直後にページ内容読み出そうとしているとか。
DocumentCompleteのイベント内とかで読まないとうまくいかない可能性が高くなる。
立川警察の警官のおかげでストーカーには セックスを伴うストーキングと セックスを伴わないストーキングの 2種類あるということを初めて知りました
WSHからSQL薄幸とか可能?
君に出来るかどうかは知らないが 技術的には可能だよ
画面のプロパティの画面の色をスクリプトで変更したいんです。 その日の気分で色変えたいんで、ワンクリックでできるようにしたいです。 ヒントよろしくお願いします。
HKEY_CURRENT_USER\Control Panel\Colors以下をいじる。 正直どの程度の事を聞かれてるのかサッパリなのでこれだけ書いておく。 後はWSHなりAHKなりregファイルなり好みの方法で。
>>185 ありがとうございます。
レジストリ値を変更したあと、ログインし直さないと変更が反映されないんですが
すぐ反映させる方法はありますか?
ありますよ そのくらいは自分で調べようね
WM_SETTINGCHANGEとか?
名前にフィルタ掛けて抽出したzipファイルを、 コマンドラインに渡して、無事解凍できたら消すって趣旨のスクリプトを組んでいて、 いざ消すときにまだコピー中な為か、ファイルが使用中だというエラーが でてしまうので、コピーが終わったかどうか確かめる関数を作ろうと 思っているんですが、まったく思いつかないよーー 似たようなことやったことある人とかアドバイスください
VBSならOn Error Resume Nextした上で、ループ内で消せばいいさ 消せたらループ抜けるようにしておけば、消せた時点でループ抜けて次の処理に移れる On Error Resume Nextしておけば、消せなくてもエラーメッセージ出さずに ループ内で何度も消去試行してくれる あとはアーカイバツールに渡すときに、処理が終わるまで次の処理に移らないようにしておくとかね どちらもWSHのヘルプに載ってるので、詳しくはそちらを見てね
そんなブサイクな発想より普通は解凍ソフトからの戻り値に期待するもんだ
それはハズレ
プロセスが起動中ならまだ動いてるんだよ
宇宙開拓史ののび太並みの天才発言だな
「この機械、こわれる前はこわれてなかったんだろ」 ってやつだな。
197 :
デフォルトの名無しさん :2007/09/11(火) 10:56:39
Script56.CHMの目次が不完全な件
今更?
199 :
デフォルトの名無しさん :2007/09/14(金) 18:52:35
wshで、COM1とかのシリアルポートとやりとり する例ってどこかにありませんでしょうか? Scripting.FileSystemObject でopenしたりReadLnしたり できるんでしょうか?
FSOをなんだと思ってるんだこいつ
>>199 MSCommを使う
PCに入っていない?そんな時はVB6ランタイムでゴニョゴニョ...
202 :
199 :2007/09/15(土) 18:03:21
>>201 なるほど。でもVB開発ライセンスが要るみたいですね。
最終的に配布したいので、標準の環境で動かしたかったのですが・・
通信用の外部プログラム作成したほうがいいですね。
.NET Framework 2.0が使えるなら 名前空間 System.IO.PortsのSerialPort クラスあたりを 使うのが楽
スレの衆、おこんばんは。 俺つい昨日まで、MS-DOSの時代に流行ってたLSI-C86試食版という Cコンパイラを使って、プログラムをメモ帳で書いてたんよ。 長いファイル名をどうにかする必要があるときは、バッチファイルを 書き出すプログラムを書いてからバッチ実行、とかね。 Oh, WSH! なんてこったい、こんな便利なもんが最初からあるのを知らなかったなんて・・・orz
>>204 LSI-C86試食版で長いファイル名を使えるようにするライブラリがあるのに。
BCCとかVC2005Expressとかただで使えるWindows用コンパイラがいくつもあるのに。
いろんな意味でご苦労さん。
>204 右クリック→[送る](SendToフォルダ)経由でファイルやフォルダを引数として渡す場合、 バッチファイルだとOSによって挙動がまちまちでイマイチ使いづらいんだよね。 (特にWin2000以外) その点、WSHのVer5.0〜5.6だとWin95〜XPまで使い勝手を何とか統一させる事ができる。 (それなりの配慮は必要だが)
>>204 LSI-C86試食版で頑張っていたおまいは凄すぎ。
昔C言語独学しようと思って初めに手を出したのがそれだったが、
結局Quick-Cに逃げちゃったよ。あれ、独自仕様多すぎね?
208 :
204 :2007/09/18(火) 00:41:36
あれあれ? 結構おっさんでしょお前様たち (・∀・)人(・∀・) 今は、プログラムを書くってのは緊急事態だったりするので 手持ちのツールと知識だけでなんとか乗り切るやり方を続けて ここまで来てしまったよ。
WSHから、お気楽3Dできないか考えてるんだけど、まずは、ブランクウインドウって表示できないのかな? 要はHWNDとってきてDirectXにくっつけてスクリプト側でそうさって感じ。 DirectXはCOMだからなんとかならないかな〜と、駄算してる。 ウインドウはIE使ったほうがはやいのかなぁ? 助言お願いします。
LooseXAMLなんてどう?とか適当な事を言ってみる。
素直にFLASH使えよw
>>211 あ、どうりで情報がないわけだ。
レスありがとう。
>>209 手元のPCを見てみたら、DirectX 7と8しかタイプライブラリがなかった。
ググってもDirectX 9のはなさそうな感じ。
だから7/8はいいけど、DirectX 9をスクリプトから使うのは無理そう。
>>213 レスサンキュー。
無理とわかったからにはフラッシュを検討してみるよ。
LSI-C86試食版てwwwwwww 懐かしすぎて泣ける(;´Д⊂)
LSI-C86試食版か。。。。。 Cマガジンとかに付録でよくついてたな。
実食した奴がどれくらいいるのか非常に気になる
219 :
171 :2007/10/10(水) 08:28:17
いま、携帯用のPCブラウザを作ろうと思って始めたのですが、 レジストリの部分で引っかかってしまいました。 (標準)=の所にはどう書けばよいのでしょうか? WshShell.RegWrite "HKLM\Software\Microsoft\Windws\CurrentVersion\Internet Settings\5.0\User Agent","orz","REG_SZ" PREとPOSTはOKですが、携帯では使わないんで・・・
スレ違い
221 :
デフォルトの名無しさん :2007/10/10(水) 13:13:22
キー名を指定する場合は最後にバックスラッシュ(\)を付ければいいので WshShell.RegWrite "HKLM\Software\Microsoft\Windws\CurrentVersion\Internet Settings\5.0\User Agent\","orz","REG_SZ" でおk
222 :
デフォルトの名無しさん :2007/10/10(水) 21:50:04
>221 神降臨です ありがとうございました
223 :
デフォルトの名無しさん :2007/10/11(木) 22:20:38
WSHでクッキーのクリアってどうすればよかですか? IE立ち上げてsendkeysでもこもこと移動させて消していたんですが、 失敗が多い… どぎゃんすればよかですか?
Netscape Navigator MacOS → 「システムフォルダ:初期設定:Netscape:MagicCookie」 Windows → 「\Program Files\Netscape\Navigator\cookies.txt」 または「\Program Files\Netscape\Users\ユーザ名\cookies.txt」 Internet Explorer Windows 95 → 「\Windows\Cookies\Windows\Temporary インターネット Files\」 Windows 98 → 「\Windows\Cookie\」 Windows XP → 「\Documents and Settings\ユーザ名\Cookies\」 のあたりのファイルを直接削除すればいいのでは?
?:\Documents and Settings\<User>\Cookies\内のファイルを 全部消して良いなら... var Shell = new ActiveXObject("Shell.Application"); var Cookies = 0x21; var CookiesFolder = Shell.Namespace(Cookies).Self.Path; var CookieFilesPath = CookiesFolder + "\\*.txt"; var Fso = new ActiveXObject("Scripting.FileSystemObject"); Fso.DeleteFile(CookieFilesPath);
226 :
デフォルトの名無しさん :2007/10/15(月) 21:19:28
気張って返事が遅れますた もうしわけなかです。 ありがとうございました
// fc.js - 中身が同じファイルを見つける
var CapicomUtil = new ActiveXObject("CAPICOM.Utilities");
// ↑
http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&DisplayLang=ja var Fso = new ActiveXObject("Scripting.FileSystemObject");
var Stream1 = new ActiveXObject("ADODB.Stream");
var Stream2 = new ActiveXObject("ADODB.Stream");
var StreamType = {Binary: 1, Text: 2};
var ReadSize = 64;
Stream1.Type = Stream2.Type = StreamType.Binary;
function CompareFiles(file1, file2) {
Stream1.Open();
Stream2.Open();
Stream1.LoadFromFile(file1);
Stream2.LoadFromFile(file2);
var rc = true;
while (! Stream1.EOS) {
if (CapicomUtil.BinaryToHex(Stream1.Read(ReadSize))
!= CapicomUtil.BinaryToHex(Stream2.Read(ReadSize))) {
rc = false;
break;
}
}
Stream1.Close();
Stream2.Close();
return rc;
}
/* つづく...
...つづき */ function GetFileLists(folder) { var lists = {}; for (files = new Enumerator(Fso.GetFolder(folder).files); ! files.atEnd(); files.moveNext()) { var file = files.item(); var size = file.Size; if (! (size in lists)) lists[size] = []; lists[size].push(file.Name); } return lists; } function CompareFileList(folder, list) { var len = list.length; folder += "\\"; for (var i = 0; i < len; i++) for (var j = i + 1; j < len; j++) if (CompareFiles(folder + list[i], folder + list[j])) WScript.Echo(list[i] + " == " + list[j]); } var folder = "."; var lists = GetFileLists(folder); for (var i in lists) CompareFileList(folder, lists[i]); /* End of File */ 関数名等が変ですが(^ω^;)
いや、関数名以前に・・・・・w
if (Stream1.Read(-1) != Stream2.Read(-1)) {
COMでIEを操作する際に、JavaScript や <a href="..." target="_blank">...</a> でポップアップして 新たに開いた子IEのオブジェクトを得るにはどうしたら良いでしょうか?
232 :
sage :2007/10/27(土) 10:52:08
>>204 .NetFrameWorkってwshから使えるの?
>>232 204ではないが、.NetFrameworkとWSHは別物
ただし、.NetFrameworkの提供するクラスライブラリのいくつかは
COMインタフェースが公開されているので、それらのクラスに
ついてはWSHからでもCOM経由で利用することはできる
>>231 ShellのWindowsメソッドで列挙してParentが元のと一致するの、と言うのを考えてみたが
泥臭いので検証もしていない
235 :
デフォルトの名無しさん :2007/10/27(土) 15:14:39
(・∀・)つ●
つopener
それは子から親であって親から子ではないんじゃね?
>>232 たいしたものは使えんよ。
PowerShellなら.NETもWin32APIも使い放題だわ
WSHじゃ無理だけど BeforeNavigate2でCancelして別のIEでNaviagte
241 :
デフォルトの名無しさん :2007/10/29(月) 19:42:35
はじめまして。今、WebからAccessを実行し、それに引数を渡す方法を探しています。 Set objShell = CreateObject("WScript.Shell") objShell.Run "\\hogehoge\hoge.adp /cmd Hello,World" イメージとしてはこういう感じかなぁと思いコードを組んでいますが引数を渡す段階まで至っていません。 エラーは出ないのですが、引数がCommand$で受け取れないという状況です。 Accessをフルパスで指定する必要があるのかと思い objShell.Run """C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE"" ""\\hogehoge\hoge.adp /cmd Hello,World""" 2行目を上記のように変更してみましたが、こちらはHello,Worldまでがファイル名と認識されてしまい、実行できません。 ローカルでなら "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" C:\hogehoge\hoge.adp /cmd Hello,World というショートカットを作成する事でAccessに引数を渡すところまでは行っているのですが。 ただ、フルパスで指定するってのは、人によっては環境も違うわけで… Officeのインストールパスを探す環境変数って無いですよねぇ 出来れば3行目の方向性で、こうすればいいよとかアドバイスを頂けませんでしょうか
>>241 ""\\hogehoge\hoge.adp /cmd Hello,World"" の前後の""は要らないのでは。
MSACCESS.EXEのフルパスは
objShell.RegRead "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE"
または
objShell.RegRead "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE\Path" & "MSACCESS.EXE"
で取得できます(上は8.3形式となる)。
Runするのにフルパスは要らん
>>242 runしたらその情報が自動的に使われるのでは?
>>244 Runの仕様上はそうだから、RegReadする必要がないと言えばないですよ
確かにRunで動かすだけならフルパスは要らないな。 でも、ローカルでコマンドライン引数渡そうとしたらフルパス必要、と。 結局、WebからWSH使って引数渡すにはどうすればいいんだろ?
だいじょうぶ?
標準入力
249 :
241 :2007/10/30(火) 14:17:39
色々アドバイス有難うございました。
>>242 さんの意見を参考に組んでみた所、引数を渡せる事を確認しました。
Set objShell = CreateObject("WScript.Shell")
strFile = "\\hoge\hoge.adp"
strPath = objShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE\Path") & "MSACCESS.EXE"
objShell.Run """" & strPath & """ """ & strFile & """ /cmd hoge"
どうも、引数を渡したい場合にはACCESSのフルパスを省略出来ないようで。
単純に実行したいだけならADPファイルのフルパスのみで可能でしたが。
なかなか難産でしたが、ようやく先に進めます。
ありがとうございました。
わからんやっちゃ
WMIでthreadの数は分かりますが、どれがなんのthreadか調べるにはどうするのでしょうか?
意味が分からん スレッドってもんを正しく認識できてる?
理解してないだろうね
こういう子には
>>251 1年勉強して出直しなさい
ということで
Win32_Thread.Name
WSHで、キーボードのボタンのどれを押したかを取得する方法はないでしょうか? たとえば、tabボタンやカーソルキーを押した場合を考えています。
256 :
255 :2007/11/11(日) 00:36:14
追加です。 想定しているのは、while(true){...}のなかに処理が入ったときに、 コンソール上からタブボタンを押すと、while(true)からぬけるようなものです。
WSHではスレッドが一つなので入力を受け付ける場合は処理を止めなければならない。 WSH(wscript.exe,cscript.exe)を2つ実行して、一方をフラグ的に使えば擬似的に出来ないことも無いが 君が想定してる通りのことはWSHだけでは無理。 COMを自作するって手もあるけど、だったら普通のアプリ作った方がいいだろ。 あとは君が想定してる通りのことを出来るスクリプト言語に乗り換えるとかね。 スレ違いだから具体的な紹介や説明は伏せるけど。
WSHに翻訳できない?
IEの場合、JScriptで ie.document.getEtementsByName('foo')[0] は使えても、 ie.document.getElementByID('foo')[0] はエラーになるんだね。
JScriptからだと、windowオブジェクトのopenerやparentってもしかして使えない?
Etements 複数形だし
264 :
デフォルトの名無しさん :2007/11/16(金) 20:00:56
XPsp2の環境に
>
http://www.imagemagick.org/script/binary-releases.php から
>ImageMagick-6.3.6-10-Q16-windows-dll.exe (32bit版XP等の場合)を
>ダウンロードしてインストール。インストールの過程で
>□ Install ImageMagickObject OLE Control for VBscript, Visual Basic, and WSH
>のチェックを入れてください。
↑のインストールをしました。
その状態で、
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var stream = fs.CreateTextFile("chintama.txt");
with(stream) {
Write("...");
Close();
}
を、a.jsファイルに書いてダブルクリックするとうまく動作しました。
これは↑をインストールしたから動作したのでしょうか?
あるいは、XPsp2の環境のみでも動作するのでしょうか?
FileSystemObjectはOS標準だな
266 :
デフォルトの名無しさん :2007/11/16(金) 22:49:07
>>265 レスありがとうございます。
では、JScript、Windows Script 5.6で記述したWSHも、OS標準ですか?
そうだな まあWSH標準のオブジェクト群でできることはそんなにないけど
268 :
デフォルトの名無しさん :2007/11/16(金) 23:05:08
>>267 どうもです。
では、
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var stream = fs.CreateTextFile("chintama.txt");
with(stream) {
Write("...");
Close();
}
これの、1行目、2行目の変数を使わず、全部、with() のカッコの中に押し込めるとすると、どう書けばいいですか?
with(WScript.CreateObject("Scripting.FileSystemObject").CreateTextFile("chintama.txt")) {
>>264 ImageMagickのImageMagickObject OLE Controlをインストールすると
new ActiveXObject("ImageMagickObject.MagickImage.1");
が使えるようになってWSHからImageMagickの機能が使えるようになるわけだわさ
var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName); WScript.Echo(f.DateLastModified==f.DateLastModified); なぜ、false(0)?
>>271 f.DateLastModifiedをDateオブジェクトにしてやればいいのです
var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName);
var d = new Date(f.DateLastModified);
WScript.Echo(d == d);
273 :
271 :2007/11/17(土) 00:09:49
>>272 ども、でも
var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName);
var d1 = new Date(f.DateLastModified);
var d2 = new Date(f.DateLastModified);
WScript.Echo(d1 == d2);
がやっぱ変
274 :
272 :2007/11/17(土) 00:18:08
>>273 あ、
>>272 の比較だとポインタが等しいかどうか比較しているようなものか。
これでokかな
var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName);
var d1 = new Date(f.DateLastModified);
var d2 = new Date(f.DateLastModified);
WScript.Echo(d1.valueOf() == d2.valueOf());
275 :
271 :2007/11/17(土) 00:33:50
おkです。
>>271 の比較も、ポインタが等しいかどうか比較しているようなもの?
でしょうか?
276 :
272 :2007/11/17(土) 00:48:49
>>275 というよりJScriptがDateLastModifiedの型をサポートしてないってことのような
277 :
271 :2007/11/17(土) 17:41:07
WScript.Echo(f.DateLastModified-f.DateLastModified); や WScript.Echo((f.DateLastModified>=f.DateLastModified)&&(f.DateLastModified<=f.DateLastModified)); もおk。算術比較はいいみたい。==は算術比較じゃないようで。
f.DateLastModifiedプロパティが、 毎回日付をラップした新規オブジェクトを返してくるみたいだな。 比較の処理はWin32のVarCmpあたりを使ってるのかも。 FileSystemObjectとか、返すオブジェクトの詳細が書かれていないので結構困る。
f.DateLastModifiedを整数に変換してやるのもよさげ var f=new ActiveXObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName); var d = f.DateLastModified | 0; WScript.Echo(d);
280 :
271 :2007/11/18(日) 00:01:07
それなら WScript.Echo(Number(f.DateLastModified)); ところが、 WScript.Echo(Date(f.DateLastModified)); が変。ずれる。なんでだろ?
new Date(...) じゃないの? new無しのは、単に現在日時返ってきてるっぽいな。 JScriptのDateとは違う表記方法だし、メソッドもエラーが出るところを見ると、 VBScript用のDate関数を呼び出してしまっている気がする。
282 :
264、268 :2007/11/19(月) 04:28:00
>>280 Numberは型だけどDateはオブジェクトだから
285 :
デフォルトの名無しさん :2007/11/21(水) 15:58:49
もしかして Temporary Internet Files\Content.IE5\ 以下の話してる?
Hey, Scripting Guy!氏はわざとひねった答えを書くのよ。 コピペのままでは動かない、バグ探しのクイズだと思えばいいのよ。
Hey, Scripting GuyのやつはVBSなので JSに書き換えて使ってる
クイズに答えると Const TEMPORARY_INTERNET_FILES = &H20& Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(TEMPORARY_INTERNET_FILES) Set objFSO = CreateObject("Scripting.FileSystemObject") For Each objFolderItem In objFolder.Items objFSO.DeleteFile objFolderItem.Path Next 試してないけど
>>284 objFSO.DeleteFolder
の間違いじゃないの
>>286 ブラウザを終了させてやってみました。
>>285 Content.IE5 というフォルダが出来ていて、IEを起動すると
まるでゾンビの如く復活しています。
>>291 さてはdesktop.ini消しちゃったねww
[.ShellClassInfo]
UICLSID={7BD29E00-76C1-11CF-9DD0-00A0C9034933}
2000は知らないけどMe以降ならこんなのは?
Const TEMPORARY_INTERNET_FILES = &H20&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TEMPORARY_INTERNET_FILES)
objFolder.Items().InvokeVerbEx "delete"
>>292 有難う御座います。
綺麗サッパリと消えてくれました。
ところで、InvokeVerbEx "delete" を使用した場合、警告ダイアログがポップアップするのですが、 この警告を出さずに実行させる方法は無いでしょうか?
出ないけど?
directory\backgroundのverbsを調べてinvokeverbする方法はありませんか?
有りますが?
AppActivate タイトル アクティベートしないで、ウィンドウの有無だけ調べるにはどうすればよいでしょう?
>>298 そういう機能のCOM作ればOKだよ
ウィンドウタイトルではなくプロセス名での有無を調べるならWMIで出来るけど
WMIもWSHの機能ではなく外部のCOMなので、使い方とかはここでは聞かないでね
というかググれは簡単に解るし
300 :
デフォルトの名無しさん :2007/11/26(月) 23:46:57
↑ 氏ね、ググれ厨!クソレス増やすな!
プログラム板って299のようにちょっとおかしい人多いんだよね
299も300もどっちもどっち、そしてこのレスも。
自分の無知を曝け出してるだけだから、温かく無視してあげようよ
そうでもないか
うんこが長すぎて切れない どうすればいい?
そのために神は はさみを作り給うた
つExcel
CIM_DataFileのInUseCountは実装されてないのかなぁ? nullが返って来る。
312 :
デフォルトの名無しさん :2007/11/28(水) 23:40:19
cscript.exeでの使用が前提のスクリプトで、 C言語のsystem()みたいな同期型のプログラム実行関数を書きたいんだけど、 WshExecオブジェクトのStdErr, StdOutを少しずつ読みながら、 Statusプロパティが0以外になるまで待つ、 よりもストレートで標準的なやり方ってありますか? できればプログラムの終了コードも取得したいです。 あと、本当はjsファイルダブルクリックでwscript.exeに 起動されたときは、コンソール立ち上げて、 WshShellのStdIn/Out/Errをどうにかしてコンソールに結び付けたい・・・ Windowsしかインストールしてないような 他人のマシンでも動くスクリプトを書きたいのでjscript試し始めたけど、 標準入出力の扱いが異様に面倒・・・
素直にCで書いたほうがいいよ
わざわざwshでやらなくても適当なスクリプトで書いたりすればいいんじゃね?perlとかなんでもいいけど
>>312 の1
system()ならRun()でしょ
>>312 の2
jscriptだろうがvbscriptだろうが、
標準入出力はwshやfsoなのだから変わらんけど?
317 :
デフォルトの名無しさん :2007/11/29(木) 00:36:45
Workgroupとドメインが混じった環境がありまして Workgroupのコンピュータでドメインユーザを使って ADの認証を取りたいのですが、なにか良い方法ありますか? 認証はKerberosでもNTLMでもいいです。 WorkGroupのコンピュータは、ADのDCに名前解決できています。 (DNS,lmhosts両方とも) OSは2000とXPProです。
>>315 同じようなこと考えてた。
スクリプト終了後にコンソールがすぐ消えて、経過が見えんなあ・・・と思ったけど、
cmd /k cscript ...
で解決した。
>>316 連続してプログラムをRunする度に別のコンソールが立ち上がるのがイヤ。
1つのプログラムが終ると、その分のコンソールが消えて、
stdout/errの経過が見れないの困る・・・
なので、WshExecのStdOut/Errを読んで、Echoに横流ししてる。
けど、stdout/errが入り乱れてるときにちゃんとリアルタイムに出力できるか疑問。
あと、プログラムの終了コードが取れない。
exec("cmd /c hoge 2>&1")
>>317 runas /user:ドメイン名\ユーザー名 hogehoge.exe
322 :
デフォルトの名無しさん :2007/11/29(木) 23:37:30
>321 明日試してみます。 もちろん、321さんは実験済みなんですよね?
イラつくよお前
お前火病るの早すぎwwwwww
>あと、プログラムの終了コードが取れない。 取れるよ。 >Statusプロパティが0以外になるまで待つ、 してる?
>321 試してみました。 書いていただいた「コマンドライン」では動きませんでした。 でも他の方法で解決できました。 本当にありがとうございました。
327 :
デフォルトの名無しさん :2007/12/01(土) 02:35:35
>>326 その「他の方法」とやらを書く気は全く無い訳だな
書きに戻ってくる必要もないよ 興味ないから
>>325 ExitCodeプロパティの存在に気付かなかった。
最初読んでた本と適当にググったサイトでスルーされてたので・・・
とりあえずこのスレで得た成果をまとめてみた。
var shell = new ActiveXObject("WScript.Shell");
function system(cmd) {
var e = shell.Exec("cmd /c " + cmd + " 2>&1");
while (!e.StdOut.AtEndOfStream) {
WScript.Echo(e.StdOut.ReadLine());
}
while (e.Status == 0) {
WScript.Sleep(50);
}
return e.ExitCode;
}
>WScript.Echo(e.StdOut.ReadLine()); は WScript.StdOut.Write(e.StdOut.Read(1)); のほうがいいよ
男は黙ってecho
>>331 たしかに、
checking...(長い処理) done<改行>
みたいな出力するプログラム起動したときカッコ悪かった。
1バイトずつってのが引っかかったけど、別に体感速度変わらんな。
男は黙ってcscript
VBScriptで引数省略は,,だけど、JScriptは? JScriptで,,にすると怒られる
338 :
デフォルトの名無しさん :2007/12/03(月) 03:11:23
低脳言語と一緒にすんなよ。
339 :
デフォルトの名無しさん :2007/12/03(月) 09:12:27
本来コンパイル出来ない物なんだから、無理矢理やっても不都合あるのは当然かと コンパイルしたいなら実行ファイル生成用のプログラム言語か スクリプト言語の中でも元からコンパイルを想定して作られたもの使いましょう つまりお門違いってもんです
>>339 msscript.ocx を忘れてるだけだと思われ
342 :
デフォルトの名無しさん :2007/12/03(月) 12:25:15
EXE 化して改ざんされにくくしたいって事だろ。それくらい理解してやれよ。
改ざん防止は署名だろ
難読化はスクリプトエンコードだろ
jscriptにすればコンパイルできるよ
VBにすればコンパイルできるよw
COMクライアントのプログラムをCで書いてみるといいよ
JScript .NETに書き換えればコンパイルできるよ
350 :
デフォルトの名無しさん :2007/12/03(月) 23:22:19
コンパイルしたら、せっかくのスクリプトの意味が無いやん
set sc=createobject("scriptcontrol") sc.language="vbscript.encode" sc.addcode unescape("%23@%7E%5ENQAAAA%3D%3Dhko8K6%2CEx%7F/1Cw%7F%60E%5D%21%26T*y%5DE2TcW%5DE2T*vuE2%21*%25Y%3B2%21*brb@%23@%26ug0AAA%3D%3D%5E%23%7E@") 解読できる?
353 :
デフォルトの名無しさん :2007/12/04(火) 00:22:34
おちんちん
354 :
339 :2007/12/04(火) 05:40:22
>340 まあインタプリタの方が管理しやすいですが、 EXEだとタスクマネージャーで強制停止できたり、 知り合いに渡すのに環境を選ばなくなりますからね >341 インストール中にはねられてしまいました フリーのコンパイラは複数あって損はないですので調べてみます。 >342 環境に左右されにくくなるかな?と思ったわけです >343 ダウソしました、ありがとうございました。 その他みなさんありがとうございました
> EXEだとタスクマネージャーで強制停止できたり、 スクリプトだって出来る、WSHのスクリプトエンジンはexeなんだから ついでに言うと、うちの環境では、vbs,js,wsfなどを右クリックすると「このスクリプトを強制終了する」って項目がある この項目を選択した際に実行されるものもwshで作った あと、多重実行すると既に実行されてるものを強制終了するって仕組みのスクリプトも作ったことがある やり方次第で停止、終了:に関しては全然困らなくなる タスクマネージャーだと複数のWScript.exeが実行されてるときにどれがどれだか解らないとか言うかも知れないが それだってどうにでもなる問題だし > 知り合いに渡すのに環境を選ばなくなりますからね 環境選ばないと言ってもJavaとかじゃなければWindows限定なわけだし Windows限定ならWSH(VBS)が動かないのはWin95のノーマルと個人ではほとんど使われてないNTの4以前くらいだ あとはCOMのバージョンが違うくらいだが、それはCOMを使用するexeだって同じ事だし
356 :
デフォルトの名無しさん :2007/12/04(火) 18:05:19
自慢うざい
的確な突っ込みを理解できないヤシがマヂギレw
358 :
デフォルトの名無しさん :2007/12/04(火) 19:17:48
ここは自慢スレじゃ無いぞ。
360 :
デフォルトの名無しさん :2007/12/04(火) 20:38:30
自慢すんな
361 :
デフォルトの名無しさん :2007/12/04(火) 20:55:32
あんな程度のが自慢に見えちゃうなんて可哀相な子ですね
>>355 いや cscript.exe がいっぱいタスクにならんで
どれが殺したい相手なのかわからなくなるんだよ
> いや cscript.exe がいっぱいタスクにならんで > どれが殺したい相手なのかわからなくなるんだよ そんなの実行時引数が見られるタスク管理ソフト(タスクマネージャ代替ソフト)を使えば一発解決 WSHのオプションスイッチやスクリプトへの引数が無ければ「プロセス名:cscript.exe 実行時引数:スクリプトパス」になってる 実行時引数はWMIでも取得出来るから、俺のはスクリプトのパスを渡す(右クリックから強制終了選択)と 実行時引数にそのパス含むWSHプロセスを殺すようにしてるだけ 多重起動で自殺スクリプトも仕組みは同じ cscript.exeがいっぱいあるだけでなく、実行しているスクリプトまで同じでどれがどれだか解らないなんてのは スクリプトの設計段階での問題
364 :
339 :2007/12/04(火) 21:33:46
>355 環境と言うのはBASP21やセンドキーで日本語を送る為のライブラリ環境の事です。 VBSやらない人に複数のライブラリのインストールを強制するのは酷ですからね。 あと、プログラミング自体はしょぼいPCの時代にやっていただけですので、 (懐かしのMSXやX68000でアセンブラとベーシックをかじった程度ですが) バックグラウンドでプログラムを動かしつづけるのは何だかもったいないような気がするんですよ これは個人的な感覚ですので,気にしないで下さい
cscript hoge.vbs fuga hage cscript hoge.vbs fuga hige みたいなのも区別できますか?
>>365 もしよろしければそのツールが公開されているURLを教えて頂けませんか?
> VBSやらない人に複数のライブラリのインストールを強制するのは酷ですからね。 特定のスクリプトからしか使わないなら、インストール(レジストリへの登録)無しに使う方法もあるけどな > みたいなのも区別できますか? 当然 禿げ と 髭 だって実行時引数なんだから区別できるよ >363では"WSHのオプションスイッチやスクリプトへの引数が無ければ"の例を書いたが、細かく書けば 「プロセス名:cscript.exe 実行時引数:WSHのオプションスイッチ スクリプトパス スクリプトへの引数」だよ プロセス名:cscript 実行時引数://nologo hoge.vbs fuga hage > ツールが公開されているURLを教えて頂けませんか? スレ違い、自分で探すかソフト紹介スレでも行け WMI使って特定のスクリプトを実行しているWSHプロセス殺す方法ならスレ違いじゃないから 要望が有れば教えてもいいが、今から用事があるんで早くても明日になる この板に来る奴ならそれまで待つよりググった方が早いと思うがな
>>368 与えられた
オプションスイッチ スクリプトパス スクリプトへの引数
の順序が違ってても区別できますか?
>>369 区別できるよ
コマンドライン文字列 を丸々見ることは可能だし
>>364 コンパイルすればライブラリいらなくなるの?マジかよ
355も言ってるが、COMをライブラリとして使用する場合はスクリプトも実行ファイルも同じだよね ソースに取り込めばライブラリファイル(dll=ダイナミックリンクライブラリ)は不要になるけど それはCなどのまともな言語を使うかスクリプト言語を使うかって場合の話で スクリプトそのものとスクリプトをコンパイルしたものの差にはならないよな
374 :
デフォルトの名無しさん :2007/12/06(木) 00:02:22
>>372 バカ。元発言嫁よ。
”そういうコンパイラはありませんか?”って質問だよ。
そんなコンパイラがあれば CreateObject("Excel.Application")とかやってるスクリプトも ExcelをインストールしてないPCで利用可能に やべーすげー俺にも教えて
cmdからだとcscript.exe explorerからだとwscript.exe で起動されるようにはどうすればできますでしょうか?
377 :
デフォルトの名無しさん :2007/12/11(火) 20:10:14
ヌケ作マイクロソフトに無理言うなよ。
>376 そんな事を考えるよりは素直にコマンドラインから cscript //nologo ***.vbs で 起動する習慣をつけておくほうが良いと思う。 またはvbsファイルをcscript.exeに関連付け、wscript.exeへのショートカットをSendToフォルダに入れておき、 エクスプローラでファイルを右クリック→送る→wscript.exeを起動させるとか。 あと、そこまで考えてるなら、ついでにvbsファイル内で以下のような条件文をつける手法も 覚えておくほうが良いかも。 If Right(UCase(WScript.Fullname),12) = "\CSCRIPT.EXE" Then WScript.Echo("このファイルはCSCRIPT.EXEから起動されました") Else WScript.Echo("このファイルはWSCRIPT.EXEから起動されました") End If
>>376 コマンドプロンプトでファイル名叩くとエクスプローラーの関連付けで
起動するのは仕様で無理なんジャマイカ?
難しそうだから、ScriptingGuyに聞いてみたら?
>>378 彼が何を考えて、そうしたいのかわからないんだから、素直にやり方は
ないと答えるか、スルーするのが吉。
Wrapper噛ませればいいじゃん
cmd.exeから起動されたかどうかは区別できるので 同じコンソールにcscript.exeで起動し直すのが問題だな
逆ならおk?
>>382 >cmd.exeから起動されたかどうかは区別できるので
kwsk
KaWaSaKi
>>385 Googleの検索キーワードをkwsk
だったら性格のよい388が変わりに教えてやればいいのに・・・ それとも388も性格悪い仲間なの?
>>389 性格はとてもいいんだけど、387と同じで検索キーすらわからないんだが。
わかれば、すぐ教えるが、残念ながらこれ以上調べてもわからなさそう。
よくわからんけど Win32_Process とかじゃねーの?
392 :
390 :2007/12/12(水) 23:10:04
WSHでは無理、という結論。
.NET系ならGetCurrentProcessを使って自分自身のプロセスを調べ、
さらに親プロセスがcmd.exeである事を判別する、って方法でいけそうだけど。
>>391 自分自身の実行パスをWMIで調べて、そこから親プロセスを割り出す、
って出来そうだけど、同じスクリプトが複数走ってるとアウトのような希ガス。
scriptname = "foo.vbs"
set swl = wscript.createobject("wbemscripting.swbemlocator")
set s = swl.connectserver
set rs = s.execquery("select * from win32_process where caption='cscript.exe' or caption='wscript.exe'")
p = -1
for each r in rs
if instr(1, r.commandline, scriptname) then
wscript.echo r.caption
p = r.parentprocessid
end if
next
set rs = s.execquery("select * from win32_process where processid=" & p)
for each r in rs
wscript.echo r.caption
next
'
ttp://d.hatena.ne.jp/Ratso/20070313/p1
>>393 同じスクリプトが複数走ってるとアウトのような希ガス
396 :
392 :2007/12/12(水) 23:22:19
>>393 貼り付け乙
穴があるのは承知で、同じような物を作ろうと思ってた。
自分でうにーくなプロセス起こしてそこからたどればおk
自分のプロセスidはどうやったらわかるの?
MSは健忘症だから自分のことも平気で忘れる
自分の子の親は普通、自分だけど、例外もあるかも
子供のidは分かるけど自分のidは分からんらしい
自分探しって大変なんだな
>>402 子プロセスを起動してその親プロセスIDを取るのか
スゲー力技
>>400 '子の親(=自分)を調べる方法でgetpid()を作ってるサイトがあったので
'そちらを参考(丸写しともいう)にして
>>302 を改良
'
ttp://www.vector.co.jp/soft/winnt/util/se420729.html '
ttp://www.vector.co.jp/soft/winnt/util/se383755.html set swl = wscript.createobject("wbemscripting.swbemlocator")
set s = swl.connectserver
set rs = s.execquery("select * from win32_process where processid=" & getpid())
for each r in rs
wscript.echo r.caption
p = r.parentprocessid
set prs = s.execquery("select * from win32_process where processid=" & p)
for each g in prs
wscript.echo g.caption
next
next
function getpid()
set ws = createobject("wscript.shell")
set e = ws.exec("mshta.exe -")
p = e.processid
set o = getobject("winmgmts:root\cimv2")
set ps = o.execquery("select * from win32_process where processid=" & p)
if ps.count <> 1 then
e.terminate
err.raise 9
end if
for each p in ps
getpid=p.parentprocessid
next
e.terminate
end function
なんでメインとサブでわざわざ違うやり方してんの?
そこまでしてわかったところでどうする? cscriptで起動しなおしたって別ウィンドウが開くだけだ
もう充分だよ
>>407 =382だろ?
だから、まずできるところまでやってんだろ。
よくいるんだよな。自分では何もしないで人のしてる事にケチをつける奴。
>>405 すげーな。そんな方法思いもよらなかった。
411 :
デフォルトの名無しさん :2007/12/13(木) 01:46:48
超手抜きだけど、環境変数で判別するって方法もあるよ。 Cドライブのカレントディレクトリが =C: という変数に入ってるなら cmd 無ければ explorer から起動したとみなす。 かなり乱暴なやりかただけど。Win XP 以外でうまくいくかどうかわワカラン。 Dim WshShell,Environment Set WshShell = WScript.CreateObject("WScript.Shell") Set Environment = WshShell.Environment("PROCESS") If Environment("=C:") = "" Then MsgBox "エクスプローラから起動されました" Else MsgBox "コマンドプロンプトから起動されました" End if
PROMPT=$P$G も使えそうだね 消されてたらだめかな
>>411 DドライブにOS入れててCドライブが無い変態さんもいるかも知れない
If Environment("=" & left(wscript.fullname,2)) = "" Then
415 :
デフォルトの名無しさん :2007/12/14(金) 06:45:12
凄腕プログラマーな皆様!!!!! おいらの悩みを聞いてください replaceで " の入っている文章を置換したんですがどうすれば良いんでしょうか 具ぐってもサンプルコードばかりで解決策が見つかりません
エスケープでググロ
replace('"', 'hoge')
〜.replace(/"/g, """);
419 :
デフォルトの名無しさん :2007/12/14(金) 20:45:55
vbs だと " の1個手前に " を置いてエスケープする。 "" の中に " を書きたいときは "" と書く。(C言語の \" のようなもの) つまり、 s = "今日は""楽しい""遠足" s = Replace(s, """", "うんこ") となる。
ソースキボンヌ その仕様自体は知っているのだけれど、 スクリプトのヘルプには何故かその記述が見当たらなかったような……
421 :
デフォルトの名無しさん :2007/12/15(土) 02:30:04
SQL と似てるね。たとえば What's the vbScript という文字列をインサートするには、' を2回重ねて INSERT INTO MYBOOKS SET ID=1, TITLE='What''s the vbScript'; としなきゃならない。
422 :
デフォルトの名無しさん :2007/12/15(土) 10:28:15
>>415 """それは言えないな"""
"""こ、この不自然な二重引用符は何でもないんだからね"""
>>423 'に挟まれた'を挟み込む'ではなくて文字列の'にするため
いや、
>>423 のいう「そんなもん」は「ソース」のことではないかと。
ついでに野暮なツッコミをしておくと、
>>424 の書き方だと
シングルクォーテーション("'")を単なる文字として読ませる工夫をしていないので
「に挟まれた」を挟み込む「ではなくて文字列の」にするため
と読めてしまうな。
ちなみに、ややこしいようなら JavaScript では "\x22"、VBScript では Chr(34) と書く方法もある。 (ダブルクォーテーションの場合ね)
JavaScriptだったら '"' とか "\"" とかの方が良くね?
ダブルクォートを定数で作っておくのが親切ってもんです
430 :
デフォルトの名無しさん :2007/12/17(月) 06:03:14
こんなおいらにいろいろ教えて頂いてありがとうございました。 ''か""""かChr(34) でOKって事ですね 陳宮ベリーマッチでした
Const vbQuote = """"
432 :
デフォルトの名無しさん :2007/12/17(月) 19:32:56
ふつうに書けば a = "おまいは""アホ""か!" でもこんな書き方する人もいるの? Const vbQuote = """" b = "おまいは" & vbQuote & "アホ" & vbQuote & "か!" ダサ・・・
ダサいのは可読性を考慮しないオナニー専門のお前
CLSIDはあってもPROGIDがないものはどうやってCreateObjectする?
アルファがベータをカッパらったらイプシロンした。なぜだろう?
wsf or wsc or htaで<object>使うしかないだろ vbsやjsでは無理だろ
無理と言うか、出来る方が問題やん
ほなwsf wsc htaも問題やな
そもそもそんな必要性がないだろ
442 :
デフォルトの名無しさん :2007/12/20(木) 00:08:25
>>433 可読性??wara
「"」の読み方も知らんの?ダサ〜〜w
おしえてあげよっか〜〜〜〜?
やだよ〜〜ん。おまいの熊度が気に入らないから教えてあげんよ〜〜だ。
煽りの返しレスはすぐにつけないと、ただのキモい粘着野郎としか扱われませんよ 要約:KY
さんご礁は黙ってろ
>>434 自分専用スクリプトなら、適当にレジストリエディタでProgIDをでっち上げればいいw。
getobject("new:{ clasid... }")
new:なにこれ?
448 :
デフォルトの名無しさん :2007/12/20(木) 19:35:47
queue moniker queue:/new:classid or progid
450 :
デフォルトの名無しさん :2007/12/21(金) 18:49:10
vbsかwsfでftpの処理をして処理内容をリダイレクトしようとしています。 ftpのコマンドを書いたファイルを読み込ませているのですが、うまく処理できません。 コメントを切り替えて下記10通りのパターンで試してみたのですが、 一つ目のRun以外動作していないようです。 ftpもできないしログも吐かないし、エラーも出ません。 その後のEchoは表示されます。 ------------------ Dim objShl Set objShl=Wscript.CreateObject("WScript.Shell") objShl.Run "ftp -s:crp.ftp", 0, true 'objShl.Run "ftp -s:crp.ftp > ftp.log", 0, true '× 'objShl.Run "ftp -s:crp.ftp >> ftp.log", 0, true '× 'objShl.Run "ftp -s:crp.ftp > ftp.log", 1, true '× 'objShl.Run "ftp -s:crp.ftp > C:\db\wsh\ftp.log", 0, true '× 'objShl.Run "ftp -s:crp.ftp >> C:\db\wsh\ftp.log", 0, true '× 'objShl.Run "ftp -s:C:\db\wsh\crp.ftp >> C:\db\wsh\ftp.log", 0, true '× 'objShl.Run "ftp -s:C:\db\wsh\crp.ftp > C:\db\wsh\ftp.log", 0, true '× 'objShl.Run "ftp -s:/db/wsh/crp.ftp >> /db/wsh/ftp.log", 0, true '× 'objShl.Run "ftp -s:/db/wsh/crp.ftp > /db/wsh/ftp.log", 0, true '× WScript.Echo "完了" ------------------ OSはWindows2003 Serverです。 上記をコマンドプロンプトで実行すると、ftpもログも正しく処理できています。 違っているところや、別の対処方法等教えてください。 よろしくおねがいします。
cmd.exe /c ftp....
452 :
450 :2007/12/21(金) 19:04:49
>>451 ありがとーーーーー!!ヽ(・∀・ )ノ できました!
objShl.Exec
454 :
デフォルトの名無しさん :2007/12/28(金) 13:37:03
WSHでドライバインストールって出来ませんか? 著名確認画面で止まるのを自動で進みたいんですが。
455 :
デフォルトの名無しさん :2007/12/28(金) 16:24:02
>>454 マウスクリックするだけじゃん。
どんだけズボラなんだよ。
スクリプト書く方がはるかに手間がかかるよw
なんて冗談はさておき、たぶん、自分のPCなら自分で
マウスをクリックすればいいだけな話だが
キミやりたいのは、不特定多数の他人のPCにインストールしたい
ということなんだろ?
たぶん sendkeys って命令を使えばいいんだと思う。
(誰か詳しいひとがフォローしてくれるはず)
それはそれとして、いったい何のための署名なのか。よく考えて欲しい。
システムに深刻な障害を与える可能性のあるソフトを
何の確認もせずに自動インストールできてしまう機能がOSに
備わっていたら?それはセキュリティーホールだよね。
ウイルス作成ハッカーの格好の餌食じゃん。
>>455 >それはそれとして、いったい何のための署名なのか。よく考えて欲しい。
親切で言ってるとは思うが、余計なお世話だろ。
>>454 出す情報少な杉。ダイアログを自動で操作したいだけなら455の言うとおり
ウインドウハンドルを取得してsendkeys使えばいい。
>>455 SendKeysは知っていますが・・・
それから、著名確認を無効にする事がWindowsでは出来ますよ。
貴方の言うように著名確認が無いならそれはセキュリティホールだというなら、どうして
そのような機能がWindowsについているのでしょうか?
>>456 すみません。携帯電話からだったのでつい・・・・。
今度はPCから書いています。 確かにSendKeysを使えば良いのでしょうが、確認ダイアログ
が出るかどうかが分からないとか、 AutoHotKeyの IfWinExist みたいな 指定したタイトルの
ウィンドウが存在するかどうかチェックとか、そういった事はWSHでは出来ないのかなぁと。
要するに、SendKeysだとAppActivateと組み合わせても、タイミングによってはユーザの介入
によって上手くいかない可能性もあるので、そういった不安要素を取り除いて確実なスクリプト
にしたいなぁと思ったのですが、無理っぽいですねぇ・・・・
マニュアルを "存在するか" とか "ドライバ" とか 色々検索してみたのですが、どうも
なさそうでした・・・・。
>>457 本筋とは関係ないが、「著名」じゃなくて「署名」だよ。
「しょめい」じゃどう変換しても「著名」にはならんから ずっと「ちょめい」と読んでいたんだろうね。
460 :
456 :2007/12/28(金) 21:27:53
>>457 突っ込みどころが多杉。
>>455 がsendkeys出したのは、情報小出しのおまえが悪いんだろ。
それに対して礼も言わずにバカにしたようなレスはどーなのよ。
携帯電話なんてそっちの事情はしらねーんだよ。
>AutoHotKeyの IfWinExist みたいな 指定したタイトルの
できるが、「確認ダイアログが出るかどうかが分からない」って事じゃ
使いようがないだろ。
ある程度知ってる人ならスマートな解決方法がわからないまでも、この流れで
2種類の解決方法が思い浮かぶだろうな。
ブチむかついたので、以上。
>>458 うっはw 指摘ありがとうございます。
超恥ずかしいOTL オレバカす・・・・・
それはそうと、スクリプトはどんなコンピュータで実行されるか分からないじゃないですか?
ハードウェアのインストールウィザードで一旦止まりますが、要はユーザがそれを見て
よく分からずに「インストール停止」を選べないように、出てきた瞬間にインストールを選択
させてインストールしたいのです。
最悪かなり重いマシンで実行する事を想定すると Wscript.Sleep 10000で10秒ぐらいは待って
それから objWshShell.SendKeys "{Left}" Wscript.Sleep 100 objWshShell.SendKeys "{Enter}"
ってやらないと、まだハードウェアのインストールウィザードが出てきてないのに
SendKeysしてしまうと失敗しますよね。
ではそのように作ったスクリプトを高速なマシンで実行した場合はどうなるか・・・
ハードウェアのインストールウィザードは出ているのにしばらく停止したまま。その間にユーザが
インストール停止を選択してしまうかもしれない。そうでなくても無駄に待ち時間が長いのは問題。
だから、出てきたらすぐインストールを選択させたいんです。無駄な待ち時間をなくしたい。
そうするにはどうすればいいのでしょうか?
AutoHotKeyだと IfWinExist タイトル で そのタイトルが存在するかどうかチェックとか
そういった事が出来たのですが、WSHではどうするのかなぁと。
存在しないタイトルを objWshShell.AppActivate タイトル ってやってアクティブにしようとして
存在しないのだから多分 Falseが帰ってくるから、それがTrueになるまで1秒ずつ実行するような
無限ループでも作ればいいのでしょうか?こんな感じ
Do While objWshShell.AppActivate("ハードウェアのインストール") <> True
Wscript.Sleep 1000
Loop
しかしこうするとなんらかの原因で永遠にAppActivateするプログラムが立ち上がってこなかったら
無限ループに陥ってしまうし・・・どうしたらいいんでしょう?
462 :
461 :2007/12/28(金) 21:35:15
>>460 すみませんでした。 ただ、署名を無効にするオプションが存在するのに署名無視でインストール
なんて出来るとセキュリティホールでしょ?って言っていたので、それはおかしいなと思って
レスしたまでです。で、携帯電話からってのは確かに、貴方には知る由もありません。申し訳ございませんでした。
>できるが、「確認ダイアログが出るかどうかが分からない」って事じゃ
方法をぜひご教示願えませんか?
>ある程度知ってる人ならスマートな解決方法がわからないまでも、この流れで
>2種類の解決方法が思い浮かぶだろうな。
向学のために2種類の解決方法とスマートな解決方法をご教示願えませんか?
>ブチむかついた
"ブチ"って、山口県辺りの人ですか?
>>461 >無限ループに陥ってしまうし・・・どうしたらいいんでしょう?
有限ループにする
464 :
461 :2007/12/28(金) 23:48:48
>>463 なるほど・・・
i = 0
Do While objWshShell.AppActivate("ハードウェアのインストール") <> True
WScript.Sleep 1000
i = i + 1
If i >= 10 Then
WScript.Popup "エラー!ドライバのインストールに失敗しました", 5
WScript.Quit
End If
Loop
こんな感じですかね。。。
それともう1つ聞きたいのですが、指定した名前のドライバがきちんとインストールされているか
どうかIfで分岐する事はできませんか?
もう具体的に出した方が分かりやすいと思いますので言いますが UltraVNC のVNC Hook Driver
のインストールをしたいのです。 もしインストールされてなければインストールを実行(全自動)
インストールされていればインストールはせずにスクリプトを終了させる
といった分岐です。
もう全部手作業でやった方がいいと思うよ。
466 :
デフォルトの名無しさん :2007/12/29(土) 15:19:42
>>462 「署名を無効にするオプションが存在する」 なら、無効にしとけばいいじゃん!頭悪っ
あーあ、言っちゃったよ
468 :
461 :2007/12/29(土) 18:09:53
469 :
デフォルトの名無しさん :2007/12/30(日) 01:12:43
方法があるのに「らめぇ〜」ってどういう事だよ。もう付き合いきれん。
470 :
デフォルトの名無しさん :2007/12/30(日) 08:43:10
らめぇ〜って何? 日本語の乱れ?
471 :
デフォルトの名無しさん :2007/12/30(日) 08:53:40
472 :
デフォルトの名無しさん :2007/12/30(日) 10:27:00
萌えは知っているがみさくらなぞ知らん!
MSはWSHというものが Windowsの自動操作を行えると主張するが AppActivate+SendKeysはWindowの基本設計とは完全に矛盾しており システムのクラッシャーになりかねない OLE対応アプリ/機能以外は操作できないというのは 実質WSHには自動操作はできないという事を示している
「Windowsの」ここ重要 決して「Windowsアプリケーションの」とは言っていない。
もちろん、ドライバのインストールはWindowsに関わることだけど、 上にもあるようにセキュリティに関わることだから、 自動化に制約がかかるのは勘弁してやれ。
でもさ、市販ソフトのインストーラでも、うらでダイアログポチポチしてるよね。 Windowsってなんなの?って感じ。
VBSと組めばバッチなんていらんくね?
479 :
デフォルトの名無しさん :2007/12/30(日) 20:33:11
そう思うなら、 COPY *.TXT A:\ と同等の機能をVBSで書いてみろよ。 適材適所で使い分けの出来ないヤツは役に立たん。
>>478 既知の問題で、(おそらく)環境依存で、原因不明で、解決法無し(不明)です
スレ違いなので詳しくは書きませんが代用法もあるわけですし
問題が起きるようならキッパリ諦めてください
>>479 Option Explicit
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "*.txt" "A:\"
Set objFSO = Nothing
こんな感じでしょうか?
前から思ってたんだがWScript.つけてるコードって どこソースなんかね タイピング増やしたくない俺は滅多に使わないんだが
Scripting Guyですよ
どこソースって、MSDN(WSHヘルプファイル)には object.CreateObject(strProgID[,strPrefix]) object WScript オブジェクトです。 って書かれてるわけだが
ちゅーか別物だよね
Scripting.FileSystemObjectのインスタンス作る場合に置いては別物じゃないよ 大元は一緒でラップの仕方が違うだけだし
クライアントサイドはCreateObject() サーバサイドはServer.CreateObject() って記述してる
489 :
デフォルトの名無しさん :2007/12/31(月) 16:43:29
>>481 ブッブーーッ!はいダメ。
無理すんな。素直にバッチファイル書けよ。
ダメな理由くらい書け
491 :
デフォルトの名無しさん :2007/12/31(月) 18:49:49
↑ なぜダメか一人でずっと悩んでろ!
じゃあ俺は駄目だと思わないから481を使うね。
>>489 "*.txt" と "A:\" の間にカンマがないのがダメってこと?
CreateObject("Scripting.FileSystemObject").CopyFile "*.txt", "A:\"
対話的じゃないとかいうオチか?
>>478 WScript.Shellという名前からしてWSH専用だろ
>>479 はCopyFileで*.txt使えること知らずに複数行になるはずと
勘違いしてたに1票
499 :
481 :2008/01/01(火) 01:18:11
あっちゃーやっちゃった。すみません。 objFSO.CopyFile "*.txt", "A:\" ↑こうですね・・・・。。。
500 :
デフォルトの名無しさん :2008/01/01(火) 02:35:00
500ゲット!あけおめ
501 :
デフォルトの名無しさん :2008/01/01(火) 13:01:20
>>499 はいそのとおり。
バッチなら COPY *.TXT A:\ で済む、バイトの女の子さえミスしようがない超超超簡単なことさえ
WSHで書くとミスっちゃうだろ?
ミスの確立が増える。そういうこと。
だから、WSHがあればBATはいらない、などとイキガッテないでさ、適材適所で使い分けれ。
それにしても、超〜〜思うツボだな。わざとミスってくれたのかと思ったよ。
天然だったんだねw
(ノ∀`) アチャー
>ミスの確立が増える。 狙って書いてるのか?w
天然だろ
>>501 かんじで かくと みすっちゃう だろ?
いきがって ないで ひらがなで かけ。
506 :
481 :2008/01/01(火) 14:35:00
>>501 はい、今回WSHで書いて、確かにBatで書いた方が良い場面もある事を痛感しました。
WSHとBatを混合させると言うのはどうなんでしょうか?
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Exec "copyFile.bat"
みたいな。でもこうすると処理が複雑になったときにbatとWSHと行き来するような事になると
なんかバグが出てきそう・・・。その時修正が大変じゃないですかねぇ・・・。
それに出来れば1つのスクリプトファイルで済ませたいし・・・
>>505 ワラタw
507 :
デフォルトの名無しさん :2008/01/01(火) 15:02:00
氏ね
それはこういうやつだろ。「確立」は単なる間違い。
>>506 バッチファイル内のCALLで他のバッチファイルを呼んだ方が解り易いかと。
基本バッチファイルで、足りない機能をWSHでフォローって感じで
書いていけばいいんじゃないかな。
無論、内部・外部コマンドが殆ど不必要なら、直接WSHで書いてしまえばいいし。
>>478 リンク先の代替法はSendKeys使っててもひとつやね
VBSファイル作って呼び出すのが確実
510 :
デフォルトの名無しさん :2008/01/01(火) 20:18:13
>>506 おもしろい発想だけど、たとえばC言語でこんな・・・
main()
{
system("MKDIR \"C:\\Program Files\\MyApp\"")
system("COPY *.* \"C:\\Program Files\\MyApp\"");
system("ECHO インストールが完了しました。||PAUSE");
}
こんなの書いて、「オレ、C言語でプログラムかいたおw。スゴイでそ!」
なんて言ったら笑われるだけ。他の言語でも同じこと。
C言語が使いこなせてるわけではないが C言語でプログラム書いたというのは事実なわけだが
笑われるのもまた事実というわけだ
JScriptのマクロ変数の値を出すことできる? WScript.Echo(@if (@_Win32) 'Y' @else 'N' @end); はできても、 WScript.Echo(@_Win32); はできない
スレ違い
>>513 @変数は、JScript コードでは使えませんよ。
@setや@ifの中でしか使えない仕様です。
>>514 プログラム板で有名な基地害さんじゃありませんかw
>>513 @_win32じゃね?
>>514 それ見ていつも思うけど
誘導先が書いてないんじゃ無意味なレスじゃね?
そうでもないか
>>510 ちょwwwwそれはないですwwwww さすがにそれはひどい・・・・。
519 :
デフォルトの名無しさん :2008/01/02(水) 15:06:44
で、ドライバがインストールされているかどうかで処理を分岐させることはWSHではどうすれば良いのでしょうか?
If Then Else End If
>>520 いや、その構文を使うのはわかるけど、 If の後に書く内容ですよ。
どういう風に書いて真偽を返させればいいのかが全く検討がつきません。
If ドライバがインストールされている Then
MsgBox ドライバインストールされてるよ〜
Else
MsgBox ドライバインストールされてないよ〜
End If
の"ドライバがインストールされている" と言う判定をどう書けばいいのかをお聞きしています。
インストールされた状態とされていない状態の差分を調べろ。 レジストリでも覗いとけ。それ以上はこのスレの範囲外。
・複数のバイナリファイルの文字列を置換したい。 ・置換リストを作って置換したい。 ・CUIでもいい。 これらを実行したい場合は、WSHで出来ますか?
>>523 WSHとCOM(標準のものだけで事足りる)で出来ますよ
バイナリはpowershellのほうが楽
>>524 COMとはCOMMAND.COMのことですか?
>>525 win2kは未対応のようで、うちでは使えません。
よくActiveXコントロールの事 ActiveXって言う人いるよね。 もちろんActiveXが何かは殆どわかってない人が多い
特撮ヒーローの名前だ間違いない
WSHでバイナリは読めても書くのが大変だから、PowerShell使え win2kでも誤魔化せば使えるらしい
つVBA
>>529 そういうボケはいらん
COMコンポーネントだろ
そういうボカシタ話はいらん 具体的なProgIDを書け しらんなら書くな
CreateObjectすんのにProgIDとか使わんがな
ProgID使わないでどうやってCreateObjectするんだよ。 っていうかググればADODB.Stream使うってすぐ出て来るよね。
ADODB.Streamにバイナリ書き込むのが面倒だって
WSHでも理論上はできそうだな。 俺は面倒臭がりだからC#で書くけど。
>>522 レジストリを覗く・・・それぐらいしか手が無いとは・・・・OTL
>>538 WSHはそういうもの
痒いところに手を伸ばすにはダルシムレベルの修行が必要
wmi
残念ながらそれはハズレだ
>>539 別にWSHがそうだから、
とかいう問題じゃなくね?
きっとWSH以外ならもっと簡単な方法があるんだろう 僕にもその方法を教えてください
そういえばWindowsXPの「プログラムの追加と削除」ってHTAじゃなかったっけ
WSHでアイドル時の検出とか出来ませんか? Windowsのタスクスケジューラでアイドル時検出試してみたのですが とりあえず1分アイドル時間が続いたら hoge と表示してpauseしてそれから終わらせるスクリプト をスケジュール登録してみたのですが、 負荷が小さい処理、例えばメモ帳に文字列を 打ち込んでいたり、こうやって2chを見たりしていると、操作しているからアイドルではないのですが CPUから見るとアイドル状態なので、スケジュールが実行されてしまいます。 やりたい事は パソコンを切るのをしょっちゅう忘れる愚息のパソコンに仕込む事による 省エネ対策です。 1時間以上パソコンを全く触ってないならshutdownさせると。 しかし先ほど述べたように1時間以上2chを見てたりネットサーフィンしている状態だと 操作しているにも関わらずアイドル検出されてしまってシャットダウンされてしまうのでダメです。 MSNメッセンジャの「退席中」表示みたいな、指定時間全くマウスもキーボードも操作しなかったとき (Inputが全く無い時)にスクリプトを発動させたいのですが、WSHでアイドル時間を取得できませんか?
コントロールパネルの電源オプションでよくね?
電源管理使えよ
レスありがとうございます。 電源オプションのプロパティ ウィンドウを見てみましたが、シャットダウンがありません。 まぁ休止状態で代用してもいいかな?とは思いますが システム休止状態 の所の 1時間後 にすると、アイドル時間(CPUがアイドルではなく ユーザによるマウスやキー入力が一切無いアイドル)が1時間経ったら勝手に休止になる のでしょうか?スレチ?
システム休止状態1分で 何もせずに2chブラウザだけ立ち上げた状態で 放置してみましたが、休止状態になりませんでした。 これじゃダメなようです・・・・
コントロールパネルの電源 休止状態でOK
CPU使用率がとれるとかとれないとか
あとDATが定期更新されてるんじゃね
HTMLファイル内にWSH(拡張子.vbs)を埋め込んで、ブラウザから機能を実行する事は出来ませんか? WSH HTML 等で検索してみたのですが、イマイチそういうことを紹介しているページが 見つかりません。 もしくは.vbsファイルの内容をテキストコピーして、 HTMLファイル内に貼り付けて そのコードを実行させるとかそういうことは出来ませんか?
???良く分からないんだけど、HTAみたいなのを望んでるのかな。 とエスパーしてみる。
ちなみに、WSH関係なく単にVBScriptを書きたいだけなら、 JScript同様、script要素の中に書けるぞ。現状ではIE限定になるが。
できません。そんなことできたらずぼずぼの脆弱性だ
>>555 <script language="VBScript">
<!--
MsgBox "ハロー"
<--!
</script>
↑みたいな感じでHTMLで実行させる事についての詳細が知りたいのですが、
>>556 が言っているように出来ないのでしょうか?
ブラウザでそういうことしたいならJava Scriptとか書くしかないのでしょうか?
でも
>>555 はできるって言っているし、どういうことなのん???
それはWSHではなく、VBScriptだろ
>>553 >WSH(拡張子.vbs)
このあたりに勘違いを感じる
>>557 それくらいは555に書いてあるとおり可能。languageよりtype使えな。
>>556 ネットワーク上に置いてあれば、
FileSystemObjectなどはセキュリティゾーンに従って制限を受ける。
JScriptで自由に使えたXMLHTTPなどはVBScriptでも同様に使える。
いずれにせよWSHは関係なくスレ違い。よそ行け。
WSHとIEは一応は別物 が、実際にHTMLでVBScriptが使用される事はまず無い。 VBとVBSも当然違うので VBSの話がまともに扱われるのは ここかお前らスレかHTAスレぐらいのものだろう WSHもIEもHTAもスクリプトが実装されているモジュールは 完全に同一の物。 WSHのマニュアル、と言われているものも実際には 必ずしもWSHのマニュアルではなくWindowsスクリプト、 についてのマニュアル
残念、ハズレ
>>553 >>557 VBScript HTML で検索したらいいと思うよ。
既に言われてるようにWSHは関係ないので
WSH HTML では見つからないでしょ。
unko deta kimochi ii
レジストリエディタを起動すると右側に"名前", "種類", "データ" と標示されますよね。 指定したレジストリキー以下の"名前"を全てフルパスで返して欲しいのですが どのように記述すれば良いのでしょうか? Set objShell = WScript.CreateObject("WScript.Shell") ret = objShell.RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO\*") のようにしても、VIDEO\ 以下の名前の部分のパスは帰ってきませんでした。(何も帰ってこない) かといって 最後の * を削除しても結果は同じで何も帰ってきませんでした。 On Error Resume Nextを上のほうに書いてあるからエラーにはなりませんが・・・。 やりたい事は、それによってフルパスが得られるなら、For Each文で全てのデータを覗いて 指定した文字列が含まれているかどうかをInStr関数等で検索すると言う事です。 よろしくお願いします。
>>565 ワイルドカード使えるなんて何処に書いてある?
ワイルドカードは使えないのが基本で、使えるメソッドにはその旨書いてある物だ
勝手に都合の良い仕様を妄想するな
君のやりたいことを実現するにはWMIを使えば良い
但し、ここはWSHのスレであって汎用コンポーネントのスレではないので後は自分で調べること
と言っても情報は腐るほどあるからググれば簡単に解決するけど
>>566 WSH厨ってなんでそんなに偉そうなんだ?
そのくせ関係ないスレに聞かれても無いスクリプト張りまくったりして気持ち悪いな。
汎用コンポーネントもこのスレでいいだろ どうせ使うんだから
文句言うだけでサンプルコードのひとつも貼らない君等も同類だと気付いてる?
570 :
567 :2008/01/06(日) 20:14:40
? 回答なら566で十分だろ? 俺はただ566が気持ち悪いって書きたかっただけだ。 同類にされたかないね!
ゴメン、それ以下だったようだねw
教える側はさぞ自分のほうが頭がいいと思い気持ちよくなる。 教えられる側はその代償に回答をもらう。 いいんじゃね? モレだったら表面上では偉そうな態度取らんが、それは人それぞれ。
>>573 モレは恥だと思うから、
>モレだったら表面上では偉そうな態度取らんが、それは人それぞれ。
って事ね。
575 :
デフォルトの名無しさん :2008/01/06(日) 22:13:47
>>574 そういうの偉そうに書いちゃうのは恥ずかしくないの?
577 :
565 :2008/01/06(日) 23:12:00
私が初歩的な質問をしてしまったばかりにスレが荒れてしまっているみたいで 申し訳ありません。 一応自己解決したので参考までに私がとった手段を書いておきますね。 WMIと言うのは一応調べてみたのですが、イマイチよく分からなかったので WScript.CreateObject("WScript.Shell").Exec を使って reg.exe を呼び出す事で処理しました。 reg query キー とやると、指定したキー内の"名前", "種類", "データ"が全て列挙されるので 1行1行InStr関数にかけて目的のレジストリデータが存在するかどうかを調べる手段を 取りました。一瞬コマンドプロンプトの画面が立ち上がってくるのがちょっと気になりますが これなら私にもかけました。 アドバイス下さった方、ありがとうございました。
>一瞬コマンドプロンプトの画面が立ち上がってくるのがちょっと気になりますが 出てこなくする方法もあるけど それが出ないのが気に入らないっていうひともいるだろうね
>>580 おお、そうなんですか?参考までに出てこないようにする方法を教えて頂けませんか?
IEの場合は
objIE.Visible = False
すれば見えなくなりますが、コマンドプロンプトの場合どうするんだろう・・・
cmd /?
>>562 どれをハズれと言ってるのかよくわからんのだが
まああれだ。
MSがいくら宣伝しても
VBSを使ってる人間は少数派。
というかもはや滅亡の道を歩んでおる
VBS < 壁 < javascript
.NET < 壁 < java
パワーシェル < 壁 < Perlなど
って事だ。
将来性を考えるんなら
>>557 もVBSはスルーして
JSにしときな
でもな、VBSのほうが断然早いんだ。特に配列。 たまにByRef受け取りなパラメータもあったりするし。
fsoで移動先に同名フォルダがある場合について質問です。 c:\test\test というように同じフォルダ名で入れ子になっている環境で、 explorer上でc:\test\testを切り取り、c:\test内で貼り付けて上書きすると 二つのフォルダ内容が融合されますが、これをfsoで実現しようとしています。 Moveは移動先に同名アイテムが存在していてはダメということなので、 まずc:\test\testの中身を先にc:\testに移動させ、 c:\test\testが空になったら削除する。 この際に、 c:\test\test\foo.txt c:\test\foo.txt というように移動先のフォルダに同名ファイルが存在した場合、 まずc:\test\foo.txtを削除し、c:\test\test\foo.txtをc:\test\foo.txtに移動させる。 さらに同名フォルダの場合はそれぞれについて再帰的に処理していく。 というような手順を踏まなければならないのでしょうか? もっとシンプルな方法があるなら教えてくれませんか?
586 :
デフォルトの名無しさん :2008/01/08(火) 05:09:32
587 :
デフォルトの名無しさん :2008/01/08(火) 07:09:21
モールスぬるぽ銃乱射
http://www6.ocn.ne.jp/~miz2/morse.htm 1TGBIT ガッガッガッガッドガガッガッ!!!!!
>z/':y★r” ドガガガガガッ ∴ ∧変∧
ル%#*゚∀)___。 \从/ _ _ _☆_ _★∴*.`Д´)/
ノハ つ∞【〔ロ=:(∈(二(@ >‐― ‐★‐―☆∵*;:*; /
∧★∧
(*゚∀゚)φ――・ ・― ― ―・・― ・・―→ (モールスでガッ!)
588 :
604 :2008/01/08(火) 07:47:55
>>585 CopyFolderとかなら上書きに関するパラメータがあるみたいだけど。
なんでMoveにはないのかね?
589 :
604 :2008/01/08(火) 07:49:08
未来からきてすみません
591 :
585 :2008/01/08(火) 13:46:21
>>586 (´・ω・`)
>>588 なんでですかねー? >Moveの上書きパラ
CopyFolderの場合はあくまでCopyなので、後でコピー元を削除するとしても、
一時的に同一アイテムが階層違いで存在してしまうことになってしまいます。
この方法だとサイズの大きいアイテムのときに問題が出てきます。
となると、移動先の同名アイテムを先に削除してから移動させる、
という選択肢しかなくなってしまうと思うんです。
しかしそれがどう考えても複雑な処理になってしまう。
みなさんどうやってるんですか?
592 :
デフォルトの名無しさん :2008/01/08(火) 14:18:12
CopyFolder には上書きオプションがあって Move には無い。 どこか抜けてるところが、いかにもマイクロソフトらしい。
moveは内部renameなのでrenameに上書きがないから
>>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 :2008/01/08(火) 15:54:53
>>595 FolderItemオブジェクトのInvokeVerb使って、
"切り取り(&T)"して"貼り付け(&P)"という手もあると思いますが・・・。
まあ、エラーが出れば止まるのは同じでしょうね。
shellのmoveはcopy+deleteだから
fsoで if folderexists then deletefolder movefolder がいいんじゃないの on error使ってもいいけど
599 :
585 :2008/01/08(火) 17:26:35
>>596 それって裏でMoveHereが動いてるのでは?
>>597 そのようですね。いろいろ実験してると分かりました。
>>598 それだとフォルダとフォルダのマージにはならないような。
移動先のかぶってないファイルも削除されてしまう。
movefileでぐるぐる
> まずc:\test\foo.txtを削除し、c:\test\test\foo.txtをc:\test\foo.txtに移動させる。 > さらに同名フォルダの場合はそれぞれについて再帰的に処理していく。 ファイル名とフォルダ名が同じだったらどうするんだろ
すきにしてくれ
つrobocopy.exe
604 :
585 :2008/01/09(水) 06:53:12
>>601 そのへんは考えてあります。
MoveHereの標準動作を見ると
移動先に同名アイテムがない → 移動
移動元:ファイル → 移動先:ファイル → コピー先削除 → 移動
移動元:ファイル → 移動先:フォルダ → エラー(中断)
移動元:フォルダ → 移動先:ファイル → エラー(中断)
移動元:フォルダ → 移動先:フォルダ → マージ(再起処理へ)
ということみたいですが、
ファイル-フォルダ、フォルダ-ファイルの場合の中断は問題があるので
ダイアログでも出すか、スキップするかで対応。
cronNTで動かすスクリプトはネットワーク上のファイルにはアクセス出来ないのでしょうか? var objFSO = new ActiveXObject("Scripting.FileSystemObject"); WScript.Echo((objFSO.DriveExists("\\\\Server\\SharedDocs")).toString());; というスクリプトをcronNTで動かした場合、falseになります。
DriveExists?
607 :
デフォルトの名無しさん :2008/01/09(水) 20:35:09
>>605 それ、cronNTじゃない環境では動くの?
cronNT類似とか関係なく、例えばWSHとかHTML, HTAなど 他のActive Script実行環境でやるとどうなるか試してみろ。
>>608 ちょっとかなりスレ違いっぽいが
cronNTサービスのプロパティを開いて
ログオンをローカルシステムアカウントから自分のアカウントに変えてみて
Aというディレクトリに a,b,c,d,e というファイルがありました それをBというディレクトリにmoveしますが途中で終了してしまい a,b,cまでしかmoveされませんでした その後もう一度AをBにmoveしたところ上書きしますか?と聞かれたので 「はい」で最後まで完了したのですがBのナカミを見たところ d,eしかありませんでした あるOSで実際に起こった出来事です
で?
613 :
デフォルトの名無しさん :2008/01/10(木) 15:46:01
>それをBというディレクトリにmoveしますが途中で終了してしまい 「それ」 とは何か。具体的に書け。
>「それ」 とは何か。具体的に書け。 単数形だから「Aというディレクトリ」じゃね
>611 最初のmoveにより、ディレクトリAからファイルa,b,cが消えた。 その状態でディレクトリAを再びmoveさせれば、ディレクトリBにファイルd,eしかないのも別におかしくないだろ。
普通はディレクトリとその中身のファイルは別だからねぇ。 ディレクトリを移動(上書き)というのはディレクトリ自体の移動ではなく中身の移動のことだし。 中身の移動であるという観点から見れば、上書きが発生すること自体おかしな話だわな。
617 :
デフォルトの名無しさん :2008/01/10(木) 21:32:01
なぜ 「それ」 が問題なのかというと、 Aというディレクトリを move せずに a,b,c,d,e というファイルを move すればよかったんだよ。 「それ」 が A なのか a,b,c,d,e なのかで結果が違ったんだね。
Macはどうでもいいよ。
a,b,c,d,e なら「それら」だろ
620 :
デフォルトの名無しさん :2008/01/11(金) 20:19:27
621 :
デフォルトの名無しさん :2008/01/11(金) 20:56:54
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/oct04/hey1011.mspx を 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);
}
623 :
デフォルトの名無しさん :2008/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 :2008/01/11(金) 21:09:46
>>623 すみません、書き方が悪かったです。
どこが間違ってるかはエラーメッセージが教えてくれているのでわかってました。
どう直せばいいんでしょうか?
625 :
デフォルトの名無しさん :2008/01/11(金) 21:41:29
デバッグくらい自分でしろ〜 他人に投げるな〜〜
var colMonitoredEvents = objWMIService.ExecNotificationQuery( "SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " + "Targetinstance ISA 'CIM_DirectoryContainsFile' and " + "TargetInstance.GroupComponent= " + "'Win32_Directory.Name=\"c:\\\\\\\\scripts\"'");
wwww
628 :
621 :2008/01/15(火) 17:17:28
629 :
デフォルトの名無しさん :2008/01/18(金) 06:33:04
CreateObject("ADODB.Stream") 上記でエラーがでます。 おそらく、ファイルが必要だと思うのですが、 それはどうやったら手に入りますか?
標準で入ってない環境、まだあったっけ?
FileSystemObjectとか称してテキストファイルの読み書きしか出来ないの? fread,fwriteとかseekのメソッドを提供してるクラスって無いの?
出来ない ADODB.Stream
635 :
デフォルトの名無しさん :2008/01/19(土) 15:46:30
ADODB.Stream ってファイル全体をいっぺんに読み込んでしまうよね? デカイ動画ファイルの 最初の数バイトだけ 読み込んで処理したいけど ファイル全体を読み込んでしまうため時間がかかってしょうがない。 何か良い手は無いですか?
FileSystemObjectで読む
PowerShellやC#に逃げる
638 :
デフォルトの名無しさん :2008/01/20(日) 01:04:11
↑ 自分の殻に閉じこもる現実逃避型。
debugでダンプする
殻=shell
basp21
642 :
デフォルトの名無しさん :2008/01/20(日) 22:46:52
客先のPCにbasp21がインストールしてあれば苦労しないよ
スクリプトをインストール(=使用準備なので何処かのディレクトリにスクリプト置くだけでインストールになる)は可能なのに COMコンポーネントのインストールは不可なんて馬鹿げたことを言い出すような低レベルな奴など相手にするな こんなこと言い出すのは、嫌レジストリ厨とか"インストール"の意味を分かってない奴とか、相当な初心者の類だが、 もし"客先"ってのが会社なら、そんな奴がシステム管理においての権限を持ってるなんてゾッとしないねw まあそれ以前にWSHスクリプトを外注する会社ってのもアレだけどw
FileSystemObjectなら使えるだろうに、なぜ使わん?
スクリプトの中で COM みつからなかった初回のみ regsrvr32 すれば?
>>635 > デカイ動画ファイルの 最初の数バイトだけ 読み込んで処理したいけど
とのことだ。
バイナリは無理だろ。
OpenBinaryFile()
> バイナリは無理だろ。 何が?
FSOでってことだろ
ForBinaryReading
それは今回の用途とは違うわけで
baspをbase64してwsfに入れて実行時に登録
すなおにVBで作って納品46
VBSファイルごとにアイコン変える方法おすえて
>>655 ショートカット作って、ショートカットのアイコン変えるとか
そういうアイコンハンドラを使えばいいんじゃね なければ作ればいいんじゃね
658 :
sage :2008/01/31(木) 00:57:14
1.WSHを使って指定URLをIEから立ち上げる 2.(1)のURLのHTMLに含まれるjavascriptを解析して 自動で実行したい WSHで1.はできると思うのですが、2はできますでしょうか? できるのであればヒントを教えていただけぬか
HTMLDocument
最近 WSH を始めた者です。 WSHShell の Run メソッドでアプリを起動して使おうとしているんですが、 普通にアイコンをダブルクリックして起動した場合と挙動が違って困っています。 とりあえずわかったことは、そのアプリは ¥Document and Settings¥ユーザ名¥ Application Data¥アプリ名 以下に一時ファイルを作るんですが、WSH から 起動した場合ファイルが生成されないようです。 WSH の場合でもちゃんと走るようになる為には何か別途設定がいるのでしょうか? 今は基本的に WSHShell.Run(アプリのバス, 4, True) を呼んでるだけです。
>>660 カレントディレクトリを設定しろ
設定仕方はWSHヘルプに載ってるので嫁
右クリック-プロパティ
通常はダブルクリックしたものがあるディレクトリがカレントディレクトリとなる。
>>662 で言ってる CurrentDirectoryって Windows2000にデフォルトで入ってるWSHでは
動きませんよねぇ。なんか代替のメソッド無いですかね?
>>665 Win2Kでも、WSH5.6なら、("Wscript.Shell").CurrentDirectryが使える。
インストール直後のバージョンは、どうだったかな‥
古いWSHでも、("Wscript.Shell").Run """ショートカットファイル.lnk""",,False なら
問題ない。False設定しか使えなくなっちゃうけども。
Wscript.ScriptFullName のほうは今回無関係ですかね。
そのスクリプトファイルのショートカットを作って作業フォルダを設定しろ
WSHでファイルを読み取り専用に変えることはできますでしょうか?
readonly属性をつけることならできるな
Attributes=1
ヘルプみろ
673 :
662 :2008/02/04(月) 06:06:35
>>664 なるほど。その値でうまくいくようです。ありがとうございます、
質問です。 現在、VBSCriptで各ディレクトリのアクセス権限を テキストに書き出す仕組みを作成しています。 コマンドは下記のようになっております。 CACLS <ディレクトリ名> >> <出力ファイル> ディレクトリ名、出力ファイル名はパラメータとして受け取り、 文字列を結合してWshShell.Runに渡しております。 ・・・【1】 ここで問題なのですが、【1】の文字列をコピペして DOSプロンプトで実行すると、正しく出力がされているのですが、 WshShell.Runにて実行すると、正しく出力されません。 この部分のコードは下記のようになっております。----------* Command = "CACLS " & DIRName & " > " & ExportFileName objShell.Run Command ' WShellオブジェクトは生成済み --------------------------------------------------------* 恐れ入りますが、どなたかこのような現象を経験されておりましたら、 解決策の指南のほどよろしくお願いいたします。
>WShellオブジェクトは生成済み ソース全部貼るべき 「・・・【1】」って違う場所に書いてない?
>WshShell.Runにて実行すると、正しく出力されません。 とはどうなるのだ?
Set objShell = WScript.CreateObject("WScript.Shell") Command = "CACLS %cd% > out.txt" objShell.Run Command これで試してみたけど、うまくいかないね。 Command = "cmd /c cacls〜 ではうまくいくけど。
%windir%\system32\cacls.exeと指定したらどう?
リダイレクトはシェル(cmd.exe)の機能。
フルパス指定でも無理
681 :
674 :2008/02/07(木) 09:15:53
皆さんご回答ありがとうございます。
>>WshShell.Runにて実行すると、正しく出力されません。
>とはどうなるのだ?
パラメータ無しで実行したCACLSのように、ヘルプが表示されます。
経過ですが、
>>677 さんの"cmd /c cacls〜"で試してみたところ、うまくいきました。
大変お世話になりました。
タクススケジューラの引数について質問です。 Windowsタクススケジューラで設定した引数が渡ってこない(WScript.Arguments.Count = 0)のです。 同じパス(コマンドライン)で作ったショートカットを実行すると引数が渡ってくる(WScript.Arguments.Count > 0 )のです。 実際に試した記述は、「c:\test.vbs abc」と「c:\test.vbs "abc"」と「"c:\test.vbs abc"」です。 何か特別な記述方法などあるのでしょうか? 先輩方、よろしくご教授ください。
cmd /c c:\test.vbs abc
先輩!ありがとうございました!
ファイルをドラッグアンドドロップしたらパスを表示するスクリプトが動きません。 どこを直せばよいか教えてください。 var strArgument = new Array(); if ( WScript.Arguments.count() == 0 ) { WScript.Echo ("コマンドライン引数が指定されていません。"); } else { for ( strArgument in WScript.Arguments ) { WScript.echo ( strArgument[i] ); } }
686 :
685 :2008/02/08(金) 21:37:42
スクリプトをダブルクリックした時は正常作動しますが ファイルをドロップすると何も表示されません。 スクリプトエラーも出ないので困っています。
687 :
デフォルトの名無しさん :2008/02/08(金) 22:03:46
コマンドライン引数が指定されているからに決まってるだろ
688 :
デフォルトの名無しさん :2008/02/08(金) 22:04:54
var strArgument = new Array(); if ( WScript.Arguments.count() == 0 ) { WScript.Echo ("コマンドライン引数が指定されていません。"); } else { WScript.Echo ("コマンドライン引数が指定されました。"); }
for ( strArgument in WScript.Arguments ) { WScript.echo ( strArgument[i] ); } これ、なにしてるの?
>>688 var strArgument = new Array();
これ、なにしてるの?
>>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ファイルはこれで動くんじゃないかなぁと・・?
>>692 > if ( WScript.Arguments.count() == 0 ) {
count はメソッドじゃなくプロパティ。
695 :
685 :2008/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
>>695 実際にはいろいろな書き方ができるので、余計に混乱してるのかも。
元のスクリプトになるべく忠実に対応させるなら、以下のような書き方もできる。
if (WScript.Arguments.length == 0) {
WScript.Echo("コマンドライン引数が指定されていません。");
}
else {
var e = new Enumerator(WScript.Arguments);
for (; !e.atEnd(); e.moveNext()) {
WScript.Echo(e.item());
}
}
for (var e = new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext()) { すっきり
>只今WSHをJScriptで書こうと、vbsのスクリプトを翻訳しながら勉強中です。 なぜ?遅いのに。いろいろ細かいことにうるさいのに。などなど
699 :
デフォルトの名無しさん :2008/02/09(土) 01:35:29
マイクロソフトの公用言語はBASIC ゲイツはBASIC長者 java には裁判で負けた恨みが有る
WSHは使うけど、今はもうVBScriptでは書かないなあ。 JavaScript(JScript)のある意味変態的な言語仕様に慣れてしまったら戻れない。
701 :
デフォルトの名無しさん :2008/02/09(土) 14:37:22
↑ 変態
702 :
693 :2008/02/09(土) 15:58:20
>プロパティとメソッド、両方あるな……。 プロパティを見るとメソッドになってて、メソッドしかないような
704 :
デフォルトの名無しさん :2008/02/09(土) 17:18:48
動きさえすればどっちでもいいよ
with (WScript.Arguments) { WScript.Echo(Count()); WScript.Echo(length); WScript.Echo(Count); // エラー }
basp21のsocketって非同期通信できませんか? データ取得できたらコールバック関数を呼びたいんですが。 接続できなかった場合とかタイムアウトになるまで 他の処理ができない
707 :
685 :2008/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 :2008/02/09(土) 23:13:59
×var path String(); ○var path = String();
絶対パスにすれば
var path = ""; で
711 :
685 :2008/02/10(日) 00:30:39
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 レスありがとうございます。
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つの"が 文字列としての純粋な"を表し
(""で"を単なる文字列としてエスケープ)、最後の"が文字列の終了を表すダブルクォート・・・
結局 """" となり、非常に分かりにくいというか、混乱する形になったのですが、こんなもんなんでしょうか?
こんなもんです
strDrv = Chr(18) & strDrv & Chr(18)
>Set f = fs.GetFolder(".") >objShell.Run f.path & "\script\var.bat" objShell.Run ".\script\var.bat"
720 :
デフォルトの名無しさん :2008/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
みたいな方法がありますよ。(自分は後者をよくつかう)
Chr(34)は?
"自分は後者をよくつかう"って、使えるの、それ?
うん
>みたいな コードはイメージです
>>724 実際のコードとは異なる場合があります。
使わない
使われない
こんばんです。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]実行すると正常に起動します 修正点がありましたらお教えいただけないでしょうか。
>>729 strCmdLine = "cscript sub_program.vbs str01 str02 "
または
strCmdLine = "wscript sub_program.vbs str01 str02 "
と記述する必要がある。
コマンドプロンプトでは、"たまたま" cscriptまたはwscriptが省略できる。
731 :
729 :2008/02/13(水) 00:23:32
>>730 ありがとうございました。無事起動すること出来ました。
コマンドプロンプトでは"たまたま"省略可能なんですか・・・
という事はExplorerでアイコンをダブルクリックすれば起動するのも"たまたま"だね。
//H:でたまたまを切り替えられる。
たまたまだけど、これもできる strCmdLine = "sub_program.vbs str01 str02 " objWshShell.Run(strCmdLine)
そうだな、解るように言ってやれ
var fso= WScript.CreateObject("Scripting.FileSystemObject"); var d = fso.GetDrive(fso.GetDriveName("Q:\\")); if(d.IsReady){ ... とやってDVD-ROMドライブが準備できているかどうか調べているのですが、 DVDを入れて認識している最中にIsReadyが実行されるとウィンドウズ自体が数秒止まってしまいます バックグラウンドで動かしていてもフォアグラウンドアプリまで停止してしまうので困っているのですが これを回避するにはどうしたらいいのでしょうか?
FSOで問題あるときはShell.Applicationを使ってみるのが定石
740 :
デフォルトの名無しさん :2008/02/16(土) 06:37:35
ドアラ グッドウィルドームに立つ!
再生:654,421 | コメント:123,256 | マイリスト:20,510
http://www.nicovideo.jp/watch/sm354359 凄い勢いで踊るドアラ
再生:482,525 | コメント:28,129 | マイリスト:17,837
http://www.nicovideo.jp/watch/sm1489303 ドアラが異端になった経緯
再生:424,284 | コメント:36,521 | マイリスト:9,417
http://www.nicovideo.jp/watch/sm378355 ドアラーズブートキャンプ
再生:241,338 | コメント:18,996 | マイリスト:7,229
http://www.nicovideo.jp/watch/sm409082
>>738 ドライブ認識動作中にエクスプローラとかでドライブにアクセスしても凍るから
アクセスするタイミング悪いと凍るのは仕様じゃね?
>>739 Shell.ApplicationにIsReadyはないけどな
Shell.Applicationで取れる情報で変化するものを見つければ?
Sub プロシージャとFunction プロシージャの違いって Function プロシージャが戻り値を返すのに対してSub プロシージャが値を返さないって言うだけですか?
End XXX Exit XXX がちがう
>>744 End Sub
End Function
が違うって言うのは分かりますし、Functionの場合のみ Function名 = 値 で値を返す事が出来る
のも分かりますが(Javaで言うコンストラクタに値代入したらreturn文みたいな振る舞いすんのな)
Exit Sub Exit Function というのがあるのですか?それはいったいどういう・・・?
単に終わらせるだけですか? 呼び出し元に戻りますか?
Javaなんかのreturnみたいにプロシージャの呼出元へ戻るだけ。
WSH(拡張子.vbsのファイル)で カレンダを表示するプログラムを作成しました。 出力はMsgBoxでしてます。 こんなかんじ MsgBox strResult, , "カレンダ" これを、携帯電話からも実行できるようにしたいと考えました。 携帯のカレンダがあるじゃないかと言われると困るのですが・・・ 便宜上カレンダと言っているだけで、実際は他の物を出力するので。 イメージ的にはカレンダというと一番伝わりやすいので・・・。 で、そのアイディアとして、サイト上に掲載すればいいと考えました。 携帯のブラウザからそのサイトにアクセスした際に.vbsで作ったのと同じような出力が 得られれば良いのですが、これを実現するのに簡単な方法は無いでしょうか? 今のところ私に考え付くのは JavaScriptを勉強してJavaScriptに書き直して やるぐらいかなぁと思っているのですが、そんな事しないとやっぱ出来ませんか? そうなると関数とか文法とかいろいろ勝手が違うでしょうから覚え直しですかね?・・。 .vbsファイルの出力のWeb版を作りたいみたいな感じです。よろしくお願いします。
携帯もまだJavaScriptは実行できないぞ。 ASPと言って、Windowsサーバ上でVBScriptやJScriptをCGIのように実行する環境があった。 お前が欲しいのはきっとそれに違いない。 問題は、世間がASP.NETへ移行しつつあるということ。 ASP.NETはC#とかVB.NETとかを使うまた別物。
>>749 .vbsファイルを携帯に渡しても実行できるわけないし、じゃあ現状だと携帯でコレを実現
するのは難しいんでしょうか?
仮に携帯で実現するのが難しいとして、ブラウザに実装・・と言うか
第三者がWebブラウザでアクセスしてきた時に表示するようなのは
JavaScriptになりますかね?
すれ違い よそへいけ
それって、なんか実行時に入力するパラメータあるんかな? ないんならタスクマネージャで定期的に実行して、 TXTかHTMLに出力したのをサーバに自動アップするような環境をつくって、 携帯でそれを見に行けばいいような気がするが。
>>752 おお!なんか凄いアイディア聴けた!
えっとですね、1日に1回更新されるので、1日に1回実行してやればいいですね。
後はそれをTXT・・・には出来るのかなぁ・・・ ああ、そうか MsgBoxじゃなくてFileに出力
してやればいいんだ・・・ ああ、HTMLからそのTXTにリンクを貼るってのもありだし、
HTMLの中にそのTXTの内容を直接埋め込むのもありか!凄い!なるほど!
ちょっと試行錯誤してみます。ありがとうございましたっ!
>>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 いやーそれが、やろうと思ったのですが、出来なくて・・・。
やろうと思ったらかなり大変だと思いますが、簡単に出来るもんでしょうか?
757 :
756 :2008/02/20(水) 00:30:22
Replace strOutStrings, vbCrLf, "<br>" とかやって、改行を<br>に置き換えようとかやってみたんですが、うまくいきませんでした。
>>756 With txtFile
.Write "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"" ""
http://www.w3.org/TR/html4/loose.dtd "">"
.Write "<html lang=""ja"">"
...
End With
こんな感じで書き出せばいいだけだろ。
>>757 そのテキストをpre要素の中に入れてしまうというのはどうだ?
759 :
デフォルトの名無しさん :2008/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 :
デフォルトの名無しさん :2008/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 :2008/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 へぇ・・・そんな時代があったんですかぁ〜・・・。
Replaceは結果を戻り値に返すからこう使わないといけないはず。 strOutStrings = Replace(strOutStrings, vbCrLf, "<br>") ""がうざいのは、 ダブルクォーテーションではなくシングルクォーテーションを使うとか、 (属性はシングルでいい。でもDOCTYPEはわからない) 先頭(head要素が終わるまでくらい)をテキストに用意しておいて、 txtFileの頭にそれを書き出すとかでどう。 .Write objFso.OpenTextFile("c:\header.txt", 1).ReadAll
>HTMLって意外と"を使いますし。 ならJScriptつかえよ HTMLタグをつけるメソッドもあるし
>>763 DOMのことならVBScriptからでも使えるだろ。
Stringオブジェクトのことだろ
でもあまり使えるメソッドがないな
HTMLタグをつけるメソッドを付けた奴は、きっと浮かれ過ぎていたんだろうな。 後でcreat以上に恥ずかしい思いをしたに違いない。
JScriptだから好きなメソッドが追加できるよ .quote()なんてのもいいんじゃね
anchor(anchorString), big(), blink(). bold(), fixed(), fontcolor(colorVal), fontsize(intSize), italics(), link(linkstring), small(), strike(), sub(), sup() 確かに今更これらを使う気にならない
770 :
756 :2008/02/20(水) 22:51:33
>>762 >strOutStrings = Replace(strOutStrings, vbCrLf, "<br>")
あ、なるほど、確かにそうだ・・・失敗失敗・・・。
>先頭(head要素が終わるまでくらい)をテキストに用意しておいて、
txtFileの頭にそれを書き出すとかでどう。
なるほどねぇ・・・参考になります。
>>763 JScript使った事無いので全然知りません。
>>769 が言っている事がさっぱり分からない・・・
俺も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> タグが既に元の文字列内にあるかどうかの確認は行われません。 後の関数も似たようなもんだろ。さすがにこれはどうかね・・・
BASP21のSpaceメソッドほどではない。 # あれは馬場さん自身「作者の無知からくる全くのゴミメソッド」なんておっしゃってたな...
|BASP21メソッド編 | 1. BASP21のSpaceメソッドはなんであるの | えーとこれは、作者の無知からくる全くのゴミメソッドです。 | HTML でスペースをあけるのに全角のスペースを使うことがありますが、 | IMEでなぜか入力できなかったから(IMEのプロパティが半角スペースになっていただけ)。 | たぶん、誰も使ってないと思いますがどうでしょう。 babaq さんオッチョコチョイ杉ワロタ せっかくだから今度どこかで無理矢理にでも使ってあげようっと
774 :
デフォルトの名無しさん :2008/02/23(土) 12:50:03
あれはあれで便利だからなくさないで欲しい
吉岡照雄のOn Error Resume Nextの正しい使い方とやらを読んだんだが、 こんな面倒なことをしないといけないのか・・・
>>775 On Error Resume Nextの正しい使い方教えて〜
Subプロシージャを毎回作るのはいいけど、さらに複数行の時は入れ子。。。 Subプロシージャだらけになって大変すぎ
ファイルの日付をデータベース(ACCESS)に格納できねぇーー strSQL = "INSERT INTO Log " & _ " (Name " & _ " ,Date " & _ " ,SIZE) " & _ "VALUES ('" & fol.Name & "'" & _ " ,#" & fol.DateCreated & "#" &_ '←ここがおかしいらしい " ," & fol.Size & ")" なんか 『Insert into ステートメント の 構文エラーです』 とか出るんだけどなにがおかしいのか・・・
文字列にフォーマットし直してから渡せ
はぁー?
問題はそのフォーマットだろ
SQLの構文に合った書式に変換されるとは限らないってこった。 一旦、年月日時分秒をバラバラにして、構文に合わせた書式に作り替えればいい。 書式は自分で調べてくれ。
#mm/dd/yyyy hh:mm:ss# で渡すといいよ。VBScriptはFormat関数ないから面倒だ。
コードそのままで[地域のプロパティ] を変更するといいよ
capicom.dllが再頒布可能かどうかが調べてもさっぱり分からないんだが
WSHってマウスクリックも出来ないし、.SendKeysメソッドで日本語扱えないしで やっぱりAutoHotKeyには到底かなわない?
>>787 そこだけみると、間違いなく再頒布可能なファイル=CAPICOM.dllな気がするんだが、
DLしてライセンス(英語)を読むと、
再頒布可能なのは、REDIST.TXTに記載されたものと書いてあるが、
REDIST.TXTなんてどこにもない・・・
ググってもググってもはっきりどこにも書いてないorz
>>788 http://msdn2.microsoft.com/en-us/library/ms995332.aspx ここだと「再配布可能な 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 しかないんだし。
>>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から日付に直したらできたよ
ふぉぉぉぉぉっふぉおおおっ!!
>>789 確かにそういうことですね。私の考えすぎでした。
これで、capicom.dllを一緒に配布できるってことか。
一緒に配布している例が見あたらなくって、
どうしてMicrosoftからDLさせるところばっかりなんだろう?と、思ってました。
どーもです。
>>791 >どうしてMicrosoftからDLさせるところばっかりなんだろう?と、思ってました。
これについてはセキュリティリスクが関係すると思う。
同梱は可能であっても、同梱してしまうとバグやセキュリティ問題で capicom が更新されたとき、
企業責任として製品自体の更新版を出すことを検討しなければならない。
別途ダウンロードさせる場合にはそれは必要ない。
そうです、WSHはうんこです。AHKの足元にも及びません。AHKが最高です。よかったね。
AHK >>>>>>>>>>>>>>>>>>>>> マウス操作がデフォでできない言語 こんな定義でおk?AHKってどんだけ凄いんだよ(w
全盛期のAHK伝説でも貼る流れか?
AHKは本当に凄いですよ?AHKにWSHが勝てる点って デフォルトでWindowsに入ってる 標準環境っていうぐらいじゃないですかね?
デフォルトでWindowsに入ってる標準環境>>>(越えられない壁)>>>インストール
AHKのおかげで身長が2m伸びました
AHKから受信料の請求がきましたが、どうすればいいのでしょうか
>>800 テレビの横に古いパソコンを置いて「これはパソコンモニタです」って言い張れ。
>>786 >>793 >>797 暇でネタ振ってるんだと思うけど、それならそれで以下を回答してくれ。
・WSHとは何か、具体的に。
・どのように比較してその結論に達したか。
803 :
デフォルトの名無しさん :2008/02/24(日) 15:12:23
A ア H ホ K か?
804 :
797 :2008/02/24(日) 16:47:52
>>802 WSHとはWindows Script Hostingの事で、拡張子 .vbsのファイルにして実行できる
Windowsのスクリプト(Batとは違うのだよ、Batとは!)です。
Linuxで言うShell Scriptみたいなものかと思っています。
比較は、やはりマウスクリックですね。操作の自動化をしたいので、GUIアプリケーションを操作
する際に、Alt + Key みたいな感じにキーが割り当てられてない、クリックでしか出来ない操作を
自動化しようとするときにWSHだと無理なんですよ。
それと .SendKeysメソッド。日本語を送信できないなんて論外です。
その点AHKなら日本語も送信できるしマウスクリックも出来るし、記述が簡単(インスタンス生成
とか面倒な事しなくても簡単な記述でいい、ただし引数の多さがたまに傷かな)な所が良いと思います。
こんな感じでしょうか?
WSHはオートメーションオブジェクトの操作がメインだったりする。 他のアプリの制御はアウトプロセスサーバとして制御してくれ、って方針。 Perlが標準入出力の扱いに最適化されているように、 ATKはGUIアプリの操作シミュレートによる制御に最適化されている、と。 ATKはWMIの制御やりにくいから糞、とか言われても困るだろ?
806 :
797 :2008/02/24(日) 17:52:35
>>805 1行目、2行目、5行目の貴方の言っている事がスキルの低い私には理解できません・・・。
意味が分からないです・・・。すみません。
操作自動化の方法論が違うから総合的な比較はできないってこと GUI操作のシミュレートならそりゃそれように作られたもの使うのが当然 WSHはそういう用には作られてないもの
>それと .SendKeysメソッド。日本語を送信できないなんて論外です。 日本語が送れるVBのSendKeysと送れないVBSのSendKeysは、 仕組み上でどういう違いがあるのでしょうか?
直接Win32API呼び出してるかどうかじゃね
Win32API呼び出さないで、SendKeys作れるの?
つかってるAPIがちがうんだろ
812 :
802 :2008/02/24(日) 21:37:27
>>804 WSHというのは、スクリプト言語からWindows操作をする為の手段(WSHオブジェクト)
の提供と、そのスクリプト言語をデフォルトではVBScriptとJScriptを内包している。
君の比較しているのはVBScriptのようだけど、これは
>>805 の言っている通り
WSH以外のオブジェクトにもアクセスできる。例えば、IEやEXCEL、WMI....etc
こういう事はAHKでは、どうやるの?
というか、よく見たら
>>807 が結論出してるね。
GUI操作だけで比較したら、その機能に特化しているAHKが優れているが、
それは総合的な比較じゃないでしょ。理解できた?
813 :
797 :2008/02/24(日) 23:23:04
>>812 なるほど、適材適所でWSHもWSHが得意な場面で使えばAHKより使い勝手いいんだ・・・。
814 :
デフォルトの名無しさん :2008/02/24(日) 23:59:03
質問させてください。 ファイルが書き込み不能かどうかを検出するにはどうすればよいでしょうか? リードオンリ属性ではなく、ファイルを削除するとき稀に出てくる 「ほかのプログラムが使用しているため削除できません」ってやつの状態です。
>>814 自己レス。
try仕込むだけでよかったのね orz
>>812 > こういう事はAHKでは、どうやるの?
AHK用ActiveXモジュールを使えば良いだけ
逆にWSHでのポインティング操作などは
そういう機能を提供するCOMを使えば良いだけ
このレベルのことなら、やり易さに違いはあっても
結果的に"出来ること"ではWSHもAHKも大差ない
ポインティング操作に限って言えば
WSHは最初からWindowsに入っているが、ポインティング操作機能は後付けになる
AHKはWindowsに対して後付けで入れないと使えないが、ポインティング操作は最初から備えてる
ってだけの違い
817 :
797 :2008/02/25(月) 02:18:45
>>816 なんか凄くお詳しいですね・・なるほど、参考になります。
構文とかの簡単さはどちらの方に軍配が上がりますか?
情報量の多さでいくと、WSHの方が色々なところで解説されているだろうし
メジャーだと思います。
AHKはもっと普及してれば敷居低くなるのになぁと思ったり。
AHKS
FileSystemObjectのTextStreamオブジェクトのReadAllメソッドって サイズ0のテキストファイルに対して実行するとどうしてエラーになるのかよくわからん 長さ0の文字列返せばいいのに なんで? あとVB6でFileSystemObjectのGetParentFolderNameメソッドを使うと親フォルダ名のみだけど VBScriptだと親フォルダのフルパスが返ってくるけどこれもなんでだろ? 同じFileSystemObjectでもVB6が使ってるのは別物なの? なんで?
ReadやReadLineとの仕様の一貫性かも DLLは同じなの?
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();
たぶん、めんどくさかったんだと思う
WindowsXP、つまり最新のWSH 5.6だと使えるメソッドでもWindows2000、つまりWSH 5.6未満だと 使えないメソッド(例えば Execメソッドとか・・・)やプロパティがありますよねぇ? それらを調べたいのですが、何を見ればそういうことがまとまって書かれてありますか? WSHのヘルプファイルを見てみたのですが、見つけきれませんでした。 やりたい事はWindows2000のWSHを5.6にバージョンアップせずにWindows2000でもXPでも 動作するスクリプトを書きたいのです。だから予めどのメソッドが動作しないとか、 引数が違うとかそういうことを把握しておきたいのです。
5.6のヘルプのバージョン情報
ただし、障害は載ってないからなぁ
最新は5.7よ
>やりたい事はWindows2000のWSHを5.6にバージョンアップせずにWindows2000でもXPでも >動作するスクリプトを書きたいのです。 いまさらやめとけ それに2.0じゃたいしたことはできねー
>>825 5.0と5.1の挙動の違いすら、5.6のヘルプのバージョン情報だけでは分からなかったからなぁ・・・
829 :
デフォルトの名無しさん :2008/03/19(水) 11:24:42
5.7なんてあったっけ
ちがいは?
0.1
>>831 不具合修正・セキュリティパッチの統合もあるが、
JScriptで大量のオブジェクトが生成された時のGC高速化がメインかと。
dramaticallyとまで書かれているあたり、結構凄いのかもしれない。
Msxml2.XMLHTTPなんだけど readyState=2や3の時、status取得できる? 4にならないとエラーになるんだけどこれ普通? Msxml2.ServerXMLHTTPなら2や3でできるんだよね・・・ 最近IEがおかしくなってきてるので どっか壊れてるんだろうか・・・? XP SP2+IE6
IEとalertがとじれません><
すれちがい
IE.Quit
Exec("iexplore.exe").Terminate
どんまい
ん?検索すれば出てくるだろ?
.wsfに読み込む.vbsファイルの一部の関数を非公開にするのってどうやるの? .vbs内部だけで使える関数を作りたいんだけど・・・
できない 代替するなら wsc class かな
無理言うな、それが出来れば質問しないだろ?
>>843 Sub xxx_aaa()
とかで凌げ
エラーが起きたら即終了でダイアログが出ないようには どうすればよろしいでしょうか?
try { …… } catch (e) { WScript.Quit(); }
On Error Resume Next
vbeはwsfでは読み込めないのか…
んなことはない
vbsをvbeにエンコードしてから、読み込む側のコードの読み込み部分を <script language="VBScript" src="./hoge.vbs" /> から <script language="VBScript" src="./hoge.vbe" /> のようにしたんだが、 エラー: ステートメントがありません。 ソース: Microsoft VBScript コンパイル エラー になってしまって、あきらめていた。"VBScript"の部分を適切なものに変更すればいいのか? wsfの説明を読んでも分からない…教えてください。
VBScript.Encode
>>850 Try
...
Catch ex As Exception
WScript.Quit
End Try
で、できた。今までできないと思っていたのに… いろいろ実験に使っていたファイルを使ってやってみたんですが、 vbeファイルの中にPrivate Subと宣言した関数(実験なのでそのままPrivateSubという名前) を使おうとすると エラー: 型が一致しません。: 'PrivateSub' ソース: Microsoft VBScript 実行時エラー となるんですが、これはたまたまですかね?それともPrivateの効果なのか・・・ vbsを読み込んでいた時はエラーは起こらなかったんですが。
>>858 君は
>>843 かな?
Private(Public)宣言はオブジェクト(クラス)外に公開するか否かの宣言なので
インクルード(wsfのscript要素のsrc属性指定)した場合は関係ないよ
きっと偶々というよりプロシージャ名間違い等、君のミスだろう
プロシージャ名間違いなら、読み込みでエラーにはならないが呼び出しではエラーになるし
一応確認してみたが、vbs内でPrivate宣言したSubプロシージャを
そのvbsをインクルードしたwsf内で呼んでみたが、きちんと実行された
VBScriptでなく、JScriptにすれば? function a(){ WScript.Echo('a'); b(); function b(){ WScript.Echo('b'); } } a(); b();//エラー
MsgBoxをModelessに出して、後で閉じる方法を教えてください
WshShell.Run "MsgBox.vbs"
864 :
デフォルトの名無しさん :2008/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
>>864 無限ループにならないようにすると良いのです
866 :
デフォルトの名無しさん :2008/04/01(火) 23:30:32
ひどいロジックだな。 最近は「フローチャート」とか書かなくなったせいか こんなのが増えたな。
フローチャートなんて日本で「マイコン」が出だした頃でも既に有用性が 否定されていたぞw
868 :
デフォルトの名無しさん :2008/04/01(火) 23:50:25
↑
言うと思った。バカの一つ覚えw
それは、ある程度、論理的な思考ができるヤツがいう事だよ。
>>864 みたいに未熟なヤツは、フローチャートから入らないとダメ。
今からやろうとすることを、目に見えるカタチにしてまとめる。
これは大事なことだよ。
>>867 は後輩を育てられないタイプだな。
i = UBound(Split(webtext,strSerch)) + 1 '検索キーワードでサイト検索 検索回数カウント
found = 0
i = 0
Do
found = InStr(found+1,webtext,strSearch,vbTextCompare)
i = i + 1
Loop While found
i = i - 1
初心者だけど同じ関数で無理やりやってみた。
>>869 みたいに綺麗に逝きたい…
あー、でもこれ"aaaaaaaaaaaa"から"aaa"を検索したいときどう解釈するべきなんだろ。
>>870 では10回、
>>869 では4回?
あれ?検索文字列を区切りにしたなら検索された数は要素数-1でないの? UBoundに+1する必要ないような。
i = Len(webtext) - Len(Replace(webtext,strSerch,Mid(strSerch,2)))
874 :
デフォルトの名無しさん :2008/04/03(木) 00:59:23
カッコつけて恥かいちゃったね
(恥)
>>870-872 が自分のレスだけど、それ以外の人にも、わかってる人は
罵倒レスじゃなくてなんでダメポなんか書いて欲しいな。
スレ見てても参考にならんわ。
>>873 は何したいのかわけわかめなんだけど。
i=全文字数-(ヒットした数x(検索文字列の字数-2)) でいいんかな?
この2はどこから出たのやら?
もしかして
>>871 に対するレスか?
連レスすまん。 カキコした瞬間に勘違いに気づいた。 webtextで検索文字列にマッチした部分を検索文字列の2文字目以降で全置換 →全文字数がマッチした回数x1文字減るから減った数をカウントすればマッチ数がわかる でOK?
i = (Len(webtext) - Len(Replace(webtext,strSerch,""))) / Len(strSerch)
found = 1 - Len(strSerch) i = - 1 Do found = InStr(found+Len(strSerch),webtext,strSearch,vbTextCompare) i = i + 1 Loop While found
ここ、PC初心者板じゃないよね?
何が言いたい? 煽るなら死ぬ気でやれよ
っちょ うざいな
>>880 凄いなぁ!尊敬。アッタマいい!かっこいい。
(などと言われてみたい。。。てか?
>>880 にもチャンスをやろうよ
RegExp使ったコード書いてみ?
888 :
デフォルトの名無しさん :2008/04/03(木) 19:21:46
i = UBound(Split(webtext,strSerch)) すでに答えが出てるだろ。
>>868 あのなあ。。
フローチャートってのは「プログラミング言語以外で処理内容を表現するツール」
いうなれば「プログラマ以外の人間の方を向いたツール」であって(だから今でも
ユーザーズマニュアル等には時々出てくる)プログラマが思考の整理に使う道具ではないんだよ。
もう30年も前から言われていることだが、フローチャートってのは
複雑性を縮減する機能が全くないだろう。
ただベタに処理をチャートで表現しただけだからな。
だったらそんなもの書いてる暇があったらとっととコード書けってw
こんな人間が後輩の育成とか釣りではなく言ってるならどんだけ馬鹿なんだよw
っていうかこんな人間に「育成」される人が可哀想だ。
>>887 正規表現で指定したい場合なら、何の変哲もないが
With New RegExp
.Pattern = strSerch
'.IgnoreCase = False
.Global = True
found = .Execute(webtext).Count
End With
でいいんじゃね?
IgnoreCaseプロパティは必要に応じて指定すれば良し
>>871 の場合の結果は後者
891 :
kuchigakusaiossan :2008/04/04(金) 11:47:41
すいません、スレ異かな。WSHの言葉だけで来ました。
悩んでます。だれか教えぇぇぇぇ〜〜て
EXCEL2003 VBAで
http://www.happy2-island.com/vbs/cafe02/capter00711.shtml あたりに
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を参照設定しろー
すれちがい
ぐぐれもん
WScript.exeを参照設定しろ
実際問題としてVBAならDeclareが一番楽だと思うんだ
Application.Waitのほうが簡単
898 :
デフォルトの名無しさん :2008/04/05(土) 02:12:04
>>889 後輩つぶし必死だなwww
そんなに若者に追い越されるのが怖いのかい?
>そんなもの書いてる暇があったらとっととコード書け
で書いたのが、
>>864 だよ。
キミは後輩にこんなコードを書かせて満足してるんか?
いいぞもっとやれ
よそでやれ
901 :
kuchigakusaiossan :2008/04/06(日) 14:14:28
だいたいそういうこと。 WScriptオブジェクトはwscprit.exe/cscript.exeがスクリプトへ与えるもので、 その大半はスクリプトを実行したときでいないと意味を成さない。 例えば、WScript.SleepならVBではWin32 APIのSleep関数を使えばいいという具合に別の方法がある。
ActiveScript絡みだしギリギリOKじゃね? OLEオートメーションは一寸戻り過ぎだ。
>なぜVBAからWscriptのオブジェクト化ができないのか? できるけど?
Set WScript=GetObject("WScript.exe")
WScript.exeをtlbimpした.NETアセンブリを作って、 それをregasmしてVBAから呼び出す。
なぜWSHからVBAの関数やステートメントが呼べないのか?回避策は?などは 誰か〜〜 知ってる人おらんか。。。。。。 ヨロシク
VBAは外部に公開されていないし、ステートメントは論外だろ。 よって回避策も無い。呼び出すこと自体が目的でないなら別だけど。
910 :
デフォルトの名無しさん :2008/04/07(月) 02:23:47
>>905 どうやって作るのかコーディング例希望
ちなみに
>>906 は excel2003VBA では 「オートメーションエラーです」になる。なにかおまじないが必要なら
ご教授ねがいたい。くれぐれも実際に動作する説明でお願いしたい。
>>908 >>909 回避策でよいなら、Office経由で可能では?
WSHからOfficeのオブジェクト作って、非表示のOfficeのドキュメント内にVBAのコード
動的に登録して実行すればよい
とはいっても最近ではセキュリティの関係でOfficeの外部からVBAコード操作するとエラーになるけど、
これについては設定変えればいけると思う(たぶん)
>>910 WScriptは外部に公開されていないし、CreateObjectは論外だろ。
よって回避策も無い。呼び出すこと自体が目的でないなら別だけど。
>>910 回避策でよいなら、Office経由で可能では?
WSHからOfficeのオブジェクト作って、非表示のOfficeのドキュメント内にWScriptのオブジェクトを
動的に登録して参照すればよい
>>908 Excel.Application.Run (Excel2002以降は不可)
Access.Application.Eval (関数のみ)
FoxPro...
htaなんて便利なものがあるのを初めて知った。 まだpowershellはいいや。
すれっち
917 :
デフォルトの名無しさん :2008/04/10(木) 22:06:04
Set WSH = CreateObject("ほげほげ")
は、
Set WSH = WScript.CreateObject("ほげほげ")
の WScript を省略したもの。WScript はデフォルトで用意されているから。
>>901 Set WSH = CreateObject("WScript") ← エラーになる
これを長く書くと、こうなる。
Set WSH = WScript.CreateObject("WScript")
なんか変だよね。
> Set WSH = CreateObject("ほげほげ") > は、 > Set WSH = WScript.CreateObject("ほげほげ") > の WScript を省略したもの。WScript はデフォルトで用意されているから。 違うよ CreateObjectはVBSのグローバル関数(メソッド) > CreateObject(servername.typename [, location]) WScript.CreateObjectはWSH(WScriptオブジェクト)の関数(メソッド) > object.CreateObject(strProgID[,strPrefix]) 動作は似てるが引数(得に第二引数)の内容も違う
違うよ ここでは CreateObjectはVBAのグローバル関数(メソッド) WScript.CreateObjectはWSH(WScriptオブジェクト)の関数(メソッド) なのでVBAでは使えない ちなみにWSHでは Set WSH= はエラー
ADOでExcelに接続してワークシートをテーブルに見立ててクエリ投げる、ってのあるじゃないですか、 Excelが2000・2002(XP)・2003の環境だと問題ないんだけど、今日同じソースでExcel2007で初めて動かしたら ADO接続のところでエラーになった。 もしてかして2007ってこれ使えない?
当然
>>921 こういうレスって2007使ってない奴には何が当然かさっぱりわからんわな。
924 :
デフォルトの名無しさん :2008/04/11(金) 21:49:08
925 :
デフォルトの名無しさん :2008/04/11(金) 22:08:45
>>919 ここでは、って言われても・・・
ここはWSHのスレだろ?VBAのスレじゃ無いよ。
質問文の日本語を読めなかったの?
927 :
デフォルトの名無しさん :2008/04/12(土) 01:45:37
質問文の日本語を読めば、ここがVBAスレに変身するのか?
ここがWSHスレだから、元レスがWSHの質問文に変身したというのか?
>>910 WScript.exe /register
regsvr32 WScript.exe
>>910 WSC作って
Set WScript=GetObject("script:WScript.wsc")
他人の人生の意味なんか考えてても人生の無駄だぜ
他人が以下に自分より劣ってるかというのは重要だぜ
他人が恥を晒しているのが見れるのは重要だぜ
>>932 レベルを相手に合わせてるんじゃないの?
そう思ってるのは本人だけ。
WSHのソース作成&デバッグってみなさんどうしてるの?
vbs をダブルクリック等で起動するようなスクリプトを
VB(A)と同じようようなデバッグ環境でデバッグできますか?
excel2003の Script Editor が使えるのかなと動かしてみたが
これはWEBのVBS用なのかな。。?
スッテップイン させてもブラウザが動いてステップしないし
ぐぐるとWSHではそのままでは動かないような事もでてくるし
ttp://www.sio.no-ip.com/mt/shio/archives/2005/05/wsh-os.html イミディエィトウィンドウがないみたいだし
エクセルVBAで書いてるソフト(自己使用)のメイン部分をWSHにしてエクセルから外にだそうと
考えていいますが、すなおに VB(Visual studio ?)にでもしたほうがいいのかな。。。
よろしく〜〜〜〜〜〜
Msgbox デバックだろ。常考。
VisualStudio持ってるけど、VBS相手に使ったことないなぁ〜 使ってる/使ったことあるひと教えて〜
wscript //?
942 :
デフォルトの名無しさん :2008/04/14(月) 02:35:34
VisualStudio 2005 Enterprise Edition は コード補間のできるVBSエディタとして使ってるけど デバッグは MsgBox や Wscript.Echo だな。 これは VBS に限らず、すべてのプログラミング言語に共通する 基本中の基本だな。
943 :
デフォルトの名無しさん :2008/04/14(月) 08:30:01
MSがscript debugger とかいうの配布してなかったっけ? おれもmsgboxデバッグ派だけど。
944 :
デフォルトの名無しさん :2008/04/14(月) 11:36:24
デバッガ使うよりメッセージ出力のほうがいい理由って何?
デバッガがある環境は限られるが、メッセージ出力はメモ帳があれば追記できる。
ScriptDebugger って生VBSで使えたんだっけ? たしかIEのオプション(?)でASPとか向けだった気がするんだけど。
VisualStudio だとVBSのステップ実行できないし変数ウォッチできないだろ
つまりScriptDebuggerならステップ実行&変数ウォッチができるってこと?
>948 できないよ
951 :
デフォルトの名無しさん :2008/04/15(火) 08:34:13
そのdebuggerってフリーなの?
WSHってかvbsは外部コマンドも呼びづらくパイプ処理も面倒で かといってWin32APIも呼び出せず単体ではモジュール化もできないと制約だらけだな。 これほど使いづらい言語はお目にかかったことがない。
>WSHってかvbsは外部コマンドも呼びづらくパイプ処理も面倒で >かといってWin32APIも呼び出せず単体ではモジュール化もできないと制約だらけだな。 自分の無知を言語のせいにする典型だなw
言語を使いこなせない狐が酸っぱい葡萄と言うんだって?
WSHでAPI呼べるの?
そういうCOM使って呼べる
>>955 WSHでもAPIは呼べるよ
ActiveXって種類のAPIなら直接ね
そしてWin32APIって種類のAPIはActiveXから呼べるので
結果WSHからWin32APIを呼ぶことも可能
よーするに呼べないってことですね。
馬鹿には呼べないってことですね。
vbaは外部コマンドも呼びづらくパイプ処理も面倒で
言語仕様もひどいもんだしな
>ステップ実行 1行ごとにStop文
>外部コマンドも呼びづらくパイプ処理も面倒 なのは"WScript.Shell"がへぼいせいで、もっといいCOMを作れっていうの
COM作れるんだったらそっちの開発環境で完結すればいいんじゃね なにもWSHなんぞ使わんでも
MSに文句を言ってるんだと思った
>なのは"WScript.Shell"がへぼいせいで、もっといいCOMを作れっていうの だれか作って コンソールを非表示にできる StdOut/StdErrにデータがあるかブロックしないで調べられる/取り出せる できればStdInにreadが掛かってるか分かる
WSHにのってるまともなスクリプト使えば一瞬で解決だろ
追加 AppActivateでなくFindWindowどまりの機能 SendMessageもついでに
969 :
デフォルトの名無しさん :2008/04/16(水) 21:02:45
COMに手を出す時点で、WSHに拘る理由がなくなるな。 そのまま他言語で書いた方が早い。
一時的に目的を達成するだけならね しかしそういう状況のみではないんだよ もっと視野を広く持とう
972 :
970 :2008/04/16(水) 22:00:06
むしろ、WSHに拘っている方が視野が狭いと思ったわけで。
>>966 や
>>968 程度の機能でいちいちCOMコンポーネント書いて、
使うPC毎にいちいちregsvrして、って唯のギャグだろ。
そうでもないか
>>972 そうそう。
だから、WSH付属のコンポーネントがもっと高機能だったらよかったのにと思う。
何故自分にレス?
自意識過剰w
オプションって//じゃなくて/でもいいの? 1つでも動くっぽいんだけど cscript /nologo xxxxxxxxxxx って感じで
おk
/と//になんか違いはあるの?
スクリプトのファイル名の後にオプションを記述するときは //でなければならない。
へー
cscript -nologo xxxxxxxxxxx でもよい
どうでもよい
お尋ねします。 vbs で @ WSHウィンドウのタイトルを設定するにはどうすればよいのか? A [OK] ボタンが押されるのを待たずにすぐ次の処理を実行したい
>>985 WSHウィンドウって何?
[OK] ボタンって、なんのボタンよ?
987 :
985 :2008/04/20(日) 22:06:40
すいません、自己解決です。 Set WSHShell = Wscript.CreateObject("Wscript.Shell") WSHShell.Popup ”表示する文字列”, 0, "タイトルの文字列", vbOKOnly 0 : メッセージボックスを自動的に閉じるまでの秒数 vbOKOnly : 表示するボタンの種類 でした。
>>985 1. MsgBox "プロンプト文字列", vbOKOnly, "設定したいタイトル文字列"
2. はそもそも出来るのかどうかすら怪しい。時間が来たら自動的に閉じて処理続行ならあるが。
>>986 >WSHウィンドウって何?
MsgBox関数で出てくるようなGUIオブジェクトの事言ってんじゃないの?
>[OK] ボタンって、なんのボタンよ?
MsgBox "", vbOKOnly
↑これのことじゃね?w
Const ForWriting = 2 Set WshShell = WScript.CreateObject( "WScript.Shell" ) Set objFSO = WScript.CreateObject( "Scripting.FileSystemObject" ) WshShell.CurrentDirectory = objFSO.GetParentFolderName( WScript.ScriptFullName ) strSend_Enter = strSend_Enter & "WScript.TimeOut = 3" & vbCrLf strSend_Enter = strSend_Enter & "Set WshShell = WScript.CreateObject( ""WScript.Shell"" )" & vbCrLf strSend_Enter = strSend_Enter & "Do Until WshShell.AppActivate( ""Windows Script Host"" )" & vbCrLf strSend_Enter = strSend_Enter & " WScript.Sleep 100" & vbCrLf strSend_Enter = strSend_Enter & "Loop" & vbCrLf strSend_Enter = strSend_Enter & "WshShell.SendKeys ""{ENTER}""" Set objSend_Enter = objFSO.OpenTextFile( "Send_Enter.vbs", ForWriting, True ) objSend_Enter.Write strSend_Enter objSend_Enter.Close WshShell.Run "Send_Enter.vbs" WScript.Echo "test" objFSO.DeleteFile( "Send_Enter.vbs" )
wsf使えば?
再帰とか
msagentだな
.
.
1000ならジュースでも飲むか
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。