テンプレ以上(・∀・) 見つけられなかったところはリンク切れって書いといた(・∀・) 次スレも立てずに意味もなく埋めた糞コテは死ね(・∀・) コロコロとページのURLを変えるMSも死ね(・∀・)
>>1 乙
>コロコロとページのURLを変えるMSも死ね(・∀・)
いやまったく
くだらねぇ仕掛けでリソースをムダに使わせるページ構造も許せん、マジで
>>前スレ990 CStrとかArrayとかの関数を駆使してデータ型をあわせてやることってできない? 試せるものなら俺も試してみたいんだけど、なんのAxコンポーネント?
>>1 乙
発言番号
>>11 はM口さんのために空けておいてあげて下さい。
型指定できる言語使うか、ラップするか、型を変換するCOMを作るか白 手っ取り早いのはpowershellかのー
11 :
11 :2007/09/24(月) 16:06:57 ID:eaufB3wz
>11 ウィルスバスターが反応したぞ 阿龍お前なに仕込んだんだ
>14 だれじゃお前は!さっさとこの家から出ていけ!
>>15 60年連れ添った女房の顔も忘れるなんてねぇ・・・
おじいちゃんもいよいよだねぇ
InternetExplorer.Applicationでウィンドウの右上の最大化ボタンを押すのと同等のメソッドかプロパティありましたっけ? 画面サイズを取得してサイズをあわせるしかないですか?
>>11 第1回 WSHを始めよう
Microsoft MVP
Visual Developer - Scripting
牟田口 大介
2006/06/02
スクリプトから「ctrl+ホイール」する方法はありませんか?
HTTP/1.1 304 Not Modified ( ・∀・)(・∀・ )オツカイオワリ 三三三三3 (・∀・∀・) (-_-) 誰もカキコしてない・・・ (・∀・)カンリョウ!!
WSH=VBS?
no
(-_-) 誰もカキコしてない・・・
jsでもvbsでもどっちでもいいから
「ディスク上のサイズ」を取得する方法が知りたい・・・
>>19 sendkeysでctrlとscrolllockじゃダメ?
・・・イヤ、ミテナイダロウケド
>>24 WinAPIでサイズ取得して標準出力するexeをCで組んでそのexeを叩いたらできたけど
WSHだけで出来るか、ってことだよね?
クラスタ/アロケーションユニット単位に切り上げればいいんじゃない?
>>25 圧縮されてたらサイズが違うってことじゃないの?
スクリプトちょこっと組んでみたけど・・・ 膨大なオブジェクトメソッドプロパティの中から使えるもの探すの大変だった いちいちネットで調べて作ってると時間いくらあっても足らない これがプログラミングってやつなのか、大変なんだな
2chの鯖のリンクだけスレ内から抽出してテキストファイルに保存。 それのやりかた教えて。
ヽ(`Д´)ノウワァァン
対象ファイルをhtmlにするかdatにするかで違ってきますね
>>33 いや、htmlでもなくDatでもなく、TEXTでいいんです。
テキストファイルに2ch鯖だけのリンクを抽出したファイルを作りたいんです。
何をするのかというとp2todatでリスト化されたURLリストを順番に読み込んで実行していきたいんです。
もちろん、鯖にやさしく過剰なアクセスやクロール行為などはやりません。
おしえてくださいまし。
> 鯖にやさしく過剰なアクセスやクロール行為などはやりません。 信用できないな そもそも手動でやってれば間違いなく鯖に優しいアクセスになる 自力でスクリプト書けないような無能は、本人が鯖への配慮もしてるつもりでも実際は出来てないだろうから 強制的に鯖に優しくなる手動でやらせておくのが吉
OS: XP sp2 wshのバージョン: 5.6 マシンを再起動するコードを教えてくれませんか? Set WSHSHell=CreateObject("WScript.Shell") WSHShell.Run "C:\WINDOWS\system32\RUNDLL32.EXE Shell32.dll,SHExitWindowsEx 2" としても、エントリがありません、と出てしまいます
40 :
38 :2007/10/21(日) 22:38:04 ID:HYDYzM0Q
fs = new ActiveXObject("Scripting.FileSystemObject"); var objOutFile = fs.CreateTextFile("C:\\test.txt",1,1); objOutFile.Write("ほげ"); objOutFile.Close(); こうすると、UTF-16で保存されてしまいますが、UTF-8で保存するにはどうしたらよいのですか?
ADODB.Stream UTF-8
43 :
名無し~3.EXE :2007/10/23(火) 23:15:16 ID:klW0leS2
strComputer = "nullpo" Set CPUSet = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2").InstancesOf("Win32_Processor") for each CPU in CPUSet Wscript.Echo "LoadPercentage:" & CPU.LoadPercentage next これでCPU(コア)ごとのCPU使用率取れますか? おらのデュアルコアCPUマシン(Athlon64×2)では1つしか取れないんだけど?
どっかの他PCにアクセスしてユーザ名とパスワード入力した状態って出来ますか? NET USE使うしかないんでしょうか? ドライブの割り当てはしたくないんですが。
>>44 NET USE はドライブ名を割り当てなくても使える。
net help use かヘルプを参照しなさい。
来週試してみます
音声認識のプロパティ出さずに認識エンジンを設定することって出来ますかね?
うん
JScript + WSF でローカルで動作するバッチ処理的なプログラムを書いたのですが、 完成してから、FileSystemObjectでのファイル削除などがMcafeeの怪しいスクリプトを遮断する 機能によってブロックされるという致命的な問題に遭遇しました。 スクリプトを遮断する機能で毎回動作のたびに「許可」をクリックすることで回避可能ではありますが、 あまりに面倒なので常に許可するホワイトリストのようなものを探したが、見つからず。 Mcafeeに限らず、Nortonなどでも同様の問題が発生するようですが、同じような経験をされた方、 解決方法があれば教えてください。そもそもWSH以外でインストール不要で高機能なスクリプト言語があれば、 そちらに移行することも考えております。
50 :
名無し~3.EXE :2007/11/04(日) 17:46:44 ID:M2Cn2wOu BE:91467432-2BP(445)
>>49 偉い方に教えてもらった対処法ですが
例えば
Set FS=CreateObject("Scripting.FileSyst" & "emObject") ;
の場合
Set FS=CreateObject("Scripting.FileSyst" & "emObject") ;
とかやったらどうでしょう?試してないですがノートン先生ならスルーしてくれそうな予感です。
というか
ノートンもマカフィーも入れてないので
これでOKなのかどうか教えてもらいたかったり。
ああしまった・・ 前半の Set FS=CreateObject("Scripting.FileSyst" & "emObject") ; は Set FS=CreateObject("Scripting.FileSystemObject") ; です
質問です。 vbs でポップアップメニューを作成するには どうすればよいのでしょうか?ヒントだけでも お願いしまっす。
MsgBoxってなかったっけ?
あれをポップアップメニューとは呼ばん
>>52 VBS、WSHにそういう機能は有りません
実現したければそういうきのうのCOMを作るか探すかしてください
まぁ、AHKあたり使っちゃった方が手っ取り早いと思うけどね
エラーになります。 空白があるパスの対処方法を教えてください。 var shell = WScript.CreateObject("WScript.Shell"); shell.CurrentDirectory = 'C:\Documents\ and\ Setting\Administrator\デスクトップ';
いや、\のエスケープの問題だろ
もうVBSを使え
>>56 「"」の場合は「\\」でやりました。
「'」の場合は「\」で問題ないようです。
あるよ "と'は自分と違うのをエスケープなしに挿入できる("'"とか'"'とか書ける)以外差はない で、エスケープってのはJScriptで文字列を表現できないから使うもんであって 空白は普通に表現できるのでJScriptとしてエスケープは不要 逆に\は\自体がエスケープ文字に使われているので\は普通に表現できないからエスケープする CurrentDirectoryはそもそも空白を含むパスを受け入れられる
/でも使っとけ
62 :
52 :2007/11/06(火) 23:48:32 ID:/MDmkMKN
>>55 dです。COM か... 大変そうですな orz
IEでそれっぽいUIでも作ればいいじゃん
つ 「正規表現」
前スレに引き続き指摘されますた。
>>50 > Set FS=CreateObject("Scripting.FileSyst" & "emObject") ;
>>49 じゃないけど、これはNG。
まあこの程度ですり抜けられるようじゃアンチウイルスの意味無いと思うし。
ただし、UWSCスクリプト内でFileSystemObject呼んだ場合は何にも言われないから
同様のパターンで実行可能なのがあるかもしれない。
IActiveScriptのものだけチェックしてるとか
BATとwshで文字列をやりとりすることは出来ますか? ファイルを介さないと駄目でしょうか? a.batからb.jsを呼ぶ b.jsが何か文字列を返す a.batはその内容を使って何かする
batで%1とかつかって引数で渡す。
SP+メーカー付属のバッチファイルでそれやってるな。あっちはjsでなくvbsだけど
>>71 引数が使えるのはa→bの場合だ
70はb→cのところで文字列を渡したいんだから引数は使えない
この場合は標準入出力を使うがよろし
for /f %%1 in ('cscript hoge.vbs') do echo %%1
脱帽
勘違い ああ勘違い 勘違い
79 :
70 :2007/11/14(水) 21:30:58 ID:KO3uEZWd
やりたいことができました。 ありがとうございました。 testA.bat for /f %%1 in ('cscript testB.js') do set folderName=%%1 mkdir %folderName% testB.js WScript.Echo("フォルダ01");
80 :
名無し~3.EXE :2007/11/20(火) 22:12:17 ID:VEKX0U78
質問がありますです。 コンピュータABCは同じワークグループ名です。 XPSP2のPC[A]で共有を作った。 無効だったGUESTを有効にした。パスワードを空にした。 SECPOLで空パスワードでネットワークアクセスを受け付けるようにした。 SECPOLでGUESTのネットワークアクセスを拒否していないことを確認した。 共有のアクセス権 Everyone フルコントロール NTFSアクセス権 Everyone 変更 スクリプトは、FSOでUNC指定している状態。 これで別のXPSP2のPC[B]からは、この共有にアクセス(ファイル作成)できた。 別のWindows2000[C]から、そのPCにアクセスすると、エラーになってしまった。 エラー番号から見ると、ユーザー名またはパスワードのミスマッチと出た。 GUIでその共有にアクセスすると、2000ではユーザー名とパスワードを訊かれた。 このときXPでも2000でも、ローカルのAdministratorでログオンしていた。 ネットワークは同一セグメント。 Windows2000でアクセスできないのは何故でしょうか。 できるようにする方法があるでしょうか。
81 :
名無し~3.EXE :2007/11/20(火) 22:19:09 ID:VEKX0U78
引き続き質問です。 ドライブレターを使用せずにネットワークの共有フォルダを使用したいのですが、 そのときユーザーの資格情報を使うのは実現可能でしょうか? GUIだとファイル名を指定して実行より普通にできますが、 自分で調べたとことろではスクリプトはドライブレターを使う方法ばかりでした。
ファイル名を指定して実行できるならrunかexecでできないの? あんまり詳しくないので誰かフォローよろ
83 :
名無し~3.EXE :2007/11/21(水) 01:24:51 ID:SPFt+BVD
なんか質問が漠然としててイマイチ意味がわからん。 質問の仕方が下手なのか、オレの理解を超える高度な質問なのか。 >GUIでその共有にアクセス これはエクスプローラで、って意味だよな? Windows2000 からアクセスできないのは、単にWindows2000にユーザとパスワードを登録してないだけ? もう手元にWindows2000が無いから確かめられんが。 ドライブレターを使わない方法っていうと、 ¥¥サーバ名¥共有名¥サブディレクトリ¥ファイル・・・ だろ。そういう事じゃなくって???UNCって言葉を知ってるくらいだから、わかってるやろね。 もしかしてコンソール型のコマンド?だったらドライブレターが無いと動かんのだが。 検証用の短いスクリプトを書いてを掲示板に貼り付けてみろ。 ただ単に「動かない」って言うだけじゃ問題解決せんぞ。 キミの文章は、一見すごく詳しく書いてあるように見えるが、実は具体的な事はぜんぜん何一つ書いてないやん。 あと、コードを貼り付けるときは、空白は に置換してな。じゃないと読む気がしなくなる。
84 :
名無し~3.EXE :2007/11/21(水) 01:26:26 ID:SPFt+BVD
あと、コードを貼り付けるときは、空白は に置換してな。じゃないと読む気がしなくなる。
85 :
名無し~3.EXE :2007/11/21(水) 07:31:10 ID:ostA5nqh
>80 俺同じことで悩んだことがある。 難しく書いてあるけど、つまり ワークグループ上のPCで共有つくった。 この共有は、ユーザーが手作業で認証することなく 誰でも書き込みできるようにしたい。 XPだとできるけど、2000だとできない。 XPと2000で確認したときのユーザーは同じユーザー。 でいいか? だとすると、そのカギはたぶん ForceGuest XPから付いた機能。2000にはない。 FGが有効だとネットワーク資源にアクセスするときの試行順序が異なる。 2000で失敗するのはおそらく、共有を作ったPCのAdministratorと 2000のユーザー(Administrator)がマッチしたんで共有のAdministrator のパスワードを求められたと思われる。 >80は薄々それに気付き始めていて、81の質問をしているように見えるな。 81の回答は知らん。
ドライブレターをWSHで変更したいんですが、 知っている方いらっしゃったら教えて頂けませんでしょうか?
87 :
名無し~3.EXE :2007/11/23(金) 01:01:57 ID:RcwUXjpV
時代はPowerShell
時代とかどうでもいいんだがそのPowershellというやつは便利なのか?
.NETのライブラリが素で使えるんだからWSHに比べりゃ基礎力が違うな
基礎力が必要だな
ttp://www.atmarkit.co.jp/fwin2k/operation/pshvswsh/pshvswsh_01.html Windowsスクリプティング環境比較:PowerShell vs WSH
―― 伝統のWSH 対 先進のPowerShell、どっちを使う? ――
WSHとPowerShell、どちらを使うべきか?
ここまでの比較を振り返ってみると、現状ではアプリケーションの使い勝手としてはWSHが、
スクリプト言語の機能面ではPowerShellが優位になると考えて差し支えないだろう。
使い分けの決め手となるのは、システムにPowerShellなどを追加インストールできるか否かにかかっているといえるかもしれない。
WSHならばどこででも動作するが、PowerShellはそうではないからだ。
将来性に関していうと、WSHは今後セキュリティ対策やバグフィックスなどのための
マイナー・アップグレードのみにとどまり、メインとなる機能はさほど変化しないと考えられる。
ある意味「枯れた」「安定した」環境である。
筆者としては「こちらがお薦め!」とはいいにくいところがある。
本音をいえば「両方お薦め!」である。ぜひとも、どちらの環境にも触れてみていただきたい。
また、WSHをすでに使われている方は、ぜひ新しいPowerShellも使ってみていただきたいと思う。
#フォームを表示するサンプル [void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $form = New-Object System.Windows.Forms.Form $form.TopMost = $true $txt = New-Object System.Windows.Forms.TextBox $txt.Text = "てきすとぼっくす" $txt.MultiLine = $true $txt.Dock = "Fill" $txt.Add_TextChanged({Clear-Host;Write-Host '[' + $txt.Text + ']'}) $form.Controls.add($txt) $form.ShowDialog()
function tail([string]$file, [int]$line=10){ Get-Content $file | Select-Object -Last $line }
96 :
名無し~3.EXE :2007/11/27(火) 21:24:09 ID:JEXhs+tO
Execメソッド以降が固まってしまうことがあって困っています。 調べたところ、どうやらコマンドの結果が4096バイトを超えると固まるようです。 (dos窓が開いたままの状態でMsgBox("cmd end")が実行されない) これを回避する手段はないでしょうか? コードは以下です。 Set objWshShell=WScript.CreateObject("WScript.Shell") Set objExec=objWshShell.Exec("C:\cygwin\bin\bash.exe --login -c /home/root/foo.sh") Do While objExec.Status = 0 WScript.Sleep(1) Loop MsgBox("cmd end") Do While Not objExec.StdOut.AtEndOfStream strRes=strRes & objExec.StdOut.Read(1) Loop MsgBox(strRes)
単にSleepが短すぎるとかじゃないよなぁ?
98 :
名無し~3.EXE :2007/11/27(火) 22:47:10 ID:dWqMnF1n
コマンド実行中に4096バイト溢れないように読み出したらどうかな。 Set objWshShell=WScript.CreateObject("WScript.Shell") Set objExec=objWshShell.Exec("C:\cygwin\bin\bash.exe --login -c /home/root/foo.sh") Do While objExec.Status = 0 WScript.Sleep(1) If Not objExec.StdOut.AtEndOfStream Then strRes=strRes & objExec.StdOut.ReadAll End If Loop MsgBox("cmd end") Do While Not objExec.StdOut.AtEndOfStream strRes=strRes & objExec.StdOut.Read(1) Loop MsgBox(strRes) もしくはファイルにリダイレクトしてから読み出すとか・・・
添削開始 Set objWshShell=WScript.CreateObject("WScript.Shell") Set objExec=objWshShell.Exec("C:\cygwin\bin\bash.exe --login -c /home/root/foo.sh") MsgBox objExec.StdOut.ReadAll 添削終了
100 :
96 :2007/11/28(水) 23:35:18 ID:KdWjqQzh
>>97-99 レスありがとうございます。
99氏のReadAllで対処することができました。
ところで4096バイトというのはなにか制限があるのでしょうか?
pipeのバッファ長
102 :
96 :2007/11/30(金) 00:22:06 ID:Fxl47CyX
WindowsXPProの質問です。 ドメインユーザーのSID(S-x-x-x....) から、ユーザーID(Domain\UserID)を知りたいんだけど、 ActiveDirectoryにどんな方法でアクセスすれば良いですか? ADSIを使うっぽいのですが、よくわかりません。
@Echo ほしゅ
vbscriptで下のように FTP を実行するものを作りました。 ------------スクリプトファイル---------- Set objExec = objWshShell.Exec("ftp -s:ftptest.txt") Do Until objExec.StdOut.AtEndOfStream strLine = objExec.StdOut.ReadLine Wscript.Echo strLine Loop FTPの実行結果を取り出したく、標準出力を出しているのですが、 FTPサーバのレスポンスコード (226 BINARY Transfer complete. のような)をとることができません。 FTPのスクリプトファイルに記述したコマンド文字列(get 〜〜〜 など)は出力されます。 なにかレスポンスコードを取り出す方法はありませんでしょうか。
ありますよ
>>105 それって普通に実行して>でリダイレクトした場合は取れるのか?
会話的な出力は無理なんじゃ?
2>
システムのプロパティで 「このコンピュータのプライマリDNSサフィックス」 をスクリプト(VBScript)で設定したいのですがレジストリを書き換えるしかないでしょうか?(Windows2000:WSH5.1) レジストリ変更した場合本当にシステムのプロパティの 「DNSサフィックスと NetBIOSコンピュータ名」 から変更した場合と同じ効果が得られますかね。 'このコンピュータのプライマリDNSサフィックスに追加 SET WSHShell = CreateObject("WScript.Shell") WSHShell.RegWrite "HKLM\System\CurrentControlSet\Services\TCPIP\Parameters\Domain" , "example.local", "REG_SZ" SET WSHShell = CreateObject("WScript.Shell") WSHShell.RegWrite "HKLM\System\CurrentControlSet\Services\TCPIP\Parameters\NV Domain" , "example.local", "REG_SZ" 'ドメインのメンバシップが変更されるときにプライマリDNSサフィックスを変更するか SET WSHShell = CreateObject("WScript.Shell") WSHShell.RegWrite "HKLM\System\CurrentControlSet\Services\TCPIP\Parameters\SyncDomainWithMembership" , "0", "REG_DWORD"
110 :
名無し~3.EXE :2007/12/31(月) 02:02:49 ID:lbRF296b
WMIなんだけど VistaだとCPUコアごと(デュアルコアCPU使用の場合)にCPU使用率取れないの? 会社のサーバ機(Win2003)だと普通に取れるのに。
へ
112 :
名無し~3.EXE :2008/01/21(月) 00:22:04 ID:wT0Wq3sL
>>110 VistaからWin32_Processorが変わったらしいぞ
ファイルに連番を振って、連番状態をtxtファイルに保存するスクリプトをくんだんだけど、 引数多いとエラーになるからファイラの10ファイルずつ何度かに別けて実行するようにしたら、 前のスクリプトがtxtに書き込む前に次のスクリプトが実行されてしまって 重複する連番が発生しまう問題が出てきた。 これをなんとか回避する方法ってない?
ロックシリアライズ
>>113 方法1 ファイラからわけて実行するときは、同期して順番に実行させる
方法2 txtファイルはセッションごとにユニークなものを用いる
vistaの検索にもインデックスサービスのような スクリプトから扱えるインターフェイスはありますか? あれば教えてください。
>>116 方法1はやり方が判らん。
方法2は統一連番なので連番用のtxtファイルは一つにしたい。
>>113 引数を減らすわけにはいかんの?フォルダを渡してその中全部のファイルに連番ふるとか。
WSHからIEを触っていますが、 <SCRIPT src="a.js" type=text/javascript></SCRIPT> このa.jsの中身をどうしたらいじれるか悩んでいます。 IE.document.scripts.item(x).src にa.jsが入っているところまではわかりました。 しかし 〜.outerHTMLは「<SCRIPT src="a.js" type=text/javascript></SCRIPT>」 〜.innerHTMLは「」(中身なし) と中身がどこにあるのかわかりません。 最終的にはこのa.jsの中にあるconfirmを取り除くことが目標です。 ボタンの形をした画像のonclickでこのconfirmが呼ばれるため、 buttonimg.click()で処理が中断されてしまいます。(制御が戻ってこない) どなたかお知恵をお貸し下さい。
confirm = "うんこ" でいいじゃん。
最初意味がわかりませんでしたが、最終的に div = IE.document.createElement("div") div.innerHTML = " <script defer='defer'>window.confirm = function() {return true;}</script>" IE..document.body.appendChild(div) で解決できました。 ありがとうございます。 ところで、上記のやり方ではなく、 IEオブジェクトから直接confirmを上書きする方法はあるのでしょうか? IE.document.window.confirm = "function() {return true;}" だとオブジェクトがないみたいだし、右辺もあやしい?
>>121 スクリプトの中身はtextプロパティ
>>123 ParentWindow使え
あと右辺はもちろん関数
あるアプリケーションへ, {TAB} {TAB} {ENTER} alt+W P という5つのキーを20回連続して入力したいのです。 かつ,5つのキーの間にそれぞれ1秒程度のwaitを入れたいのです。 で,以下のように記述したのですが,エラーが出ます。 どこをどう治せばいいのか教えてください。 var WShell = WScript.CreateObject("WScript.Shell"); For i=1 to 20 Step 1 WShell.Sendkeys("{TAB}{TAB}{ENTER}%WP"); Next スクリプト: **** 行: 5 文字: 5 エラー: ';' がありません。 コード: 800A03EC ソース: Microsoft JScript コンパイル エラー
JScript for ステートメント 次のコードは、for ループの使用例です。 /* 初めに i は 0 に設定され、繰り返し処理の最後に 1 ずつインクリメントされます。 ループは、繰り返し処理の前に i が 10 かまたはそれ以上になったときに終了します。*/ var myarray = new Array(); for (i = 0; i < 10; i++) { myarray[i] = i; }
さすがに言語の区別が付かん奴ってのは珍しいな
JVB折衷か〜 爆笑じゃ〜
129 :
名無し~3.EXE :2008/02/25(月) 17:51:14 ID:36gDupYt
こりゃひどい。前代未聞。ここまでひどいのは初めて見た。
自演乙
>>131 一度、スクリプトの拡張子を.vbsに変えて実行してみたらどうだろう。
爆笑させてもらったお礼だ。
あきらめなくても、素人らしく20回コピペしたらいいだろ。 バグがあろうが、セキュリティ上の穴があろうが、羅列で見苦しかろうが 「自分だけがわかって使う」なら「最強だ」という考えもありかと@業務で使わないのなら まぁ、自分で作っても記憶は忘却する一方だから、コメントぐらいは入れとけよ。
WSFにすればいいよ <job> <script language=jscript> var WShell = WScript.CreateObject("WScript.Shell"); </script> <script language=vbscript> For i=1 to 20 Step 1 WShell.Sendkeys("{TAB}{TAB}{ENTER}%WP"); Next </script> </job>
>>131 > var WShell = WScript.CreateObject("WScript.Shell"); JScriptの構文
> For i=1 to 20 Step 1 VBScript
> WShell.Sendkeys("{TAB}{TAB}{ENTER}%WP"); JScript
> Next VBScript
未練がましいなぁ・・・ 本人がもういいって言ってるんだからあきらめたら?
>>125 var WShell = WScript.CreateObject("WScript.Shell");
var title = "無題 - メモ帳"
function sendkeysleep (app,key,wait)
{
WShell.AppActivate(app);
WShell.Sendkeys(key);
WScript.Sleep(wait);
}
for (i=0; i<20 ; i++){
sendkeysleep(title,"{TAB}",1000);
sendkeysleep(title,"{TAB}",1000);
sendkeysleep(title,"{ENTER}",1000);
sendkeysleep(title,"%W",1000);
sendkeysleep(title,"P",1000);
}
My Documentsのターゲットフォルダの場所を ログオフせずに変更することはできませんか? レジストリのどこを修正するかはわかっていますが ログオフするまで有効になりませんでした。 SendKeyを使うしか方法はないでしょうか?
taskkill /im explorer.exe
すみません。初心者です。(オブジェクト指向もあやふやです。) 例えばファイルのコピーをしたいとき fs.CopyFile "aaa.txt", "bbb.txt" を使うために、前もって Set fs = WScript.CreateObject("Scripting.FileSystemObject") を宣言(かな?)しておかなくてはならないんですよね? それでmin メソッドの、 Math.min([number1[, number2[. . . [,numberN]]]]) を使いたいんですが、何を宣言するのかもわからないのです。 ヘルプやwebをいろいろ見て回ったのですがどうしてもわかりません。 どなたか、min メソッドを使用した最小限のプログラムの例を 教えていただけませんか。お願いします。 (もちろん、minメソッドなんか使わずに最小値を取り出すプログラムを 書いてもいいのですが、後学のためにもよろしくお願いします。)
宣言せずに使えるが?
143 :
141 :2008/03/25(火) 21:44:36 ID:qBx7ORss
例えばaaa.vbsなるテキストファイルを Dim J J=Math.min(1,2,3) MsgBox J と作って、このaaa.vbsをダブルクリックすると 行:2 文字:1 エラー:オブジェクトがありません。:’Math’ コード:800A01A8 ソース:Microsoft VBScript 実行時エラー とエラーが出るのです。何が足りないのでしょうか。 かなり、アホな質問だとは思いますがどうかお願いします。
予想外の展開w
MathってJScript組み込みオブジェクトじゃないか?
Mathって.NET Frameworkのオブジェクト(クラス)だろ WSHで使えるのはCOM(ActiveX)オブジェクトだけ まあCOMを通してWin32APIとか.NET Frameworkとかを使うことも出来るけど 元からそれらに対応している言語を使う方がいいだろ
147 :
141 :2008/03/25(火) 22:27:53 ID:qBx7ORss
ガーーーーーーーーーーーーーーーーーーーーン!! お騒がせしてすみませんでした。あのヘルプはWSHだけのヘルプじゃないのね。 トホホ(;_;)
VBS+VistaでGetFolder メソッド使ってプロファイルフォルダのSize取得しようとすると エラー: 書き込みできません。 コード: 800A0046 ソース: Microsoft JScript 実行時エラー で落ちる。2000やXPだと落ちないんだけど、これVista特有の現象ですか? Vistaでも普通のフォルダはSize取れるんですけど。
>>147 > あのヘルプはWSHだけのヘルプじゃないのね。
いや、WSHだけのヘルプ。言っとくけど、WSHは言語の名前じゃないからね。
で、MathはJScriptのオブジェクトだから、VBScriptでは使えない。
使えるだろ?
<job> <script language=javascript> </script> <script language=vbscript> msgbox Math.max(1,2) </script> </job>
>>151 それはVBScriptでJScriptのオブジェクトと使ってるのとは違うだろ。
<job> <script language=JScript> </script> <script language=VBScript> msgbox Math.max(1,2) </script> </job>
いやそういう意味ではなくて… それはWSFでVBScriptとJScriptを使っているだけであってVBSじゃないだろって話。
<job> <script language=JScript> </script> <script language=VBS> msgbox Math.max(1,2) </script> </job>
目的ありきなのか手段ありきなのかってことだよな。
set sc=createobject("scriptcontrol") sc.language="jscript" msgbox sc.CodeObject.Math.max(1,2)
解ってないなぁ
んじゃきっちり分かるように説明しる
HOGE.VBS WScript.Echo (Math.max(1,2))
>>160 の実行結果も
---------------------------
Windows Script Host
---------------------------
2
---------------------------
OK
---------------------------
なんだけど?
HOGE.VBS //e:jscript
解ってるなぁ
そうでもないか
なにか悔しいことでもあったの?
質問です。 wshでドライバの有効無効を切り替えられますか? 可能ならばコード例をいただければと
>>166 WSHでは出来ません
COM使えば出来ないこともないので
どうしてもやりたければWSHではなくCOMについて調べましょう
>WSHでは出来ません SendKeys使えば出来ないこともないので どうしてもやりたければWScript.ShellのSendKeysについて調べましょう
マルチポストですぅぅ
悩みすぎて口がくさいですぅぅ
H友達の同僚のサキちゃんにもきらわれそうですぅぅ
ヨロピク
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を参照設定しろー
895 名前: デフォルトの名無しさん [sage] 投稿日: 2008/04/04(金) 19:36:53
実際問題としてVBAならDeclareが一番楽だと思うんだ
896 名前: デフォルトの名無しさん [sage] 投稿日: 2008/04/04(金) 21:11:06
Application.Waitのほうが簡単
VBAからWScript.Echoってどんな使い道があるの?
正解は Shell "WScript.exe ..." だな
>>170 Debug.Print と同じ用途と考えたけど
echo ではログ的に出力できそうじゃないみたいな
>>169 お騒がせしてます。一応自己解決しました。
サキちゃんもよろこんでますぅ。
誤った解釈は、
http://www.happy2-island.com/vbs/cafe02/capter00711.shtml はVBAじゃなくWSHのスクリプトそのもらしい。
VBAではWscriptのスクリプトは実行できないが、オブジェクトは動作できる(みたい)
Wscript.sleep × sleep はオブジェクトではない
Wscript.run ○ runはWscriptのオブジェクト
質問は wscript.run("sleep 3") とか wscript.run("echo test") にすれば動きますがrunコマンド相当になり意味ナイスネ
Sub VBA_WScrit_test()
Dim WSH
Set WSH = CreateObject("WScript.shell") ’wscript のshellを指定
WSH.Run ("sleep 3")
WSH.Run ("echo test")
End Sub
先生、どこから突っ込んでいいのか分かりません!
175よ、お前のスルー力が試されておる。
やむを得ず、sendkeys主体のvbsを使うことに なったんだけど、sendkeys中にユーザー操作を 無効化しておくような方法ってないかな? やっぱムリ?
WSHとは関係無いけどUWSCにそんな関数あったな。
ho
Xp質問スレから誘導されてきました。 下記の動作を自動化したいと考えています。 具体的な実現方法をご教授ください。 1.ディレクトリA内にある全フォルダ及び全ファイルをディレクトリBに移動する。 (ディレクトリA内にフォルダ及びファイルが存在しない場合はこのスクリプトを停止) 2.ディレクトリBに移動したファイルをデータベースに取り込む。 3.ディレクトリAディレクトリBからディレクトリC内の実行年フォルダ内の実行月フォルダ内の実行日フォルダに移動する。 (フォルダが無い場合は作成) という処理を毎日8時半、12時、18時に行います。 ※2番に関してはデータベース側のスクリプトになりますので、実現したいのは1番と3番です。 よろしくお願い致します。
1.で全部AからBに移動したのに、3.でAになんか残ってるの?
>>180 ファイル・フォルダの移動や作成はFileSystemObject使えば良い
年月日の取得はDateからYear関数などで取得すれば良い
ここはスクリプト作成依頼所ではないので、あとは自分で調べて書こう
>>182 情報ありがとうございます。
試してみます!
184 :
名無し~3.EXE :2008/05/26(月) 13:02:19 ID:ZJjr1srY
makewin.exeでexe化したvbsのexeファイルが savce@5/26定義パターンで木馬として片端から検出・検疫されたわ ふざけんなSAV!!!!!!!!!!ヽ(`Д´)ノ
185 :
名無し~3.EXE :2008/05/27(火) 23:28:44 ID:5IR62930
>>184 ウチも!
自作アプリのインストーラを、いつも wsh で作成して exe 化して配布してたんだが
いきなりオレのソフトは全部ウイルスに認定されてしまったよ!
かといって、マイクロソフトの Visual Studio に付いてるクソなインストーラ作成ソフトは使いたくないし
InnnoSetup なんて、まるでキンタマみたいな恥ずかしい名前のソフトも抵抗あるし。
どうしよう・・・orz
そこで、MAOIXですよ。
カッコ付けてexe化なんてしなければいいじゃんw
exeにするならvb.netだな
>>185 ところでWSHの.exe化ってのは、WSHやOSのバージョン毎の差を吸収できるもんなの?
できないのならWSHのまま配布するほうが良いと思うんだが。
190 :
名無し~3.EXE :2008/05/29(木) 18:18:57 ID:DTlmIJ8o
>>189 exe化の原理は簡単。単純に、ローダとvbsスクリプトを COPY コマンドで物理的に結合してるだけ。
COPY /B ローダ.exe+SETUP.VBS SETUP.EXE
ローダが実行時にスクリプト部分をファイルに書き出して、子プロセス wscript.exe で実行させる。
OSのバージョンに依存するような事は絶対に無い。
191 :
名無し~3.EXE :2008/05/30(金) 10:51:12 ID:PIzZnjDJ
ttp://www.microsoft.com/japan/technet/scriptcenter/resources/scriptshop/shop0305a.mspx をまんま使って、ワークグループ環境下で、リモートのOSのバージョン等を採取する
スクリプトを作成しています。
Set objWMIService = GetObject("winmgmts://" & "remotehost")
Set colOSes = objWMIService.ExecQuery _
("SELECT * FROM Win32_OperatingSystem")
For Each objOS in colOSes
Wscript.Echo "OS Version: " & objOS.Version
Wscript.Echo "Service Pack: " & objOS.ServicePackMajorVersion & _
"." & objOS.ServicePackMinorVersion
Next
Windows Server 2003に対しては、普通に動作するのですが、
Windows XP SP2のPCに関しては
Microsoft VBScript runtime error: The remote server machine does not exist or is unavailable: 'GetObject'
で、拒否られてしまいます。
Google先生経由で色々調べて、XP側のファイアーウォールをOffにしたり、
wmimgmt.mscで、root\cimv2のパーミッションをいじったりしてみたり、
getObjectの引数をいじってみたり、色々やったのですが、ですが、状況は
変わりません。 orz
すごく基本的な点を見落としているような気がするのですが、どなたか、
アドバイスいただけませんか?
192 :
名無し~3.EXE :2008/06/02(月) 08:02:20 ID:xPO8zd5Z
前に、「ネットワーク接続の有効・無効をするスクリプト」を見たことがあって、 仕事で使いたいと思ってるんだけれど、あの手段は「コントロールパネル」を開いたりを自動化してるっぽくて オレの会社だとコンパネが開けないようになってるから使えなかったんだわさ。 マイネットワークを右クリックしてプロパティとかでネットワーク接続の画面は普通に出せるんだけど、 コンパネは開けない仕様になってて。 そういう場合はどうすればいいと思う?レジストリは権限ないし・・・
WSHを自由に使わせてるくせに、コンパネやレジストリへのアクセス権限無しとかgdgdだな セキュリティーの概念を解ってないヘボ会社にはありがちだけどw
195 :
名無し~3.EXE :2008/06/04(水) 10:19:34 ID:DZ08xA0B
196 :
名無し~3.EXE :2008/06/13(金) 16:15:06 ID:uYaVuoGG
>>196 引数がたりないんでは?
Set objText = objFs.OpenTextFile(WScript.Arguments(0),1,False)
としたらどうだろう?
スクリプト単体で引数入れずに起動してるとかいうのは無いだろな。
200 :
197 :2008/06/15(日) 19:32:28 ID:jcYRz71J
>>199 たぶんそれだ。やってみたらわかった。
それか可能性としては、
WScriptの使えない場所(なんかのマクロとかで)で使おうとしているのかもしれない。
しかし、面白いな。"CDO.Message"か。
受信は、"MAPI.Session"らしい。
昔、BASP21でやったことあるけど、当時はこんなのしらなかった。
201 :
名無し~3.EXE :2008/06/16(月) 11:10:05 ID:oNTE9LVr
ありがとうございます
>>197 ただそうすると
oMsg.TextBody = "件名" & vbCrLf & myText
がSubjectに挿入されず,添付ファイル名が挿入してしまいます。
前起動したときはそうならなかったのですけど。
何度もお手数おかけします。
自分でデバッグ出来ない奴はスクリプト書くなよ これは交通法規も知らない(免許のない)奴は車で公道を走るなってのと同じだ エンジン掛けてギヤ入れてアクセル踏んでハンドル切れば車は動くが それだけでは公道で車を運転する資格にはならない スクリプトもとりあえず書くだけなら小学生でも出来るし、そのままで動くこともあるが 問題が起きたときにデバッグ出来ない奴は、スクリプト書けるとは言えないし書く資格もない 車の運転でも、公道を走る前にまず交通法規や運転技術を身に付けるように スクリプトでも実用コード書く前に、まず構文規則とデバッグを身に付けなきゃならない と、最近のあまりにも無気力な丸投げ質問に渇を入れてみました
突っ込み所が満載な例えを出さないの。
そうでもないか。
とりあえず何でもいいから書かないと身に付かないよ。 デバッグ出来ない奴は書くななんて言っちゃったらずーっとそのまんま。 最大限自分でなんとかするって心構えは必要だと思うけど。 最終的に他人に聞いて解決するにしても、それ以前の試行錯誤がないと 経験値にならないし、伸びる見込みもない。そういう奴は書いても無駄。
書くだけじゃなにも身に付かんよ
君も言ってるが、「それ以前の試行錯誤」ってのがデバッグなわけで
そうやって、書いた上で「考えないと」身に付かん
例えば
Set objText = objFs.OpenTextFile(WScript.Arguments(0))
なら
WScript.Arguments.Count で、1つ以上の引数が渡されてるか
objFs.FileExists で、その引数をパスとするファイルが存在するか
そういうのを確認してからOpenTextFileする、そういう試行錯誤(デバッグ)が必要なわけよ
その後のReadAllも、ファイルが空だとエラーになるから、AtEndOfStreamで確認する
そうやってただ書くだけではなく、面倒がらずに処理を一つ一つ追っていけば
どの行ではなくどの処理がエラーになってるか解るし、そこまで解れば
質問するまでもなく解決する話かも知れない
そういった最低限のデバッグには、手間は要るがたいした知識は要らない
>>196 のコードが書けるなら、WScript.Arguments.Countや
objFs.FileExistsに行き着くのはそう難しいことではないはず
なのにエラーが出たらそこで思考停止して他人に丸投げし
自分で試行錯誤する気が全くない、そういうところがダメなわけで
>>196 のコードが書けるなら
それ、どっかのホームページからのコピペでしょ。
こんだけのコードが書けるヤツがデバッグすらできないはずは無い。
デバッグって言っても、ただ print 文や echo 文を入れまくるだけなのにね。
まるごとコピーしただけで理屈が分かってないから
何を print させればいいのかがわからない。だからデバッグできない。
ところで、4行目というのは Set objText = objFs.OpenTextFile(WScript.Arguments(0)) のことで良いのかな。 もしそうなら、ファイルをドロップして引数に与える分にはエラーになる箇所じゃない罠。 ただ、メールの件名(WScript.Arguments(0))にファイルのフルパスを与えるとは考えにくいから、 コマンドラインから手入力でファイル名だけ引数に与えているのだとすると、 その場合、カレントディレクトリを変更していない為のエラーはありえるかも。
209 :
名無し~3.EXE :2008/06/19(木) 21:14:00 ID:PbO/hOTC
>>196 下のスクリプトは動いたので、問題はないように見えますが・・?
'Dim f
'Set oMsg = CreateObject("CDO.Message")
Set objFs = CreateObject("Scripting.FileSystemObject")
Set objText = objFs.OpenTextFile(WScript.Arguments(0))
myText = objText.ReadAll
objText.Close
WScript.echo myText
Set objFs = Nothing
Set objText = Nothing
ドラッグしたファイルはtest.txtで中身は
あいうえお。
かきくけこ。
あいうえお。
かきくけこ。 と表示されました。
上の皆様がおっしゃっている内容を確かめてみるとよいかと。
なんの助けにもなってませんねー
210 :
名無し~3.EXE :2008/06/19(木) 21:25:25 ID:PbO/hOTC
209です。 おれも皆様の力を借りたいことがあります。 Vistaでインストールされた更新プログラムのリストを表示させるスクリプトを作ろうと思ったのですが、よい方法はないでしょうか? 難しいのはアプリケーションのリストではなく、MicroSoftからの更新プログラム(KB〜みたいな)であるという点です。 XPではレジストリの以下の場所から一覧を取得するだけなので楽だったのですが、 HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\ VistaではUninstallのキーはあってもその中に更新プログラムのキーがない。 同じ方法では取得できません。 レジストリがダメならWMI?WindowsInstallerオブジェクト? よい方法を知りませんか?
212 :
名無し~3.EXE :2008/06/21(土) 10:49:13 ID:m1Ys5slR
ありがとうございます。
>>211 上のURLを参考に、Vistaのhotfixを取得することができました。
・・でも少し抜けてるんですよね。ServicePack(KB936330)とか。
URLのコードにあった、Win32_QuickFixEngineeringを参考に調べていたら
ttp://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/sept05/hey0930.mspx でなんかいけるかもなのでがんばってみます。
ありがとうございました!
今回試したスクリプトは以下
'---------------------------------
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colQuickFixes = objWMIService.ExecQuery _
("Select * from Win32_QuickFixEngineering")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set TextFile = objFSO.OpenTextFile("C:\test.txt", 2, True)
TextFile.Write "Computer,Description,Hot Fix ID,Installation Date,Installed By" & vbCrLf
For Each objQuickFix In colQuickFixes
TextFile.Write objQuickFix.CSName & "," & objQuickFix.Description & "," & objQuickFix.HotFixID & ","_
& objQuickFix.InstallDate & "," & objQuickFix.InstalledBy & vbCrLf
Next
TextFile.Close
コマンド実行unixの xx.sh > /dev/null 2>&1 にあたるリダイレクトってWindowsで出来ますか?
>>213 それはどうなるの?UNIXをあんまり使ったことが無いから判らないけどヌル箱の代わりはNULっていうデバイスがあるよ。
というより、スクリプトを出したほうがやりたいことが判りやすくてよいのではないかと。
要するに標準出力を捨てて標準エラー出力を標準出力として出力したいってことでしょ
そういうことはスクリプト内部を変更しちゃうからわからないなぁ。 ためしに今cscriptでNULにリダイレクトしてみたらハンドルが無効だぞハゲって言われちゃったよ。
>>215 違う。標準出力と標準エラー出力をまとめて捨てる。
>>213 コマンドプロンプト上で hoge.bat > nul 2>&1 ってのはできるけど、
リダイレクトはシェルの機能だから、WSHで出来るのかどうかは
わからないな。
Execメソッドで "cmd.exe /c hoge.bat > nul 2>&1" みたいに
やれば動くかもしれないけど、今試せる環境がないので未確認。
プロンプトを見たくないならRunの第二引数を0にすれば良いんじゃないかな。
cscript >NUL 2>NUL ふつうにできますが何か?
>>219 StdOutやStdErrを使ったスクリプトでやってみてよ。
w2kだが5.6 jpが入ってるところへ5.7をインストールしたら 日本語リソースそのまま使うみたいで5.7が日本語になった
>>220 wscript.stdout.writeline 1
wscript.stderr.writeline 2
できるけど?
>>222 >>216 の時には出来なかったのだけど、今やったらなぜか出来た。
訳がわからんがまあいいか。
いんや、CSCRIPTだったよ。 そうしたら(null) ハンドルが無効ですってコンソールに出た
CScript の標準入出力は、バージョンによってちょっとずつ挙動が違うよ 自宅のVistaで試したコードが、職場の2kだと動かないとかザラ
そりゃさすがにバージョンダウンは無理やろ
あるフォルダの中のその週に作業されたファイルを集計したいんですけど、ファイル属性で第何週目とかないんでしょうか? あるいはロジックで上手いこと検出する方法はないでしょうか?
>CScript の標準入出力は、バージョンによってちょっとずつ挙動が違うよ そうかぁ?標準入出力は内蔵FilsSystemObjectだから変わらんと思うが
>>229 日付で見ればいいじゃん
週ごとにするなら年ごとに第一週が何日あるかデータベース作れば
簡単に何周目かが分るし、つうか年またぎどうすんだ
>>228 今週作業したファイルを抽出したいって話なら、
ファイルの更新日時が何日前かを取得して、その値がWeekday(Now)以下なら今週。
232 :
228 :2008/07/26(土) 18:25:58 ID:kbSenNqx
>>230-231 ありがとうございます。今週分が必要なので
>>231 でいけそうです。
何日前かを計算するのは日付からNOWを引いて、答えの整数部分で考えればいいですよね?
>229 変な動きするのもある。 StdIn.Read(1)すると、一行読み込んだ上で先頭の1文字返す (なので、その時点ではおかしくないのだが、次のReadの際には残りが捨てられている) とか、そんな変な挙動をするものがある。
>>232 >何日前かを計算するのは日付からNOWを引いて、答えの整数部分で考えればいいですよね?
それだと誤差が出るはずなので、いったんそれぞれをDAYで丸めてから引き算した方がいい。
>233 それは単なるバグじゃないのか? 「古いバージョンには○○なバグがある」 って言えば、「ふうんなるほど」 で話が終わるものを 「バージョンによってちょっとずつ挙動が違う」 なんて書くから誤解される。
WScript.StdInの実装バグなので Set StdIn=WScript.StdIn StdIn.Read(1) とすればよかったような
IE自動操作してるんだけども、 input type= file にはPCから wsh 実行しても入力出来ないのですか? せっかく本まで買ってvbs覚えようとしてるのに、困った…(´・ω・`)
金玉ウィルスでも作るつもりか?
(`・ω・´)金玉なんて作るわけないでしょ!
つSendKeys
>>240 ありがとう、スマートじゃないけどその方法で取りあえず上手くいきました
金玉ウイルスって何? 玉筋ウイルスなら知ってるが。
球筋ウイルスってなに? キンタマウイルスなら知ってるが。
以下for(;;)
break;
POWERSHELLってこのスレの人的に見てどうなの? VBSで出来たことが全部出来るんですか?
PowerShell はすばらしいですよ。 PowerShell を使えば、あなたの仕事がはかどります。 PowerShell ならシステムの管理が獲活に行えます。 例えて言うなら エスペラント語 みたいなもんです。
獲活?
たぶん円滑
250 :
名無し~3.EXE :2008/08/30(土) 14:11:12 ID:d0tUT80M
統合アーカイバプロジェクトのKBA.DLLをインストールして使ってみたのですが、複数ファイルをドロップした時に思うように動作してくれません。 例えば、 Set FSO = CreateObject("Scripting.FileSystemObject") Set oZIP = CreateObject("KBA.ZIP") For Each sArg in WScript.Arguments if FSO.FileExists(sArg) Then oZIP.OpenArc sArg MsgBox "1:" & sArg & "2:" & oZIP.ArcName oZIP.CloseArc End if Next 上記スクリプトに、zipファイルを1つドロップした場合、「1:ドロップしたファイル名2:ドロップしたファイル名」とメッセージが出るのですが、 2個以上のzipファイルをドロップすると、1個目のファイルは「1:ドロップしたファイル名2:ドロップしたファイル名」、 2個目以降は「1:ドロップしたファイル名2:」となってしまいます。 OpenArcメソッドを使わなければ、それ以外のメソッド、ArcCmd(圧縮・解凍などの各種操作)・FileCount(格納されているファイルの総数を返す)などは複数のファイルでも正しく処理できます。 書庫の情報を取り出したり書庫内ファイルを検索するために書庫ファイルを指定するのがOpenArcメソッドですが、呼び出すと2個目以上のファイルの処理に問題が出るようです。 CloseArcメソッド(リファレンスには「OpenArcで結びつけたハンドルを解放する」とあります。)も機能していない?ようです。 更新日も古く、使っている人が少ないのか、googleでもほとんど情報を得られませんでした。どなたか、助言お願いします。
知らんけど、毎回オブジェクト作成→解放してみるとか
jscriptでIEを操作して、「フォームを送信して結果の本文を取得する」 ってのをやろうとしています。 debug用に IE.Visible = true; で試しているところですが、 IE.Navigate2 でPOSTしてフォームの送信に成功し、結果が表示されるところ まではできています。 しかし、その後 IE.document.body.innerhtmlや.innertextはもちろん、 IE.locationnameすらも取得できません。(nullが返る) もちろん IE.ReadyState == 4 である事は待ってから取得しています。 こんなことってあるんでしょうか。 本文など情報を取得するにはどうすればよいのでしょう。
253 :
252 :2008/08/30(土) 22:57:59 ID:4ib5BU+k
IE.locationnameは取得できていることがわかりました。 たまたまデバッグしていたページのタイトルが空だっただけでした。 やはりIE.document.body.innerhtml, .innertextは取得できません。
間違ってるだけ
innerHTML innerText VBじゃないんだから正しく書け。
256 :
252 :2008/08/31(日) 00:00:23 ID:Vnde2TRN
>>254-255 う…
その通りでした。ありがとうございます。
存在しないプロパティならエラーになるはずだと思っていたので、エラーに
ならない以上そういう問題はないと思いこんでしまっていました。
質問です PowerShell というのはつまり なんちゃって Perl なわけですか?
CGI=Perlと思っていたあの頃・・・
259 :
名無し~3.EXE :2008/09/02(火) 22:39:04 ID:/oXppw8S
下のVBSとJScriptは同じ動作をするんですが、なぜJScriptのほうで var objSys = enumSys.item(); という手間がひとつ多く必要なのかがよくわからんのです。 どなたか教えてプリーズ。 -----VBS Set wmi = GetObject("winmgmts:") Set SystemSet = wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem") for each System in SystemSet WScript.Echo "Caption: " + System.Caption WScript.Echo "Version: " + System.Version WScript.Echo "Memory: " + System.TotalVisibleMemorySize next -----JScript var wmi = GetObject("winmgmts:"); var SystemSets = wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem"); for(var enumSys = new Enumerator(SystemSets); ! enumSys.atEnd(); enumSys.moveNext()) { var objSys = enumSys.item(); WScript.Echo("Caption: " + objSys.Caption); WScript.Echo("Version: " + objSys.Version); WScript.Echo("Memory: " + objSys.TotalVisibleMemorySize); } あと、JScriptでWMIとかをいじる時に、オブジェクトの中身を見られるメソッドみたいなものがあれば教えて欲しいです。 enumSys.toSource() だと「実行時エラー: オブジェクトでサポートされていないプロパティまたはメソッドです。」と言われてしまいます。
enumSysはEnumeratorオブジェクトだから オブジェクトの中身って何
262 :
259 :2008/09/03(水) 00:23:11 ID:JepG4paN
>>260 言われてみたら new Enumerator でオブジェクトを作ってた。
全然目が届いてなかったぜ。ありがとう
>>261 が自分で作れと言ったので9割コピペで捏造した。
function printProperty(obj) {
for (var prop in obj){
WScript.Echo(prop + " -> " + obj[prop]);
}
}
<略>
for(var enumSys = ...
var objSys = enumSys.item();
printProperty(objSys);
だけど、なにも表示されない。
>>259 のコードで少なくとも .Caption と .Version と .TotalVisibleMemorySize は在るのがわかってるので、printProperty の for ループは最低3回はまわるはず(だよね?)
「->」だけの表示でもいいから3回は表示されると思ったんだけどその表示も無し。
神よ添削してくだされ。
263 :
259 :2008/09/03(水) 01:01:10 ID:JepG4paN
当初の目的は達成できました。 .Properties_ ってなんだよ!そんなの知らなきゃわかんないよ!って気分になりました。 moz-addon.g.hatena.ne.jp/ZIGOROu/20071101/1193945908 さんありがとう。 for(var enumSys = new Enumerator(SystemSets); ! enumSys.atEnd(); enumSys.moveNext()) { var objSys = enumSys.item(); for(var enumProp = new Enumerator(objSys.Properties_); ! enumProp.atEnd(); enumProp.moveNext()) { WScript.Echo(enumProp.item().name + " -> " + objSys[enumProp.item().name]); } } 「こんな局面のときは .Properties_ ってのが使えるぜ」みたいな知見は経験を積むしかないんだろうか? あるいは体系的に学習すれば身につくレベルの話?
経験かな エンジンのバージョンごとにバグがあって それに気が付かずに悩んだりすることもあるし
WSH(JavaScript)でIEを操作するスクリプトを書いています。
IE = new ActiveXObject("InternetExplorer.Application");
IE.Visible = false;
IE.Navigate("
http://www.google.com/ ");
てなことをやっていると、全く操作ができなくなることがある。
IE.Visible = true;
にして確認してみると、
「セキュリティの警告」
「セキュリティで保護されたページを表示しようとしています」
というポップアップが出ていて、OKをクリックしてやらない限りWSHからは
操作できないようだ。
こういうダイアログが出ているかどうかを確認して、出ていたらOKを押す、
というのはどうすればいいですかね。
>>265 IE.Visible = true;
で、いいんじゃね?
trueにすれば ポップアップが開いたことをスクリプトから調べる方法 そのポップアップのOKを押す方法 はあるということ?どうすればいい?
「スクリプトから」はしらない。
あぁ、人が見てOKすればいいってことですか? うーん、自動化したいということと、人がOK押してる間に IE.ReadyState == 4で先に進んじゃうのよね。操作できないのに。 IE.Navigate("どっか"); while(IE.ReadyState != 4) { WScript.Sleep(250); } ほげほげ; IE.Navigate("べつのどっか"); while(IE.ReadyState != 4) { WScript.Sleep(250); } ふがふが; ってなことをしていて、"どっか"の時点で警告が出ると、さくっとほげほげの 処理を通り過ぎて"べつのどっか"へのNavigateを実行するけど失敗して、 かつReadyStateは4のままだから、人がOKを押す前にふがふがまで行ってしまう。 というわけで、(ほんとはやだけど)最悪OKは人が押すとしても、警告のせいで IEの処理が止まってる事をスクリプトから把握できないと困るのよ。 できないとなると、こういうのを回避する別のいい方法はないかなあ。
If .AppActivate(ダイアログのタイトル) Then .SendKeys "OKのショートカットキー"
トンクス、明日やってみる if WScript.Shell.AppActivate("ダイアログのタイトル") { WScript.Shell.Sendkey("ショートカット"); } JavaScriptだからこうかな。 VBScriptはオブジェクト名を省略できるの?
VBScriptでもJScriptでもwith
>>265 たぶんみなさん確実に私より詳しそうだから、全然はずしていたら読み飛ばしてください。
IEを操作するときは、どこかで、objIE.Navigate("about:blank") でブランクページを
作ってから目的のページに飛ぶほうがいい、って書いてあって(ように思う)
私は何も考えずにそうしてます。そういう問題ではないですか?
(っていうか、一旦ブランクにする理由はすっかり忘れてしまって、ググッたけど、
見つけられなかった。どういう意味なのか知っている人がいたら解説してほしいです....)
しないほうがよい
275 :
265 :2008/09/05(金) 17:03:26 ID:VTJ1fL7j
>>273 IE.Navigateの問題ではなくて、モーダルダイアログに阻まれて元アプリの
コントロールができなくなる話なので、本質的にはIEに関係ないと思う。
たぶんIE.Visible = false;なのにGUIからしかコントロールができない
API設計のへぼさが問題だと思うけどしょーがないみたいね。
とりあえず
>>270-271 でうまくいったのでそれでいい事にする。
ところで、ActiveXObject()でオブジェクトを作るとエラーの判定ができる
けど、 wsfで<object />を使って作ると判定できないのかな。
ScriptPW.Passwordを使ってスクリプトを書いていたらscriptpw.dllが無い
環境でエラーになる事がわかったから判定したいけど、<object />で
作っていたので返り値で判断ができない。
<object />を使う場合は絶対失敗しない事を確信できる状況でしか使うな
ってことなのかな。
使えば使うほどかゆいところに手が届かない感じがしてくるなー。
ちょっとしたことに使うなら便利なんだけどさ…。
<object id=hoge /> TypeName(hoge)で確認
>>276 すまん、俺が悪かった。
問題はそれ以前に、エラーになったらその時点で実行が止まっちゃう事にあった。
オブジェクトを作成できなくても実行を続けるにはどうすればいいかな。
HTAStopとNoScript(Firefoxのアドオンではない)で無効に設定しているので使ってません。
>>274 IEなんて使わないで直接取りに行ったら?
POSTもできるし
Function PrintHttpDocSimply(url,param)
Dim oXmlHttp
Set oXmlHttp = CreateObject("MSXML2.XMLHTTP.4.0")
oXmlHttp.Open "POST", url , False
oXmlHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
oXmlHttp.send param
PrintHttpDocSimply = oXmlHttp.responseText
End Function
paramは ”hoge=hoho&baka=kaba&momar=hiroyuki”
とか入れておけばいい
なぜ全角文字を混ぜる
281 :
265 :2008/09/08(月) 02:45:23 ID:K462bD72
>>279 >>274 じゃないけど反応してみる
さっぱりわからんので教えてくらはい。
再帰してるのはなぜ?
PrintHttpDocSimplyの引数が(url, param)なのにoXmlHttp.responseTextだけ
渡すのでいいの?
つーかそもそもoXmlHttp.responseTextはどこで定義されているの?
VBScript Function でぐぐれ
283 :
265 :2008/09/08(月) 16:13:17 ID:TQKBbcaA
ぐぐった。
VBScriptにはreturnが無いのね。
もしかして再帰できないの?と思ったら再帰の呼び出しはcallを使うのか…。
>>279 サンクス。
>>275 にも書いたように
>>270-271 でなんとかしちゃったけど、後で試してみる。
あと
>>277 は、try {} catch() {}すればいい事に気がついた。
284 :
名無し~3.EXE :2008/09/10(水) 00:05:22 ID:nQEAey34
wshとは直接関係無いけど Windowsのシステム内でのレジストリとWMIの位置付けの違いがよくわからん レジストリは設定の保存場所だろ? WMIも設定の保存場所…なのか?
>>282 MSXML2.XMLHTTP.4.0 というObjectでいろいろ定義されている
古いOSならいざ知らずたいがいの環境で使えるのが吉
286 :
名無し~3.EXE :2008/09/10(水) 01:20:16 ID:bhv+KmqL
昔作ったBATを置き換えようかと思ってるんだけど %~dpnx1とか%~n1とかどう取得するの?
サーバーのデスクトップ画面をリモートから保存したい
クライアントでATバッチ実行してサーバにBATのrunasでadmin権限取得用vbsをechoで作成して実行するようにスケージュル
指定時間になったら、サーバで上で自動作成されたadmin.vbsが実行されてクライアントの中のcap.batが実行される
cap.batでサーバのデスクットプ画面を保存するadmin.vbsは実行後にadmin.vbsで削除される
一応動いたけどサーバでcap.bat実行中の画面が保存されるので困っている
runasでsendkeys使っているので非表示でbatを起動することはできないのでsendkeyが終った後にcap.batの最小化又はウィンドウサイズを位置を変更したい
↓の方法も試しましたがコマンドプロンプトの画面はaltキーが反応してないみたいで使えませんでした
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1210643057 wshで実行中のコマンドプロンプトの最小化又はウィンドウサイズを位置を変更する方法はありませんか?
わざわざそんなことせずともできると思うが、具体的に
290 :
286 :2008/09/11(木) 07:01:11 ID:KjAck0oQ
>>289 @echo off
@REM 実行するアプリとスケジュール時間
set RUNBAT=\\%COMPUTERNAME%\z$\bat\リモート\run_remote_pc.vbs
set RUNTIME=7:30
call :time_run
echo PC名 ping 内容 時間%h%時%m%分%s%秒>>atlog.txt
@REM ----------------------------------------------------------
for /F "tokens=1" %%a in (pclist.txt) do call :sub1 %%a
GOTO :EOF
@REM ----------------------------------------------------------
:sub1
SET LIST=%1
:PING
SET PING=ERR_LAN
ping /n 1 %LIST% | find "Reply" >tmp1.txt
for /F "tokens=1" %%a in (tmp1.txt) do SET PING=%%a
del tmp1.txt
IF NOT %PING%==Reply GOTO NGLAN
:OKLAN
echo Dim WshShell>\\%LIST%\c$\at_admin_run.vbs
echo Set WshShell = CreateObject(^"WScript.Shell^")>>\\%LIST%\c$\at_admin_run.vbs
echo WshShell.Run ^"runas.exe ^/user:megaoak\kanazawa ^"^"c:\at_admin_run.bat^"^" ^", 2 >>\\%LIST%\c$\at_admin_run.vbs
echo WScript.Sleep(100)>>\\%LIST%\c$\at_admin_run.vbs
echo WshShell.AppActivate(^"runas.exe^")>>\\%LIST%\c$\at_admin_run.vbs
echo WScript.Sleep(1)>>\\%LIST%\c$\at_admin_run.vbs
echo WshShell.SendKeys(^"kanazawa{ENTER}^")>>\\%LIST%\c$\at_admin_run.vbs
echo Set objFSO = WScript.CreateObject(^"Scripting.FileSystemObject^")>>\\%LIST%\c$\at_admin_run.vbs
echo objFSO.DeleteFile ^"c:\at_admin_run.vbs^">>\\%LIST%\c$\at_admin_run.vbs
echo start wscript //nologo ^"%RUNBAT%^">\\%LIST%\c$\at_admin_run.bat echo Del c:\at_admin_run.bat>>\\%LIST%\c$\at_admin_run.bat AT.exe \\%LIST% %RUNTIME% /interactive c:\at_admin_run.vbs echo %LIST% %PING% 接続OK %h%時%m%分%s%秒>>atlog.txt GOTO :EOF @REM ---------------------------------------------------------- :NGLAN call :time_run echo %LIST% %PING% 接続NG %h%時%m%分%s%秒>>atlog.txt GOTO :EOF @REM ---------------------------------------------------------- :time_run @REM --/現在時刻のHとM取得/--start for /F "tokens=1,2,3 delims=:" %%a in ("%TIME%") do set h=%%a&set m=%%b&set s=%%c @REM 秒先頭の2桁 set s=%s:~,2% echo -%h%時%m%分%s%秒- @REM 先頭の0を取り除く if %h% LSS 10 set h=%h:~1,1% if %m% LSS 10 set m=%m:~1,1% if %m% LSS 10 set s=%s:~1,1% @REM --/現在時刻のHとMとS取得/--end GOTO :EOF ↑↑これで一応動くようになったけど、テストしたらサーバで下のメッセージがでて5台しか成功してなかった スクリプト"\\クライアントPC\z$\bat\リモート\run_remote_pc.vbs""(コンピュータへの接続数が最大値に達しているため、これ以上このリモートコンピュータに接続できません。)。
minimizeall
>>293 全部のウィンドウが最小化するとサーバで起動中のアプリの画面をスクリーンキャプチャーできない
特定のウィンドウのみを最小化,移動,サイズ変更したい
なぜかわからないが、runas使わなくても動いたのでソースがシンプルになりました
また明日検証してみる
>全部のウィンドウが最小化するとサーバで起動中のアプリの画面をスクリーンキャプチャーできない ??? >↓の方法も試しましたがコマンドプロンプトの画面はaltキーが反応してないみたいで使えませんでした コマンドプロンプト以外には使えるんだろ?
コマンドプロンプトの画面のみを最小化,移動,サイズ変更したい
> コンピュータへの接続数が最大値に達しているため、これ以上このリモートコンピュータに接続できません。 Windows Server使え
>>297 windowsクライアントからwindowsサーバに対して実行してるから無理です
その問題はsambaサーバにキャプチャーしたpngファイルを保存する事にして解決しました
start /min 続きバッチ
>>299 startで最小化あるんですね
ありがとう試してみます
301
atでサーバをリモートでキャプ取るのできた キャプソフトはccap.exe スクリーンセーバキャンセルできてPNG保存可能で197KB exeやvbsをアクセス権フリーな状態のsambaに置いて後は普通にATコマンドのスクリプト書くだけだった
職場でノートパソコンの更新があったが ひきづつきwshは使えるようだ、よかった。
webでツールバーとかアドレスバーとか戻るボタンがないブラウザ画面がポップアップすることがありますが、vbsであの状態のIEを呼び出せないでしょうか?
おおこんな便利なページがあるんですか!ありがとうございますいろいろ遊んでみます
あははは楽しいです。
美しくないコードかもしれないけど結果は良好です。
Set IE = CreateObject("InternetExplorer.Application")
ie.menubar=false
ie.AddressBar=false
ie.toolBar=false
ie.visible = true
ie.navigate2 "
http://www.google.co.jp/ "
そういう書き方しかないべさ
309 :
名無し~3.EXE :2008/11/16(日) 12:13:26 ID:jsDDDVhU
IEで動くVBSを書いていますが、 Setinterval で Subプロシージャを呼び出すときに 引数をSubプロシージャに渡したいのですが、エラーになります。 Googleも調べてみたのですが、解決できていません。 今書いている(エラーになる)コードは Sub First ID = window.setInterval("chk(" & a & ")", Time, "vbScript") End Sub Sub chk(b) 処理 End Sub です。引数にはIPアドレスが入っています。 エラーは ')'がありません です。 エラーダイアログの"ライン"は 1 ですが、ソースの1行目はまったく関係ない内容(Dim定義)です。 おそらく、Setintervalの書き方の問題だと思うのですが、どなたかお解かりになりますか?
"chk(""" & a & """)"
312 :
名無し~3.EXE :2008/12/01(月) 02:28:06 ID:tUazuBOQ
質問させてください。 vbsからbatファイルを起動させて、当該batファイルの戻り値を取得したいです。 Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("return.bat") return.batは正常時0、異常時1を返します。 このbatをvbsから起動させた場合、戻り値はどのように取得できるのでしょうか。 よろいしくお願いいたします。
ExitCode
Runを使えよ
そんなのしRun
今日初めてVBSを触りました。 IEのコンテキストメニューからパスワード生成を行えるように したいのですが(ググったらコードでてきたのでそのまま利用) 実行するとInputBoxに書けませんというエラーが出ます。どうしてでしょうか? メニューに登録したファイルの内容は↓ <SCRIPT LANGUAGE="VBScript"> <拾ったコード> </SCRIPT> 拡張子はhtmにしてあります。 このファイルを直接ダブルクリックした場合は実行されますが、 右クリックからの起動はうまくいきません。
>>317 <SCRIPT LANGUAGE="VBScript">
<修正済みコード>
</SCRIPT>
InputBoxは使えんよ promptに変えろ
むぅ・・・そうなのですか。 やってみます。
WScript.Echo("あけおめ");
そんなに言うなら・・・ほら、開けましたよ \ 毛 / 腿 \_ | _/ 彡彡彡 ミミミミ クリトリス ミミミミ / ̄ ̄ ̄ ̄ ノ σ ヽ 尿道 / / ゚ヽ ̄ ̄ ̄ ̄ 大陰唇 / //\\ \  ̄ ̄ ̄ ̄ ( ( ) ── 錠前 \ \\// / ` \/ ' \ *──肛門 \_____/\_____/
ドメインに参加しているクライアントPC側で、パスワードの変更をすることはできるのでしょうか? Ctrl+Alt+Del で出てくる「パスワードの変更」と同等の処理をしたい。
326 :
名無し~3.EXE :2009/01/09(金) 22:38:41 ID:xLY5sfUA
あげ。
>>215 念のために言うと、213は標準出力も標準エラー出力も/dev/nullに落ちるぞ。
うしゅ
ほ
ho
332 :
名無し~3.EXE :2009/02/06(金) 01:53:11 ID:QaTxAdVH
抽選プログラムを作るのだが、さっぱりです。 配列作って、名前格納して、ランダム数を返してとやろうと思うが、 プログラミング知識がないからどの関数、オブジェクト等使ったらいいかわからない。 わかる人みてたら教えてください。
>>プログラムを作るのだが、 まず、ここが間違ってね?
>>332 Array、Randomize、Int、Rnd、UBound
変数を宣言するならDim、結果をダイアログ表示するならMsgbox
とりあえずこれで事足りるはず
ここはコード作成依頼所ではないのであとは自分で頑張りましょう
まぁ頑張るのが嫌だから諦めるってなら構わないが
頑張るのが嫌だから全部教えてってのは無しの方向で
335 :
名無し~3.EXE :2009/02/06(金) 14:14:09 ID:92cdMgwW
ちゃんとやれよ。 以上。
337 :
名無し~3.EXE :2009/02/06(金) 23:00:35 ID:92cdMgwW
んこ
はいよ。 けっぱれ、VBScript! Dim arrRes: arrRes = Array("大吉", "中吉", "小吉", "凶", "豚") Dim iMax: iMax = UBound(arrRes) + 1 Randomize(Second(Time)) Do If MsgBox(arrRes(Int(iMax * Rnd)), vbOKCancel) = vbCancel Then Exit Do Loop
ありがとうございました
340 :
名無し~3.EXE :2009/02/09(月) 23:20:19 ID:+sxPMNu/
WSHってバッチのGOTOみたいに処理って飛べない?
使う言語次第だな まあ大抵の言語はサポートしてるんじゃないか
↓この辺に、アンチ後藤
343 :
名無し~3.EXE :2009/02/10(火) 23:03:08 ID:s6VWMy5j
URLエンコードをなんだと思(ry 目的がはっきりしているなら置換すりゃいいだけでしょ。
フォルダを指定してコマンドプロンプトを開きたいのですがどのように記述すればよいのでしょうか?
>>345 WshShell のカレント・ディレクトリを指定してから cmd を Run 。
ありがとうございます。 一発のコマンドではできないんですね
1行でってこと?
WScript.CreateObject("WScript.Shell").Run "cmd /C start /D ""C:\Program Files""" ・・・なんかアホっぽい
cmd.exe "/K pushd {ディレクトリ}"
351 :
名無し~3.EXE :2009/02/11(水) 22:47:23 ID:bH/mfyuf
入力された値が全角と半角の区別と、数値と文字の判定はどうやってするんだ? 文字で入力された場合にエラーとなるように表示したいんだが、判定がわからないからIf文で制御できないでいる…
AscB(MidB(文字, 2, 1))で2バイト目をチェックすれば分かる。 0なら半角 255なら、 1バイト目を判定して、ある範囲なら半角カナ、それ以外は全角英数。 それ以外は全角 数値判定はIsNumeric使えば?
プロポーショナルフォントのときはどするんだよ
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
どうせなら、シフトJIS以外の文字はどうするの?とか聞きゃいいのにw
ADODB.Stream とかつかって、 Shift-JISに変換してバイトをチェック。
だめだめシフトJIS以外の文字が?に化けちゃう
?は全角としてよいのでなくて?
?が全角でよいのか?
日中韓以外には半角文字しかないよ。全角なんて概念ない。 本格的に考えだしたら、ギリシャ文字やキリル文字はどっち (現地では半角相当なわけだ)という問題にぶち当たるが。
残念!ここは日本でした!
>>357 の方法での変換は、確かにShift_JISで当てはまらない文字は?になってしまう。
そもそもシフトJIS以外の文字の全角半角というのがいまいち微妙なのだが。
例えばどういう文字がどう判定されればいいの?
シフトJIS以外の文字と判定されればいいんじゃない?
文字集合と文字符号化形式の区別から始めるのか
静聴、静聴、パチパチ
どうぞ? せいぜい蘊蓄を傾けてくだされ
薀蓄は続けるんじゃないの? 耳を傾けるってこと?
ぐぐれば?
370 :
名無し~3.EXE :2009/02/15(日) 00:08:45 ID:Kr0N6mCn
InputBox等でOKやキャンセルボタンを表示させないやり方ってありますか? OKだけ表示とか。 PopUpメソッドだといろいろ表示ボタンがあるみたいですが、 非表示についてはなかったので。
371 :
名無し~3.EXE :2009/02/15(日) 06:05:49 ID:N0kUIzB/
windowのソフトAを画面上半分、ソフトBを画面半分に並べるというこ とはできますか? たとえばエクセルとワードのときを例にプログラム例を 教えてもらえませんか?
無いよ 欲しければ作るしかない ScriptFormなどのGUIが作れるCOMでWSHから作るか お望みのGUIダイアログを持つCOM自体を自作するかはお好みで そもそもWSHは、目的ドンピシャのことをやるものではなく、 とりあえず結果的に目的が果たせれば良いって時に使う簡易言語なので 足りないならまだしも余分だというのは許容するのが筋ですよ GUIにも拘って開発したいなら、まともな開発言語使うがよろし
>>371 タスクバーを右クリック→上下に並べて表示
なるほど ありがとうございました
メモ帳がCOMとして扱えるようになると地味に便利なのではなかろうか、とふと思う
ActiveX.exeのテキストエディタなら既にあるが Win標準のメモ帳でないとダメか?
>>376 メモ帳だとなんかロマン感じるやん?みたいな
>375 禿同、カーソル位置とかだけでも取得できればね〜
WSHから、他のアプリケーションを起動して、キー入力を送るときに Sleep 100 のようにアバウトな方法で立ち上がるのを待つのではなく、 目的のアプリケーションがしっかり立ち上がった上でキーを送りたいんですが そういうのを確認?というか通知してくれる機能とかはないですか?
>379 ie以外はプロセス監視でcpu使用率みるとかかな
とりあえずAppActivateでウィンドウが立ち上がってることだけは確認できるが 入力を受け付ける段階に達してるかまで調べる手段は無い CPU使用率も、アテになるものもあれば、アテにならないものも数多く存在する そもそも、立ち上がり方ってのはアプリによって千差万別なんだから 汎用的な確認方法が有ると思う方が間違いだ まともなプログラム言語使う場合でも、確認方法は対象に合わせて変えるものだ
382 :
379 :2009/03/04(水) 09:37:02 ID:cFHD5IR4
>>380-381 レスありがとうございます。
自分が対象とするアプリケーションでは、
ウィンドウが立ち上がって、且つCPU使用率が0になったら大丈夫そうなので、
その組み合わせでやってみます。
383 :
名無し~3.EXE :2009/03/04(水) 21:31:08 ID:Pr9L9Uwr
WSHではSub以外に呼び出すコマンドある? Runだと引数渡せないから処理を任せれないんだよね。
ShellExecute
385 :
名無し~3.EXE :2009/03/04(水) 22:40:02 ID:Pr9L9Uwr
For文で繰り返しの中にIf文で条件付けて、Subを呼び出すと、 Subの処理が終わるとFor文の続きからになるから、自分の思うようにできない。 For文の初期化や、抜けるコマンドってありますか?
386 :
名無し~3.EXE :2009/03/04(水) 22:41:17 ID:Pr9L9Uwr
ShellExecuteですか、調べてみます。 ありがとうございます。
388 :
名無し~3.EXE :2009/03/04(水) 23:46:37 ID:Pr9L9Uwr
Subの中でExit forつかえない!?
Subの中で使うのではない Subが終わってからForの中で使うのだよ Subの中の条件によってExit Forする場合は SubではなくFunctionにして、返した値によって Exit Forするようにすれば良いだけの話
390 :
名無し~3.EXE :2009/03/05(木) 01:07:30 ID:kiioCP+g
同じプログラム内で、SubとFunctionの併用は可?
出来ないわけないじゃん
392 :
名無し~3.EXE :2009/03/05(木) 01:39:45 ID:kiioCP+g
単純に構文ミスじゃね?
もしかして、 > 同じプログラム内で、SubとFunctionの併用 ではなく > 同名のプロシージャを、SubとFunctionの併用 なんてバカげたことしてるのでは?
>379 AutoItX の ControlSend を試してみるテもあるかな?
395 :
名無し~3.EXE :2009/03/10(火) 01:05:58 ID:xAIJZTrp
var CN = WScript.CreateObject("ADODB.Connection"); CN.Open("DRIVER=SQLite3 ODBC Driver;Database=C:\\test.db"); CN.Execute("CREATE TABLE table1 (id, value);"); CN.Execute(".mode tabs table1;"); CN.Execute(".import import.txt table1"); CN.Close; CN = null; SQLITEを使ってtest.db・table1を作成してタブ区切りのデータの入ったimport.txtから データをインポートしようとしていますのですが、上記コードでは4行目で near".":syntax error(1)のエラーが出てしまいます コマンドプロンプトから3行目以下のSQL文と同じことをしてもエラーは出ません どなたか助言をお願いします
こういうソース見るたびにPowerShellにいけばいいのに、って思ったり
>>395 それならコマンドプロンプトを叩いたほうが早くないか?
名前付きオブジェクトのオブジェクト名を省略してるからでねえの?
>>396 そのソースに関してどのへんがPowerShellのほうに優位性があるのかkwsk
400
401 :
名無し~3.EXE :2009/03/11(水) 19:54:07 ID:1yMJqijd
>>398 すみませんちょっと詳しくお願いします・・・
>>397 この先にだらだら他のこともするつもりなので・・・
403 :
名無し~3.EXE :2009/03/18(水) 18:29:56 ID:1TDARhEw
Set objWSHShell = CreateObject("WScript.Shell") objWSHShell.Run "notepad.exe まいでーた.txt" ↑を実行するとファイルが無い旨表示され新たにファイルを作るかどうか聞かれます。 これを、聞かれないようにする方法を教えてください
中身は空でいいから先にファイルを作っておけばいい。
405 :
名無し~3.EXE :2009/03/18(水) 18:34:05 ID:1TDARhEw
>>404 objWSHShell.CurrentDirectory =を実行しておく必要がないか?
別に無いけど
なるほど
なるほど っていいたいだけだろ
なるほど
411 :
名無し~3.EXE :2009/04/02(木) 23:43:54 ID:qVgeHPAh
ファイル書き込みテストをしたいのですが、 タイムスタンプと書き込み成功、失敗をログに書き出したいのですが、 よいサンプル教えていただけませんか?
>>411 最初からサンプルソースクレクレではなく
自分で書いて、解らないところを質問しろ
VBSで引数で受け取った文字列にユニコードが含まれていた場合に その部分を削除するにはどうしたらいいんでしょうか? ♠スペード ♣クラブ ♥ハート ♦ダイヤ ↓ スペード クラブ ハート ダイヤ
VBSって正規表現なかったけ?まさかね
yes
>>414 ユニコード文字を削除したら
「♠スペード ♣クラブ ♥ハート ♦ダイヤ」
↓
「」
になるよ
「ス」はUnicode:0x30B9だし、「ペ」はUnicode:0x30DAと、どちらもユニコードの文字。
はっきり言えば「♠スペード ♣クラブ ♥ハート ♦ダイヤ」全体がユニコードの文字列。
おそらく、君がやりたいのは
「文字列にユニコードが含まれていた場合にその部分を削除する」
ではなく
「文字列にShift_JISに存在しない文字が有ったらその部分を削除する」
なんじゃないの?
後者の場合は、Shift_JISには存在しない
「♠♣♥♦」が削除され、
Unicode文字ではあるが、Shift_JISにも存在する
「スペード クラブ ハート ダイヤ」が残ることになる。
>>418 >それぐらいエスパーしろよ・・・。
それおかしいだろ?
スキーヤしろって言うか?スキーしろって言うだろ?
アナルレイパーします。
>>418 エスパー(意図の酌み取り)は後半でしてるじゃん。
単に前半で要求仕様通りだとこうなるって説明を入れてるだけで。
なるほど
分からないならレスしないでください
このスレ開くと脳内にジャッカー電撃隊のOPが流れる・・・
426 :
名無し~3.EXE :2009/04/09(木) 20:30:56 ID:GA22GXlP
WScript.ShellのPopupで第二引数を指定すると、n秒後に閉じることが出来ますよね? これと同じようなことをInputBoxでやりたいんですが、どうすれば良いですか? OKが押された場合、キャンセルが押された場合、どちらも押されずに指定秒数が経過した場合 の3通りでその後の処理を分岐したいです。 WinXP/WSH5.6で、dllなどの新規インストールは出来ない環境です。
ほかの方法を考える。
428 :
名無し~3.EXE :2009/04/09(木) 21:46:13 ID:GA22GXlP
他の方法って何でしょうか? WinXP標準環境のVBSで使えるGUI入力 表示位置、初期入力値指定可能 OK、キャンセル、指定秒数が経過、の分岐が可能 の条件を満たしていれば、InputBoxじゃなくてもいいんですけど 他の方法でこれらを満たす物がありますか?
WScript.ShellのExecで子を起こしてそっちでInputBox出しな
ClassとTimeOut使えば出来るな TimeOutしてもClassのデストラクタは実行されるから
431 :
426 :2009/04/10(金) 00:45:11 ID:jnrC655t
>>429 ありがとうございます。
その方法でも目的は達っせそうですが、処理を書くファイルが分散するのは
好ましくないので、今回は
>>430 の方法でやることにします。
>>430 出来ました。
こんな方法があったなんて目から鱗です。
ありがとうございました。
w
vbscriptの Property Let について、できるかぎり調べたんですが 複数の引数を渡す方法がわかりません どうしたらいいですか?
>>433 Script56.CHMに思いっきり書いてあるわけだけど・・・
本当にできるかぎり調べたの?
>arglist
>Property Let プロシージャを呼び出すときに、Property Let プロシージャに渡される引数を表す変数のリストを指定します。
>複数の変数を指定する場合はカンマ (,) で区切ります。(ry
>>433 ' 定義
Property Let PropertyName(arg1, arg2, value)
WScript.Echo arg1
WScript.Echo arg2
WScript.Echo value
End Property
' 代入
.PropertyName("引数1", "引数2") = "値"
>>434 もちろんモニターぶち破るほど凝視しました
> ' 定義
> Property Let PropertyName(arg1, arg2, value)
> WScript.Echo arg1
> WScript.Echo arg2
> WScript.Echo value
> End Property
>
> ' 代入
> .PropertyName("引数1", "引数2") = "値"
単一引数では
.PropertyName = "値"
ですよね?
引数が増えるたびに左辺側が増えていくんですか?
個人的感覚では
.PropertyName = "値1", "値2", "値3"
なんじゃないかと思ったんですが。
> 引数が増えるたびに左辺側が増えていくんですか? そうだよ ヘルプの定義も [Public | Private] Property Let name ([arglist,] value) ってなってるでしょ? 先に省略可能不定数のarglistが来て、最後に単一必須のvalue > 個人的感覚では > .PropertyName = "値1", "値2", "値3" > なんじゃないかと思ったんですが。 プロパティってのはそもそも単一の値(value)を渡す概念だよ。 それ以外の引数(arglist)は値というよりは値の代入先への条件的なもの 例えばグリッド(升目)の3行6列目に"test"を入力する場合に Property Let GridValue(row, column, value) と定義して .GridValue(3, 6) = "test" って感じ 2chへの書き込みを行う場合で、名前、メール、本文を渡すみたいに、同列の値を複数渡すなら Sub Write2ch(name, mail, text) と定義して Write2ch "名無しさん", "sage", "テスト" だな 君の先入観とは食い違うのかも知れないが、そういうものだと納得して貰うしかない どうしても .PropertyName = "値1", "値2", "値3" 的なことがやりたいなら Property Let PropertyName(values()) WScript.Echo values(0), vbCrLf, values(1), vbCrLf, values(2) ' Join(values, vbCrLf) End Property と定義して .PropertyName = Array("値1", "値2", "値3")
>>437 わかりました
Property Letをメンバ変数群へのセッターとして使おうとしてましたが
SubかFunctionを使うようにします。
wshからPCをサスペンド(スタンバイ)状態にしたいんですけど、 %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState を使った方法では休止状態が有効な場合休止状態(ハイバネ―ション)になってしまい、どちらか選べなくて困っています 確実にサスペンド(スタンバイ)に移行できる方法はありませんか?ご教授願います。
441 :
439 :2009/04/15(水) 18:45:22 ID:WeeZsX7B
>>440 ありがとうございます
でもこれだとエクセルの無い環境では使えませんよね・・・
そちらのタスクマネージャを使う方法も見ましたがこちらのOSがVistaなので利用できませんでした。
他の方法はないのでしょうか・・・
>>441 Vistaならshutdown.exeコマンドを呼べばいいと思う。
443 :
439 :2009/04/15(水) 20:55:52 ID:WeeZsX7B
>>442 なるほど!そういう方法があったのですね。
よろしければスタンバイに移行するコマンドを教えていただけないでしょうか?
shutdown/?
445 :
名無し~3.EXE :2009/04/16(木) 00:33:25 ID:uDkOsXWB
タグがバラバラな複数のログを集計したいと思います。 最初の一行目がタグ情報となっており、2行目以降にデータがあります。 区切り文字は「,」です。 指定したタグの情報を取得出来るスクリプトを探していますがサンプルとか ないですか? 私自身、全くプログラミングの経験がなくて途方に暮れてます。 何していいかさっぱり分かりません・・ 自力でなんとかしたいものですが、おすすめのサイトとか 書籍があれば教えてください。
いきなりタグとかログとか汎用的な言葉出されても困る 区切り文字ってことはCSVなのか? タグ情報って列名のこと?
> 指定したタグの情報を取得出来るスクリプトを探していますがサンプルとか
> ないですか?
スクリプトは基本的に探すものではなく書くものだぞ
何処かにあることを知ってるなら、それを使うのもいいが
人に聞いてまで探すような物じゃない
> 私自身、全くプログラミングの経験がなくて途方に暮れてます。
誰だって最初はそうですよ
> おすすめのサイトとか
何のためにテンプレがあるんだかちょっとは考えよう
>>2-5 あとは勉強して実際に書いてみて、どうしても行き詰まったら
具体的にどういう処理をしたくて、どういうコードを書いて、どういう不都合があるのか
また質問においで
ここはスクリプト作成依頼所じゃないので、丸投げでそういうの書いてとかは無しでよろしく
カンマ区切りテキスト(CSV)形式なら、MS-Access/Excel とか OpenOffice.org Base/Calc で集計すりゃいいんじゃないの まぁしょっちゅうやるならモジュール作ったりした方がいいかもしれない 職場で運用するとかで、どうしてもWin標準添付のモノでしかやっちゃいけないとか、 運転中のシステムのログの集計結果を1時間毎に出す必要があるとか、 ってな制約があるならしょうがないけど、無理にスクリプトを使う必要は無いんじゃないかな (それならなおさら素人がやるもんじゃないとは思うが) 個人的にはスクリプトでそういうのやるなら perl が楽だと思う
wshで何か一から書こうとするといっさいプログラム言語触ったことがない香具師にとってはハードル高い (使うだけならともかく) 少なくても素のVisualBasicよりは確実に難しい ファイル入出力はfso使うとか構造つかむまでそれなりに時間がかかった覚えがある
450 :
439 :2009/04/16(木) 19:06:52 ID:sZceJi2u
>>444 ハイバネートのコマンドはあったんですがサスペンドのコマンドが見つからないんですが・・・
やっぱり不可能なんですか・・・?
vbc/?
っていうか
>>440 をExcel無しで実行する方法で良いのでは?
454 :
439 :2009/04/17(金) 00:19:26 ID:ykM6yz16
>>452 ありがとうございます
試してみましたが反応なしでした・・・
>>453 Excelを使わない方法とはタスクマネージャを使う方法のことですか?
Vistaではメニューにシャットダウンの項目がないんで使えませんでした・・・
> Excelを使わない方法とはタスクマネージャを使う方法のことですか? 違う
CreateObject("Shell.Application").shutdownwindows
457 :
439 :2009/04/17(金) 17:41:05 ID:ykM6yz16
>>455 具体的にどういった方法のことですか・・・?
>>456 こっちは反応がありましたが、終了のダイアログが出るだけですね・・・
sendkeys
suspend.exe
Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems ObjOperatingSystem.Win32Shutdown(1) Next Wscript.Echo "シャットダウン処理を実行しています。" これを実行して"シャットダウン処理を実行しています。"と表示されるのに、 実際にはシャットダウンされない場合があります。 何が原因と考えられますか? OSはXPSP2です。
>>460 引数がまずい。それだと未保存のメモ帳があるだけで止まる。
あとはWScript.EchoじゃなくてWScript.Shellのpopupメソッドで
時間経過したら閉じるようにすべきかも知れない。
しかし仮にスクリプトが正しかったとしても、そもそもWindowsの
シャットダウンがスクリプトからそんなに確実に実行できるもんなのか
という疑問もあるけどね。
>>460 単純シャットダウンごときにわざわざWMI使う香具師初めて見た
いくつか他の方法あるのに
>>462 > 単純シャットダウンごときにわざわざWMI使う香具師初めて見た
なんてわざわざ言う香具師初めて見た
いくつかあるんならひとつくらい挙げる心遣いが欲しいぜ
代替法でなく、理由を知りたいんだろ
なるほど
467 :
460 :2009/04/27(月) 08:22:11 ID:RCPGHJ3a
なるほど
お前ら、PowerShell使ってますか?
じぇーんじぇーん
わしゃ今や PowerShell 9割、WSH 1割
そんな便利なんか。使ってみるか
474 :
名無し~3.EXE :2009/05/06(水) 23:45:14 ID:z83QDpCi
ほとんどのPCにまともにインストールもされていないものを覚えるのはどうも気が進まない。
先月からXPとVistaのビジネス系エディション向けには自動更新配布始まったな
WSHが自動削除されたら考えるよ。
GnuWin32を置き換えるために暇な時に勉強中。 grep -r hoge * イコール Get-ChildItem -recurse * | Select-String hoge だけは覚えた。
WSHでDynaWrap使わんでもいいようにさえしてくれれば それでよかったんだがなぁ。GUIはHTAで我慢できるし。 MSにはいまあるものをもっと大事に育ててほしいもんだ。
俺はScriptoMatic使わんでもいいようにさえしてくれればそれで
○Scriptomatic ×ScriptoMatic
PowerShellはWSHを完全に置き換えるものじゃない。 PowerShellからWSHを利用するのもありだし それに
PowerShellはWSHと違って、保存済みスクリプトファイルを実行することが既定ではできない。 ポリシー(=どーせレジストリ)で解除できるが。
まあ名前自体シェルとしか名乗ってないわけだしな
なるほど
で、PowerSHELLのデメリットは
・ほとんどのWindowsPCでインストールされていない。
・使える人も少ない。
・資料も少ない。
・保存済みスクリプトを実行できない・・・なんたらかんたら
ということですね。
それでは、PowerSHELLにはどんなメリットがあるのか?
CM明け、
>>483 さんに説明してもらいます。
じゃあCM!
まあ、.NET の機能をまるまる使えるんだから強力だわな
なるほど
Windows7にPowerShell V2が標準搭載されるから Windows7が普及してからだな
なるほど
491 :
名無し~3.EXE :2009/05/16(土) 21:31:26 ID:Rz66M/nY
プリンタのドライバインストール、設定ってWSHでできる?
ドライバ関係なんて具体的には知らないが C:\WINDOWS\system32\driversにファイルコピーして ドライバ登録と設定情報をレジストリに書き込みするだけだよな? そのくらいなら出来るけど素直にinfとかbat+reg使えよって言いたくなるな
なるほど
494 :
名無し~3.EXE :2009/05/23(土) 13:49:22 ID:b8XZakyb
WSHに管理者権限で実行するコマンドってありますか?
WSHにはないけど、COMを使うことでWSHで実現することは可能 ググれば情報有るから頑張って勉強しな
WSHで、Volume control かWave のミュートを操作するサンプルってどっか落ちてない? 勤務先PCで User権限のみのXPSP3でつ。
落ちてるものを拾うな
DirectXが入っていれば ' VBS CreateObject("MSWebDVD.MSWebDVD").Mute = True 'でミュート、Falseでミュート解除 //JS new ActiveXObject("MSWebDVD.MSWebDVD").Mute = false;//でミュート解除、trueでミュート で出来るようだが。
>>498 とりあえず、自PCのwin2kSP4 Power User権限では逝けました。
目的は達成させられそうです。ありがとうございました。
Part4からこのスレにいるのに調べれれないヘタレな俺。
500
で? 使い道は?
そこに山があるからさ
OutlookにコマンドラインからTODOなタスクを追加したいんだけど どこかにサンプルないですか? addtasktooutlook /high 腹筋1000回! みたいなかんじで
なんで解説ではなくサンプルを探すの? そういう思考は浅はかな初心者の悪い癖だよ サンプル探してその場を凌ぐのではなく 解説探して理解を深めようね で、OutlookならコマンドラインではなくCOMとしてアクセスな
VBSを使ってhtmlのソースから文字列を抜き出して使いたいのですが 文字参照で書かれた部分をちゃんと変換した後の形にする方法がわかりません Replace関数で変換ということも考えたのですが、さすがに対応しなくてはいけないパターンが多すぎるので 何かいい方法ってないでしょうか?
いったんDOMオブジェクトにするとか
set d=createobject("htmlfile") d.innerHTML="{" msgbox d.innerText
でも実際の所、常用されれる文字実体参照なんてそんなないよね
だからなに?
置換のほうが速いって
512 :
名無し~3.EXE :2009/06/08(月) 12:42:16 ID:YSvVXFgQ
楽なのが一番だろ
513 :
名無し~3.EXE :2009/06/08(月) 16:49:37 ID:ANWjb6BD
selectで一致したら変数に変換後のパターン放り込んどいて 最後にその変数使ってReplace関数かけるのが結局一番わかりやすくない?
そんなに遅いのか?
515 :
名無し~3.EXE :2009/06/09(火) 23:47:32 ID:n59VtdgS
なるほど
コンピュータのロック解除後やスタンバイ復帰後に、スクリプトの命令を実行するにはどのような方法があるでしょうか? PCが一定時間操作されなかった場合に、既存のロックアプリを起動して解除後にダイアログ表示したいため、自作SCRファイル経由でロックアプリを起動し、その際にVBS(WSH)ファイルをキックしています。 ところが、ロックやスタンバイ時にプロセス(wscript.exe)が、SCRともどもロックやスタンバイ時に終了してしまうので、困っています。 通常(notepad.exeなど)は、ロック前にDo〜Loopで待機させ、WMIのイベント(当該アプリの起動と終了)を監視しておくことで、WSHの命令を実行できています。 ロックの場合、起動時間は処理の順番や実行待機によって解決できなくもないですが、いずれにしても終了時間の取得とダイアログ表示はほぼ失敗してしまいます。 ちなみにWSH側でやりたいことは、ロックやスタンバイの開始時間と解除(終了)時間をイベントログに書き込んで、解除後にダイアログに表示する、という処理です。 長くなりましたが、識者の方、アドバイスをお願いいたします。
一番手っ取り早いのは別言語で作る方法だな WSHでやりたいとしても、目的の部分はCOMとして作る必要があるから 別言語使わなきゃならないことには変わらないので だったら別言語でCOM作ってWSHで動かすより そのCOMを作れるような言語で直接アプリを作った方がいい
>>517 .scrから呼び出すwscriptを単なるWScript.ShellオブジェクトのRun()だけ
書いてるヤツにすればいい。そんでRun()の引数を終了を待たないヤツにして
本来のwscriptを呼び出せば失敗する可能性は低くなる。
あと注意点は次のものがあるな。
・その処理だと、ユーザーに気づかれない必要があるんじゃないの?
・Windows2000だとWMIが入ってない場合もある。
・そのときのログオンユーザーの権限が低いと、イベントログに書き込むのが
エラーを出す可能性がある(気づかれる)。
520 :
517 :2009/06/21(日) 16:34:28 ID:hZdAyqNW
>>518 COMを自作するには、知識も時間も足りないし、専門職じゃないので運用・メンテ面からも難しいです。。
スレ違いかもだけど、今後のために(こういった連携においてWSHと相性のいい)お勧めの開発環境や言語があれば教えてください。
>>519 scr→WSH(WScript.ShellオブジェクトのRun())→WSH(ログ記録&通知)の3重にするってことですか。
ロックアプリは会社のものなので、処理だけ考えて後日検証してみます。
しかし、Run()だけで引数なしだと、キックされる側は「WScript.Arguments.Count = 0」で単独起動させない策は、確かにできないですね。
数行なら保守性は変わらなそうだし、そちらはVBEで配布するかな。。
Win2Kやログオンユーザ権限は、XP&administratorsグループのアカウント対象で問題ないです。
おっしゃるように最低限の隠蔽策を講じつつ、件の状況で処理を実現したいために、ややこしいことになってます。
あと一歩なだけに悔しいです。
vista + JScript で特殊フォルダ「ミュージック」のパスを取得する方法はありますでしょうか? Shell.SpecialFolders でマイドキュメントは取得できるのですが・・・
522 :
名無し~3.EXE :2009/06/25(木) 15:52:02 ID:V72CWr8X
おれもついでにイイか? Xp + Jscriptで隣の奥さんの使用済みパンティーを取得する方法はありますでしょうか? 買い物のときにベランダ沿いに侵入すれば洗ったパンティーは取得できると思うのですが・・・
new ActiveXObject('shell.application').Namespace(13).Path
>>523 早速試してみたところ・・・
なぜか undefined になります。
var x = new ActiveXObject('shell.application').NameSpace(13);
WScript.Echo("path="+x.path);
x.title には「ミュージック」がセットされていました。
Path
.Self.Path
new ActiveXObject('yourfilehost.application').Namespace(mature).Panty
self.path でいけました! ありがとうございました(^^
used.Panty でいけました ありがとうございました(^^
哀しいものを見た^^
xmlhttpを使用して、リファラーを送ってデータを取得したいのですがうまくいきません
set http = WScript.CreateObject("microsoft.xmlhttp")
http.open "GET", "
http://taruo.net/e/ ", false
http.setRequestHeader "Referer", "テストテスト"
http.send
WScript.Echo http.responseText
診断君で試してみたところ、やっぱり送れていないみたいなんですが何か間違っているんでしょうか?
>>532 WindowsUpdateでその辺の仕様が変わるんだな。
これからも起き得るのかね?あぶねえな。
前にやったときは、さっさとCurl.exe使って逃げたわ。
IEでも動かせるオブジェクトなんだからある程度は仕方なかんべ
さすがMS、酷い変更だ。リファラすら指定できないなんて。 4.0 5.0 がフルパス吐くのは、別の意味でセキュリティーの問題じゃないか? ユーザー名に実名使ってる環境の場合、フルパスに実名含まれてしまったり・・・w
536 :
531 :2009/07/15(水) 23:13:42 ID:G8m72XGt
>>532 そういうことだったんですね
とりあえずMsxml2.XMLHTTP.5.0にしてみたら送れたのでよかったのですが
何だかcookie送る方にもバグがあるんですね・・・・
対策ページを見てみましたがうまくいかず
xmlhttpを使うのはあきらめました
自分の環境には5.0入ってないんで、Msxml2.XMLHTTP.6.0で試してみたが、Referer送れない。orz
PowerShellへの移行策の一つと言うことか
539 :
名無し~3.EXE :2009/07/19(日) 11:53:25 ID:BSXTI/Xi
wsh(≒jscript)はwineで使い物になる?PowerShellはwineで使い物になる? 詳しい人教えてくれ。
540 :
名無し~3.EXE :2009/07/29(水) 01:05:20 ID:nmGF194p
使用言語はJavascriptで、他のファイルの関数を使うにはどうすればいいでしょうか? wsfでインクルードするしかないでしょうか
テキストとして読み込んでeval
542 :
名無し~3.EXE :2009/07/29(水) 01:22:33 ID:nmGF194p
アプリの設定がメニューの深いところにあって、 いちいちメニュー階層を順に開いていくのが面倒なので SendKeysで自動的にやろうとおもったのですが、 IMEがオンの状態ではメニュー項目がうまく選択できませんでした。 強制的にIMEをオフにしたいのですが、 vbsでIMEの制御は可能でしょうか?
544 :
名無し~3.EXE :2009/07/31(金) 15:34:40 ID:fPLWy6Es
不要
ウィンドウ操作はそれ用のCOMを覚えた方が先々便利
Sever 2008 x64でオブジェクトが作成できませんと怒られてbasp21が動かない 何か方法はあるんでしょうか?
32bit版のwscript/cscriptで実行する
548 :
546 :2009/08/03(月) 07:14:19 ID:rN5JviGQ
>>547 あっさり解決できました
本当にありがとうございました
WSH & 周辺環境は、32bit版さえ使えば、この先もしばらく使えそうなのか? ますますPowerShellを覚える気力がなくなってきた。どうしよう・・・。
だったら使わなければいいんじゃね?
だったら覚えなければいいんじゃね?
わかりました。しばらくはJScriptで行きます。 Webでもローカルでもマクロでも一番使い勝手がよさそうなんで。
553 :
名無し~3.EXE :2009/08/07(金) 19:33:38 ID:E5uAjbVg
xmlhttp = new ActiveXObject("Msxml2.ServerXMLHTTP");
xmlhttp.setTimeouts(20000, 20000, 20000, 20000);
xmlhttp.Open("GET", "
http://www.google.co.jp/ ", false);
xmlhttp.Send();
タイムアウト設定が必要なのでServerXMLHTTPを使おうと思ったのですが、
3行目でオブジェクトがプロパティかメソッドに対応していないとエラーがでます。
どこが間違っているのか教えてください
555 :
名無し~3.EXE :2009/08/07(金) 20:10:07 ID:E5uAjbVg
ありがとうございました。ついでに4行目もsendなんですね・・・
vbscriptにしろよ
557 :
名無し~3.EXE :2009/08/10(月) 13:32:44 ID:4SR4aBtB
いまさらVBSCRIPTはねえだろうw JSCRIPTなら他の言語にもすぐに応用が利くからわからんでもないがw
解ってない奴現るw
VBはいまだによく使うよ。
>>559 その書き方だと、VBとVBScriptを混同しているように読めるが……。
別に混同しちゃいないけどさ、JSより、 VBの文法はいまだによく使うよってこと。
WebのJSとwshのJSって文法ほぼ一緒だけど 使うオブジェクト違うから書き方変えるしね だったらVBSで文法レベルから完全に違うほうがわかりやすかったりする
別に金が掛かる訳でもなし、適材適所で両方使えばええがな
EnumeratorだらけならVBSの方が簡潔に書ける。ぐらいしか思い付かない。
たまにby Refの受け取りとかあったりするぐらい。
MsgBox Inputbox 使えないだろ>JScript
Grepしたらこんなのが出てきた。すっかり忘れていたwww function input(){ /***** JScript で VBScript の InputBox() 関数を使う関数 *****/ var scVB, VBarg, fvartype, i;VBarg = ''; scVB = new ActiveXObject('ScriptControl'); for (i = 0; i < Math.min(arguments.length, 7); i++){ fvartype = typeof(arguments[i]); if (i > 0){VBarg += ', ';} if (fvartype == 'number' || fvartype == 'object' && arguments[i] instanceof Number){ VBarg += arguments[i].toString(); } else if (fvartype != 'undefined'){ VBarg += '\"' + arguments[i].toString().replace(/[\"]/g, '\"\"') + '\"'; } else if (i < 3 || i == 5){ VBarg += '\"\"'; } } VBarg = VBarg.replace(/[\r\n]+/g, '\" \& $&\"').replace(/[\r]/g, 'Chr\(13\) \& ').replace(/[\n]/g, 'Chr\(10\) \& '); scVB.Language = 'VBScript'; return(scVB.Eval('InputBox\(' + VBarg + '\)')); } var ret=input("説明文","タイトル","デフォルト100"); WScript.Echo(ret);
そりゃActiveXObject使えばどうにでもなるさ そんなのは皆知ってるし、ActiveXObject使うなら わざわざVBSのGUIに拘る必要もないだろw
COMは全て別途DLLが必要とでも思ってるんだろうか。
EXEもあるが?
ちょっとCOM乱してる?
だれが上手いこと言えとw
xmlhttpを使って同じURL(情報に変化有り)をループ処理で取得しようとすると キャッシュを使ってるみたいで、1回目に取得したもののコピーしか取得出来ないのだけど そのつど新しいデータを取得するにはどうしたらいいんでしょうか?
HTTPリクエストに(ここではスレ違い)ついて勉強しましょう
>>575 送るヘッダなんかもいじってみたけどうまくいかなかったのですが
不可能ってことなんでしょうか?
ブラウザだって[Ctrl]+[F5]で強制再読込できるんだ。出来ないわけ無い。 これ以上は、スレ(板)違い。
スクリプトでxmlhttpを使い、同一URLを連続で取得した場合に データを新たに取得に行かないという問題なのですが・・・
xmlhttp キャッシュ でググれ
「スレ違い」「板違い」と指摘されてるのに質問を続ける奴って何なの?
>>579 ありがとうございました、出来ました
>>580 上のほうでも同じようにxmlhttpの挙動に対する質問などもありますし
スレ違いだとは思わなかったので続けました
純粋に疑問なのですがどのあたりがスレ違いなんでしょう?
ここがwshのスレならば、範囲内だと思うのですが?
xmlhttpの質問をここでするのは、トヨタの車にSonyのカーナビ付けてる状況で カーナビの操作不良トラブルでトヨタに問い合わせるようなものだ xmlhttpはwsh用でもなんでもなく、 いろんな言語(車)に使える汎用コンポ(カーナビ)だってことを覚えて置いて
過疎ってんだからいいじゃん 無駄に細けーよ
気分いい人を見つけるか、気分良くさせる話術を身に付けろってことさね
むしろそれをスレ違いと言ったらこのスレには何が残るというのか
wshの話題 つーか、そもそもここはそういうスレだろ? それじゃ話題が少ないとか言う奴も居るかも知れないが、 少ないと何か問題あるのかと問いたいね 2chの鯖(とcgi)が弱かった頃は、話題(書き込み)が少ないと すぐに圧縮で落とされたから、無理にでも話題作りをしなくちゃならなかったが そういう問題が無くなった今となっては、無理に話題広げるより、 少ないながらもスレタイに沿った濃密な話題のみの方が断然良いからね
なんだ、クレクレ厨か
どのオブジェクトからがスレ違いで 何が許容範囲なのか明確に例題を挙げてもらいたいわw
589 :
名無し~3.EXE :2009/08/16(日) 13:34:08 ID:Ep6+8lZw
俺様基準ってことだろ
>>588 オブジェクト単位でどれがいい悪いじゃなく、内容がwsh特有の問題なのかどうかという話だと思うんだけど。
例えば、あるオブジェクトがwshで使ったときのみ違う動作をする、というような話しならこのスレ向き、
というか他所でしても「こっちいけ」って誘導されるような話だと思うし、
そうではなく、どの言語・環境で使っても同じ動作をするものを「こうさせたい」って話しなら
それはそのオブジェクトか、それが対象とする規格の話題を扱うスレのほうが適しているだろうと思う。
591 :
名無し~3.EXE :2009/08/16(日) 16:17:49 ID:92sq03tG
言葉にならない 私の想い けれど いつかあなたに きっと・・・
スレ違いを指摘する奴は移行先を示さない法則
なんでスレ違いの奴に、わざわざこっちが移行先を探してやらなきゃならないんだ?
FileSystemObjectの文字コードはどうやって決まってるの? 外国じゃシフトJISじゃないよね?
>>594 wikipedia
>マイクロソフト(日本法人)元会長の古川享によると、Shift_JISの制定には、
>アスキー、マイクロソフト(米)、三菱電機、マイクロソフトウェア・アソシエイツ、デジタルリサーチ(米)が関わり、
そんなことはどうでもいいから Scripting.FileSystemObject なんつう 長くて打つのがめんどいProgIDをどうにかしてくれ
ひらがな4文字にするべき。
>>596 自分のPC上でなら、設定次第でいくらでも短くできるけど?
というか、初心者はコードの文字数や行数的な短縮に躍起になる次期があるが
コードは読解性や最適化(意味としての短縮)の方が重要だよ
環境依存の少なさも大事
もちろん だからこそ「自分のPC上でなら」と その重要な点が犠牲になることを明記した
VB2005以降みたいにスニペットでホイホイと行かないのはしょうがない話
入力補完機能があるエディタを使えば問題ない。
>>590 じゃぁFileSystemObjectやWScript.Shellなんかもスレ違い?
FileSystemObjectスレやWScript.Shellスレがあるのか?
FileSystemObject を引き合いにだして、ディレクトリ構造とかファイル属性について質問してるようなもんだろ。 それらは、FileSystemObject や xmlhttp の固有の問題じゃない。 FileSystemObject だけでなく コマンドプロンプトやエクスプローラなどファイル管理共通の話題だし、 今回の例だとhttpヘッダの話題で、ブラウザやAjaxを使ったアプリ、telnetでhttpで鯖と対話するときとか、 あとはオミトロンなどでも、利用っつーか知らないと上手く扱えないもんだ。 httpヘッダの解説ページでも見ればすぐに解決するだろうし、さらっと答えても差し支えないけど、 答えたばっかりに、教えて君的にどんどんと質問レスばかりで埋まるようだと 完全にスレ違いになるし、それが嫌なんだろう。
大丈夫だよ、埋まるほども人いないから
というか
>>590 は一行目でオブジェクトが何かでなく内容の問題だって書いてるのに
それに対してこのオブジェクトはどうですかとレスする
>>604 が不明。
ま、まさか、オマイらエディタの入力補完機能使わんで、全部手打ちにしてるんか? そりゃ無茶だw キーボードも早く壊れるし、指も疲れる、可読性も良くない。 入力補完機能は日本語辞書と違って64文字の制限ないから、長い文を登録できるんだぜ。 フリーのメジャーなエディタならたいていは使える機能だわな。 関数やプロトタイプも余裕で登録できるんで、ぜひ使ってやってください。
全部手打ちだ。
>>594 Asc/ChrはSetLocaleで変わるがFSOは変わらんね
DLLで固定じゃないか
notepad最高
WSHでスキャナとカメラの中のフォルダって扱えませんか?
無理 そもそもWSH自体には、ローカルであってもファイルやフォルダを操作する機能など無い
>>614 ?? ファイルフォルダ操作は簡単だろ。スキャナダメはそうなんだけど。
616 :
横レス :2009/08/24(月) 18:39:02 ID:LAYapniR
>>614 は「FSOはWSHの一部ではないよ派」だと思われ
wscript.exeにはfsoが内蔵されてるが?
wscript.exeにはfsoが内蔵されてないが? WScript5.6パッケージには、FSOが『同梱』されてはいるが 数種入ってるサンプルCOMのひとつがFSOってだけの話で 別にFSOがWSHという実行ホストと直接関係有るわけではないし
MS-Windowsってなんなの?
wscript.stdin.readlineとかは内蔵fsoだが?
内蔵fsoってなによ ていうかFSOって何か分かってるか
どうでもいい
>>621 >>621 分ってないみたいだから、wscript.exeをobject browserで見てみるとよいよ
なんだ、ただ勘違いしてるだけかw
ほれ Library IHost Windows Script Host (Ver 5.6) Class FileSystemObject IHost のメンバ
┐(゚〜゚)┌
>>620 VBSでこんなクラスを作ったとする
Class Hoge
Public fso
Private Sub Class_Initialize
Set fso = CreateObject("Scripting.FileSystemObject")
End Sub
End Class
このHogeクラスはFileSystemObjectを内蔵している?
粘着馬鹿が居る scrrun.dllを削除して使えるかどうかで判定できるだろ?
>>628 「(null): 指定されたモジュールが見つかりません。」って言われた
たぶんXPのWindows File Protectionが削除されたscrrun.dllを
速攻で復活させてるだけじゃ?
標準でそのオブジェクトが使えるなら、どうでもいい話じゃないのか? Windowsでしか使えないんだし。
regsvr32 /u scrrun.dll
つまりwscript.exeはFileSystemObjectを持ってて実装はscrrun.dllに丸投げ ただしCOM経由じゃなく直接dllをロードする てことでいいのか まあ何でも良いが
なにを根拠に妄想をたくましくしてんだ?ぼけ
もちろん629からだが 是非ご高説賜りたいもんだね
この雰囲気、好きくない
636 :
名無し~3.EXE :2009/09/09(水) 06:43:01 ID:mKiDYFp0
質問:WSHまたはWindows Scripting Component で任意のインターフェースをImplementsしたクラスを作成する方法はありませんか?
■経緯
Excel VBAで、外部COM DLLを使ってスクリプト作成しているのですが、
これをWSHに移植しようとしています。
しかし、問題は外部COM DLLで定義されているインターフェースのImplementsが必要な事です。
WSHではImplementsは非対応のようなので、困っています。
ググって見たところ、Windows Scripting Component にはImplementsを指定する箇所がありますが、
指定してみても「インターフェイスハンドラを作成できません」というエラーになります。
(hoge.wsc の中に <implements type="dhRichClient3.IFunction" /> <implements type="IFunction" /> のように記述)
どうも、このImplementsに指定できるインターフェースは、ASPとBehaviourというもののみのようです。
(何か勘違いをしている可能性が大ですが…)
任意のインターフェースをImplementsする方法はないでしょうか。
■やろうとしていること
SQLiteを使った、SQL文中でのユーザ定義関数の定義。
外部COM DLLは「dhRichClient3」、インターフェースは「IFunction」
リファレンスマニュアル:
http://www.datenhaus.de/RC-Help/dhRichClient3.htm ■ASP,Behaviour以外のインターフェースを実装しようとしている人の質問(回答なし)
http://www.palm-jp.net/cgi-bin/ml/palm-tech-ml/msg00383.html
637 :
名無し~3.EXE :2009/09/10(木) 19:09:44 ID:Rxuv3x7H
XP-SP3ってデフォ5.7なのね 今までI漏れのPCにIE7入れたからかと思ってたわ つーことはXPSP3-IE6-WSH5.7の環境もあるってことか
俺も知らんかった
つーか俺が先日買ったばかりのWinXPインストール済マシンが、最初からXPSP3-IE6-WSH5.7だったよ。
Win7のVerはいくつだろね
InternetExplorer.ApplicationでzipファイルにNavigate2すると 「ファイルのダウンロード」ダイアログが出るのですが、 これを自動で保存する方法はないでしょうか?
sendkeys
>>640 IE8だから最低でも5.8だろ多分。
IE7だから5.7ってわけでもないんだが。
5.7になって何かよかったことがあるのか?
細々とでもアップデートしてくれること自体がいいんじゃん 番号だけかもしれんけど とりあえず捨て去ることはないという証明にはなる
>>640 System32のjscript.dllのプロパティを見ると5.8.7100.0となっている。
Windows 7 RCの64ビット版。
cmd.exeはアップデートないけど、ちっともなくならないな んでも、cmd.exeをアップデートしてほしいな
ちゃんとコマンド増えてるだろ
なんちゅう内部コマンド?
norip oshio komuro
dictionary オブジェクトの item に配列を入れた場合、直接値の変更はできないんですか? Set d = CreateObject("Scripting.Dictionary") d.Item("hoge") = Array("bing", "bang") d.Item("hoge")(0) = "ting" ' bing が出力される。 WScript.Echo d.Item("hoge")(0)
だな
VBSの配列の代入は値のコピー。 だから、 d.Item("hoge")(0) = "ting" は Dim x x = d.Item("hoge") x(0) = "ting" に分割され、このときxへの代入時に配列丸ごとコピーされて d("hoge")が持ってる配列とxが持ってる配列は別物になる。 めんどくさい仕様だなぁ。
だね
で、どうする?
そういう質問じゃないので不要
Vista/7でスクリプトが管理者権限で実行されてるかどうかを調べる方法ってある?
>>659 まず管理者権限かどうかを調べるってのはVistaより前でも結構難しいのよ。
そりゃローカルのユーザでログオンしてて自分が管理者かどうかを調べるなら
WMIで簡単だけど、ドメインのユーザだとドメインに聞かないとダメだろ?
だから簡単じゃない。
それにVista/7だと、それ以前にUACが有効になってたりそのUACがデフォルト
より厳しい設定になってる可能性もあるだろ。そうすると、たとえ本当に管理者で
入っていたとしてもスクリプトのチェックが蹴られたり、チェックで通っても
実際にしたい処理のときにUACに蹴られる可能性もある。
だから何をしたいのかをまず絞り込んでから個別に作るべきだな。
最近のヘイ スクリプティング ガイ! がPowerShellばっかりな県
さすがにネタ切れだろ
むしろMS的にPowerShellよりWSHを推してたら驚く
その程度のことでは別に驚かないが?
もしPINVOKEのCOMが標準提供されたらWSHの時代だな
まあ、諦めよう。
PINVOKEのCOMをどっとねっとで書いて、WSH実行時に動的コンパイルして インストールしないで使えばええんじゃね
そこまでするなら素直にPowerShell使ったほうがいいような
PowerShellのPINVOKEもめんど
672 :
名無し~3.EXE :2009/09/29(火) 21:21:02 ID:BcdCkTRc
PowerShellなんてのも有るんだ。 なんかでこのスレ覗いて、そのままずっと自動レス取得にしといて良かった。 ちょっとtechnet読んでくる。
PowerShellの方はAdd-Typeのお陰で随分楽になった まあPythonのctypesみたいなのが元からあるのが理想だけど
367 :名無し~3.EXE:2008/02/19(火) 21:38:37 ID:qK/Wztn/
おれはこのVBSを作って自作ソフトからファイル渡ししてるけど
DoLoopとかforで回せばいいじゃん、めんどくさがりだなあ
'IrvineQueueFolder.vbs 'キューフォルダを指定してURLやURLリストファイル郡を登録
'IrvineQueueFolder.vbs 引数1 引数2 引数3 ...
'引数は、[キューフォルダ]または[URL]または[URLリストファイル名]で混在可
'キューフォルダは"/"で始まるように絶対指定する
QueueFolder="/Default/dorothy2/Auto" 'キューフォルダの指定(デフォルト)
'
Set Irvine = WScript.CreateObject("Irvine.Api")
Set arg = WScript.Arguments 'コマンドラインの引数郡
For i=0 to arg.Count - 1
If Left(arg(i), 7)="
http:// " Then 'URL
Url = arg(i)
Irvine.AddQueueItem QueueFolder, Url 'アイテム登録
ElseIf Left(arg(i), 1)="/" Then 'キューフォルダ指定
QueueFolder = arg(i) 'キューフォルダの指定(指定以降はこのフォルダになる)
Else 'URLリストファイル
Set fso = CreateObject("Scripting.FileSystemObject")
FileName = arg(i)
Set TextFile = fso.OpenTextFile(FileName) ' テキストファイルのオープン
Do Until TextFile.AtEndOfStream
Url = TextFile.ReadLine ' 1行読み込み
Irvine.AddQueueItem QueueFolder, Url 'アイテム登録
Loop
End If
Next
Set irvine = Nothing
368 :名無し~3.EXE:2008/02/19(火) 21:40:43 ID:qK/Wztn/
ああスマン、リファラ必要だったか、間違えた
ほんとごめん、無かった事にしてくれw
IE の clipboard.GetData("text") を使ってるんですけど クリップボードの中身が文字列でないときにエラーが出るんですけど これどうして対処したらいいですか? クリップボードの中身の sDataFormat が何か分かるプロパティとかあるんですか? それがあればtextであった場合のみ実行できるんですが…。
エラーを握り潰せばいいんじゃね?
>>676 ありがとう。
エラー処理するのはあまり本位ではないのですが…
try で組もうと思います。
それはあまりにも自分本位じゃまいか
エラーにも言い分があるはず。こっちも心を開かないと エラーも心を開くはずがない。
CかC++で普通の旧式の非ウィンドウアプリケーション書いて、 データ入力部分だけhtaでGUIもどきのことをしたいと思っています。 質問1、execでstdinとstdoutだけを読み書きして stderrはコンソールにそのまま出力ということは出来るのでしょうか? これが出来ると本当に安直なプログラムが書けそうなんですが 質問2、exec のstdoutにデータが来てるかどうか読まずに確かめる方法はあるのでしょうか? これが出来ないと予期しない出力は結局ファイルで合図しなければならないかと思っています 以上2点、レベルの低い質問かもしれませんが、自分で検索しても出来るかどうかよく分かりませんでした 特に1が出来ないと結局ファイルでやり取りしたほうが今作ろうとしているプログラムは書きやすいかと 思っています
exec "cmd /c hoge 2>con"
>>681 質問1は、できるのですね。やってみました。本当にありがとうございました
質問2は、できるのでしょうか?
パイプはnon blocking readがないので無理 ファイルならatendofstreamで可能
>>683 回答ありがとうございます。
用語がよく分かっていませんが、それで調べてみます。
ノートPCに付いている専用アプリケーションキーを押す都度に 内蔵スピーカーからの出力と、外付けUSBスピーカーからの出力を 交互(トグル)に切り替えるにはどういったスクリプトを書けばよいでしょうか? 出来れば切り替えた際にダイアログを表示して確認出来ると尚良いです。 アプリケーションキーからスクリプトを起動させるところまでは 方法がわかっているのですが、肝心のスクリプトがわかりません。 ぶしつけなお願いとはわかっていますが、どうか宜しくお願いします。
>>686 ありがとう
それを元に調べてみるとVista、7からはサウンド関係の仕様に
変更があったようで使えないのですね
そうとは知らずにOSを書いてなくてすみませんでした
今のところVista以降に関してMSからも情報提供が乏しいようですね
select caseって数値の比較とか出来ないんでしょうか? a = 1 のとき a > 0が引っかからないのですが・・・ 完全な決めうちしか出来ないって事ですか?
3>a>=1なら b=1にしてSelect bにするとか mod使ってSelect 計算式 にするとかいくらでもやりようがあるだろうに (;一_一)
>>690 頭を使った?
select case true
case a>0
692 :
名無し~3.EXE :2009/11/23(月) 00:08:54 ID:Nzh7T0tA
select caseって、caseって書くくらいだから、決め打ち有りきだと思ってたけど、そう思わない人も居るんだな。 つか、a=1の時、a=1の処理がしたいのかa>0の処理がしたいのかを誰が決めるんだろ? i7?pen3?
「VBAみたいに『Is > 0』って書ければ良かったのに」って
>>688 は言いたいんじゃないの?
a = 1 Select Case a Case a > 0 MsgBox "引っかからない" Case Else End Select ってことだろ VBSはIsもToもサポートしてない
Is > 0 だった
エクスプローラの"ファイル名でソート"と同じ規則でソートする方法はありませんか エクスプローラの表示だと あ,txt ア,txt い,txt イ,txt wshでファイルリストを出力すると あ,txt い,txt ア,txt イ,txt となってしまいます
>697にある三番目のスクリプトをJscriptに書き換えたけどうまく動きません。添削をお願いします。 for文のループが実行されません。 FolderName="フルパス"; var fso=new ActiveXObject("Scripting.FileSystemObject"); var ie=GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}"); ie.Navigate(FolderName); do {WScript.Sleep(100);} while ((ie.Busy) || (ie.ReadyState!=4)); var Folder=ie.Document.Folder; for (var i=0; i < Folder.Count; i++){ var FolderItem=Folder.Items(i); if (FolderItem.Type=="ファイル フォルダ"){ if(toLowerCase(fso.GetExtensionName(FolderItem.Path))=="txt"){ WScript.Echo(fso.GetFileName(FolderItem.Path)); } } } //ie.Quit;//エラーが出る
プロパティとメソッドの区別がついてないんじゃないの?
本質的な違いはない
//ie.Quit;//エラーが出るだろぼけ
だまれクズ豚
VBScriptとJScriptの区別がついてないんじゃないの?
シンタクス以外に本質的な違いはない
動詞と名詞の区別がついてないんじゃないの?
Cscriptで起動したスクリプトからコンソールアプリケーションを起動した場合に その標準出力をスクリプトで受け取るような事ってどうやっても無理なんでしょうか?
>>707 関係ないけどWindows3.1のころは「ヘルプのヘルプ」ってのがあった。
最近は初心者切捨てでかわいそうだね。
どうやってもってなんか極めて困難かであるかのように WshScriptExec使えばいいっしょ
>>708 いまだにPC初心者っているんだな。全国民に行き渡ったと思ってたぜ。
誰に教わるでもなくいきなり車ができたり 英語が話せたり そんなすごい人がいたら教えてください
単数と複数の区別がついてないんじゃないの?
713 :
名無し~3.EXE :2009/12/03(木) 16:49:20 ID:rN3MSJ1f
hta アプリケーションのウインドウに、ファイルのドラッグドロップって出来ましたっけ? ドラッグドロップしたファイルのパスをhtaで利用したいんですが。 可能ならどうやってイベントを拾えばいいですか?。
XPとWScriptのJscriptで、manifest使ってレジストリ登録なしでAutoItXが使えたんでメモしとく。 まずWScript.ExeとCScript.Exeをコピーして適当なフォルダに入れとく。 AutoItX3.dllも同じところに入れとく。 同じ場所にテキストファイルを3つ作る。 wscript.exe.manifest cscript.exe.manifest AutoIt.AutoItX3.manifest
AutoIt.AutoItX3.manifest の中身 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.1" processorArchitecture="x86" name="AutoIt.AutoItX3" type="win32" /> <file name="AutoItX3.dll"> <typelib tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" /> <comClass clsid="{1a671297-fa74-4422-80fa-6c5d8ce4de04}" threadingModel="Apartment" tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" progid="AutoItX3.Control.1" description="AutoItX3 Class" /> </file> </assembly>
wscript.exe.manifest の中身 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.1" processorArchitecture="x86" name="AutoIt.wscript.exe" type="win32" /> <description>WScript.exe</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="AutoIt.AutoItX3" version="1.0.0.1" processorArchitecture="x86" /> </dependentAssembly> </dependency> </assembly>
cscript.exe.manifest の中身 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.1" processorArchitecture="x86" name="AutoIt.cscript.exe" type="win32" /> <description>WScript.exe</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="AutoIt.AutoItX3" version="1.0.0.1" processorArchitecture="x86" /> </dependentAssembly> </dependency> </assembly>
// この test.js をコピーしたWScript.exeにドラッグして実行させると、画面の中央にツールチップが現れるはず。 // スクリプト起動時にこっちのWScript.Exeを選ぶスクリプト書いておけば、ポータブルでもAutoItXの機能が使える。 oAutoIt = new ActiveXObject( "AutoItX3.Control.1" ); oAutoIt.ToolTip("WSH★★★こんばんみ★★★Part7",500,500); WScript.Echo(100); oAutoIt.Sleep(3000); WScript.Echo(200);
マニュフェストは下のように1つにまとめても動いたわw。分けなくてもよかったようだ。 wscript.exe.manifest の中身 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="wscript.exe" version="1.0.0.0" type="win32" /> <file name="AutoItX3.dll"> <typelib tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" /> <comClass clsid="{1a671297-fa74-4422-80fa-6c5d8ce4de04}" threadingModel="Apartment" tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" progid="AutoItX3.Control.1" description="AutoItX3 Class" /> </file> </assembly>
// sample自動的に隣のマニフェスト付きCscriptExeを使うmanifest.js var s="cscript.exe.manifest と Cscript.Exe と \n"; s+="AutoItX3.dll が揃ったフォルダに、このスクリプトを置いておく。\n"; s+=" もしAutoItX3が登録されていればシステムの Cscript.Exe を使ったまま処理は続行する。\n"; s+=" 無ければ、このスクリプトは一旦終了し、\n"; s+="隣にある Cscript.Exe を使って起動する。引数も引き継ぐ。"; new ActiveXObject("WScript.Shell").Popup(s,0,'test',0); var sArg='';for(var iii=0;iii<WScript.Arguments.length;iii++){sArg+=" "+"\""+WScript.Arguments(iii)+"\"";};;; try{oAutoIt = new ActiveXObject( "AutoItX3.Control.1" );}catch(e){ new ActiveXObject('WScript.Shell').Run(new ActiveXObject('Scripting.FileSystemObject').GetParentFolderName(WScript.ScriptFullName) + "\\" + 'cscript.exe //E:Jscript //nologo ' + "\"" + WSH.ScriptFullName + "\"" + ' ' + sArg,1,0);;; WScript.Quit();}; oAutoIt.ToolTip("WSH★★★こんばんみ★★★Part7",500,500); var n=3000; WScript.Echo("AutoItXのSleepを使ってみる " + n + " ミリ秒"); oAutoIt.Sleep(n); WScript.Echo(3000); oAutoIt.Sleep(3000);
とりあえず、ポータブルのJScriptでもAutoItXでアプリ制御、SeraphyScriptDialogでGUIフォーム、SFCminiでWin32API、いくつかは動いたんで最後のまとめ。 cscript.exe.manifest の中身。 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="cscript.exe" version="1.0.0.0" type="win32" /> <file name="scrdlg.dll"> <comClass clsid="{86893BFE-A779-4685-8FC9-D63C8827C4C9}" threadingModel="Apartment" tlbid="{86893BFE-A779-4685-8FC9-D63C8827C4C9}" progid="SeraphyScriptDialog" description="scrdlg Class" /> </file> <file name="AutoItX3.dll"> <typelib tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" version="1.0" helpdir="" /> <comClass clsid="{1a671297-fa74-4422-80fa-6c5d8ce4de04}" threadingModel="Apartment" tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" progid="AutoItX3.Control.1" description="AutoItX3 Class" /> </file>
つづき、AMD は sfcminii.dll を sfcminia.dll に変える。 <file name="sfcminii.dll"> <comClass clsid="{1303599D-3028-4EAC-97BB-D9370B88B2DA}" threadingModel="Apartment" tlbid="{1303599D-3028-4EAC-97BB-D9370B88B2DA}" progid="SfcMini.DynaCall" description="sfcminii Class" /> <comClass clsid="{F5B4E399-F606-41FC-B049-D247156F8F3E}" threadingModel="Apartment" tlbid="{F5B4E399-F606-41FC-B049-D247156F8F3E}" progid="SfcMini.Structure" description="sfcminii Class" /> <comClass clsid="{4D2C1575-A55B-418F-A25C-ECEB45FC5FD2}" threadingModel="Apartment" tlbid="{4D2C1575-A55B-418F-A25C-ECEB45FC5FD2}" progid="SfcMini.MachineCode" description="sfcminii Class" /> <comClass clsid="{DC430254-87C0-4800-8C45-8B0C2BED1A53}" threadingModel="Apartment" tlbid="{DC430254-87C0-4800-8C45-8B0C2BED1A53}" progid="SfcMini.ClassEx" description="sfcminii Class" /> <comClass clsid="{6F5E1721-E8A4-48BB-B29F-A549EDA82CC7}" threadingModel="Apartment" tlbid="{6F5E1721-E8A4-48BB-B29F-A549EDA82CC7}" progid="SfcMini.tools" description="sfcminii Class" /> </file> </assembly>
//やべえ。銚子に乗って書いたが、設定がうまく遺憾人は無限ループになる可能性がある。 //1回で打ち切りにするテスト用スクリプトをカキコ。スマン。 // sample自動的に隣のマニフェスト付きCscriptExeを使うmanifest無限ループ回避.js var s="cscript.exe.manifest と Cscript.Exe と \n"; s+="AutoItX3.dll が揃ったフォルダに、このスクリプトを置いておく。\n"; s+=" もしAutoItX3が登録されていればシステムの Cscript.Exe を使ったまま処理は続行する。\n"; s+=" 無ければ、このスクリプトは一旦終了し、\n"; s+="隣にある Cscript.Exe を使って起動する。引数も引き継ぐ。"; var objshl=new ActiveXObject('WScript.Shell'); if(objshl.Environment('process').item('senvstopscript')!=1){ try{oAutoIt = new ActiveXObject( 'AutoItX3.Control.1' );}catch(e){ objshl.Popup("この後RUNする\n\n"+s,0,'test',0); var sArg='';for(var iii=0;iii<WScript.Arguments.length;iii++){sArg+=" "+"\""+WScript.Arguments(iii)+"\"";};;; objshl.Environment('process').item('senvstopscript')=1; objshl.Run(new ActiveXObject('Scripting.FileSystemObject').GetParentFolderName(WScript.ScriptFullName)+ "\\" + 'cscript.exe //E:Jscript //nologo ' + "\"" + WSH.ScriptFullName + "\"" + ' ' + sArg,1,0);;; WScript.Quit();}; }; WScript.Echo(s,0,'test',0); WScript.Sleep(2000); oAutoIt = new ActiveXObject( 'AutoItX3.Control.1' ); var n=3000; oAutoIt.ToolTip("AutoItXのSleepを使ってみる " + n + " ミリ秒",500,500); oAutoIt.Sleep(n);
ウチでも動いた。 また入れなおしたけど。
面白そうだからPortableSleipnir、LunaPocketでも試したがmanifestでは駄目だった。 でPortableSleipnirでScriptのほうに手を加えて、 起動するときにmanifest付きのwscript.exeから 起動しなおすようにしたらSleipnirやAutoItXのオブジェクトも使えた。 もちPortableはsleipnirからxmlをコピーしてメニューにスクリプトが出るようにしてからだがな。
// pWScriptExeでパスを決める。 // もしくはbinフォルダにマニフェストとDLL、exeを入れる。 objfso=new ActiveXObject("Scripting.FileSystemObject"); objshl=new ActiveXObject("WScript.Shell"); pnir = new ActiveXObject("Sleipnir.API"); if(objshl.Environment("process").item("senvstopscript")!=1){ //wscript.exeのパスを決め内する場合 pWScriptExe="U:\\wscript.exe"; //もしbinフォルダにwscript.exeがあればそれを使う。 if(objfso.FileExists(pnir.AppPath + "wscript.exe")){ pWScriptExe=pnir.AppPath + "wscript.exe"; }; objshl.Environment("process").item("senvstopscript")=1; objshl.Run("\"" + pWScriptExe + "\"" + " //E:Jscript //nologo " + "\"" + WSH.ScriptFullName + "\"" ,1,0);;; WScript.Quit(); } str = pnir.AddressBarString; str+="\n"+pnir.AppPath; WScript.Echo(str); WScript.Echo("test"); WScript.Sleep(2000); oAutoIt = new ActiveXObject( "AutoItX3.Control.1" ); var n=3000; oAutoIt.ToolTip("AutoItXのSleepを使ってみる " + n + " ミリ秒",500,500); oAutoIt.Sleep(n);
Luna4Pocket、 PortableSleipnir、 どっちでも外部のDLLは使える。 Luna.exeと同じ場所に、wscript.exe、 wscript.exe.manifest、 AutoItX3.dll、 etc dll を 置いておけばこっちの wscript.exe を優先するんで Dll も動く。
いつの間にかJScriptのファイルのアイコンが白地に箱のアイコン になってたんですが、デフォルトの黄色のパンチカード?のアイコンに戻し たいです どうしたらいいですか? プロパティの関連付けを確認すると「Console Based Script Host」に なってるんで関連付けは間違っていないと思います。
普通Console Based(cscript.exe)じゃなくてWindows Based(wscript.exe)に関連づけられてるはずだが?
regsvr32 wshext.dll
どうでもいいが、むだ口さんの掲示板が宣伝ばっかりだ。
生活かかってんだろ?買ってやれよ
wscript.exe.manifest basp21.dll capicom.dllの一部が動きました。全部試してません。
ポータブル環境やエディタでの暗号処理も簡単そうです。
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&displaylang=ja msi を解凍すればcapicom.dll が入手できます。
msiexec /a capicom_dc_sdk.msi targetdir="z:\hogehoge" /qn
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="wscript.exe" version="1.0.0.0" type="win32" />
<file name="capicom.dll">
<typelib tlbid="{BD26B198-EE42-4725-9B23-AFA912434229}" version="1.0" helpdir="" />
<comClass clsid="{A440BD76-CFE1-4D46-AB1F-15F238437A3D}" threadingModel="Apartment" tlbid="{BD26B198-EE42-4725-9B23-AFA912434229}" progid="CAPICOM.EncryptedData.1" description="CAPICOM.EncryptedData Class" />
</file>
<file name="Basp21.dll">
<typelib tlbid="{607E85A1-3B9C-11D1-863C-00000E4E0AD6}" version="1.0" helpdir="" />
<comClass clsid="{5A99A823-3B97-11D1-863C-00000E4E0AD6}" threadingModel="Apartment" tlbid="{607E85A1-3B9C-11D1-863C-00000E4E0AD6}" progid="Basp21.1" description="Basp21 Class" />
</file>
objBasp=new ActiveXObject('basp21.1'); sOriginal='basp21.1こんばんは'; sEnc = objBasp.Base64(sOriginal,0); sDec = objBasp.Base64(sEnc,1); WScript.Echo(sOriginal +"\n"+ sEnc +"\n"+ sDec); sOriginal = 'CAPICOM.EncryptedData.1こんばんは'; sKey='Password'; objCapicom = new ActiveXObject('CAPICOM.EncryptedData.1'); objCapicom.SetSecret(sKey); objCapicom.Content = sOriginal; sEnc = objCapicom.Encrypt().replace(/\s$/,''); objCapicom.Decrypt(sEnc); sDec = objCapicom.Content; WScript.Echo(sOriginal + "\n" + sKey +"\n" + sEnc + "\n" + sDec);
すみません。教えてください。 >cscript.exe hoge.vbs としてvbsを実行した場合、hoge.vbsで実行時エラーが発生した場合に cscript.exeが終了コード0以外を返すようにするには どうしたらよいでしょうか? よろしくお願いいたします。
WScript.Quit 1
>>737 ありがとうございます。
やはりvbs側の修正が必要なんですね。
on error ?
740 :
名無し~3.EXE :2009/12/18(金) 07:19:38 ID:5pMA288l
こんにちは テキストファイルから文字列の抽出をしたくて、できる方法を探してます。 やりたいのは 1.アプリケーションA.exeを終了させる 2.B.txtの「通信」という語句がある行の、""に囲まれた文字列を 抽出し、C.txtの末尾に追加する 3.B.txtの内容を全消去し保存する 4.10秒後にA.exeを再起動する という作業です。これをWSHでやることは可能でしょうか? 宜しかったら、どういうコマンドを使えばできるかざっとでも教えて頂けないでしょうか?
まず服を脱ぎます
次に綿棒を用意します
743 :
740 :2009/12/18(金) 11:20:12 ID:5pMA288l
Set fs = WScript.CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile("A.log") Set B = fs.OpenTextFile("B.lst", 8, False) Do Until f.AtEndOfStream l = f.ReadLine If InStr(l, "達成") <> 0 then ret = ret & l & vbCrLf Loop f.Close B.Write ret B.Close とりあえず、行を抽出することはできたんだけど、行の中の""に囲まれた部分 だけを抽出するにはどうしたらいい? ∧__∧ (´・ω・` ) (⊃⌒*⌒⊂) /__ノωヽ__)
744 :
740 :2009/12/18(金) 12:32:41 ID:5pMA288l
Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator") Set Service = Locator.ConnectServer Set oProcs = Service.ExecQuery _ ("Select * From Win32_Process Where Description=""A.exe""") For Each oProc In oProcs oProc.Terminate Next Set fs = WScript.CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile("B.txt") Set B = fs.OpenTextFile("C.txt", 8, False) Do Until f.AtEndOfStream l = f.ReadLine If InStr(l, "通信") <> 0 then ret = ret & l & vbCrLf Loop f.Close B.Write ret B.Close fs.DeleteFile "B.txt" fs.CreateTextFile "B.txt" WScript.Sleep 10000 Set shell = WScript.CreateObject("WScript.Shell") shell.Run "A.exe", 3, true いろいろつぎはぎしてここまでできたんですが、""の中だけを抽出する方法が分からない... テキストの内容のクリアの方法も分からなかったので消去+新規作成で代用しました(;^ω^) ""の中だけの抽出はどうやったらいいでしょう?
745 :
740 :2009/12/18(金) 15:18:42 ID:5pMA288l
と、思ってたら、できちゃった。。。。 言われたのは「服を脱いで綿棒用意しろ」とだけか。。。。ほんと有益なスレだtったぜwwww
746 :
名無し~3.EXE :2009/12/18(金) 15:42:26 ID:HOC6ISom
用意したんだろ?( ´∀`)σ)Д`)
747 :
名無し~3.EXE :2009/12/18(金) 16:57:51 ID:TYK9wCb8
748 :
740 :2009/12/18(金) 17:48:38 ID:5pMA288l
作ったvbsファイルを直接クリックすると実行できるんですが、 「ファイル名を指定して実行」から、wscript.exe "パス\ファイル名.vbs" で実行すると、「行17 ファイルが見つかりません 実行時エラー」とかいうのが出てきます。 なんで????(´・ω・`)
750 :
740 :2009/12/19(土) 03:55:38 ID:bRRSIC4A
なるほど〜。やっとできたよ〜∩(^ω^)∩バンジャーイ
ファイルを削除したいのに、たまーに「ファイルが見つかりません」とか出る... ファイルがあるのに「ない」とか出るのは何故なのかな(#^ω^)ピキピキ ...
パスが違う・カレントディレクトリが違う
If fso.FileExist(file) Then fso.DeleteFile file
こういう奴がスクリプトでファイル削除して惨事を招くんだろうな。
WSHの実行履歴ってどっかで見れないかな... なにやら3つぐらい同時に実行されてるぽい。二重起動防止が役にたってなひよ(-_-) …
wscript.shell logevent
ありがとん。wshっていろいろできるんだねえ。おもしろくなってきたよ
これ絶対おっさんだよな。 なのに平日(12/18)一日中 2ch してるとか、変な顔文字とか・・・・
役に立たないくせにつまんない突っ込みばっかりするのなオマエwwwwwwwwwwwwwwww( ゜д゜)、ペッ
ニートのキモッサンきめえw
>>759 レベル低すぎ
ここはググって出てくるような事を書き込むスレじゃないんで、お引取りください
DOSの業務用ソフトをWSHで動かすことはできますか?
バッチファイルの代わりにはなるだろうけど、それ以上は期待するだけ無駄
WSHからアプリをIntegrity Level Lowで動かすことはできますか?
>>765 プロセスの優先度のことならstart /lowでいいだろ。
WSHでもできないことはないけどWin2000じゃ使えない。
テキストファイルの最後の2行を読み込みたい場合に どういうふうに処理するのがスマートんなんでしょうか? ReadLineで始めの行から 常に二行分を変数に避難させながら最後の行まで読み込む 一度に全部読んでからSplitで分割 最初に一度すべてを読み込んで行数を調べてから ReadLineで最後の2行まで読み飛ばして取得 と、考えてみたのですがどれもなんか無駄な動きがあるような気がして
悩んでる時間とスクリプトの処理時間を天秤にかけて見るといいんじゃないだろうか。
現在行の内容を格納する変数(X)と、1個前の行の内容を格納する変数(Y)を用意。 Xの内容をYにコピーしてから新しい行を読む。
>>769 実際にはもう問題なく動くスクリプトは作れているんだけど
ふと、使い慣れてる人はもっといい方法とか
細かい処理速度やメモリの使い方?とかの違いとかその辺も考えて
どういう方法が一番いいかとか知ってるんじゃないかな、と思って
>>770 今はちょうどその方法でやってるんですが
最後の2行だけほしいのに、テキストの先頭からずっとその作業をやるのは
最善の方法なのだろうか?と不安になってしまって
全然試しもしないで想像だけで書いてるけど 同じテキストファイルを2つのオブジェクトとして開いて 片方を一回だけSkipLineで先行させてからループで先行してる方のAtEndOfLineがtrueになるまで SkipLineで飛ばすとか。
実行行数が少ないほうが速いよ。
ファイルが巨大じゃなきゃ全部読み込んで、 Ar=s.split("\n"); で改行で分割して、 でAr.length>=2で2行以上の場合と、 そうでない場合で処理を分けるのが簡単だと思った。 最後の行とそのまえってAr[Ar.length-1]とAr[Ar.length-2]だし。
アルゴリズム的にスマートに書きたいという欲求もあるもんだ 仕事でなければそれを追求するのもいい勉強になるしさ 時間的制約を考えれば769のいうことも一理あるというところだね
バイト単位で読む場所わかってりゃadodb.streamとかでもいいんだろうけど
処理するデータが何十万件もあったらかなり違うけどな 少なくとも常にアルゴリズムを意識してるやつとそうでないやつでは 数年で大きな差がつくよ
779 :
768 :2009/12/28(月) 03:33:13 ID:r7K75E4h
とりあえず単純に速度的な比較をしてみようと
300万行のテキストで試してみたところ自分のマシンでは
>>770 さんの方法で 35秒前後
>>772 さんの方法で 45秒前後
1度SkipLineで行数を調べてからもう一度開き最後の2行だけ取得で 55秒前後
>>774 さんの方法は、やはり大きなファイルには向いていないようで
10分以上たっても処理が終了する気配がありませんでした
>>775 そういうものなんですね
速度的にも普通に読み込むのが一番早いようだし
公式にここまではっきり書いてあると、この方法でいいのだと安心出来ました
どうもありがとうございました
300万行とか膨大な桁を前提にするなら、もっと効率的な方法はあると思うけどね。
たとえば?
tailコマンドをwshで叩く
300万行試してみた。1行は小さめ。
>>770 で10秒くらい。
ADODB.Streamでファイルの最後から1文字ずつ読んで、
2行確保したら終わり、だと一瞬だった。
tailでも0.2秒だったわ。
>>783 おおざっぱでいいからサンプルで教えてくれ。
objexec = objshl.Exec("\"" + objfso.GetParentFolderName(WSH.ScriptFullname)+"\\tail.exe" + "\"" + " -2 \"" + filetxt +"\"");
do{WScript.Sleep(100);}while(objexec.Status==0);sret=objexec.stdout.ReadAll();WScript.Echo(sret);
var start = new Date().getTime(); var filename = 'list.txt'; var Stream = WScript.CreateObject('ADODB.Stream'); var c, text = '', lf = 0; Stream.Type = 2; Stream.Charset = 'Shift_JIS'; Stream.Open(); Stream.LoadFromFile(filename); var i = Stream.Size - 1; read : for ( ; i != -1; i-- ) { Stream.Position = i; c = Stream.ReadText(1); if ( c == '\r' ) continue; if ( c == '\n' ) { switch ( lf ) { case 0 : break; case 1 : last1 = text; text = ''; break; case 2 : last2 = text; break read; } lf++; } else { text = c + text; } } Stream.Close(); WScript.Echo(new Date().getTime() - start + 'ミリ秒'); WScript.Echo(last2); WScript.Echo(last1);
改行を色々対応させると更にめんどいね。 普通に1行ずつ読んで負担にならない程度のファイルサイズなら、 保守性とかでそっちのがいいよ。
こりゃ早いわ。 これくらい早いと 後ろから大雑把に500バイト読み込んで 適当な処理してもいいかもしんないね。 非常に参考になった。ありがと。 var i = Stream.Size - 500; Stream.Position = i; sAr=Stream.ReadText(500).split("\n"); Stream.Close(); WScript.Echo("-2 = " + sAr[sAr.length-3] +"\n" + "-1 = " + sAr[sAr.length-2] +"\n" + " 0 = " + sAr[sAr.length-1] +"\n" + (new Date().getTime() - start) + 'ミリ秒');
実行一つでマルチスレッドで通信したい。 xmlhttp.open("POST", "〜〜", false); で第3引数をfalseにすると xmlhttp.onreadystatechangeで受けるときもあるが、受けないときもあって終了してしまう。 第3引数をtrueにすると非同期になるらいしけど、 xmlhttp.onreadystatechangeで受ける前に処理が終わって終了してしまう。 どうしたらいいんだろう。WSHでtrueにする使い方ってもしかして使えない?
WSHでマルチスレッドはちょっと難しいんじゃないすか? スクリプトを同時に複数起動する(マルチプロセス)なんて のは何ともないけど、1つのプロセスでスレッドを複数 立ち上げたいならPerlの方がいいと思いますけど。
wsh で使えるかどうかは知らないけど、 マルチスレッドライブラリ Concurrent.Thread とか。
マルチスレッドが必要?
そうだな、我慢するか。ありがと
>>788 XHRに限れば
通信完了後にコールバック関数が呼ばれるようにして
通信中にごにょごにょはできるけど、
その落としたデータを処理したいなら
結局は通信完了後じゃないと触れない
マルチスレッド以前の話だと思うが
echoやpopupでは一つのウィンドウに一つのテキストしか表示できないけれど 一つのウィンドウを使って刻々とテキストを更新して表示する方法はないですか
msagent ie hta inputboxに貼り付け powershell
コマンドプロンプト(cscript)で動かす
自分は拡張子jse、vbeをCscriptで動かすようにしちゃったよ。暗号化なんて使わないし。
ウィンドウ操作系のCOM使えば既存ウインドウのテキスト変更はできるから、 うまく組み合わせればどうにかなるんじゃね。
HTAがいちばんかんたん
ieのstatustextがいちばんかんたん
802 :
名無し~3.EXE :2010/01/17(日) 10:04:44 ID:Ix5w7yDX
803 :
名無し~3.EXE :2010/01/17(日) 10:05:26 ID:Ix5w7yDX
Dim FI Dim FO Dim Obj Dim beforeStr Dim afterStr Dim FileName Dim R FileName = "C:\Windows\system.ini" beforeStr = "MailBox" afterStr = "MailBox=d:\mailbox" Set Obj = CreateObject("Scripting.FileSystemObject") Set FI = Obj.OpenTextFile(FileName,1,0) Set FO = Obj.OpenTextFile(FileName & ".bak",2,True,0) While Not FI.AtEndOfStream = True R = FI.ReadLine If Left(R,Len(beforeStr)) = beforeStr Then R = afterStr End If FO.WriteLine (R) Wend FI.Close FO.Close Obj.DeleteFile FileName Obj.MoveFile FileName & ".bak",FileName Set Obj = Nothing Set FI = Nothing Set FO = Nothing Set Param = Nothing WScript.Quit よろしくおねがいします
'FileSystemObjectではUTF-8の読み書き出来ない。ADODBを使う。 '置換は正規表現でやった方が楽。 'C:\Windows\system.iniを読み込んで全置換してout.txtに書き出す例 Dim inStream, outStream Dim regEx, Match, Matches, rep Set inStream = CreateObject("ADODB.Stream") Set outStream = CreateObject("ADODB.Stream") Set regEx = New RegExp regEx.Pattern = "\r\nMailBox" regEx.Global = True regEx.IgnoreCase = False inStream.Open inStream.Charset = "UTF-8" inStream.LoadFromFile "C:\Windows\system.ini" outStream.Open outStream.Charset = "UTF-8" str = inStream.ReadText(-1) rep = regEx.Replace(str,vbCrLf & "MailBox=d:\mailbox") outStream.WriteText rep inStream.Close outStream.SaveToFile "out.txt", 2 outStream.Close
さっきのじゃファイル先頭は置換されなかったわ。 > regEx.Pattern = "\r\nMailBox" regEx.Pattern = "(^|\r\n)MailBox" > rep = regEx.Replace(str,vbCrLf & "MailBox=d:\mailbox") rep = regEx.Replace(str,"$1MailBox=d:\mailbox")
> FileName = "C:\Windows\system.ini" > Set FO = Obj.OpenTextFile(FileName & ".bak",2,True,0) > Obj.DeleteFile FileName > Obj.MoveFile FileName & ".bak",FileName この辺Vista以降ならただの管理者じゃ動かないぞ
807 :
名無し~3.EXE :2010/01/17(日) 22:34:26 ID:Qq5UNecS
>>804 早速のご教授ありがとうございます。ぶしつけながらもうひとつ質問があるのですが、、、
置換したい文字列はMailbox→Mailbox=d:\mailboxだけでなく
"Dustbox"→"Dustbox=e:\dustbox"もあるとしたらどうでしょうか?
3行目から最後尾までコピーしてつなげるのでは二つ目の処理がされませんでした
Mailbox用、Dustbox用と二つ用意してやるところを一枚のVBSファイルで行いたいのです
重ね重ねで恐縮ですがよろしくおねがいします
宿題丸投げ? ヘルプのRegExpオブジェクトの所位見ろよ… ぶっちゃけ書き加えるのは2行位だよ。
809 :
名無し~3.EXE :2010/01/17(日) 23:30:26 ID:Qq5UNecS
>>808 お叱りごもっともです、今Googleで調べてるところです
Set regEx2 = New RegExp
regEx2.Pattern = "Dustbox"
rep2 = regEx2.Replace(str,"$1Dustbox=e:\dustbox")
outStream.WriteText rep2
↑現段階での知識ではこれくらいしか思いつかない・・・
しかも動かないw
Replaceに使う正規表現と置換後をArrayに入れておいて回せば追加にも強いだろう
てか
>>804 だと1行目を置換したいとき無理じゃね
Multilineもつけて^$使え
>>810 そこは
>>805 ですぐ修正入れてるって
1レス後位見てくれよ('A`)
>>809 新しいオブジェクト作る必要無い。
パターンだけ変えて、前の置換結果にまた置換実行するだけ。
ヘルプ見てメソッドの引数と戻り値の意味位調べようぜ。
>>810 ちなみにMultilineはVBScriptには無いのよ。
ごめんあった。ヘルプに無いだけだったorz しかしMSDN見ててもVBScriptに関するmultilineのドキュメント見つからん…
815 :
名無し~3.EXE :2010/01/18(月) 22:17:50 ID:TN5cwPWT
とりあえず
>>804 に↓をつなげることで目的の結果は得られましたので質問を終了したいと思います
inStream.Open
inStream.Charset = "UTF-8"
inStream.LoadFromFile "out.txt"
outStream.Open
outStream.Charset = "UTF-8"
str = inStream.ReadText(-1)
regEx.Pattern = "(^|\r\n)DustBox"
regEx.Global = True
regEx.IgnoreCase = True
rep = regEx.Replace(str,"$1Dustbox=e:\dustbox")
outStream.WriteText rep
inStream.Close
outStream.SaveToFile "out.txt", 2
outStream.Close
引数なんかは一応検索で調べたのですが初心者の私としてはこれで上出来としたいところです・・・
これをきっかけにスクリプトの勉強を始めました
今回はおつかれさまでしたw
wshだって98以降限定じゃん
>>817 それで困ることはもうほとんどないだろ。
リネームツールとかUWSCとかでWSH使うから無いと困る。 powershellって他のツールからの利用ってある? 他から利用出来ないなら要らない子なんだが。
>>820 powershell.exeを起動するだけだぞ?
wsh(=jscript)ならjavascriptとかぶるとこも多い。 htmlや、ほかの似た文法のScript言語でも応用が利く。 powershellってどこまで他に応用聞くんだろ? 潰しが利くなら覚えよう思うんだが、背中押してくれw
やめとけ
ADSI(VBS+LDAP)で、ADのコンピュータのoperatingSystemを取って配列にぶっ込んだ後、 For each NextループでwriteLineするとVistaのとこまで来たら落ちる。 データ型はXpもVistaもDirectorystringなんだけど、VistaTMと、TMが右肩に ついてるから? 明日もうちょっと時間取って調べてみるつもり。
//U
>>825 ありがとう!今頃なんのことかわかったよ。
とりあえず値はUnicodeだとわかったので、明日また試してみる。
827 :
名無し~3.EXE :2010/01/22(金) 10:27:46 ID:fhX6W0TP
潰しとか応用とか互換性とか言ってたら新しい物は生まれて来ない 3行で書けるんなら、3行で書いちまった者勝ちだろ?
PowerShellはごく一部のマニアだけが覚えておけばいい技術。 javascript=jscriptは時間の無い人が、出来るだけ多くのリターンを 得るために使う技術。 極めたい人はPowerShellに時間と金を投資するといい。 きっとそれなりの見返りがあるはず。
>>768-787 powershellなら1行で書けるのにwshでちんたらやってられるか?
get-content $filepath | select-object -Last 2
ほとんどの環境で標準装備ってのならいいんだけどね。 環境揃えて…っていうんならpowershellじゃなくても他にも色々あるわけだし。
Windows2000あたりから標準装備なら状況はちがったんだろうけどなぁ。残念。
MS-DOSあたりから標準装備なら状況はちがったんだろうけどなぁ。残念。
MS-DOSからおなじみのバッチファイルは 今流行ってないけどな。
834 :
 ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ :2010/01/31(日) 22:38:01 ID:CcQLQSx7
∧_∧ ヒソ… <丶`∀´> ∧_∧ / \/ )<丶`Д´>ウンウン、さすがは我が同胞。鋭いニダ! / \___// \ __ .| | / /\_ _ \ \_____ \  ̄ ̄ ̄ ̄ ̄ ̄(__ノ \ \__) \ ||\ \ .||\ \ ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
msgboxなどのダイアログ系は作業を中断されるので他の方法を考えています マウスポインタのデザイン変更はVBSで可能でしょうか?
VBAでも使ってろよと思う
D:\aaaaa\bbbbb\cccccを環境変数%abc%として登録して D:\aaaaa\bbbbb\ccccc\d.exe を%abc%にカレントを移してから実行したいのですが CurrentDirectoryで環境変数ってどう使ったらいいのでしょうか?
質問の意味が読み取れないけど、 環境変数の展開ならWScript.ShellのExpandEnvironmentStringsとか
>>837 こういうことでいいのかな
Set objShell = WScript.CreateObject("WScript.Shell")
Set colEnv = objShell.Environment("User")
colEnv.Item("abc") = "D:\aaaaa\bbbbb\ccccc" '環境変数%abc%に登録
objShell.CurrentDirectory = colEnv.Item("abc") '%abc%にカレントを移動
objShell.Run(".\d.exe") 'd.exeを実行
>>835 スクリプトの終了は知りたいけどポップアップはうぜぇ、ということ?
スクリプトでBeep音を鳴らすことなら出来るよ
>>839 ありがとうございます
>objShell.CurrentDirectory = colEnv.Item("abc") '%abc%にカレントを移動
こっちにもItemが必要なことに気が付きませんでした
おかげさまで希望の動作になりました
>>838 ありがとうございました
IEを使ってファイル名を得るスクリプトを取りあえず検索して 次のようなのを見つけましたが 初期のフォルダを設定する方法が分かりません どうやったらいいのでしょうか? Set Ie = CreateObject("InternetExplorer.Application") Ie.Navigate( "about:blank" ) Do While Ie.Busy Wscript.Sleep 10 Loop Ie.document.getElementsByTagName("BODY")(0).innerHTML = "<INPUT id=FilePath type=file>" Ie.document.getElementById("FilePath").click if ie.document.getElementById("FilePath").value = "" then WScript.Echo "ファイルは選択されませんでした" WScript.Quit end if WScript.Echo ie.document.getElementById("FilePath").value Ie.Quit Set Ie = Nothing
初期のフォルダを設定する type=file でぐぐれ
どこかに覚えているみたいだから、レジストリを検索して、書き換えれば?
>844 hta の雛形に付け加えたので異様に長くなってしまったけど 取りあえず初期値がカレントのフォルダになる hta file はできた カレントじゃなくて自由なフォルダになるのはまだ分からない <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>雛形</title> <script Language="VBScript"> <!-- Option Explicit ' 変数に対して、明示的な宣言を強制します。 dim exit_proc_flag initialize_all '**************************** 全体的な構成 ******************************** sub initialize_all exit_proc_flag=false end sub
'終了処理 sub exit_proc msgbox Document.testfrm.example.value exit_proc_flag=true end sub sub HtaFinalExit if not exit_proc_flag then exit_proc end if end sub Sub all_exit_OnClick '<OK>ボタンのOnClickイベントプロシージャ exit_proc window.close End Sub '****************************************************************************** --> </script> </head> <body onUnload="HtaFinalExit()"> <FORM name="testfrm"> <input type="file" name="example" size="90"> <br> <input type="button" name="all_exit" value="終了"> </body> </FORM> </html>
それってカレントのフォルダなのか? htaの場所じゃないのか?
>>848 hta の場所って意味で言ってる
言い方が曖昧だったかな
そんなことないよ 明確に間違ったこと言ってるだけだよ
FileOpenDialog使えば?
wshShellのRunをコードに書いて保存しようとしただけでトロイ認定されてソースが消えたお・・・・
まぁ世の中の9割以上の人には、wshをとろい認定しても問題は無いんだけどな 一部のソフトのインスコ・設定でwsh・hta使ってるのも見なくもないけど
VS2008 Express Editionのインストーラが HTAを使ってるぜ。
ie.navigateみたいなことって他のブラウザでもできますか? マイクロソフト以外のブラウザはそもそもどうやって情報集めたらいいの?
できるものもあればできないものもあるだろな
COMインターフェイスがなきゃダメだから クロスプラットホーム対応のブラウザにWindows版だけ実装することは考えにくい
コントロールしたいときは我慢してIEを使えってことですかね?
無理に使わんでもええよ
Sleipnirなら、COMインターフェイス作っているぽいよ 他は地道にググるか、自分でoleviewとかで確認してくれ もし、起動させて特定のURL開くだけなら Shellで起動時にコマンドライン引数で指定するのが簡単 できないブラウザもあるかもしれないけど
男は黙って SendKeys
test
いまさらながら 64bits版 windowsにもwshって入ってるの?
入れない理由がないし実際入ってる
失礼しました。
WSHではADODB.Streamを使うことでバイナリファイルを読み込み、 バイナリファイルの中に潜んでいる文字をテキストファイルに 保存できると知って、今日の夕方に入門書を買ってきました。 最終目標はnamazu用のfilterを自作したいと思ってます。 よろしくお願いします!
だいたい出来ました、ありがとうございました!
これは新しい自己解決のパターン・・・
入門書ってなにだろ?
大型新人キター
871 :
名無し~3.EXE :2010/03/08(月) 10:01:54 ID:qhL2N4DK
JSでTerminateを使いプロセスを強制終了させていますが、 強制ではない方法で終了させることはできないでしょうか?
「ユーザー名およびパスワードの保存」画面で管理される ユーザー、パスワードの情報をwshで追加、削除する事はできますか? (「ファイル名を指定して実行」から「control keymgr.dll」を実行して表示する内容) 別ドメインのサーバの共有フォルダにアクセスしたいのですが、 ネットワークドライブを設定する方法では、再度パスワードを入力する必要がありました。 この画面で登録しておくと再入力せずアクセスできたので 限られたユーザーにwshで配布したいと考えています。
>>871 JSにTerminateがあるのか?VBSにはあるが?
var WMIService = GetObject('winmgmts:' + '{impersonationLevel=impersonate}!\\\\' + computer + '\\'+computer_name+'\\cimv2'); var processList = WMIService.ExecQuery('Select * From Win32_Process Where Name = "calc.exe"'); var processEnumerator = new Enumerator(processList); while (!processEnumerator.atEnd()) { processEnumerator.item().Terminate(); processEnumerator.moveNext(); } こんな感じで使用しています
>>874 それはJSのでなくWMIのWin32_ProcessのTerminateだろ
それなら"taskkill /pid " & processEnumerator.item().IdをCreateすればよい
ありがとうございます。 出来ました。
VBSをCOM化して実行したら「メモリーが不足してプログラムを実行できません」と出ました。
878 :
名無し~3.EXE :2010/03/09(火) 11:20:33 ID:6ivRnBQq
プログラム板のwshスレからこっちに流れてきました。マルチごめん。 WMI使ってリモートPCのIP変更したいんだが、変更後にRPCエラー待ちが発生して自動処理できない。 エラー待ち時間を短縮するとか、なんかいい方法知ってる人がいたら助けて。 On Error Resume Next strComputer = "10.1.1.1" Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") For Each objNetAdapter in colNetAdapters errEnable = objNetAdapter.EnableDHCP() Next
>>878 相手にスクリプトを産み付けて自分のプロセスとして処理させるってのはどうだ?
pstoolsの出番かも知れないが。
>>879 産休です。明日会社のサーバで試してみます
ctrlキーが起動時に押されていたら処理を替えるようにしたいんですが、どうすればいいですか?
スクリプトからシフトキー類の押し下げ状態を調べる。
884 :
名無し~3.EXE :2010/03/11(木) 19:28:02 ID:z4Y3vV8Y
>>880 WshController使ったリモート実行じゃろうか?
これは試していたんだが、「致命的エラー」が出てNGだった。
リモートPCのレジストリを設定した後、「wscript -regserver」を実行したんだがやっぱりダメだった。
「pstools」はしらんかった。ちょっと調べてみる。
うまくいったら結婚してあげてもいい。
885 :
名無し~3.EXE :2010/03/12(金) 09:53:05 ID:N9db+s4y
WSHオワタ・・・
PowerShellの概要 − @IT
http://www.atmarkit.co.jp/fwin2k/operation/pshsys01/pshsys01_01.html 例えば、テキスト・ファイルに現在時刻を書き込むという処理をWSHスクリプト(言語はVBScriptを使用)で書くと次のようになる。
Option Explicit
Dim objFSO, objTextStream
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.CreateTextFile("test.txt")
objTextStream.WriteLine Date & " " & Time
objTextStream.Close()
Set objFSO = Nothing
Set objTextStream = Nothing
このように、ファイルの読み書きというシステム管理では基本となるようなことでも、
COMオブジェクトを呼び出すなど非常に多くの記述が必要になる。
ところがPowerShellで同様の処理を書くと1行で済む。
Get-Date | Set-Content test.txt
バッチファイルでも1行で済むが? echo %date% %time% > test.txt
887 :
名無し~3.EXE :2010/03/12(金) 13:23:01 ID:nsgGjLNb
>>884 自己レス。
psexec使ってのwsh送り込みはできなかったが、batファイルならいけた。
これなら10秒ほどのタイムアウト待ちなのでなんとかなりそう。
>>880 無限の愛を貴方に。
>886 その手法は確かWindows95/98/Me/NT4.0では使えないんだったな。
>>885 そういうのって例えば、
日付の書式をちょっと変えて書き込みたいな・・・
とか考え出すとあっという間にコード量の差がなくなってしまうからなぁ。
>>886 つまり、それをWSHから呼び出せばもっと簡潔にできるわけだな!
・・・って、件のWSHのスクリプトも宣言とか開放を省略すればもっと行数減るなw
CreateObject("Scripting.FileSystemObject").CreateTextFile("test.txt").WriteLine Date & " " & Time 1行で済みましたww
無駄口は Now も知らん(忘れた)のか・・・・
894 :
名無し~3.EXE :2010/03/14(日) 13:54:28 ID:lYWxxKnc
1時間ごとにランダムに一曲再生するというコードを動かしているんだけど その時WMPが既に何か再生中だったらキャンセルするというコードはどう書けばいいですか?
プロセスのCPU使用状況を調べてwmpのCPU使用率ゼロを判別する
つまんね
897 :
名無し~3.EXE :2010/03/14(日) 18:30:33 ID:voCmsmxq
WSHから特定のアプリケーションにSendmessageできる公開されたDLLってあります? または直接EXEを起動したり、regsvr32登録されてないDLLの関数を呼び出す方法はありませんか? 自作のDLLがRegsvr32で登録できずCreateobjectできません
powershell
ActivexPosh
AutoItXの各種メソッドが128文字以上扱えるようになってたヽ(´ー`)ノ
スレ違い
WSHのCMD化の方法を教えてください。
js2cmd
IEの右クリックからJavaScriptを呼び出し、現在閲覧しているページのタイトルを所得することは できるんでしょうか?右クリックする対象はページ上の画像を考えてます。
できるがスレ違い ぐぐれ menuext
906 :
904 :2010/03/28(日) 10:22:48 ID:mhne3zrz
レジストリ書き足して、htmにJavaScript記載して画像の情報は取得できました。 閲覧中のhtmlのタイトルを取得する方法はあるのかなと思いまして、この場合のオブジェクト対象は画像なんですよね? 現在閲覧中のページのタイトルを取得、みたいな関数があれば
>>906 external.menuArguments.document.title
スレチだから他行け
>>907 できました、ありがとうございます。
WSHで合ってると思ったんですがスレチだったんですか? 理解不足ですみません
閲覧中のウェブページをwshを使って自分のアドレスに送りたいのですが どういう風にしたら良いですか?
追記。アドレスだけじゃなくてページの中身そのものをメールとして送りたいということです。
回答ありがとうございました。そのページを参照にちょっと頑張ってみます。
ショボくてすまんが[windows]+[←]or[→]キーで使えるwindows7の機能は、 どうやってスクリプト書いたらいい?
つAHK
今はNILScriptの方がいいんじゃない?
なにそれ
918 :
名無し~3.EXE :2010/04/11(日) 23:11:58 ID:1lpeBxiT
NILは2000では動かないよ。XP32bitだけだな。 ただAutoItXやSFCMiniなどのDLLを入れたあとのWSH環境に比べるとどうなんだろうね? マニフェストや後付のDLLを使わずにDmonkeyやUWSC、AutoHotKey以上のことをやりたいらしいが。 javascriptの文法でキーカスタマイズからアプリ制御までなんでも出来るスクリプト環境を つくろうってのは正しい方向性だと思うけど。
ほう
920 :
名無し~3.EXE :2010/06/03(木) 17:53:48 ID:iUihJw3M
var ie;var url,login_id,login_pw;function wait() { while(ie.Busy || ie.ReadyState!=4){ WScript.Sleep(100); }} function browser() { ie=new ActiveXObject('InternetExplorer.Application');ie.Visible=true;ie.Navigate(url);wait(); } function post() { ie.document.forms[0].exec.click();wait(); } function reload() { ie.Navigate(url);wait(); } try{ url='★';browser();for (i = 0; i < 5; i++) { post();reload();}} catch(e){ } finally{ ie.Quit(); } これのtry{}にあるurlに書かれたURLに飛んだあと別のURLに飛ぶようにできないのだろうか var ie;var url,login_id,login_pw;function wait() { while(ie.Busy || ie.ReadyState!=4){ WScript.Sleep(100); }} function browser() { ie=new ActiveXObject('InternetExplorer.Application');ie.Visible=true;ie.Navigate(url);wait(); } function post() { ie.document.forms[0].exec.click();wait(); } function reload() { ie.Navigate(url);wait(); } try{ url='★';browser();url='★';for (i = 0; i < 5; i++) { post();reload();}} catch(e){ } finally{ ie.Quit(); } これだと飛ばぬ・・・
>>920 にあともう一つ
IEタブを2つ表示させて 1つ目のタブにURL1を
2つめのタブにURL2を飛ばしたいけどどうしたらいいのかわからない
>>922 それvbsだよね?
JavaScriptでは無理なのか?
言語には関係ない
ExecWBでソースの表示ってできない?
ブラウザそのものにはソースとかないしなぁ
>>925 IOleCommandTarget::Exec
JScriptをコンパイルしたいんだが、 WScriptオブジェクトなんてしらねって弾かれてもうた(´・ω・`) Wscriptオブジェクトを引っ張ってくる方法か、 QUITとADODB.Streamの代替手段をおしえてくだせえ
SendKeysで今までWebブラウザや2chブラウザOffice関連やその他の色んなソフトで自動化に成功してきましたが、 ゲームのエミュレータにだけはなぜか、ウィンドウをアクティブにした状態であってもキーを送れないです。(反応しないので送れているかわからない) nnnesterやsnes9kやMAMEなどで試しましたが、どれもSendKeysで送ったキーでゲーム内のキャラが動いてくれませんでした。 エミュレータは(SendKeysが可能な)他のアプリケーションとは入力の受付方法が違うのでしょうか またそのようなソフトに対してはWSHではキーを送って操作することは不可能ですか?
調べたところ、SendKeysの問題ではなく、アプリケーション側のDirectInputの方の問題でした。 解決したのですみません。お邪魔しました
win7でIE起動しようと思ったら動かない Option Explicit Dim objIE Set objIE = CreateObject("InternetExplorer.Application") Set objIE = Nothing
そりゃだめだ
>>933 unzip32.dllを実行する.exeってなかったっけ?
そいつに引数を渡す、つまり単純なWScript.ShellのRunってのはダメなのか?
会社のPCとかで、DLLやexeを勝手に入れられない環境なのかも。 ところで、Win XPの標準機能でパスワード付きZIPって作れたっけ?
>>935 zipファイルをフォルダとして開いて、その中で右クリックして「パスワードの追加」を選ぶ
>Windows XP で圧縮 (zip) フォルダーを作成および使用する方法
>
http://support.microsoft.com/kb/306531/ja Shell.ApplicationのNameSpaceでzipファイルを開いて
InvokeVerbで出来ないかな・・・と思ったんだが、
どうも通常のコンテキストメニューじゃないっぽい。
というわけで漏れはあきらめて、7-zip.exe経由のスクリプトにした罠
SendKeysでできるならそれでいいじゃないか
>>928 var Wscript=new Object();
ScriptControlについて詳しく解説してるページはないでしょうか MSのページ以外で
はい
wsfにして動かしてるときに、 エラーが出ると行番号とエラーメッセージは出力されるんですが、 どのファイルでエラーになったのかわかりません。 <job> <script src="a.js" /> <script src="b.js" /> </a> たとえば↑のようなソースでエラーが出てもa.jsででたのか、 b.jsで出たエラーなのかわかりません。 どのファイルでエラーが起こったか簡単に出力させる方法は無いでしょうか。
942 :
名無し~3.EXE :2010/09/10(金) 01:26:27 ID:U54dr5It
WSHのJscriptのIDEってない?
途中で停止やキャンセルができるカウントダウンダイアログを実現するにはどうしたらいいのでしょうか。
HTAでいいやん
wsfからMSHTAにhtmlをぶち込んでTimerつかってダイアログを作ろうぜ。 wsfはテキストブロックが使えるんでjsで変数にぶち込むより楽だし。 <job id='main'><resource id='html1'><![CDATA[ <html><head><meta http-equiv=Content-Type content=text/html; charset=Shift_JIS> <title>wshjshta</title></head><script type=text/javascript><!-- resizeTo(320,240); --></script><script> main=function(){ ofso=new ActiveXObject('scripting.filesystemobject'); oshl=new ActiveXObject('WScript.Shell'); sarg1=oshl.Environment('process').Item('arg1');alert(sarg1); sval="こちらHTA。終了いたしますた!頂いた値は\n"+sarg1+"\nですね。お返しします。";}; writeval=function(s){ofso.GetStandardStream(1).Write(s);}; checkkeyEsc=function(){writeval(sval);self.close();}; </script> <body id=bodymain bgcolor=buttonface scroll=no onLoad=main();> <input id=btnesc type=button value=Esc name=btnesc style=width:48px;height:32px;position:absolute;left:4px;top:4px;> <script for=btnesc event=onkeypress>checkkeyEsc(event.keyCode);</script> <script for=btnesc event=onclick>checkkeyEsc(13);</script> </body></html> ]]></resource> <script> var oshl = new ActiveXObject('WScript.Shell'); oshl.Environment('process').Item('arg1')=WScript.ScriptFullname; var shtml=getResource('html1');//WScript.Echo("htmlのソースは\n"+ shtml); var oexec = oshl.Exec('MSHTA.EXE ' + "\"" + "javascript:new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0).ReadAll()" + "\""); oexec.StdIn.WriteLine(shtml);oexec.StdIn.Close();var sret=oexec.StdOut.ReadAll();WScript.Echo(sret); </script></job>
createobject("wscript.shell").run "timeout.exe /t 10",,true
人がいないので、wshの宿題丸投げも受け入れたらどうか?
というかwshの宿題なんてあんのか
会社じゃOSに最初から入っている物しか使えないからwindows2000以下がなくなるまで使えないなー
950
ActivePythonを2.6.4から2.6.6にバージョンアップしたらcscriptで動かせなくなりました。 Pythonがスクリプトエンジンとして認識されてないのは分かるんですが、 どうしたら登録できるのでしょうか? > cscript echo.pys //X Microsoft (R) Windows Script Host Version 5.7 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. pythoncom error: PythonCOM Server - The 'win32com.server.policy' module could not be loaded. Traceback (most recent call last): File "C:\ActivePython26\lib\site-packages\win32com\__init__.py", line 5, in <module> import win32api, sys, os ImportError: DLL load failed: 指定されたモジュールが見つかりません。 pythoncom error: CPyFactory::CreateInstance failed to create instance. (80004005) CScript エラー: スクリプト "C:\ActivePython26\src\echo.pys" のスクリプト エンジン "Python" が見つかりません。
レジストリに記述されているアプリケーションを起動させたいです。 下記行がレジストリに記載されています。 "FeliCa Launcher"="\"C:\\Program Files\\Sony\\FeliCa Launcher\\FeliCaLauncher.exe\" /AutoStart" 上記を削除して Feli.vbsというファイル名で ' FeliCaランチャー の起動 Set objShell = WScript.CreateObject("WScript.Shell") WScript.Sleep(1000) objshell.Run """C:\Program Files\Sony\FeliCa Launcher\FeliCaLauncher.exe""" を記述しスタートアップから起動しました。 レジストリからの起動ではコンテキストメニューは日本語表示なのですがvbsから起動すると英語になってしまいます。 どこがいけないのでしょうか? 直接"FeliCaLauncher.exe"を起動した場合は日本語表示です。
objShell.CurrentDirectory = "C:\Program Files\Sony\FeliCa Launcher" がいるんじゃね?
currentdirectoryだべ
955 :
952 :2010/11/03(水) 18:43:18 ID:7kuL4xtp
よーわからんが、そんな事で言語設定変わっちゃうんだ?
Sonyだからな。
設定ファイル(.ini)がcurrentdirectoryにあるとか
言語リソースDLLをカレントから読むとか
デフォルトexeと同じフォルダから読むんじゃ?
まじかよ。ゼロデイ来ちゃったー
Popupの行
rc = objShell.Popup(strMsg, 10,, vbOkCancel) 上の関係の行を無効にしたら出来ましたありがとうございます。
そのソースうつくしくないな
ファイル名のリストをソートしたいと考えているのですが、そういう命令もしくはいいアルゴリズムはありませんでしょうか
new Array().sort()
システム環境変数のpathにカレントディレクトリーのパスを加えたいのですが
環境変数(Path)を取得して CurrentDirectoryを取得して PathにCurrentDirectoryを加えて設定するだけの話?
うん それだけの話
vbsやJScriptで各端末のスタートアップスクリプトにhoge.batを自動追加したいんですが 何か手はありますか?
部下に、各端末のスタートアップスクリプトにhoge.batを追加しろと、命令する。
ローカルからなら簡単だけどリモートからだと一気に難易度最高になるね 当然セキュリティ上そうでなきゃ困るけど
>>973 俺が最下位の部下だ!
>>974 各端末の最高権限はあるんですが
ローカルだとどんな感じでやるんですか?
ローカルだとスタートアップのフォルダにそのバッチをコピーすればいいだけじゃん
977 :
名無し~3.EXE :2010/12/16(木) 22:57:17 ID:8L972klx
>>976 じゃあリモートでも同じようにスタートアップスクリプトのディレクトリにbatブチ混むだけって事になるけども
リモートからスタートアップフォルダにバッチぶちこむってのは ウィルスがよく使う手法だからな
979 :
名無し~3.EXE :2010/12/18(土) 03:41:26 ID:nzv8VXx8
IEコンポーネントでブラウズしたサイトの画像を解析したいのですが、 どのようにすれば画像データを取得できますか? 画像のURLじゃなくて、中身を調べたいと思っています。
それはファイルヘッダ(≒HTTPレスポンスヘッダ)を見たいとかEXIF情報を得たいとか、っつーことか? ローカルファイルでそれをどうやるかが分かるなら、どうすりゃいいか分かりそうなもんだが。
ほ
引数のファイルパスと設定ファイルを突き合わせて このパスならこのアプリ、この拡張子ならこのアプリ、そうじゃなかったらデフォルトの関連付けで実行 みたいなスクリプト作ったらちょっと便利だ。
誰か次スレたのむ
984 :
979 :2010/12/18(土) 20:28:31 ID:nzv8VXx8
見たいのは、画像のピクセルデータですね。 ファイルフォーマットとか画像の扱い方自体は分かってます。 IEコンポーネントから取得する方法を知りたいんです。
宿題丸投げOKもテンプレ入りでな
>>984 以前、ローカルファイルの画像の縦横の大きさを取得したくてIEコンポーネントで何とかなるだろうと思って色々調べたけど
手掛かりすら分からなくてImageMagickに逃げちゃった
ho
コマンドのテストするときにvbsファイル作って実行するの面倒なんだけど、dosプロンプトでコマンド直打ちして結果が見れる方法とかないですか?
WScript.Echo は Cscript.exe で実行すると標準出力になる
iscript.vbs execute wscript.stdin.readall を作って、 cscript iscript.vbs 直打ち ^Z
ume
994 :
979 :2010/12/19(日) 05:26:27 ID:fKvLkkZ+
captcha画像なんで、URLみて再度取りに行こうとすると値が変わるんですよね^^;
IEコンポーネントで、JavaScriptのON/OFFを切り替えるにはどうすればいいですか?
ume
ume
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。