>>1 乙
WSHやVBSずっと消えないで欲しい
というか消えたら困る
VB6よりは長生きできるさきっと
javascriptが残るならjscriptも残るだろうし、wshも当然残ることになる。そうなるとvbscriptも残るし、htaが残るのは当然だ。
ある日、次のバージョンのWindowsでは対応しないことになって終わる
だんだん使いにくくなるな scriptcontrolはvistaで消えた <input type=file>はie8で使えん ...
ここの人たちは PowerShell は使ってる?
>>2 WSH消えたら困る人ってあんまり見かけないけど
案件でWSH酷使してるんか?
>>7 いままで標準装備のWSHで処理しなかった人たちは、今後標準装備になるPowerShellも使わんだろうな。
>>7 俺は個人だよ
msgboxが好きなので(ホントはpopupメソ)
powershellは未だ手付かず
WSHから自由に.netのクラスライブラリ
呼び出せるといいんだけどね
そういうcomを作ればよい
com?やだよメンドクサイ 標準装備で出来ることがWSHのメリットなのにさ。 WSHからSystem.Collections.ArrayList呼ぶことなら結構あるけどな。
System.Collections.ArrayListはcomから呼べるように特別に作ってあるのか それとも、ほかのクラスもレジストリに書けば呼べるのか?
で、どっち?
>>13 ここまでまとめた人が居るんか、すごいな
でもやっぱりあんまり使えなそう
結局powershell覚えて出力をWSHで受け取るとか
本末転倒だなw
PowerShellでもWin32API使いにくいからな FindWindowやSendMessageが標準環境で簡単に使えるようにならんかな
スクリプト言語の中にはC関数を直接呼び出せるものがあってな
そんなもん、いくらでも有るが
なんでvbscriptは
こんなにかわいいの?
シフトキーを押しながらの操作はWSHでどうするの?
WSHを実行するのにシフトキーを押す必要はありません。
なるほど
>>21 copyhereやmovehereみたいに用意されてるものもあるが
ショートカットの貼り付けや
invokeverb "delete"みたいに用意されてないものもある
ないものはあきらめてほかの方法さがせ
なるほど
26 :
デフォルトの名無しさん :2009/06/10(水) 15:44:18
mailto:sage
getobject("hoge.xls")して、それが新規インスタンスか、 既存のインスタンスか、区別する方法は?
普通にやれば良いだけでは?
抽象的な質問なのですが、wshでアプリケーションを操作する・・・では無くて wshでアプリケーションを作る事は可能ですか?
GUIつきのアプリは厳しいんじゃないか?
31 :
デフォルトの名無しさん :2009/06/10(水) 23:58:39
そのためのHTAです。
<SCRIPT language="vbscript"> str = "Hello World!!" </SCRIPT> <BODY> <P><変数strを、ここに出力したい。></P> </BODY>
w
<BODY> <P>Hello World!!</P> </BODY>
>>27 ないんじゃないか
getobjectする前に排他オープンしてみるとか
<html><BODY><!-- NHKニュース速報すくりぷと.hta --> <div align="center"><i>NHKニュース速報 </i><span id =span1></span><span id =span2></span></div></BODY> <script language=vbscript> Window.ReSizeTo 480,360 Sub Window_onLoad() span2.innerhtml="<font size=1> アナログ</font>" For iii = 0 to 10 span1.innerhtml = "日経平均、" & iii & "万円台突破" createobject("WScript.Shell").Run "%COMSPEC% /c ping -n " & 1 & " 127.0.0.1>nul", 0, true next end sub </script></html>
<html> <body> <!-- 完璧すぎる.hta --> <p>変数strを、ここに出力したい。</p> <span id =strspan></span> </body> <script language=vbscript> sub window_onLoad() str = "Hello World!!" strspan.innerhtml = str end sub </script> </html>
>変数strを、ここに出力したい。 といってるくせに違うところに出してどうする?
>>37 setintervalかsettimeout使えよ
getobject("hoge.xls") と getobject("hoge.xls","excel.sheet") の違いはなんだろう?
,"excel.sheet"があるかないかの違い。
ハズレ
Active にするオブジェクトを指定してるんじゃなかったっけか?
どちらもWorkbookオブジェクトが取れる
getobject("hoge.xls") は新規と既存がとれるけど getobject("hoge.xls","excel.sheet") は新規のみだろ getobject("","excel.sheet")がcreateobjectなのはその1例だろ
exec.vbs createobject("wscript.shell").exec("notepad") を作って wscript exec.vbs|more とすると、wscriptは終了してるのに、notepadの終了を待ちます。 なぜか、わかる人いますか?
C:\>notepad|more
createobject("wscript.shell").run("notepad") だと待たないからrunとexecの違いのなにかだろ
start /b /wait notepad|more start /b notepad|more パイプがinheritされて閉じられてないみたいだな
50 :
デフォルトの名無しさん :2009/06/22(月) 18:45:55
作業の自動化ができる、って具体的に何を自動化したいの? 連投スクリプトとかできるの?
それはお前さん次第さ
52 :
デフォルトの名無しさん :2009/06/22(月) 19:42:21
明日の会議で自動的に受け答えしてくれる?
それもお前さん次第さ
54 :
デフォルトの名無しさん :2009/06/22(月) 19:59:47
俺の代わりに飯食ってきてくれるか?いま手が離せない
55 :
デフォルトの名無しさん :2009/06/22(月) 20:05:23
それはまた別の話
56 :
デフォルトの名無しさん :2009/06/22(月) 20:36:12
じゃあ俺の心の隙間を埋めてくれるのかい?
埋め
WSHにてインストールされているプリンタの一覧を取得する方法はありますか?
あります
ありがたい
WSHで現在アクティブなウィンドウを取得する方法ってありませんか? 最前面に来て使用しているであろうアプリを調べたいのです。
ない win32api使え
SFCminiとAutoitXを入れましょう。これでWSHからwin32apiも使い放題。window操作もやりたい放題。
66 :
63 :2009/07/07(火) 00:55:00
>>64 、65
ありがとうございます。調べてみます。
ネットで調べてうすうすAPIというものを使わないと無理そうだとは思ってたのですが
やはりそうですか・・
WSHから離れて、dmscript( 日本人製作の Jscriptと同様のスクリプト、dm.exe -l オプションでワンライナーの ようにも使えるので場合によってはWSHからWin32Apiの機能を利用可能)、 UWSC(日本人製作、ドキュメント多し)、 なでしこ(日本人製作、ドキュメント多し)、 AutohotkeyやAutoIT3(AutoItXとほぼ同じ)をつまんで見るのも吉。 これらは、SFCminiやAutoITXに比べて、ポータブルでも使えるメリットがある。
あんま怪しいツールは入れたくないんだよね
MS純正 excel powershell vb.net
どれもOS標準添付じゃないし…
結局は XUL が最強だよな
.netはvistaに標準添付だろ
開発環境も?
vbc.exe
>>74 ttp://www.moonmile.net/blog/?p=18 >実は Windows XP3 や Vista のマシンでは既に .NET Framework が(勝手に)導入されており、
>実は環境変数を設定すれば Visual C# Express Edition を入れなくても
>コンパイルができます。当然実行もできます。
へぇそうなんだ。常識なの?良いこと聞いた、thx
IEで、Ctrl+Nでウィンドウの新規作成を行った時と等価な状態(セッション情報等を継承)で、 WSHでIEのウィンドウの新規作成を行い、 かつそのIEのウィンドウのオブジェクトIDを得るにはどうしたら宜しいでしょうか?
>>76 ここはWSHのスレであって
IEコンポーネントAPIのスレではないのでスレ違い。
Shell.apliction でグルグルすると既存のieオブジェクトやエクスプローラーのハンドルとれるじゃん。 またはieオブジェクト作ったときのオブジェクトに、例えば objIe.hWndってやってもハンドル取れる。
>>78 やりたい事は、セッション情報を引き継いだIEの新規ウィンドウの生成(Ctrl+Nに相当)です。
例えば、
ie1 = new ActiveXObject("InternetExplorer.Application");
ie1.Navigate("
http://www.example.com/login/ ");
// ログイン処理
ie2 = new ActiveXObject("InternetExplorer.Application");
ie2.Navigate("
http://www.example.com/foo/bar.html ");
とした場合、ie1の派生物とie2の派生物では別セッションとなってしまい、
ie1でログイン状態がセッション管理により行われている場合、
ie2では非ログイン状態になってしまいます。
普通にやれば良いんじゃないの?
普通にWin32APIのFindWindow クラス名でやれば良いんじゃないの?
statustextでつくとは!
CreateObject("Shell.Application").Windows.Item でアクティブ取れるんだね。
正確には でアクティブ取れたんだね。
え?IE7以降は取れないとか?
どこで聞けばいいのかわからないのでここで質問を piyo1hogera.txt piyo2hogera.txt piyo3hogera.txt piyo5hogera.txt pito8hogera.txt というように番号がとびとびになっているようなファイルの集まりから数字だけを抽出して htmlファイルに反映させたいんだけどどうすればいい? 一応, ファイル一覧は抽出できるんだけどそっから数字だけを抽出するにはどうすればいいかわからないので。
>>90 正規表現を使うのが簡単
var num;
if (/(\d+)/.exec(ファイル名) != null) { // ファイル名に数字を含んでいたら
num = RegExp.$1; //抽出した数字
}
$1wwwwwwwwwwww
WScript.Echoで文字色変えられますか?もし変えられるなら方法も
>>93 コンソールの文字色変更だったらオススメはしない
一応、コンソールAPI or エスケープシーケンス を使うことで出来るけどね
↑は環境を変更する必要があるので、HTAを使った方がマシだと思う
tscmd.zipのechoc.exeを使うといいかも
createobject("wscript.shell").exec "cmd /c color ac"
>>96 はだめみたいよ
標準入出力をリダイレクトしてコンソール環境を継承してない?
>>93 NT系OSのコマンドプロンプトでは色指定などのエスケープシーケンスは標準ではサポートされない
エスケープシーケンス ANSI.SYS などのキーワードで検索
echo エスケープシーケンス | ansi.exe みたいなのがあったような
PowerShellの中では文字色変えられるけど、 CMDに戻ると色が消えるのはなんでだろう?
>>98 ok cmd /c color ac
ng cmd /c color ac <nul >nul 2>nul
createobject("wscript.shell").exec "command con /c cmd /c color ac"
無理ぽ
なんかズレテるな
excel経由でコンソールAPIを呼ぶ
>>103 なんかコードページがズレてるな
createobject("wscript.shell").exec "chcp.com 932"
InvokeVerbで、右クリックメニューのサブメニューは 呼べないんでしょうか
>>109 どういう状況下で何をしたいのか理解できないけど
InvokeVerbで呼べないならレジストリ読んで実行しとけ
InvokeVerb "メニュー項目\サブメニュー項目" とでもできればよいが
InvokeVerbEx "メニュー項目","サブメニュー項目"
WordのActiveXコンポーネントについて聞いて良いですか? WSHから、documentオブジェクトに 他所で生成したリストをMailMergeさせることは出来たんですが、 実際のデータが割り当てられたプレビュー状態を表示させるメソッドってありますか? ツールバーのボタンを押せばちゃんと表示されます。
>>113 こんなんで良いの?
var word = new ActiveXObject('Word.Application');
word.visible = true
var doc = word.Documents.Add();
doc.Content.InsertAfter("hello, world.");
doc.PrintPreview();
>>114 ありがとうございます。
説明が悪かったのですが、印刷プレビューではなくて、
通常のレイアウト内の、差し込み印刷のプレビュー表示です。
右、左でレコードを移動できるあれです。
ツールバーのボタンを押さないと、<<名前>>みたいなフィールドのままですよね。
それを、差し込んだ状態で見せたいんです。
ちゃんとデータソースと結合は出来ているのですが。
スレ違いですかね・・・
>>115 失礼、差込印刷なって使ったことなかったので
とすると、これ?
doc.MailMerge.ViewMailMergeFieldCodes = false
117 :
116 :2009/09/18(金) 00:43:29
×差込印刷なって ○差込印刷なんて orz...
>>116 調べてみたら、それで間違いないと思います!
今ちょっとWordが無い環境なんで、改めて試してみます。
ありがとうございました。
ABALE.ZIPとかいうCOMが入っているのですが、これって使えるの?
120 :
デフォルトの名無しさん :2009/09/24(木) 22:41:49
Wordの印刷についてお聞きしたいんですが. Wordを印刷するプログラムを書いたのですが, プリンタを任意に指定する方法がわかりません. 以下のプログラムでは,”通常使うプリンタ”になってしまいます. プリンタを指定する場合はどのようにすればよいのでしょうか? できれば,引数からプリンタを指定するようにしたいです. よろしくお願いいたします. var pf,obj; var objArgs = WScript.Arguments; pf = new ActiveXObject("Word.Application"); pf.DisplayAlerts = false; obj = pf.Documents.Open(objArgs(0),0,1); obj.PrintOut(); obj.Close(0); WScript.Quit(0);
>>120 試してないけど、
pf.ActivePrinter = "プリンタ名"
あたり?
ちなみに、明らかにword固有の機能はスレ違い
VBAスレなどに行ってください
122 :
デフォルトの名無しさん :2009/09/25(金) 00:41:38
>>121 ありがとうございます.
その方法で動きました
ちなみに、VBAスレでは、VBやVBSでも書ける話はスレ違いと言われるので、 さらにほかのスレに行ってください
> ちなみに、VBAスレでは、VBやVBSでも書ける話はスレ違いと言われる ハズレ 「VBやVBSでも書ける話」がスレ違いなのではなく 「Word.ApplicationやExcel.Applicationを使わずにVBやVBSでも書ける話」がスレ違いと言われる VBやVBSでも書ける話でも、WordやExcel固有機能の話なら、当然スレ違いじゃない だってVBAのAはWord.[A]pplicationやExcel.[A]pplicationのAなんだから
new ActiveXObject("Shell.Application").ShellExecute(objArgs(0),"プリンタ名",null,"printto"); は、どのスレだろう?
すいません。質問させてください。 「画面のプロパティ」の内容に当たるレジストリを書き換えるコードを書いています。 が、ログオフか再起動をしないと反映されません。 ログオフ、再起動なしで反映させる方法はありませんか?
たぶんスレ違いと言われるんじゃまいか
>>126 設定するモノによる
「画面のプロパティ」の画面自体をVBSで操作した方が楽ぢゃねぇ?
VBSで画面の操作なんかできんのか
sendkeysだろ
>>126 inichangeとかsettingchangeとかぐぐれ
sendkeysはVBSじゃないけど
w
wはVBSじゃないけど
WScript.Echo "w" はVBSね
Is there any here document in WSH?
UserとPasswdを指定してリモートのファイルにアクセスするならMapNetworkDriveが使えるけど ドライブのマッピングをしたくない場合って他に何か方法あるかな? net useコマンド叩けばいいんだけど、あんまり美しくない。。。
pushdとかは?
FileSystemObject って UNC に対応してなかったけ?
UNCってUser/Pass指定できるんだっけ?
マップしてfsoで開いてアンマップ
141 :
デフォルトの名無しさん :2009/10/07(水) 12:46:15
指定したパスのフォルダをエクスプローラーで、 サイズや位置を指定して開く方法があったら教えてください。 ぐぐろうとすると InternetExplorerでのやり方ばかりヒットしてしまって・・・
' 変数の定義,WSHの準備,etc... Option Explicit Dim FSO,WS,AG,WE,strOs,strInp,strCom,intRet Set FSO=CreateObject("Scripting.FileSystemObject") Set WS=CreateObject("WScript.Shell") Set AG=WScript.Arguments Set WE=WS.Environment("PROCESS") : strOs=WE("OS") ' RunメソッドでEXPLORER.EXEを起動し、引数で指定されたドライブ/フォルダ(省略時は現在のドライブ/フォルダ)をツリー枠と共に表示 strInp="." : If (AG.Count > 0) Then strInp=AG(0) strCom="EXPLORER /e,/root," & Chr(34) & FSO.GetAbsolutePathName(strInp) & Chr(34) intRet=WS.Run(strCom , 1, true) ' WSHのバージョンが5.1以降かつOSがWindowsNT系(NT/2000/XPなど)の場合、処理内容をイベントID:4(情報)でWindowsNTイベントログへ記録 If (WScript.Version > "5.0") And (strOs = "Windows_NT") Then WS.LogEvent 4, "(bvExplorer.vbs) 次のコマンドラインを実行しました。" & vbCrLf & strCom End If ' 各オブジェクトのメモリ リソース等を開放し、本スクリプト実行を終了 Set FSO=Nothing : Set WS=Nothing : Set AG=Nothing : Set WE=Nothing WScript.Quit()
Set ie=GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}") ie.Visible=True ie.Top= ie.Width= ...
FSOその他でシンボリックリンクの判定できる? ターゲット取り出せる?
ExecuteExcel4Macro("CALL(""user32"",""FindWindowExA"", はよくあるが、 ExecuteExcel4Macro("CALL(""user32"",""FindWindowExW"", はできないのか?
>>144 シンボリックリンクなら。ジャンクションはこれでは無理。たぶんWMIでいけるんじゃないか。
動かしたのは Win7RC なので、XP では無理。Vista はどうかわからん。
Set shell = CreateObject ("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = shell.Namespace("C:\temp")
For Each fname in folder.Items
filePath = folder.GetDetailsOf(fname, 179)
fileAttr = folder.GetDetailsOf(fname, 6)
isFolder = InStr(1,fileAttr,"D",1)
isLink = InStr(1,fileAttr,"L",1)
If isFolder = 1 Then
Set fEntry = fso.GetFolder(filePath)
Else
Set fEntry = fso.GetFile(filePath)
End If
If isLink <> 0 Then
Wscript.echo filePath & " is linking to " & _
folder.GetDetailsOf(fname, 188)
End If
Next
ごみが残ってた。これいらん。 ' If isFolder = 1 Then ' Set fEntry = fso.GetFolder(filePath) ' Else ' Set fEntry = fso.GetFile(filePath) ' End If
おー、さんきゅう ただし、Vistaでは属性に、Lが付かんね リンク先はあるので、ショートカットでなければで区別するかな
そうなんだ。それじゃ
>>147 の fEntry で fEntry.Attributes AND 1024 を調べてみ。
分類に「リンク」があるかでも区別できるかも folder.GetDetailsOf(fname, 188) Vistaで187 ExtendedPropertyのほうがよいが、IDが不明 GetDetailsOfとExtendedPropertyの対応表か調べる方法があればよいが
あった System.Link.TargetParsingPath ms-help://MS.MSDNQTR.v90.ja/shellcc/platform/shell/reference/properties/link/system_link_targetparsingpath.htm
>>152 取得順はソートされない(詳細はFATやNTFSの構造の話になるので省略する)
取得したデータを自前でソートしろ
>>152 自前ソートが面倒であれば以下のとちらかで手抜きしろ
・ソート指定したdirコマンドの結果を使う
・basp21のReadDirを利用する
>>153-154 ソートするには取得してからでないとダメということですね
ありがとうございます
取得するフォルダの順番というものは決まっているのでしょうか?
対象のフォルダに
20090101
20090102
20090201
20090202
とこのような感じでサブフォルダがありまして
フォルダが読み込まれる順番を調べているのですが
どうも情報がうまくさがせないものでして
echoなどで出しておりますとおそらく昇順だとは思うのですが
明示的にできないか・もしくは昇順であることを裏付ける何かがないかと思いまして
ループの処理のあとにsleep10000くらい入れて 処理フォルダ見とけばいいんじゃない?
>>155 FATに関して言えば情報格納順であり
ファイルやフォルダ削除/作成により順番が変わる
NTFSについても確実に名称でソートされている訳ではない
環境依存にしたくなければソートしろ
>>156-157 ありがとうございます
複雑な内部の問題なんですね…
ソートしてから使いチアと思います。
本当に助かりました
横レスですが、 みなさんソートはどうしてますか? バブルソートが楽ですけど、量が増えると遅くて重くて。 エクスプローラがどんなに大量のファイルがあっても一瞬でソートできるように、 何か便利な方法ないでしょうか?
160 :
159 :2009/10/13(火) 00:16:54
JSciptのArray.sort()でええ
CreateObject("System.Collections.SortedList")
>>21-25 keybd_eventでシフトキー押しながら
invokeverb "delete"
すればよいよ
質問です vbsで特定ページのソースを取得し、X行目がYという内容と一致するかのチェックをするスクリプトを作りたいのですが ソース全体を出力する方法はobjIE.Document.Body.InnerHtmlでできるのは分かったんですが ソース全体の閲覧ではなくソースのX行目がYという文字列と一致するかどうかの分岐を作るのはどうすればいいのでしょうか?
>>164 ネタ? どこまで理解できていないのか読み取れない・・・
InStr系関数で改行コードをカウントしてX行目の開始/終了位置を取得
Mid系関数でX行目のデータを取得
If文で分岐
当然ループは使うぞ
>>165 分かりにくくてすみません
>InStr系関数で改行コードをカウントしてX行目の開始/終了位置を取得
>Mid系関数でX行目のデータを取得
ここが分かりませんでした
もう少し調べてみます
俺ならXMLDOMで全体取ってから \nでsplitするかな。
StrBody = objIE.Document.Body.InnerHTML lntPos = InStr(1, StrBody, Chr(13), 1) これの戻り値がどうやっても0になってしまいます 対処法お願いします
Chr(13)?
Chr(10)
段落コード?
ソース?
>>170 HTMLの段落はそっちでしたか
InStrが返す値が明らかに存在する文字を検索しても0になってしまうのはStrBodyが長すぎるせいなのでしょうか?
長さ制限は無いはずだしStrBodyをためしにechoで出力してみたらちゃんと表示されてるのでStringは収納されてるはずなんですが
>>167 ちょっとこちらも調べて見ます
>長すぎるせいなのでしょうか? それはない >InStrが返す値が明らかに存在する文字を検索しても0になってしまう それもない
>>176 無いはずなのは分かってるんですけどなぜかそうなってしまうんです
ためしにVBで
>>168 のIntPosをMsgBoxで出力しようとしてもなぜか0に
すみません IntPos = の部分がうまく変数として認識されていなかったのが問題だった見たいです 解決しました
意味不明だが on error resume next でも使ってんのか?やめとけ option explicit は使っとけ
いみふ 結局使えないんだろ?
以前は cscript //e:jscript - が使えたが
? >cscript //e:jscript - WScript.Echo(WScript.Version); ^Z 5.7
>cscript //e:jscript - 入力エラー: スクリプト ファイル "-" が見つかりません。
>cscript //e:jscript con WScript.Echo(WScript.Version); ^Z 5.7
レンホウ「こんなロボット作って、なんになるんです?」
ロボットになるんです
>cscript //e:jscript con CScript エラー: Windows Script Host の実行に失敗しました。 (この操作を完了するの に十分な記憶域がありません。 )
純粋なあの頃は仕事で追い詰められて自殺なんて都市伝説だと思ってたけど 今じゃ知り合いの失踪も自殺も体験した
正規表現が文法的に正しいかどうかを判別する方法はありませんか 括弧が足りないとか教えてくれなくていい スクリプトが異常終了しないでtrueかfalseを返してくれればいい
try catch
>>191 駄目だった
try {var re = /asd(fgh/;}
catch(e){WScript.echo("error");}
RegExp.compile
wshで var n=/a]b/; と打ったらエラーが出ませんでした。他の括弧ならエラーが出ます。 エスケープ無しの右かぎ括弧ってなにか特別な意味はありますか? この場合は、"a]bと続く三文字"と解釈して大丈夫なんですか?
ためせば?
197 :
デフォルトの名無しさん :2009/12/13(日) 13:23:44
Excel2003と2010が共存している環境で
WSHを使うことで両者を使い分けようとしています。
参考 :
http://www.drk7.jp/MT/archives/001226.html RegRead("HKEY_CLASSES_ROOT\\CLSID\\{00024500-0000-0000-C000-000000000046}\\LocalServer32\\").replace(/ \/[^ \/]+/g, '')
で、Excel 最新版(最後にインストールしたもの?)のパスは得られるのですが、古い方のパスを得られません。
何か良い方法はないでしょうか?
今は決めうちで、「C:\Program Files\Microsoft Office\*\EXCEL.EXE」の * の部分を変えて存在確認をとって処理しています。 * の部分は、 Office2010 : office14 Office2007 : office12 Office2003 : office11 Office2002 : office10 Office2000 : office9 Office97 : office8 Office95 : office であっているでしょうか? よろしくお願いします。
EXCEL.EXEを検索してFileVersionで判定すべき
Office2010ってもう発売されてるんだ.....
202 :
デフォルトの名無しさん :2009/12/23(水) 14:44:53
さあ
office13は?
スレちがい
205 :
デフォルトの名無しさん :2010/01/13(水) 18:31:33
お願いだから教えてください。スレ違いかも知れないけどPower Shellスレないみたいだし・・ Windows Power Shell(2.0)でIEを起動してマウスクリックをエミュレートさせようとした場合、Win32API(mouse_event)を使うと思うんですが DllImport("usr32.dll",Charset=Charset.Auto)でCharset = ←の=の後がどうとかいって、実行できません。Charsetのくだりを全削除すると今度は予期しない属性と出てしまいます。 mouse_eventにこだわりはないんですが IEを立ち上げ マウスクリックをエミュレートする 処理を教えてください。APIなら宣言部もお願い;;
206 :
デフォルトの名無しさん :2010/01/13(水) 18:37:51
205ですけど 座標とかハードコーディングで大丈夫ですので肝を簡潔にお願い;;
スレちがい Windows PowerShell 2.0 Part2
普通はDOM使うんじゃなかろうか、いや知らんけど
210 :
デフォルトの名無しさん :2010/02/22(月) 21:41:34
次のように Folderオブジェクトの SubFolders でFolderコレクションを取得したとして、 Set c = folder.SubFolders これを For Each ではなくて以下のように For で処理したいです。 For i = 0 To c.Count : Next このループの中で、i 番目のアイテムを取得するにはどうしたらよいでしょうか? c(i) でも c.Item(i) でもダメでした。
c.Items(i)
212 :
210 :2010/02/22(月) 21:50:27
それだと オブジェクトでサポートされていないプロパティまたはメソッドです。:'c.Items' です。 ちなみに、c.Item("Test") みたいに、実在するフォルダ名を与えればフォルダオブジェクトは取って来れます。 それじゃ意味無いですが。
c(i).Value c(i).Item()
214 :
210 :2010/02/22(月) 22:17:28
>>213 プロシージャの呼び出し、または引数が不正です。
Shell.Application の FolderItems のほうを使ったら?
配列に入れて使え
For i = 0 To c.Count j=0 For Each f In c If j=i Then Exit For j=j+1 Next MsgBox f Next
test
220 :
デフォルトの名無しさん :2010/03/05(金) 12:44:09
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
素朴な疑問なのですが・・・ JScriptの変数の宣言(var文)って書いても書かなくても動きますが どちらが推奨されますか?
>>221 書いた場合と書かない場合は意味が違う
宣言時にはできるだけ書くべきと思う
--------------
a = 10;
function foo() {a = 20;}
foo();
WScript.Echo(a);
--------------
結果:20
--------------
var a = 10;
function foo() {var a = 20;}
foo();
WScript.Echo(a);
--------------
結果:10
223 :
221 :2010/03/14(日) 04:11:27
>>222 なるほど。そう言う違いがあるのですか・・・
ありがとうございました
varといえば var a = 10; var a; で、aがundefinedになると思い込んでいて はまりかけたことがあった。
バッチファイルからWSHを呼び出す際、 バッチからサブルーチン呼出すみたいにパラメータ渡すことは可能ですか・
>>225 可能
渡されたパラメタはWScript.Argumentsで参照できる
有難う御座います!
WSHの何か良いリファレンスブックみたいなのってありますか? 言語は何の奴でもまぁ使えると思うんで何でも良いんですが
Scripting Guide 2000
230 :
228 :2010/04/10(土) 01:11:59
すいません、日本語の書籍でお願いしますorz
>>230 初心者なら scd56jp.exe 内の script56.chm だけで良くねぇ?
232 :
228 :2010/04/10(土) 02:27:18
>>231 おお、これは凄い便利ですね。
ありがとうございます、凄い役にたちそうなんで嬉しいんですが
オフラインで使える本も、それはそれで欲しいです。
書籍の持ち込みは可能だけどデータの持ち込みは厳しい場所に持ち込みたいので。
公式のヘルプを知らなかったって…
VWD2005でVBSのコード補完してくれるらしいから インストールしたけどVBSは全く補完してくれないよ。 かんか設定必要?
CoInitialize は呼び出されていません。 こういう場合はどうすれば?
CoInitialize を呼び出せば?
ちょっと教えてください。 Wshからバッチファイルを呼び出す事は可能ですか?
ちょっと教えてください。 WshからCoInitializeを呼び出す事は可能ですか?
COMを挟めば可能
COMが呼べるってことは既にCoInitializeされてることを意味するので無意味
意味しないよ
explorerのnavigation paneのshow/hideはshowbrowsebarでできないのか?
セキュリティ対策だから無理だろ
うそ
246 :
デフォルトの名無しさん :2010/05/28(金) 22:47:28
>>244 なんか困るの?
つか、他の手段への以降してるんじゃないの?
247 :
デフォルトの名無しさん :2010/05/28(金) 22:50:33
移行だね。
バージョンアップしなくてもよいからインラインスクリプトをサポートしてほしいな
exec("cmd",0) も
質問です。 例えば、sample01.exeという単一ファイルに対して、コンテキストメニューでavast!の"検査(S) sample01.exe"を実行することは FolderItems→FolderItem→InvokeVerbでできます。 一方、ファイルが複数選択された状態では、コンテキストメニューは、"選択した領域のウィルス検査(S)"となり、 これを実行すると選択された全てのファイルに対してまとめて処理が行われます。 この例のようにファイルを複数選択した状態で、"選択した領域のウィルス検査(S)"をWSHで実行するにはどうすればよいですか?
set items=folder.items items.filter SHCONTF_NONFOLDERS,"*.exe" items.invokeverbex "選択した領域のウィルス検査(S)"
ashQuick.exeを呼べばいいんじゃないの
>>253 失礼。まちがえました。
× 252のサンプル、大変参考になりました。
○ 251のサンプル、大変参考になりました。
JavaScriptを使ったWSHでIEを操作してハイパーリンクをクリックさせるってどうやってる?
>>255 自己解決した
と思ったら次の問題が発生した
<form action="..." method="post" >
<input type="text" name="text">
<input type="submit" name="exec" value="test">
のフォームをVBSで操作したいんだが
objIE.Document.Forms(0).test.value = test
objIE.Document.Forms(0).exec.click
だとエラーになる
objIE.Document.Forms(0).test.value = test
objIE.Document.Forms(0).exec.click
objIE.Document.Forms(0).Action="./_msg_post"
objIE.Document.Forms(0).Method="POST"
objIE.Document.Forms(0).Submit
でも同じようにエラーになるんだけどなぜ?
>>256 エラーの質問の時は環境とエラー詳細を書け
まさか
×test
○text
なんてことはないよね
>>257 Windows7
エラーは詳細不明 エラー番号が8004005
Dim K As Long For K = 0 To 5 MsgBox "今" & K & "周目" Next K これ 7で動かないんだけど7以外で動く人いる?
>>260 それは vba の書き方じゃないの?
vbscript なら以下
Dim K
For K = 0 To 5
MsgBox "今" & K & "周目"
Next
JavaScriptのWSHにVBScriptで取得した文字列を渡す方法ってある?
つwsf
sss="xxx" createobject("wscript.shell").run "aaa.js " & sss
runするならプロセス環境変数で渡してもOKだな
ちょっと難しい質問 WSHで起動したExcelのInputBoxに入力された数値を別のWSHに渡すことはできる? WSH1.vbsでExcelのInputBoxを起動して数値を入力 その数値を WSH2.vbsに渡す
>>267 普通にできる
逆に「どーやったらできない」のか聞きたいくらいだ
sss=inputbox() createobject("wscript.shell").run "wsh2.vbs " & sss
wsh2.vbsにも指定したsssにはwsh1で入力した数値が入ってるんだね? 参考になった!本当にありがとう!
sssに入ってるというより、sssに渡したい値を引数として入れて 別のスクリプトを起動するっつうことだろ。 その結果、受けるほうはWScript.Argumentsで引数として受け取る。 またはWScript.CreateObject("WScript.Shell").Environment("Process")で渡して、受け取る。 テキストファイルを使っても渡せることは渡せる。
「〜できる?」 ↓ 「どうやればいいんだ…orz」 ↓ ←今ココ 「全部ソース書いて」
JScriptは永遠に不滅です!
>>272 Processに入力されたデータを入れるには?
それはとっても難しい質問だね
どうやればいいんだ…orz
>>275 > ○○に入力された××を入れるには?
「誤字」と言うよりは「理解不足」だと思う
って言うか、もう少し「人間としてのレベル」を上げて来い
以下に示す程度のガキは相手にされないことが多い
・どこまで分かるのか書かない ←「オレが分かるように答えろ」というレベル
・「どうやればいいんだ…orz」を多用 ←「助けてママ〜」というレベル
・スレ内を検索できない
・ググれない
・scd56jp.exeをDLしてマニュアルを読むことができない
>>278 >scd56jp.exeのマニュアル見てやっとわかった ありがとう
>>279 そうか。具体的にどう解決できた?サンプルを書いてみて。
>>280 WSH = WScript.CreateObject("WScript.Shell").Environment("Process")a = Inputbox
WSH = Item("A") = a
>>281 ごめん携帯からあわてて書いたからおかしくなったわ
1.vbs
WSH = WScript.CreateObject("WScript.Shell")
env = WSH.Environment("Process")
A = InputBox()
env.Item("a") = A
2.vbs
WSH = WScript.CreateObject("WScript.Shell")
env = WSH.Environment("Process")
A = + env.Item("a")
WScript.echo(A)
WSHのコードやよく使う関数をdllにできたらすごく便利だね うふ
classでまとめておくのはやってる。
>>282 vbsだからset 使わんと駄目なんだろう。あとWSHもオブジェクトだからたぶん駄目だろ。あとはrun付け足せばいいはず。
WScript.CreateObject("WScript.Shell").Run "wscript.exe " & WScript.CreateObject("ファイルシステムなんちゃら").GetParentなんちゃら(WSH.ScriptFullName) & "\2.vbs"
vbs全然つかってねえやw
>>286 >>だってこれJScript用だし
>>282 に
>>1 .vbs
って書いてあるのに、それはねえべよ〜w こんな後だしジャンケンは初めてみたわw
>>287 うん
そりゃね
VBSで動作実験してからJScript用に変えたから…
先にそれを書いておくべきだった すまない
wscript.exe //e:jscript 2.vbs で起こすから…
>>292 わすれてた
リンクの場所はGoogleの検索結果です
>>292 ちょっと見た感じ、元のページの内容が怪しそう
hrefってURLを表してるんじゃないの?
×If objIE.Document.links(i).href = "次へ" Then
○If objIE.Document.links(i).innerText = "次へ" Then
これならどう?
>>297 >if ((""+IE.Document.links[i].innerText)==("次へ"))
このような方法は知りませんでした
もっと勉強します ありがとうございました!
ああ、失礼
最初の ""+ はなくてもよいかも
オブジェクトが null になる可能性がある場合、これをいれておくととりあえあず文字列になって
エラーにならないので入れてみた(最初に
>>296 を起動したときエラーになったので念のために)
正しくオブジェクトが取得できる前提なら不要
>>300 エラーになったみたいです・・・
一行目の1文字目の文字が正しくないって・・・
どういうことなんでしょうか
1行目1文字目はいくらなんでもおかしい 文字が全角になってるとか、 ファイルがBOM付きのUTF-8になってるとか、 構文以前の基本的な個所でエラーになってる可能性がないか?
WSHでOperaやFireFoxにURLを渡すのは不可能なんだろうか… スレイプニルはできるのになぁ
bugbrowser や Nilbrowserも出来るね。
>>303 釣りとしか思えないなぁ・・・
バカが「OperaやFireFoxにURLを渡すのは不可能なんだろうか」って言うようなソースを晒してくれ
>>305 ActiveXがないからWSHが使えないだけでActiveXがあればWSHが使えるんだからOperaやFireFoxにもActiveXが搭載できればいいんじゃないかと思うんだが
>>306 コレは完全に釣りだな
面白いからソース晒せ
>>307 RunでOpera.exeだのFireFox.exeを起動させただけのソースコードがみたいとは奇っ怪な
>>308 「Sleipnirではできる」のに「OperaやFireFoxではできない」って言う奇怪なソースを早く晒せ
釣りには「ノリ」も必要だぞ
恥ずかしい後釣り宣言来ました
つDDE
>>303 で何したいン?ただ外部のスクリプトからFirefoxでURLを開ければいいのか、FireFoxをスクリプトでいろいろ制御したいのか?
IEで開いたページにあるリンクのURLをSendKeyを使ってメモ帳に書き込むコードを作ってみたのですが 一括で書き込んでるから途中で内容がぐちゃぐちゃになってしまいます 0.01秒ごとに書き込みすることはできないでしょうか? 以下 ソースコード var ie,i,a,aaa,d,s; var WSH;WSH = WScript.CreateObject("WScript.Shell"); IE=new ActiveXObject('InternetExplorer.Application'); IE.Visible=true; aaa = ""; s = WScript.sleep(100); d = 0; while(d < 10){ d = d + 1; ie.navigate2("★"); WScript.sleep(3000); a = ie.Document.links.length; for (i = 0; i < a; i++) { if ((ie.Document.links[i].innerText)==("★")) { test = ie.Document.links[i].search; aaa = aaa + test~"; break;}};}; WSH.AppActivate("無題"); WSH.SendKeys(aaa);
>>313 なんでSendKeys?
FSO使えばいいだろ
あと変数名が酷いなw
315 :
デフォルトの名無しさん :2010/06/28(月) 19:37:26
個人で作って使ってんだ。 変数名なんて本人の好きで構わんだろ。
これは難読化されたコードなんだよ
>>314 FSOですか・・・それは知りませんでした
あと 変数名は適当に決めています
変数と言うぐらいだから変な名前で何が悪い!
319 :
デフォルトの名無しさん :2010/06/28(月) 20:40:07
変な名前では無いと思うが。w
FSOに変えてみました var IE,i,a,t,aaa,d,abc,test; var WSH;WSH = WScript.CreateObject("WScript.Shell"); var FSO;FSO = WScript.CreateObject("Scripting.FileSystemObject"); IE=new ActiveXObject('InternetExplorer.Application'); IE.Visible=true; aaa = ""; d = 0; while(d < 2){ d = d + 1; IE.navigate2("★"); WScript.sleep(3000); a = IE.Document.links.length; for (i = 0; i < a; i++) { if ((IE.Document.links[i].innerText)==("★")) { test = IE.Document.links[i].search; aaa = aaa + test; break;}};}; abc = FSO.OpenTextFile("abc.txt", 8, true); abc.WriteLine(aaa); abc.Close(); これだと改行をしてくれないようです Write.Line は改行をしてくれるはずだったんですが・・・
>>320 WriteLine()は最後に1つだけ改行する
aaa="";
while(...) {
aaa = aaa+なんとか;
}
の代わりに以下のようにすればよい
aaa=[]; // 配列にする
while(…) {
aaa.push(なんとか); //配列への要素の追加
}
…
abc.WriteLine(aaa.join("\r\n")); // 配列の各要素を改行で連結し、それを書き込み
SeraphyScriptDialogは新しいのが出て64bitWindows7にも対応してた。AutoItXも更新してる。 みなさんは使ってますか?
いいえ
いいえ
つかってるがぜよ
大変だから止めた方がいい
Opera,FireFoxも「JavaScript系で簡単に制御」できる
WSHじゃないのでスレチ
>>322 レジストリ使う時点で糞なので使わんだろ
汎用GUIからScriptControlでWSHを使うのが普通だな
>>329 「何をしたい」のか明記せずに糞みたいな質問ばかりすんな
とりあえず
>>278 を読み直して内容を理解しろ
そして質問し直せ
それが出来なければ、自分でスレを探せ
糞みたいなレスばかりすんな
>>328 XPのmanifest使えばインストール無しでもDllは使える。
起動時のwscript.exeは、マニフェストがあるパスのwscript.exeを使わなきゃいけないけど。
システムを汚さなくても使うことは出来る。
エディタのマクロやブラウザのマクロのjscriptでも同じように使える。
システムへのインストールはいらない。
お前ら、wsh使ってますか? Part7
http://pc12.2ch.net/test/read.cgi/win/1190548945/715 715 名前:名無し~3.EXE[sage] 投稿日:2009/12/05(土) 17:35:36 ID:/VdO4Ha3
XPとWScriptのJscriptで、manifest使ってレジストリ登録なしでAutoItXが使えたんでメモしとく。
まずWScript.ExeとCScript.Exeをコピーして適当なフォルダに入れとく。
AutoItX3.dllも同じところに入れとく。
同じ場所にテキストファイルを3つ作る。
wscript.exe.manifest
cscript.exe.manifest
AutoIt.AutoItX3.manifest
>>332 ソレ知ってる
SeraphyScriptDialogとAutoItXは「機能不足なので使わない」って方が正しい
>>328 を分かりやすくしておく
レジストリ使う時点で糞なので使わんだろ
↓
レジストリ使わなくても鼻糞なので使わんだろ
>>333 ならそう書けよ。後出しジャンケン好きはプライドだけは高いから困るんだw
会社でもそういわれてるだろ?違うかい?
それで低機能ならSFCminiでも使ってみりゃいいさ。
会社でも近所でも鼻つまみ者です
>>334 自作の汎用GUIは「GUI/DLL絡みは外部テキストファイル定義」で、WSHからもコントロール可能にしてある
だから SeraphyScriptDialog,AutoItX,SFCmini のような「WSHにベース機能を提供するもの」は使わんよ
「他人がする評価」については否定も肯定もしない
因みにオレは未成年で学生だ
社会人扱いは止めてくれ
>>336 ちなみにwin32APIにアクセスしたいときはどうしてるん?プロセス間通信とか、外部のアプリにメッセージ投げたいときとか?
学校でも家庭でも鼻つまみ者です
わざわざ外部ソフト入れんでも.NETやPowerShell使えばええやん
またPowerShellかよw このスレの意味がない。
342 :
デフォルトの名無しさん :2010/07/03(土) 23:55:49
>>337 へのレスが無いね。
質問しといて遊び呆けて無ければ良いが…
2chは煽るばっかりで難しい質問には答えられません
VBScript コマンドから Windows PowerShell コマンドへの変換
GUIはHTAでもいいかも。 足りない部分は外部のDll使おうが、PowerShell使おうが、 そこを関数化しておけばいいんじゃないの? あとで簡単に置換え出来るでしょ。 Postmessageが使えるだけでもWSHやHTAから出来ることは大きく広がる。
TextStreamオブジェクトをFunctionとかで呼んで戻すことができない・・
そういやPowerShellのスレはないんだな
win板にあるあるよ
ボタンのあるHTMLをieオブジェクトで開いた時、 ボタンクリックのイベントをWSH側で拾うことは 可能ですか?
はい
353 :
351 :2010/07/07(水) 08:05:20
ヒントちょうだい
JScriptでimportもどきって、こんなんでいいのかな? function require(module){ if(typeof this[module] == "undefined"){ var fso = new ActiveXObject("Scripting.FileSystemObject"); eval(fso.OpenTextFile(module + ".js").ReadAll()); this[module] = eval(module); } }
>>354 それだと不便だろ?
ScriptControl使え
// wsfでいいんじゃねえの?.wsf // scriptControlつかおうが、readallでeval使おうが、どっちみち // スクリプトの中からファイル読込みしてやらんと駄目だろ。 // それならwsfのほうが楽だ。 // エディタのマクロには使えんけどな。 // // <job id='main'> <script language='JScript' src='./subinclude.js'> WScript.Echo('wsf'); // </script></job>
スクリプトを動的に変更する場合は、一般的にScriptControlを使用する
>>354 は必要なときにスクリプトを後付けする構造なので
何でもできるScriptControlにする方がベストだと思う
>>357 のやり方はスクリプトの一括読み込みなので構造が違う
無駄なスクリプトも全部読み込みたい場合はwsfでも良いけど
ファイル構成も異なるので使い難い
>>358 スクリプトコントロールを使うっていっても、その元になるスクリプトを書かれたファイルを読み込まなくていいのか?
たとえばどうやって書くわけよ?
vbsのinput使うみたいな形で、scriptcontrol使ってる例はあるわな。
どうしてもその言語じゃ処理できない場合に使う方法として。
その場合は、スクリプトのなかで記述しちゃってるよね。
>>354 は、メインのスクリプトファイルから外部の関数やクラスをimportしたいんだろうから、
その都度読み込もうが、wsfでも何の問題もないと思うんだが。
ScriptControlを使う場合の方法と、そのメリットを判り安く解説してみてくれ。
vbsからjsならscriptcontrolかもしれんが、jsからjsならevalでええ、scriptcontrolつかうなんてあほくさ
だいたいimportしたいってのは、ファイル構成をわけて、 過去に作った関数を再利用しやすくするためのもんだと思うんだが・・・ ファイル構成をわけたくなきゃ、同じファイルにその関数をコピペすりゃいいだけだが、 それやってくと、それはそれで面倒臭いこともある。
scriptcontrolつかいたければつかえば? どうぞどうぞ とめないよ
importしたい奴にScriptControlのほうがいいと薦めるのか? 意味がわからん。誰か解説ヨロ
断る
<?xml version="1.0"?><package><job id="fso"><script language="VBScript"><![CDATA[ rem objIEに走っているスクリプトを入れて関数を呼び出す Unicode で保存 Function obj(jobName) :Set Container = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}") CreateObject("Wscript.Shell").Run "Cmd.exe /c Cscript.exe //Nologo " & _ """" & Wscript.ScriptFullName & """" & " //job:" & jobName & " " & Container.HWND & _ " || (echo Error In JobInitialize. & pause) ", 6 On Error Resume Next :Do :Err.Clear:Set objScript = Nothing Set objScript = Container.GetProperty(Container.HWND) Loop While objScript Is Nothing : On Error Goto 0 If Err.Number <> 0 Then : Err.Raise Err.Number : End If Set obj = objScript : Container.Quit : Set Container = Nothing :End Function ]]></script><script language="VBScript"><![CDATA[rem *** FUNCTIONS *** Function objSelf() : Set objSelf = CreateObject("Scripting.FilesystemObject").GetFile(WScript.ScriptFullName) End Function ]]></script><script language="VBScript"><![CDATA[If WScript.Arguments.Count = 0 Then Set fso = obj("fso") : msgbox fso.objSelf.Path ,32 : fso.Quit End If]]></script><script language="VBScript"><![CDATA[If WScript.Arguments.Count = 1 Then PutPropertyMyself() : Zzz() : Sub PutPropertyMyself() : PropertyID = Wscript.Arguments(0) + 0 For Each objIE In CreateObject("Shell.Application").Windows : If objIE.HWND = PropertyID Then objIE.PutProperty PropertyID, Me : Exit For End if : Next : End Sub : Sub Quit() : WScript.Quit : End Sub : Sub Zzz() : Wscript.StdOut.WriteLine "id: " & WScript.Arguments(0) Do : Wscript.Sleep 1000 : Wscript.StdOut.Write "Zzz..." : Loop : End Sub End If]]></script></job></package>
つまらん
IEのハンドル調べて、オブジェクトとプロパティのやり取りしていろいろやるのか。凄いな。 で何が凄いんだが、解説ヨロ
面倒だからやだ
複数ジョブを走らせると 終了時にcmd.exe が成仏しないことに 気がつきましたので 差し替えさせていただきます どーも すみません
<?xml version="1.0"?><package><job id="fso"><script language="VBScript"><![CDATA[ rem よそのスクリプトの関数を呼ぶ.wsf Unicodeで保存 Function obj(jobName) : Set container = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}") CreateObject("Wscript.Shell").Run "Cmd.exe /c Cscript.exe //Nologo " & _ """" & Wscript.ScriptFullName & """" & " //job:" & jobName & " " & container.HWND & _ " || (echo Error In JobInitialize. & pause) ", 6 : On Error Resume Next : Do : Err.Clear Set script = Nothing : Set script = container.GetProperty(container.HWND) : Loop While script Is Nothing On Error Goto 0 : If Err.Number <> 0 Then : Err.Raise Err.Number : End If Set obj = script : container.Quit : Set container = Nothing : End Function ]]></script><script language="VBScript"><![CDATA[Function objHere() Set objHere = CreateObject("Scripting.FilesystemObject").GetFile(WScript.ScriptFullName).ParentFolder End Function]]></script><script language="VBScript"><![CDATA[If WScript.Arguments.Count = 0 Then Set fso = obj("fso") : msgbox fso.objHere.Path, 32 : fso.Quit = TRUE End If]]></script><script language="VBScript"><![CDATA[Dim Quit If WScript.Arguments.Count = 1 Then : PutPropertyMyself() : Zzz() : End If Sub PutPropertyMyself() : PropertyID = Wscript.Arguments(0) + 0 For Each objIE In CreateObject("Shell.Application").Windows If objIE.HWND = PropertyID Then : objIE.PutProperty PropertyID, Me : Exit For : End if : Next : End Sub Sub Zzz() : Do : Wscript.Sleep 1000 : Wscript.StdOut.Write Typename(Quit) If Quit Then : Exit Do : End If : Loop : End Sub]]></script></job></package>
GetObject("new:つかってみたかったのか? CreateObject(ie)でよかろうもん
どっちもいらんけどな
おまいらWSHのデバッグどうしてる? エラーダイアログ見て直す?あと個別に変数表示させる? またはスクリプトデバッガいれてレジストリ直して//xでやってる? もっと他にいい方法あるかな? 自分でツール作ってやってる人いるかな?
>>373 いわゆる printf デバッグ
ただ、WScript.Echo() のままでは面倒なので、
msgout("a={0}, b={1}", [a, b])
みたいに使えるヘルパ関数は自作してる
よく使うのは msgbox escape() msgbox typname() だね
正規表現とかの文字列処理は組み込んでからデバッグするんじゃなくて 該当部分だけ先にインタプリタ系ツールで試して問題ないことを確認してから プログラムの本体に組み込む
なるほどなるほど・・・ MSのスクリプトデバッガつかってるひとはいないのか。 試してみて、使いやすいとは思えなかったんでエディタと連携させて 自分で適当な関数を作ったほうがいいのかもしれんと思ったのだが・・・ デバッグに絡んで、関数の中で、実行中のその関数の名前を取得したいと思って いろいろ試してるんだが、 functest=function(a){ s1=arguments.callee.toString() ;//だとfunction以降の中身が表示されて、関数の名前は表示されない。 s2=arguments.callee.name;// だとnetscapeでは関数の名前が表示されるらしいがJscriptでは使えない。 WScript.Echo(s1 +"\n"+ s2); }; functest(); ということでいろいろ聞きたかったんだが function functest(a){ とやることで名前を取得できるメドが立ちましたw 一応チラ裏ってことでメモ。
IE8に標準のデバッガ使うのはどうだ?ラッパー関数つかって誤魔化せばどうにかなりそうだが。
JScript(HTA)で 20→"\x20\00\00\00" // 32bitリトルエンディアン みたいな変換をする方法があったら教えてください バイナリ列を扱おうとして詰まった・・・(´・ω・`)
>>379 20 => "\x14\x00\x00\x00" でよいのかな?
それでよいなら無理やりだけど以下
function SaveBin(filename, bin) {
var stm = new ActiveXObject("ADODB.Stream");
stm.Type = 1; // 1=adTypeBinary;
stm.Open();
stm.Write(bin);
stm.SaveToFile(filename, 2); // 2=adSaveCreateOverWrite
}
function CodeToBinary(code) {
var uc1 = String.fromCharCode(code & 0xffff);
var uc2 = String.fromCharCode((code >> 16) & 0xffff);
var stm = new ActiveXObject("ADODB.Stream");
stm.Type = 2; // 2 = adTypeText
stm.Charset = "UNICODE";
stm.Open();
stm.WriteText(uc1);
stm.WriteText(uc2);
stm.Position = 0;
stm.Type = adTypeBinary;
stm.Read(2);
return stm.Read(4);
}
SaveBin("binary1.dat", CodeToBinary(20))
SaveBin("binary2.dat", CodeToBinary(65536))
381 :
379 :2010/07/20(火) 02:32:44
>>380 レスありがとうございます
>20 => "\x14\x00\x00\x00" でよいのかな?
そうです。
>>379 は誤りですorz
そのような力業しかないのですか・・・
がんばってみます
こういうのじゃだめなん? function toString32LE(code){ var s = ""; for (var i = 0; i < 4; ++i) { var n = code & 0xff; code = code >> 8; s += String.fromCharCode(n); } return s; } function parseString32LE(str) { return ( str.charCodeAt(0) + (str.charCodeAt(1) << 8) + (str.charCodeAt(2) << 16) + (str.charCodeAt(3) << 24) ) >>> 0; }
383 :
380 :2010/07/20(火) 13:13:50
>>382 以前試したとき、文字列で保持するとファイル読み書きが
うまくできなかった気がした
バイナリファイルの解析みたいなものだとそれがネックになる
逆にいえば、それを気にしないか、あるいは読み書きがクリアできるなら
確かに文字列の方が楽だと思う
JavaScriptで画像解析みたいなネタもどこかで見たので、
ひょっとするとそもそもそんな難しい問題ではないのかもしれないが
JScriptのバイナリファイルアクセスは鬼門だよな。 書き出しはADODB.Streamをlatin-1で使えばいいとして、読み込みがしんどい。 バイナリタイプでは手も足も出ないからテキストタイプを使うしかないけど、 latin-1で読み込むと0x80-0x9fがutf-16の対応する文字に変換されちゃうし(逆変換で対応)、 utf-16で読み込むと先頭がBOMに一致する場合の対処が必要だし、 他のキャラクタセットだともっとめんどいし。
そうかなぁ ADODB.Stream使えば読むのも書くのも自由自在だけど バイナリを1バイト置きにコピーしてUnicodeで見ればよい。
結局テキストファイルほど簡単にはいかなくて、
>>380 みたいな変換処理が必要になるのか。
00-ffを透過するコードページを使う
ADODB.Streamはマカフィーが問答無用で警告を出すのでちょっと使いにくい(特にスクリプトを配布する場合)
謎のオブジェクトを発見 rem a.vbs msgbox WSH Is WScript
>>390 ほれ
謎のオブジェクトを発見.js
for(var o in this){WScript.Echo(o);}
//なるほど。その方法でも関数の名前が取得できるね。 getfunctionname=function(obj){ var sname;for(sname in obj){;}; return(sname); }; funtest=function(s){ var sret=getfunctionname(this); WScript.Echo('1 '+ function(){var s='';for(var o in this){s=o;};return(s); }() ); return(sret); }; WScript.Echo('この関数の名前は '+ funtest() );
ログをExecelシートに貼り付け〜なんて非生産的な作業があって、これをKeyLoggerみたいなので 自動化できればと思いまして、WSHで作れるかなと思ったのですが。 あまり詳しくないんだけども、イベントを追跡してってソフトの起動、ボタンクリック等の操作を記録で きますでしょうか?それが無理ならキーボードのキーやマウス操作を記録して操作の再現ができますか?
Excelのオブジェクトを操作するんじゃなくて、キー操作でうにゃうにゃしたいなら UWSCでいいんじゃないの?日本語HELPもある。ポータブルでも動くし。 途中で複雑な判断いらない処理なら、UWSCでキー操作を記録して片付けるのがいい。 WSHに詳しくて、その技術を使って途中でいろいろ処理を分けたほうがいいとしたら、 他のソフトに絡むとこだけUWSCで記録しといたマクロをRunさせてまぜて使うとか。 またはAutoItXのDLL使って、ほかのソフトと絡む部分だけ処理させる。 USBのフォルダにシステムからコピーしたWScript.ExeやCscript.exeとmanifestとDLL使えば UWSCと同じようにポータブルでも使える。
excelでやれば
ありがとうございますAutoItにUWSCですね。これはしかし動作を指定する必要がありますね。 癖とかありそうで結構手間がかかりそう。。 単純にWindows上の操作を一定期間記録して後で再現とか、できないんですかね。
すれ違いだよ
ソフト板で聞け
謎のオブジェクトを発見 rem a.vbs msgbox typename(me)
400 :
デフォルトの名無しさん :2010/07/29(木) 05:19:19
>>396 こいつ、UWSCについて調べずに書き込んだな。
>>単純にWindows上の操作を一定期間記録して後で再現とか、できないんですかね。 UWSCってそういうことするためのソフトなんだが・・・
ゴメンさらっと見てそういう事ができると思わなかった。UWSC便利ですね。 複数のソフトをダウンロード&自動インストールなんて事もできるんだろうか・・ ちょっと使ってみます。どうも。
Document.body.innerTextでWeb上の文字列を取得し その文字列に含まれるキーワードを検索して 発見した場合の処理と見つからなかった時の処理をするにはどうしたらいいでしょうか if ((IE.Document.body.innerText)==("文字列")) { //処理1 } else { //処理2 }; これだと動かないのです
vbscriptならinstr()だな
>>404 ありがとうございます
JavaScriptではどうなのでしょうか
Stringオブジェクトのメソッドに同じようなものがあるだろ
match()?
if( /hogehoge/i.test(IE.Document.body.innerText)){ / * true * /; ;}else{ / * false * / ;}; //正規表現のtestじゃだめか?
>>403 自分は、この方法で逃げている。
if ((IE.document.body.innerText).indexOf("文字列") != -1) { // 処理1} else { // 処理2 };
VBSはシラネ
410 :
409 :2010/08/03(火) 15:53:02
match()を使うなら、 if ((IE.document.body.innerText).match(/文字列/) != null) { // 処理1 } else { // 処理2 };
Webページを操作するなら、スクリプト使うのが前提の NilとかBugとかプニルつかって、そっちのオブジェクトつかったほうがいいんじゃない? どうしてもIE使ったほうがいいの?
>>409 のついでに質問してみる
innerHTMLで文字列を発見した時その行のリンクをクリックするのは可能?
413 :
409 :2010/08/03(火) 20:51:08
>>412 可能だとは思う。
該当するinnerHTMLが含まれている、"a"タグを特定して、.click()で出来るのでは。
自分は泥臭い方法でやってるけど、スマートな方法が有ったら教えて欲しい。
自分がやっている方法:
for (var i = 0; i < IE.document.all.tags("a").length; i++) {
if ((IE.document.all.tags("a")[i].outerHTML).indexOf("文字列") != -1) {
IE.document.all.tags("a")[i].click();
// リンクをクリック後に行う処理
break;
}
}
>>412 リンクからたどればよい
for (i=0; i<ie.document.links.length; i++) {
if (ie.document.links[i].innerText=="リンク文字列") {
ie.document.links[i].click(); break;
}
}
もし、リンク文字列ではない文字列から近隣のリンクを探したいってことならもっと面倒になる
>>414 >もし、リンク文字列ではない文字列から近隣のリンクを探したいってことならもっと面倒になる
それがやりたいけど方法が思いつかないのよね
>>413 のように
IE.document.all.tags("a")[i].click();
を使えばできるかもしれないけど
これだと 目的のリンクをクリックしてくれるとは限らないというね
>>415 indexOfで文字列を発見した所より前の文字列でIE.document.all.tags("a")[i].click();
を使う・・・あ できるかも
ちょっとソースコード書いてみる
417 :
409 :2010/08/03(火) 22:09:17
>>415 >>もし、リンク文字列ではない文字列から近隣のリンクを探したいってことならもっと面倒になる
>それがやりたいけど方法が思いつかないのよね
文字列が、aタグの外に有る場合なの?
文字列0<a href="...">文字列1</a>文字列2
で、文字列1ではなく、文字列0や文字列2を探してクリックとか。
確かに面倒だね。
.parentNodeとか、.previosSiblingや.nextSiblingとか、ゴチャゴチャ使わないと駄目そうだね。
418 :
409 :2010/08/03(火) 22:10:27
もう眠い。 今日は寝る。
>>417 <a href="...">文字列1</a>文字列2
文字列2を検索するのは
if ((IE.document.body.innerText).indexOf("文字列2") != -1)
文字列1を検索するには 文字列2より前の文字列を検索する必要がある
>>419 調べてみたら使えそうなものがあった
lastIndexOf
これでソースコードを完成できるよ みんなありがとう
for (i=0;i< IE.document.all.tags("a").length; i++) { if ((IE.document.all.tags("a")[i].outerHTML).lastIndexOf("文字列2") != -1) { IE.document.all.tags("a")[i].click(); これじゃだめなのか・・・
422 :
409 :2010/08/04(水) 06:50:25
>>421 それ、後方から文字列を探すやつ。
前方から探すより、後方から探す方が探す時間が短い場合が有るから、そういう時に自分は使っている。
例えば、文字列1と文字列2が、非常に酷似していて、最後の数文字だけが異なる様な場合、比較回数が多分少ないのではないかと…
<a href="...">[文字列A][文字列1][文字列B][文字列2][文字列C]</a>
とかの場合。
423 :
409 :2010/08/04(水) 15:22:56
>>421 HTMLのタグ構造がどうなっているか示さないと、一体何をしたいのか分からないと思うよ。
(1) <div><a href="...">文字列1</a>文字列2</div>
となっているのか、
(2) <a href="...">文字列1</a><p>文字列2</p>
となっているのか等。
(1) の場合、
for (var i = 0; i < IE.document.all.tags("a").length; i++) {
if ((IE.document.all.tags("a")[i].parentNode.indexOf("文字列2") != -1) {
IE.document.all.tags("a")[i].click();
break;
}
}
(2) の場合、
for (var i = 0; i < IE.document.all.tags("a").length; i++) {
if ((IE.document.all.tags("a")[i].nextSibling.outerHTML).indexOf("文字列2") != -1) {
IE.document.all.tags("a")[i].click();
break;
}
}
とかじゃ駄目かな?
試してないから分からないけど。
424 :
409 :2010/08/04(水) 15:29:47
それより、JScriptからファイルをランダムアクセスする事って出来ないのかなぁ? JScriptから利用出来るフリーのDLLとか有れば良いんだけど。 Perl等のファイルにランダムアクセス可能なスクリプトからIE操作すれば、一番良いんだろうけど、 PerlもVBも分かんねーし。
>>ファイルをランダムアクセスする ???
IEのボタンクリック VBSだとちゃんとできるのにJScriptだとできないなぜだぁぁぁぁ <form action="." method="post" > <input type="hidden" name="...." value="..." class=""> <input type="hidden" name="..." value="..." class=""> <input type="hidden" name="..." value="..." class=""> <input type="hidden" name="..." value="..." class=""> <input type="hidden" name="..." value="..." class=""> <input type="hidden" name="..." value="...." class=""> <center> <input type="submit" value="..." class="..."> </center> </form> VBS : IE.Document.Forms(0).Item(6).click JScript : IE.Document.forms(0).Item(6).click();
これも反応しない <input type="text" value="" size="20" class="test"> IE.Document.forms(0).Item(0).value = "あああ"
そういうことなら、その部分だけとりあえずはスクリプトコントロールで逃げといて、あとでじっくり考えるw
JScriptで普通にいけるんじゃないの?
ie = new ActiveXObject('InternetExplorer.Application');
ie.visible = true;
ie.navigate('
http://www.google.co.jp/ ')
WScript.Sleep(2000);
ie.document.forms(0).item(2).value='WSH';
ie.document.forms(0).item(3).click();
>>430 どうもそのページだけできないんだ
入力フォームをクリックするとフォームの横に文字が表示されるものだから Inputタグのclassが怪しいと思うんだが
432 :
409 :2010/08/06(金) 12:13:20
>>431 nameやclassの属性がformsになっていたりしない?
434 :
デフォルトの名無しさん :2010/08/06(金) 13:04:00
wshでツールチップを指定した座標位置に表示させることは可能ですか?
AutoItX使えば出来る。 oAutoIt = new ActiveXObject( "AutoItX3.Control.1" ); oAutoIt.ToolTip("WSH★★★こんばんみ★★★Part7",500,500);
if文でWEB上にボタンがある時の処理とない時の処理をする方法ってある?
437 :
409 :2010/08/08(日) 19:39:00
>>436 outerHTMLを取得して、解析すれば良いだけでは?
ボタンがFlashとか、HTML以外だと厄介だけど。
見た目がボタンでも、 type = "button" の場合と、 type = "image" の場合が有るから、また厄介だけどね。
>>437 なるほどそれがあったか・・・
と なると
if ((IE.Document.body.outerHTML)==(IE.Document.forms[0])) {
WScript.echo("YES")} else{WScript.echo("No")}
こうかな・・・
439 :
409 :2010/08/08(日) 21:33:13
>>439 となると
if ((IE.Document.body.innerText)==(IE.Document.body.innerText.indexOf("form"))){ //処理 } else { //処理2 }
こう・・・でもないな
innerTextでページ内のHTMLを・・・ ・・・あれ? if ((IE.Document.body.innerHTML)==(IE.Document.body.innerHTML.indexOf("form"))) これでもだめ?
innerHTMLでページ内のHTMLを全部取り出すんだから innerHTML.indexOf("文字列") で検出した文字列とinnerHTMLのソースと照らし合わして処理・・・じゃないのか? ならなんで動かないのかと
443 :
409 :2010/08/08(日) 22:15:05
>>441 その条件式では、左辺値と右辺値は永遠にイコールにはならないから。
>>443 IE.Document.body.innerHTML.indexOf("form")は文字列を検出して表示するんじゃないのか?
文字列があるならその文字列を表示してなければ-1だったはずだが
それと左辺値を比較して左辺値の文字列の中に右辺値の検出した文字列があれば処理1 なければ処理2じゃないのか?
あぁ・・・そういうことね 左辺値からすでに間違えていたのか俺は if((IE.Document.body.innerHTML.match("form")==("form")) 左辺値がソース全体だったら右辺値はformだけでソースとまったく一致しない ならば左辺値をソース全体からformだけを検出し なければnull それを右辺値と比較 こんな簡単なことに気付かなかった自分が恥ずかしいわ。。。
446 :
409 :2010/08/08(日) 22:39:18
>>447 ワロタ
なんだこのハゲ リアルでのハゲなのか?w
IEで document.location.reload() はできて document.location.back() はできないんだな
document.histry が使えないって・・・
451 :
409 :2010/08/09(月) 18:45:15
ところで、WSH使いって、仕事の案件等の為に使っている人と
>>447 みたいな人とどっちが多いの?
自分は
>>447 の様な理由でやってるだけだけどさ。
プログラムは20年近く昔に学生の頃に授業でFortran77とLispのS式を習った程度。
学生時代、一緒だった人は何だか未踏のスーパークリエイターで表彰台に上っている写真がIPAのサイトに掲載されてたけどさ。
楽天のメルマガが1週間で2千通を超えるので、メルマガ解除用のスクリプトでも書くか…
452 :
デフォルトの名無しさん :2010/08/11(水) 17:17:28
過疎だなぁ WSHってそんなにマイナーかな
作者タンがカキコしてくれないからな。
ハゲでも誰でもいいから来てくれ…
みんな暇そうだから質問投下 VBSで多重起動を防止するのをJSでできるか FSOだとロックファイルの作成と削除はできるけど 重複した時の処理が分からない
>VBSで多重起動を防止するのをJSでできるか この意味が分からないけど、 単純に多重起動を抑止するなら、 1. アプリ起動時にロック用フォルダを作成 2. アプリ起動時にロック用フォルダを削除 1. のフォルダ作成に失敗したらほかのインスタンスが起動中なので、メッセージを表示して終了 でダメなの?
458 :
455 :2010/08/14(土) 20:10:13
VBSでいう Err.Number はJSではどういう使い方? VBSでの二重起動防止の方法をJSに直してみたんだけど Err.Numberだけ使えないんだ
VBScript 何らかの処理 If Err.Number <> 0 Then エラーの処理 End If JScript try { 何らかの処理 } catch (e) { エラーの処理 } vbs ではオプションによるが、エラーが発生したときでも、 処理は継続し、その代りにエラーコードが Err.Number にセットされる js ではエラーが発生すると例外が発生し、try〜catchで捕まえないとアプリケーションが終了する
460 :
455 :2010/08/14(土) 21:23:35
>>459 サンクス
ScriptControlで on error resume next を呼び出してErr.Numberの代わりにすることにした
あと
FSOでファイルを削除するプログラムをmakeexeでexeにすると うまく動かないのは俺だけ?
Test.js
(略)
FSO.DeleteFile("Test.exe",true)
これをexeにして起動しても削除できないようです
>>457 つまりWSHの進化はこれで止まって、枯れた技術になり、仕様の変更とかややこしいこと考えなくて済むようになるってことか?
馬鹿っぱやいJScriptのHTAとかは作ってみたかったかも
IEオブジェクトを使ってスクリプトとスクリプトの間で共有メモリみたいな感じで通信=相互にデータのやり取りしようと思ってます。 データのやり取り専用のIEオブジェクトを最初に1つ作っといて、終了せずにずっと使い続けるって形です。 Shell.ApplicationでそのIEのオブジェクトを探して、そこにプロパティ付けて通信するってことです。 XPとIE8だと、new ActiveXObject('InternetExplorer.Application')でIEオブジェクトをつくって そこにプロパティを付けて、値を設定すればスクリプト間でデータのやり取りができました。 で、Vistaでも試したら問題なく動きました。 ところが、XPとIE6の古いPCではすぐにIEオブジェクトが消えてしまうようでうまく行きません。 ウィンドウを開いた普通のブラウザのIEオブジェクトに対してならデータのやり取りは出来ましたが、 ユーザーが何の気なしにそのウィンドウを閉じたらオシマイです。 ウィンドウなしのIEオブジェクトならそんな心配がないのでいい方法だと思ったんですが、 うまくいかない環境があるようです。結局、このPCはWindowsUpdateしてIE8の環境にまであげたらIEオブジェクトは消えずに通信できました。 となると、この先もなんらかのUPDATE次第で、IEオブジェクトを使った通信は出来たり出来なくなったりするのでしょうか? 簡単に動いたから勿体ない気持ちもあるけど、こんな方法は邪道だから辞めた方がいいのかなw テキストファイルを使うか、SFCminiを使って共有メモリの関数作っちゃったほうがいいんでしょうかね?
>となると、この先もなんらかのUPDATE次第で、IEオブジェクトを使った通信は出来たり出来なくなったりするのでしょうか? yes >簡単に動いたから勿体ない気持ちもあるけど、こんな方法は邪道だから辞めた方がいいのかなw yes >テキストファイルを使うか、SFCminiを使って共有メモリの関数作っちゃったほうがいいんでしょうかね? no
>となると、この先もなんらかのUPDATE次第で、IEオブジェクトを使った通信は出来たり出来なくなったりするのでしょうか?
yes
>簡単に動いたから勿体ない気持ちもあるけど、こんな方法は邪道だから辞めた方がいいのかなw
yes
>テキストファイルを使うか、SFCminiを使って共有メモリの関数作っちゃったほうがいいんでしょうかね?
no
そのものズバリのオブジェクトを公開するコンポーネントってのがある。こっちのほうが簡単。
>>このコンポーネント(COMサーバー)は、指定した COMオブジェクトを外部に公開し、
>>他のアプリケーションからアクセス出来るようにするものです。
RunObj.exe /RegServer で40KBのファイルを入れるだけ。
var ro = new ActiveXObject('Hyon.RunObject');
ttp://hyons.hp.infoseek.co.jp/#RunObjectComponent これでオブジェクトを作った側のプロセスが生きてる限り、オブジェクトのプロパティを共有できる。
相互に通信したいならこれで行ける。
DDE通信なら田楽サーバと田楽DLLでもいいんじゃね?
質問。 ScriptControlのAddObjectって一回に1つのオブジェクトしか追加できないんですか?
468 :
デフォルトの名無しさん :2010/08/24(火) 23:05:27
IScriptControl.AddObjectの定義を見ると1つだけのようだ。 [id(0x000009c4), helpstring("Add an object to the global namespace of the scripting engine"), helpcontext(0x00113f4d)] void AddObject( [in] BSTR Name, [in] IDispatch* Object, [in, optional, defaultvalue(0)] VARIANT_BOOL AddMembers);
サンクスです。ScriptControl AddObject でググッても多くの資料は出てこないようですが、 どこかに判りやすい解説をしてるページはありますか?
470 :
デフォルトの名無しさん :2010/08/26(木) 00:28:57
そもそもCOMに可変長引数ってあるの?
472 :
デフォルトの名無しさん :2010/08/26(木) 01:25:28
ScriptControl.Run("Name", arg1, arg2, ... argn) とか、ふつうにやるじゃんか。 MIDL上はSAFEARRAY(VARIANT)になってるみたいね。 [id(0x000007d3), vararg, helpstring("Call a procedure defined in the global module"), helpcontext(0x00113f09)] VARIANT Run( [in] BSTR ProcedureName, [in] SAFEARRAY(VARIANT)* Parameters);
WSHShell.Environment("Process"); でItemを作って他のファイルに変数を渡そうとしてるんだけど 文字化けして -1.#IND になってしまうのですがどうすればいいでしょうか
>>473 他のファイルってのが何かわからないけど、
環境変数はプロセス毎のもので子プロセスにしか
引き継がれないからではないだろうか
475 :
デフォルトの名無しさん :2010/09/04(土) 20:46:22
てs
476 :
デフォルトの名無しさん :2010/09/04(土) 20:47:30
Open OfficeのプログラムIDってありますか?
サゲ進行なんですかね 失礼
479 :
467 :2010/09/04(土) 21:13:49
>>478 ありがとうござます
公式にページがあったんですね。
エクセルよりめんどくさそう…
480 :
デフォルトの名無しさん :2010/09/14(火) 06:26:28
WMIか何かで、起動中のプロセスのコマンドラインオプションを得る方法はないでしょうか? Win32_Process では取得できないみたいで…
Win32APIのならわかるが
SFC miniとか使ってやるのでしょうか? Win32APIは使ったことがないので、教えてください
>>480 XP以降ならWin32_ProcessのCommandLineで取れるよ
Windows Script Host のエラーダイアログを非表示にすることはできませんか?
try catchとかon error resume nextとかやればいいんでないの
try catchでもエラーが出るようなんです underfined はNull またはオブジェクトではありません
そりゃ underfined はそうだろうね。
そうだね、ごめん。
001.txtから150.txtまでの空のテキストファイルを任意のフォルダに一括作成する方法を教えてください
そんなのをWSHでやるのは面倒臭い
set fso = wsh.CreateObject("Scripting.FileSystemObject") for i = 1 to 150 fso.CreateTextFile(right("00" & i, 3) + ".txt") next
494 :
デフォルトの名無しさん :2010/10/24(日) 14:49:15
>>492 何でやれば楽なんですか?
よろしけば教えてください
495 :
491 :2010/10/24(日) 14:54:40
逝ってヨシ
497 :
デフォルトの名無しさん :2010/10/24(日) 15:00:14
コマンドプロンプトのバッチでやるとかどう?
30分くらいのやり取りで完結してしまうとかスタックオーバーフロー並だな 過疎スレの癖にw
m9 くやしいのう くやしいのう
>>493 right("00" & i, 3)
コレに気づかず
if a < 100 then gyoubangou = "0" + a
if a < 10 then gyoubangou = "00" + a
なんて事してた。
サンクス。
2ch は心の荒んだ人の溜り場だな
△心の荒んだ人の溜り場 ○ヒトが心の歪みを、吐き出す場所。
32bitで動いてるか64bitで動いてるかどうやって判定する?
wscript.fullname
タスクマネージャ見れば32bitで動いてるプロセスは firefox.exe * 32 みたいになってる
貧乏人は32bit。所得が高い人は64bit。顔を見れば判る。
if( typeof( koumuin ) == "object" ){ WScript.Echo("あなたは勝ち組64bitです") }else{ WScript.Echo("あなたは消費とは無縁な32bitです") }
32bit winの32bit ieと64bit winの64bit ieが区別でけんな
folderexist("c:\windows\syswow64")
512 :
デフォルトの名無しさん :2010/11/22(月) 21:12:19
WindowsXPでコマンドプロンプトを使用しています。
colorコマンドや、cmd /t:である程度色は変更可能ですが、
ショートカットファイルでの設定
ttp://cmd-pro.com/pro_color.html のように、もっと色を細かく指定したいと考えています。
WSHのCreateShortcutで、色を指定したショートカットファイルを作ることはできないでしょうか?
よろしくお願いします。
\HKEY_CURRENT_USER\Console の中に ColorTable00 〜 ColorTable15 っていうのがデフォルト 16 色 個別の設定は標準の cmd.exe なら \HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe C:\hoge\fuga\hage.exe なら \HKEY_CURRENT_USER\Console\C:_hoge_fuga_hage.exe に ColorTableNN を追加
514 :
512 :2010/11/23(火) 06:35:27
Vistaだとうまくいかないみたいだけどwindows7ではどうなんだろう?
\HKEY_CURRENT_USER\Console\ショートカット名(.lnkを除く) の ColorTableNN を上書き で逝けました
ありがとうございます。 いけました。
cscriptから起動してるときにウィンドウのタイトルをjscriptから変えるにはどうしたらいいんだろ?
new ActiveXObject("WScript.Shell").Exec("cmd.exe /c title newtitle")
ありがとうございました。いけました。
IEをバージョンアップしてjscript.dllが新しくなったらWSH上のJScriptも早くなるの?
IE9からはJSscriptがIE内臓になって、COMの形で提供されなくなるらしい
それならそれでいいや。htaの動作や仕様はそこで固まるってことでいいわけ?
vbscriptも?
スクリプトエラーがexitcodeで判定できないの?
スクリプトでは0以外返せば、0ならエラーと分るな
なるほど 裏をかくわけですね
「ファイル名を指定して実行」をコマンドから起動したいのですが、 方法が解りません。なにか方法はないでしょうか?
send,#r
すれ違いだろ このすれではshell.filerunだろ
なんでそんな事したいのか解んねw
コマンドでもスクリプトでもどっちでもよいが、コマンドラインを「ファイル名を指定して実行」に送れるとよいのだが、無理だろな
startじゃだめなん?
昔はsendtoxがあったけどな
539 :
デフォルトの名無しさん :2010/12/18(土) 18:41:41
今は Send To Toys 2.6 てえのがある
wshからexcelブック開いて あるシートの最終行を取得したいんだけど どうしたらいいかな? LastRow = objExcel.Range("$A$1").End(xlDown).Rowとか .objExce.Cells.SpecialCells(xlLastCell).Address とかやると rangeプロパティのcellsオプションがとってこれねぇ! って怒られるんだけど。(objExcelはエクセルオブジェクトね)
work(current)book,work(current)sheetの指定が必要
ありがとう そして今度はまた違うエラーが出るんだが objExcel.workbooks("C:\test.xlsm").worksheets("data").Range("A5").End(xlDown).Row 未知の実行時エラー 800A03EC マイクロソフトのページによるとアカウントの権限が なんちゃらかんちゃら よくわからんのだが
馬鹿には無理
すんまそん
UsedRangeが使えなかったっけ? ってか、WSH?
ってか釣り
悲しいかな釣りではない 今オブジェクトライブラリの設定してる
UsedRange.Rowで開始位置はとれた。 なんでEnd(xlDown)が使えないの… お前らの反応からしてかなりあほな原因なんだろうな
xlDownに値が入ってないんだろうな
とれた。 ありがとう いいヒントだった
予想通りかなりあほな原因だったな
でもさ、いろんなサイトで (xlDown)ってそのまま使ってるんだぜ? 何あれ、エクセルマクロVBA専用なのか?
>>553 option explicitを知らんのか
>>554 上のほうについちょるよ。
馬鹿で申し訳ないんだけど
explicitステートメントとWSHぽくない
関係がよくわからんのだけど
>>556 but I can't
まぁ、でも実家帰る前に解決してよかったわthx
じゃあお前らまた来年ノシ
558 :
デフォルトの名無しさん :2010/12/29(水) 18:11:24
wshって将来なくなるの?
559 :
デフォルトの名無しさん :2010/12/29(水) 20:52:26
powershellになるんじゃね?
psつまらん
そんな簡単にはなくならんだろ 趣味で使ってるヤツらは切ってしまえばグチグチいいながらもなんか他のに移るだろうけど 業務で使ってるヤツがごろごろしてるだろうからいきなり切ったらそういう人種が大騒ぎするぞ
cmd.exeがなくなったか? command.comがなくなったか?
エントロピーは増大する
564 :
デフォルトの名無しさん :2010/12/30(木) 18:19:46
VBSなんですけど、例えばIEオブジェクトに自作のメソッドを追加することってできますか?
565 :
デフォルトの名無しさん :2010/12/31(金) 04:17:17
IEコンポーネント使ってます。 通常、ボタンのclickで新しいウインドウが開くページなのですが 「ポップアップはブロックされました。Ctrlキーを押しながら...」とステータスバーに表示されます。 ポップアップを表示させるにはどうすればよいでしょうか? ちなみにそのポップアップは無視したままで構いません。
馬鹿か?
どうすれば良いと?
568 :
デフォルトの名無しさん :2011/01/04(火) 14:42:43
馬鹿か?
五十歩百歩ってこと?
言いたいだけだろうよ
バカですか? YES→なら帰れ NO→なら自分で作れ
サイトからリンクたどってダウンロードしてくれるソフトなんて、山ほど有るのに、wshでやりたいバカで、自分で作れないバカ。 馬鹿面ライダーダブルってカンジ?
>>574 途中でフォームの入力があるよ。
馬鹿?
お前ら罵り合ってないで タイピングにいそしめよ
タイピストかよw
罵りあうのにタイピングしてる件
みんなWindows7つかってる? WSHとかってXPの頃と変りなく使えてる?
Cygwinの動きがおかしい
581 :
デフォルトの名無しさん :2011/01/16(日) 17:06:03
>579 自分も知りたいです。 PCのハードが不調で、ついでに7に移行しようか検討中...
582 :
デフォルトの名無しさん :2011/01/16(日) 17:34:08
>>579 Windows 7 64bitでWSHもHTAも特に問題なく使えてる。
>>582 サンクス
HTAも問題ないってのは朗報だね。
でも、IEのバージョンが上がると
HTAの方で出来ることも変わったりするから
油断は出来ねぇ
でも、IEのバージョンが上がると WSHの方で出来ることも変わったりするから 油断は出来ねぇ
IE9beta入れてるけど大抵のことはできること変わんないと思うよ。 あまり凝ったものは組んだことないけど、今までのものは普通に動いてる。
586 :
583 :2011/01/18(火) 17:35:11
ごめん別にWSHがIEの影響を受けるって意味じゃなくて WSH使ったプログラム書くときに IEに関係する機能を利用してると って事で。
ビスタから7はあまり変わらんかもしれんがxpからビスタや7は大変よ ie.navigate 保護モード無効のサイト が初っ端から動かんからな
お前らプログラム組む時どんな感じなの? サンプルコピペでちょっと変えて… の繰り返しって感じ?
アプリケーションプログラムではそれもあるけど、スクリプトはほぼベタ書き 精々コードスニペットから自前の雛形引っ張ってくるくらい スクリプトなんて、サンプル探すより自前で書いた方が早いようなことにしか使わないし
>>589 最初に、まずダーっと書く。
自分で用意してある関数群は使う場合があるけど
小さいプログラムやスクリプトの場合は使わない。
で、ある程度書いてから整理の方針を決めて
全体像を決めてから整理する。
主にGUI作るときはこんなん。
>>589 サンプルって言うか、自分の書き溜めたコードを雛形にして
書き起こしていくことが多いな・・・
書き捨て用のものと再利用を考慮したものでは書き方も変わってくる
WSHではあまり書き捨てはやらんな。 常に使っていればいいけど、 たまにしか使わなくなるとなると、メソッドとか思い出すのにちょっとめんどい。
最近、VBScript で書き上げても、移植性のなさ、この先のサポートを考えると、一抹の不安が残る今日この頃。
移植性のなさって具体的に何?
power shellに移行だな
>>595 移植性なんか心配してるヒマがあったら、
未来のおまいのために、コードをきれいに仕上げてコメント付けとけ。
言語を変えるのを移植とは言わんだろ
convertibility
>>599 うーん…
簡単にプログラミング言語を変えられない現状を鑑みれば、移植と言って良いと思うな。
そもそも、キミの言う移植がアセンブラレベルの意味合いっぽいじゃん?
もう、誰も、そんな事してないじゃん?
あたまわるそう
index=folderitem.getlink.geticonlocation(path) pathはbyref string wshでpathを得るにはどうすればよいのですか? wshでは不可能ですか?
普通にやればいいだけだと思うけど
無理だろ 諦めろ
wshじゃ内部型stringのvariant型の参照渡しだもんな
IEが起動しているかどうか調べる方法ってございませんか? 起動してない場合に特定の処理したいので・・・
>>607 WMI使えば出来るよ
WMIはWSH専用ではない汎用ライブラリで
WSHとは別物でありスレ違いになるので、ここでの詳細解説は伏せる
>>607 shell.applicationのshellwindows
610 :
デフォルトの名無しさん :2011/04/17(日) 12:43:48.33
AppActivateでChromeをアクティブにしてSendkeysでF5を押してページをリロードしたいのですが、F5が効きません IEとFirefoxは問題なくできました。 ただ、appActivateでChromeをアクティブにしてsleep 5000ぐらい待機させて、その間にアドレスバーにフォーカスを手動で移して晩生SendkeysでF5で更新ができました なのでALT+Dを送信してからF5を押せばいいのかと思い"%D"を送ってみたのですがアドレスバーにフォーカスが移りません Chromeでページをリロードできるところまで何とかやりたいのですが解決方法ございませんか?
↑ 晩生は打ち間違えですので読み飛ばしてください
612 :
610 :2011/04/18(月) 00:19:37.81
どうやらF5が効かないのではなくてアクティブになってないようでした ただ、コードを実行するとChromeが前面に表示されるのですが(Chromeを最小化した状態でも)、どうもChromeの上の青い箇所が薄くなってました(メモ帳で言えば灰色の状態) Chromeの仕様上WSHでは無理なんでしょうか?
メモ帳だってappactivate直後のsendkeysは受付ねーが? 適当にsleepしろ
↑sleep 5000って書いてあんぞ
それがどうした?
質問者はsleep書いてるのにsleepしろは矛盾している
質問者はsleepしてsendkeysしたと書いてるかバカめ
>ただ、appActivateでChromeをアクティブにしてsleep 5000ぐらい待機させて、その間にアドレスバーにフォーカスを手動で移して晩生SendkeysでF5で更新ができました >ただ、appActivateでChromeをアクティブにしてsleep 5000ぐらい待機させて、その間にアドレスバーにフォーカスを手動で移して晩生SendkeysでF5で更新ができました >ただ、appActivateでChromeをアクティブにしてsleep 5000ぐらい待機させて、その間にアドレスバーにフォーカスを手動で移して晩生SendkeysでF5で更新ができました >ただ、appActivateでChromeをアクティブにしてsleep 5000ぐらい待機させて、その間にアドレスバーにフォーカスを手動で移して晩生SendkeysでF5で更新ができました >ただ、appActivateでChromeをアクティブにしてsleep 5000ぐらい待機させて、その間にアドレスバーにフォーカスを手動で移して晩生SendkeysでF5で更新ができました >ただ、appActivateでChromeをアクティブにしてsleep 5000ぐらい待機させて、その間にアドレスバーにフォーカスを手動で移して晩生SendkeysでF5で更新ができました
>その間にアドレスバーにフォーカスを手動で移して晩生 これが見えぬか
手動にしないとF5が効かないって意味じゃないか。
>>619 お前ずっと書き込みしてる人?静観してたけどお前がレスすると話がおかしくなるから黙ってがいいよ。
621 :
610 :2011/04/18(月) 22:43:31.43
解決できました
FireFoxなら指定時間毎の自動更新が出来るけどChromeにはそういう機能はないの?
SendKeysはいいんだけどマウス動かす方法ないの?
MouseでなくWindowを動かせば?相対的なもんだろ?
625 :
デフォルトの名無しさん :2011/04/19(火) 23:52:03.13
Windows 転送ツールを使ってユーザープロファイルをコピーするのを、 WSHで定期的にタスクで自動実行したいのですが、簡単な方法はありますか? 代替えでAIKつかってコマンドでできるそうなのですが、 うまくイメージがとれませんでした。
>>624 windowの中をSendKeysで処理したい場合でTABキー移動もできない場合は?
sendkeys "% m{right}"
>>627 いや、だから…
例えばブラウザでサイト閲覧してて
SendKeysで入力フォームを自動入力させる処理があるとする
普通ならTABをSendKeysで送ってやれば入力フィールドから次のフィールドにフォーカスが当たる
しかし、FlashやTAB遷移できない要素はマウスでonFocusやonClickする必要がある
これをWSHでどうやればいいだろうかと
チーター乙
>>629 ゲーム等のbotプログラムをわざわざWSHでやろうとは思わんよ
業務自動化の使用範疇だよ
口調が気に食わない
wsh で c:\Program Files のように標準のプログラム保存フォルダを取得ってできないの? HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders 見てみたけど無いんだよね。
%ProgramFiles%
635 :
デフォルトの名無しさん :2011/05/21(土) 21:38:02.65
下記コードのhtmlにアクセスしたら、
指定のURLにリダイレクトさせたいんですが、
どうすればできるでしょうか?
『例』
<SCRIPT LANGUAGE="VBScript">
<!--
// リダイレクト先のパス指定
http://www.yahoo.co.jp/ -->
</SCRIPT>
スレ違い・・・・・じゃなかった板違い
ツールチップを表示したいのですが参考になるページございませんか?
638 :
デフォルトの名無しさん :2011/05/23(月) 10:32:32.56
Win7デスクトップで[並び替え]→[名前]を二回連続で繰り返すwshください
1回ものはどこかで見たがなぜ2回?
sendkeys
642 :
デフォルトの名無しさん :2011/05/30(月) 05:54:47.25
ファイル名を全角→半角にリネームする際にリネーム後のファイル名が重複した場合に aaa(1).txtというように番号をふって対処したいのですがどのように書いたら良いでしょうか? 〜〜〜 function rename(f) { var new_name = full_to_half(f.Name); var new_path = f.ParentFolder.Path + "\\" + new_name;
つづきです。 if (new_name != f.Name) { if (fso.FolderExists(new_path) || fso.FileExists(new_path)) { ??? } 〜〜〜
パスをカンマより前とカンマ以降に分けて変数に格納 c:\hoge\aaa.txt なら 前="c:\hoge\aaa" 後=".txt" 次に連番化用の変数作って var 連番文字変数 = ""; var 連番カウンタ変数 = 1; あとはループ作って new_path = 前 + 連番文字変数 + 後; Exists(new_path) //がfalseなら抜け 連番文字変数 = "(" + 連番カウンタ変数 + ")"; 連番カウンタ変数 += 1; ループ抜けたらnew_pathにリネーム これだけ 最初の「前 + 連番文字変数 + 後」では、連番文字変数が空だから 「"c:\hoge\aaa" + "" + ".txt"」=「c:\hoge\aaa.txt」 二回目は「連番文字変数」に「"(" + 連番カウンタ変数 + ")"」が入っているから 「"c:\hoge\aaa" + "(1)" + ".txt"」=「c:\hoge\aaa(1).txt」
645 :
642 :2011/05/30(月) 13:51:29.91
>>644 ご丁寧にレスを下さり有難うございます。
早速試してみたのですが、
この場合だと全角のaaa.txtを半角へとリネームする際に
既にaaa.txtとaaa(1).txtが存在しているとaaa(2).txtとはならずに
aaa(1).txで重複のエラーになってしまいます。
このような場合に無限に連番で処理することは出来ないのでしょうか?
new_path = 前 + 連番文字変数 + 後; Exists(new_path) //がfalseなら抜け 連番文字変数 = "(" + 連番カウンタ変数 + ")"; 連番カウンタ変数 += 1; はループ内に入れたか? ループ内に入れてあれば > 無限に連番で処理 されるはずだが、というか実際にされているが
647 :
642 :2011/05/30(月) 22:09:05.71
>>646 すいません、できました。
親切にお答えいただき有難うございました。
質問します。 IEのキャッシュを削除するスクリプトを使用したいと思っています。 そこで、下の URL のスクリプトを実行してみましたが、 C:\Documents and Settings\(ユーザー名)\Local Settings\Temporary Internet Files 内のファイルは一切削除されませんでした。 Temporary Internet Files フォルダ自体を削除することを試してみましたが、 「書き込みできません」とエラーが発生しました。 WSHでIEのキャッシュを削除する方法をご存じの方は、ご教示ください。 (環境) Windows XP SP3 IE 8
エクスプローラのツリーからは何故か見えないんだけど 実際には Temporary Internet Files\ の下に更に Content.IE5\ というフォルダがあって更にその中の複数のサブフォルダの中にファイルがある 下の URL のスクリプト ってどれよ?
650 :
648 :2011/06/07(火) 15:49:30.04
確かに出るね IEを終了させたら出なくなったから 使用中のキャシュは消せないんだろうね
Scripting Guy!はあほじゃね? cache.vbsとかみたほうがよくね?
>>651-652 レスありがとうございます。
こちらではIEの起動の有無にかかわらず
「書き込みできません」のエラーがでました。
また、cache.vbs の CacheClear.VBS を試してみましたが、
同スクリプトの17行あたりで
「エラーを特定できません」とのエラーダイアログ表示され、
エクスプローラーでキャッシュフォルダが開かれるだけでした。
そこで該当部分をコメントアウトして実行してみたところ、
エラーは表示されないものの、キャッシュフォルダ内のファイルなどは
一切消されないままでした。
引き続きご教示をよろしくお願いします。
cacheclear.vbsパッケージのcacheclear2.vbsなんかどう?
655 :
650 :2011/06/07(火) 19:36:13.03
>>654 ありがとうございました。
CacheClear2.VBS でうまく削除できました。
あぁ、本当に助かりました。4日くらい試行錯誤しまくっていました。
C.C.クリーナーみたいなソフトはインストールしたくない、或いは、サクっとキャッシュだけ削除したいから、スクリプトなのかな? なんか、必死なワリにはググる事しないんで、なんか変だなと思って。w
Scripting Guy!が出鱈目書いてると思わなかったんだろ さっさとこっちで聞けば教えてやったのに
なるほど…
ぽるぽと…
InternetExplorer.Applicationオブジェクトで質問なのですが、 ・JavaScriptを実行させる ・ページの一番下までスクロールさせる にはどうやればいいでしょうか?
Document.Scriptか Document.parentWindowがwindowオブジェクトなので そこからevalか何かでどうぞ
スクロール ie.document.parentWindow.scrollTo(0, ie.document.body.scrollHeight) JavaScript実行 ie.document.parentWindow.eval("alert(123)") または ie.document.parentWindow.execScript("alert(456)") なお、該当ページにもともと一切のスクリプトが含まれていない場合、 ie.document.parentWindow.eval() は失敗するので注意のこと (IE8 with Windows7 で確認)
scrollIntoView
>>662 execScriptはスクリプト無効で使えんよ
>>664 意味が分からない
自分の環境では、下のスクリプトの実行結果が SUCCESS, SUCCESS, ERROR, SUCCESS ってなるんだけど
使えないってどういうこと?
function foo(url) {
ie.navigate(url);
WScript.Sleep(3000);
ie.document.parentWindow.WScript = WScript;
try {
ie.document.parentWindow.eval("WScript.Echo('eval() SUCCESS');");
} catch(e) {WScript.Echo("eval() ERROR");}
try {
ie.document.parentWindow.execScript("WScript.Echo('execScript() SUCCESS');");
} catch(e) {WScript.Echo("execScript() ERROR");}
}
ie = new ActiveXObject("InternetExplorer.Application");
ie.visible = true;
foo("
http://www.yahoo.co.jp/ ");// scriptが含まれるページ
foo("
http://www.jaipa.or.jp/ipv6day/ ");// scriptが含まれないページ
そのまんまスクリプト無効のゾーンでは使えん
ADODB.Steam.LoadFromFile()てファイル全部メモリに読み込むんだな XPsp3(32bit 4GB)で1.8GB弱のバイナリファイル読ませたらメモリ不足になることがあった wshでこういうファイルを扱ういい方法はないものか
部分的に読み込んだらいいんじゃない?
細かく分割してファイルにして書きだして後から操作する。 ちょっと時間かかるがしょうがない。
>>666 だったらスクリプト有効にすればいいだろ
671 :
660 :2011/06/20(月) 09:31:05.44
スクリプト無効でもできる方法あるのに断ればいいじゃん
どうやるのどうやるの
WScript.Echoって、真偽値を"true" "false"みたいに 文字列で表示してくれないの? WScript.Echo(func()); #=> 0 or -1 こうじゃなくって、trueかfalseで表示してほしいんだけど
trueかfalseで表示するようにすればいいだけじゃん
WScript.Echo(func()?'true':'false');
WScript.Echo(func().toString()); または WScript.Echo(""+func());
>>681 ハラショー
EchoをラップしてtoStringの結果を出力する関数使うわ
ありがとう
1バイト分の16進数を10進数に直接変換する方法ってないかな? 現在、下のような処理を513行書いて凌いでるが、長すぎる… X = objText.Read(2)'テキストファイルから16進数を呼び出してます Select Case X Case "FE" Y = 254
Eval("&H"+X)
>>684 513行かかった処理が1行で終わるとは…感激したっす。激しく感謝!
NASにおいてある.jsファイルをダブルクリックすると出てくるセキュリティ警告がテラウザイ・・・ なんか良い警告の抑止方法はないですかね?
おまいらFileSystemObjectとかWScript.Shellとか使うとき どんなオブジェクト名にしとる? objFSOとかが多いみたいだけど。 俺は oFs、oWs みたいな感じ
FSO, WShellにしてる
>>687 俺は oFs、oSh な感じ
oWsはExcelのワークシートにしてる
なでしこ勝利おめこ
スクリプトはエディタでの色分けの関係で、未だにハンガリアンでやってる 数値や文字列などの値型変数と、オブジェクトなどの参照型変数を色分けしたいのだが FSOやWScript.Shellみたいに、1個作れば事足りるものばかりなら、単語登録すれば良いが XML、HTTP、ADOStreamなどは複数のインスタンスを同地に使う場合もあるし FSOでも下位のFile、Folderオブジェクトとかは複数作ることも多いので やはり決まったプレフィックス付けて正規表現で色分けするのが手っ取り早いからな 普通のプログラム言語では、もうハンガリアン使ってないけど、 昔はプログラム言語もハンガリアンでやっていて、ハンガリアンはすっかり身に浸みているから、 スクリプトとプログラム言語で記法を変えても混乱はしない
要約して
2chの1レスの文字数制限無いに収まるカキコすら読めないような奴に スクリプト、プログラム言語を扱うのは無理じゃね?
スクリプト、プログラムにしろ、無意味な長文は苦痛なだけ
そうだぬ
意味のある文章や処理の意味を見いだせない奴を無能と呼ぶ
意味のない文章や処理をだらだら書く奴を無能と呼ぶ
自己紹介?
菅ガンス
米倉
向かい側に座ってる女の人のスカートが短か過ぎて困る
>>691 エディタ何使ってんの?
俺はemacs系エディタ
色分けは最低限でよくね?慣れだとは思うけど
変数名はFOやwsって感じで2文字が多いかなぁ
parseInt使えよ
705 :
デフォルトの名無しさん :2011/08/03(水) 22:26:40.15
VBSで、ドライブ上のテキストファイル全てを対称に、キーワードを検索する処理を行う 処理としては、対象ファイルを一時ファイルにコピーして、一時ファイルから読み込んで検索、という感じ ところが、現実に存在していて、アクセス中でも隠しファイルでもない普通のファイルが「見つからない」といって53のエラーをはき出す事が頻繁に発生する。 どんな理由が考えられる? 訳あって、コードは載せれないけど。 すごく困っているので教えて!! いや、教えて下さい。
ファイル名くらい載せろ
考えられることはコードが間違ってるってことだな 13行目7桁目を調べろ
>>705 アクセス権
つか、エラー発生行ぐらい載せられるだろ
みんなエスパーじゃねえんだ
見られたらまずいんだろ
>>705 フォルダー名が違うとか、そんなんじゃないの?
Pathの組み立てに、
Path = Folder & "\" & Filename
とか、安易にやっちゃってんじゃないの?
Path = FSO.BuildPath(Folder, Filename)
ってやった方がいいよ
えすパー自慢?
CopyHereって、失敗しても何も言わないの? zipファイルの中にコピーしようとしてるんだけど、 コピーできてないのになんのエラーも出さずに終わる ちゃんと圧縮待ちはしてるのに
714 :
713 :2011/08/11(木) 10:05:47.92
追記 圧縮待ちは、下の2通りをためしました ・Items().Countが増えるまで待つ →いくら待っても増えなかった ・1秒待ってからOpenTextFile(zipfile,8,FALSE)でエラーなく開けるまで待つ →すぐに開けてしまった
まっそういうもんだな
716 :
705 :2011/08/13(土) 18:07:34.54
717 :
705 :2011/08/13(土) 18:15:11.57
途中で書き込んでしもた For Each temp2 In f.Files Ext = LCase(FS.GetExtensionName(FoundFile)) if Ext="txt" then TextCheck(temp2) enf if Next みたいな感じで、このTextCheckというのが、テキストの全文検索ルーチンです。 引数のテキストファイルを一時ファイルにコピーして内容を検査する、という処理ですが、アクセス権にも問題が無く、実際に存在しているのに「書き込めません」とかってエラーになる。 でも、実際には一時ファイルはその都度作成しています。 いくつか検証したら、xpの場合、必ず同じフォルダでエラーを起こす。また、7の場合だと、"Application Data\Application Data...."の無限ジャンクションで処理を勝手に辞めてしまって終了してしまいます。 とにかく、ドライブ中の、アクセス権があるテキストファイルをまんべんなく検索して処理する、というのがうまくいっていないみたいです。 このTextCheckルーチン自体を単体のスクリプトとして動作させた場合には問題がないので、原因とは考えられません。
>>717 「GetExtensionNameで拡張子をとってみてtxtだったら
TextCheck() というサブルーチンに投げてる」
ってだけ?
エラー内容の方が大事なんだが
>現実に存在していて、アクセス中でも隠しファイルでもない
>普通のファイルが「見つからない」といって53のエラーを
>はき出す事が頻繁に発生する。
どこでエラーが出てるか確認してみたら?
GetExtensionNameの時にエラーが出てるんか?
取ろうとしてるフォルダは普通の場所なんだよね。
Application Data とか普通じゃない雰囲気がぷんぷんするんだが。
FoundFileに何を設定してんのかな?
720 :
705 :2011/08/15(月) 11:14:29.92
あ、失礼。Foundfileはtemp2。
temp2のデフォルトプロパティはなんだっけ?
つーか、書き込めないって事は、テンポラリーフォルダーへのコピーに失敗してるんじゃないの? TextCheckのルーチン内に原因があったりしてな
圧縮ファイルをテンポラリに解凍して、解凍ファイルを読みに行く処理を書いた時 「ファイルが見つからない」ってなるユーザーがいて、その時はウエイトを掛けて 回避した。
>>717 いたるところにログを書き出すルーチン組み込んでみれ。
ファイル列挙中のフォルダの配下のファイルを操作したせいで、 列挙処理がおかしくなってるとか
一つ疑問なんだが、一時コピーする必要はあるのか? 本体そのものにアクセスするんじゃまずいわけがあるの? もしかして他のアプリが開いてる可能性のあるログファイルの類なんじゃ… ロックされててアクセスできないとか。
728 :
705 :2011/08/18(木) 21:25:22.77
皆さん、ありがとうございます。取り急ぎ、レスへの回答です。
>>727 えーと、一時コピーする理由は、本体を必要とする他のアプリに影響を与えないようにスナップショットを取るためです。
ただし、この処理を行うときは、他の常駐アプリやサービスはウィルス検査等も含め、停止させています。
>>726 それはないです。過去に作成したきりで、全くアクセスしていないファイルでも同じように発生します。
>>725 ログじゃないですが、stopでデバッガが起動する、という事らしいのですが私の環境ではデバッガのデの字も起動しません。
もちろん、デバッガ本体はインスコしてますが、7には非対応とか?
>>723 ウェイトと、あと無限ループでファイルのコピーが終わったら次の処理、というのは試してみましたが、結果は同じでした。
>>728 起動しないデバッガで、何をするつもりなの?
甘えてないで、ログ取れば?
>>705 そもそもどんなエラーメッセージが出力されているかもわからず回答できるわけが無い。
デバッガを起動できないならログ出力の関数を自作してデバッグすればいいだけのこと。
ログ出力の関数のコードすら書けないということなら論外。
もしかしてalertさえも使ったこと無いのか?
見てて、あると思うか?
733 :
705 :2011/08/20(土) 11:29:25.11
>>729 処理の至る所にログ吐き出し処理を入れてみました。やはり、ちゃんと存在していて、アクセスされていないディレクトリをを削除しようとしているときに「書き込みできません」になったりしてます。
でも、そのディレクトリを削除するためだけのスクリプトを別に作って削除したらちゃんと削除できるんですよね。
つまり、[削除前処理]→[フォルダ削除]ってやろうとしているときに、じつは[削除前処理]が終わっていないって事なんでしょうか。
>>730 alertは使ったことないですが、msgboxでErr.Descriptionを表示させてます。
いつからディレクトリ削除の話になったんだ? それなら十中八九まるまるに決まってるじゃん でも問題を後出しにするような奴には教えん
>>705 自分で解決しようっていう意思が全く無いなw
ここで嘘でもいいからそうだって言われれば安心するならあえて言おう。
甘ったれるなw
サイトの自己宣伝だろw 他人が参考にするようなもんじゃないもの
そうだな レベルが合ってる 偶然にしては出来過ぎだな
>>733 >>710 が、すげーヒントをくれてるのに、何で無視してるん?
まじ、自分でやる気がないのな
そういえば、処理完了前に次の処理をしようとしたせいで上手くいかないって状態の時に 原因解明のためにMsgBox出したら、それによって処理かぶりが無くなってしまい 「観測すると現象が起きなくなる」 という、まるで量子力学かのような状態になって アルェー って成ったことが みんな一度はあるんじゃないか? 直ぐ気づくというか、こうなった時点で答えが分かるようなもんだけど。
HDDの"ディスクの書き込みキャッシュを有効にする"って設定は関係あったりするの?
関係ないと思うが。
聞 く 前 に 何 で 試 さ な い の か ?
め ん ど う だ か ら
つまりそれは、出来ないんじゃなくて やらないだけだな もういいだろ
t
WindowsXPを使用しています。 WSHから外部アプリケーション(例えばメモ帳)を起動するときに 起動位置を座標指定して起動することはできないのでしょうか? できるようであれば方法を教えて下さい。
Win32って、Win32APIのことかな? わざわざWin32APIなんて使わなくても、WMIで出来るよ そもそもWin32APIはWSHから直接使えないしw
うそだろ
WSHからPowerShellをキックすりゃえーよ
751 :
746 :2011/09/05(月) 21:32:39.78
レスありがとうございます。
>>747 WSHからWin32APIを使用する方法がわからず、参考URLを元に
VB.NETで作っているところです。
>>748 ,750
PowerShellからもできるんですね。WSHというこだわりはないので
(ショートカットをダブルクリックしたら指定プログラムを指定座標で起動したい)
PowerShellでの方法も調べてみます。
WMIの存在もはじめて知りました。こちらも調べてみます。
>>750 は
WSHやめてRubyやPythonにした方がいいね
>>749 何が嘘だと?
WMIで出来るのは事実だし、WSHからWin32APIが直接呼べないのも間違いじゃないだろ。
>752 WSHで「直接」なんて意味ないでしょ。なんだって間接でしょ?
WSH から PowerShell は、「直接」呼べるけど、PowerShell スクリプトは、PowerShell を 通して「間接」的に実行するってことでしょ。 WSH は、どっかで Win32API の CreateProcess( ) { かどうかはわからんが、似たような API } を使ってるから間接だという主張なの?
間接的に、呼び出した何かでどうこうするって話なら なんぼでもやりようあるからな。
WindowsXpにて手動でデスクトップのアイコンを全て表示/非表示に切り替える事ができますが、 これでWSHで実装する事は可能でしょうか? 手動だとデスクトップで右クリック→i→dでできる操作をWSHで実装し、ショートカットアイコンにショートカットキーを 設けてキー操作で簡単に行いたいのです。 最悪SendKeysで、と思ったのですが、デスクトップ上で右クリックする際デスクトップアイコンにフォーカスが当たっていると 失敗してしまいます。因みに右クリックはSendKeys でShift+F10を実行している。
選択" " 解除"^ "
f5
761 :
758 :2011/09/07(水) 18:41:42.93
>>759 意味不明なり
>>760 更新じゃないです
アイコン非表示は手動でやれば直ぐ消えます
F5とか不要です
デスクトップアイコンにフォーカスが当たっていると 失敗してしまいます。 759 :デフォルトの名無しさん:2011/09/07(水) 14:34:39.36 選択" " 解除"^ " 760 :デフォルトの名無しさん:2011/09/07(水) 14:58:23.96 f5
ShellFolderView.SelectItem
hideicons
>>762-763 個人的にはSendKeysは使いたくなかったので理解できませんでした。すいません
>>764 レジストリをすっかり見落としていました
有り難う御座います
無事解決しそうです
766 :
758 :2011/09/08(木) 10:14:52.72
ダメだできない。分からない
>>759 ってどう言う事なんでしょうか?
F5でアイコンフォーカスを外せる事は分かったのですが
767 :
758 :2011/09/08(木) 10:17:29.55
すいません、理解できました sendkeysで実装するしかないんですかね、やっぱ
現状 var ws = WScript.CreateObject('WScript.Shell'); //デスクトップをを表示(こいつが上手く機能してくれない) ws.run('C:\\hoge\\desktop.lnk'); WScript.Sleep(1000); ws.SendKeys('{F5}'); WScrip.Sleep(1000); ws.SendKeys('+{F10}'); WScript.Sleep(200); ws.SendKeys('i'); WScript.Sleep(200); ws.SendKeys('d'); しかもこれだとデスクトップ表示中には使えない デスクトップ表示切り替えいい方法ないですかね?
なにが死体ん?
770 :
758 :2011/09/08(木) 16:16:01.50
>>768 は
>>758 です
すいません
やりたい事は
>>758 結局sendkeysで実装中
で、問題が1点
デスクトップ上で
>>768 を実行すると上手くいきますが
別のウィンドウが立ち上がっているとアクティブウィンドウ上で
>>758 を走らせるだけなので失敗します
アクティブウィンドウがあるか?今現在デスクトップを表示しているのか?
を判定する術はありますでしょうか?
If ws.AppActivate("program manager") Then
レジストリ変えても反映されんな なんか方法ない?
面倒だから、vc++にしちゃいなよ。 #include <Windows.h> int main(int argc, char* argv[]) { HWND hWnd; BOOL status; hWnd = FindWindow("ProgMan",NULL); status = ShowWindow(hWnd,SW_HIDE); if(!status){ ShowWindow(hWnd,SW_SHOW); } return 0; }
thx!
776 :
758 :2011/09/10(土) 00:03:58.12
>>775 有難う御座いました。目的が達成できました。
ソース内容がさっぱり理解できないのでググッて勉強致します。
日付的に考えて、ここを見ている方のブログか、
>>775 様本人のブログだと思いますが、
フィード登録させて頂きました。シンプルで見易いし、
私の欲しい情報と色々マッチする良いブログだと思いました。
ご存知かとは思いますが、
ブログにはデスクトップにアイコン置くと戻せないと、ありますが、
デスクトップにショートカットキーを設定したショートカットアイコンを設置しておくと
気軽にアイコン表示/非表示切替ができますよ。
因みにWindows7でも問題なく動きました。
>>775 オブジェクトねぇよってエラーになる
Administratorじゃなきゃダメ?
D&Dされたファイルを、特定ディレクトリ下にあるファイル名と前方一致するディレクトリに移動させて ディレクトリ名の末尾に付いてる数字を+1するスクリプトを書きたいんだがどうすればいいのか、何から学べばいいのか分からない。
VBScript FileSystemObject
JScriptにしとけ
はーい
教えてください。 今、写真ファイルに適当な名前がついていて、 これのファイル名を、 写真ファイル右クリック→プロパティ→詳細 で進んだ先の「タイトル」と同じものに変更したいと思っています。 そこで、GetFileで写真ファイルのオブジェクトを作った後に どのようなプロパティで「タイトル」を取得すればよいですか? よろしくお願いします。 win7 homeです
FolderItem.ExtendedProperty("System.Title")
ありがとうございます。 試してみます。
糞仕様、来んな
来なかったから気にせんでもええ
来たよ
こっちくんな
虫
テキスト変換で行き詰まってるんだけど、 たとえば、あ→こ、こ→て、て→あ、って処理をやろうとすると、 全部巡り巡って「あ」になってしまう現象を防いで置換するにはどうすればいい? 処理する量が膨大故に、あ→つ といった一時待避方法は使わずにできれば…
replaceで分けてやるからだろ regexpで一度にやればええだろ
ううむ…すみません、Replaceさえ使わずに置換してた上、正規表現が判らない… ネット見ながら書き直してみたけど、思った通りに動かない…
text.replace('a|b|c|d','g',function(a) { var ans=''; switch(a) { case 'a' : ans='A';break; case 'b' : ans='B';break; ・・・ default: ans='baka'; } return ans; });
795 :
794 :2011/10/10(月) 19:20:12.25
コッチの方が簡単か。 var map=[]; map['a']='A'; map['b']='B'; text.replace('a|b','g',function(a){return map[a];});
tr/// みたいなのが JS にもあればなあ
あるよ
こうか text.replace(/a|b/g, function(a){return map[a];})
>>798 >>795 じゃないけど正規表現の書き方が間違ってるので勝手に修正
テストはしていない
//textに処理対象文字列
var map=[];
//['置換したい文字']='置換後文字';
map['a']='A';
map['b']='B';
//hogeに置換後文字列値
hoge=text.replace(/a|b/ig,function(a){return map[a];});
801 :
795 :2011/10/13(木) 21:00:47.60
>>798-800 ごめんね。
DMonkeyで使えるから、Jscriptでも使えると思っていた。
var map={a:'A',b:'B'};
>>801 ドンマイ
正規表現を複雑にせずに置換処理する連想配列を使うこの方法は個人的に好きです
改修も簡単だしね
vbscriptがほとんどでjscriptはあんまり使ってなかったけど 無名関数が使えるのか…知らなかったorz
すいません、質問なんですが、例えばURLが
http://www.atmarkit.co.jp/fwin2k/tutor/ ?????/cformwsh01_01.html
までしか分かってない場合でも、WSHから飛ぶことって出来ますか?
ちなみに?????はcformwsh01だったりするのですが
ここに規則性がなく分からない場合でも飛べるようになりたいと思っています。
可能であれば何かヒントを頂けると嬉しいです。
これからWSHを学んでいきたい初心者ですが、どうかよろしくお願いします。
WSH以外で飛べるならWSHでも飛べるんじゃないか
WSHの上に立って膝をゆっくり曲げて瞬間的に伸ばせ
?はだめだけどrun urlで飛ばないか?
>>806 スレ違い
もし一部不明でも飛ばしてくれるとしたら
飛ばすのはWSHではなくサーバーがやってるので
WSHスレで聞くべき内容じゃない
WSHから飛ぶことって出来ますか? という質問はスレ違いじゃなかろう?
方法としては、URL候補をまず調べ、その結果からワード検索してURLをリストアップし、順次実行。 URL候補は、分かっている部分からweb検索するといい。 (例 googleに対して、2つの検索ワード指定 www.atmarkit.co.jp/fwin2k/tutor cformwsh01_01するとか)
ユニーク処理って?
ここはブルートフォースで行きましょうか
>>815 でやっと気付いた
結局、それ系がやりたいっぽいね
納得したわw
BFAよりレインボーテーブル使った処理のが早くない?
合わせ技が1番いいんだろうけどアルゴリズム云々でなく運だからなー
でも
>>806 読んだ感じidテーブルは入手済みで後は蓮だけっぽいね
817 :
806 :2011/10/19(水) 17:57:12.32
皆様ありがとうございました。紹介頂いた方法をいくつか試してみましたが 私にはまだスクリプトがしっかり書けていないためもあり 成功することが出来ませんでした。 しかし、どれも大変為になるレスばかりでしたので 何度も見直して調べてみようと思います。 まずはユニーク処理を頑張ってみます。どうもありがとうございました。 例えば?????を.*なんかの正規表現に出来るなら もしくは、ホームページの仕組みが/というのがWindowsでいう\と同じ感じだったら それをbatに当てはめて考えられないかなぁと思っていたんですが違うみたいですね。 例えばcformwsh01_01.htmlのURLが完全に分かっている場合にcformwsh01_02.htmlを探すとき カレントディレクトリを1階層上げて、そこからcformwsh01_02.htmlを全てのフォルダで探して しかし、実際はテーブルでしたりハッシュでしたり、そーいった概念とは違うのですね。 ほんと無知ですいません。並行してホームページの仕組みをjavascriptでjscriptと一緒に学んでいこうと思います。 どうもありがとうございました。
818 :
806 :2011/10/19(水) 17:59:41.01
すいません、改行で空いた下の文章なんですが これは前に書き途中で削除し忘れた駄文になりますので、気にしないで下さい。 失礼しまいた。
>>817 batで正規表現は使えない
やるならjscriptかvbscript
てか、そもそも正規表現いらない
if文でやればいい
AだったらBかCか…をランダムに表示はできる
階層も関係なくできる
>>819 うそこくな findstr知らんあほか?
>>817 >例えばcformwsh01_01.htmlのURLが完全に分かっている場合にcformwsh01_02.htmlを探すとき
その方法で良いなら、cformwsh01_01.htmlのページにあるcformwsh01_02.htmlのリンクから飛ぶじゃ駄目なの?
まあ、俺はやり方分からないんであれだけど。
822 :
806 :2011/10/19(水) 20:40:11.86
>>819 >AだったらBかCか…をランダムに表示はできる
そのような方法もあるのですね。ありがとうございます、参考にしてみます。
>>821 それでも全然大丈夫です。その方法に気付きませんでした、ありがとうございます。
823 :
806 :2011/10/19(水) 20:42:53.53
WSHで入力したURLから、そのURL自体のスクリプト(ソースコードと呼べばよいのでしょうか?)を 展開するにはどうればよいのでしょうか?キーワードだけでも教えて頂けないでしょうか? もしそれが可能であれば、例えば先の例でリンクはここにあったので <body> <div id="main"> <div id="centercol"> <taable width=大きさ> <tbody> <tr> <td> <div align="right"> <font size="2"> Page1 <a href="cformwsh01_02.html">Page2</a> 正規表現からここを検索して取得できるように頑張ります。 (ここがhttp;//から始まるURLになっている場合を想定しています) (ここであればURLは完全に表示されれている場合を想定しています)
>>820 findstr使ったこと無いだろ…
あんなの正規表現もどきのワイルドカードだよ
ワイルドカードと正規表現の別もわからないのか?
>>820 正規表現知らない小僧は黙ってた方がいいぞw
お前正規表現が何かもわかってないでしょ
findstrのマッチングは正規表現を軽く齧った程度の代物で 例えばA又はBといった表現は出来ないし 行のどこにマッチしたかというようなことはわからんな。
>>823 もう突っ込みどころ多すぎるから少しは自分で調べて勉強しろ
>展開するにはどうればよいのでしょうか?
file:///c:\hoge.js
http:でやりたいならhttp:をfile:/で置換しろw >もしそれが可能であれば、例えば先の例でリンクはここにあったので
何の話だよwもうエスパーでいくぞw
<a href="#" onclick="window.open('cformwsh01_02.html','_self')">Page2</a>
お前に正規表現はまだ早過ぎる
Jscriptの基本を勉強しろ
>>827 否定論理和の否定の戻り読みはどうやんの?findstrでできんだろ?w
さっさとコード貼れよw
>>831 そんな気はちょっとしてた
でも、レス番号なるべくいれようぜ
>>831 あれ?
>>825 は正規表現とfindstrは別モノ
ワイルドカードは正規表現じゃねーよ派だろ
やっぱりお前は間違ってる
ワイルドカードは正規表現のサブセットじゃねーよ おバカさん どんな正規表現でもワイルドカードにはならんわ
>>835 排他的論理和の否定戻り読みも書いてみて下さいね
var hoge='hoge';
string type変数に値が入った瞬間、それは正規表現ですってバカかよw
そんな事誰も言ってねーだろw
>>820 はstring型変数に値入れることを正規表現でやるって言うの?
そもそもcmdってWSHなん?
正規表現オタクはすれ違いだしうざいよ
841 :
デフォルトの名無しさん :2011/10/20(木) 18:00:54.25
>batで正規表現は使えない >あんなの正規表現もどきのワイルドカードだよ 九州電力佐賀県知事執行役員みたいだな
うん
否定戻り読みが無いと正規表現とは言わないっていう宗教にはまっているのだろう
宗教じゃないよ 粘着質由来の強迫神経症だろ
一般的にワイルドカード程度で正規表現なんて言わない wordの検索もexcelの式もExplorerの検索も正規表現できるなんて言ったら笑われるぞ そしてcmdはスレ違い
例えサブセットだろうと正規表現を使って検索するとMSは説明に明記してるんだから 単なるワイルドカードとは一線を画しておかなきゃね。
>>845 Explorerの検索が正規表現だと誰か言ってるのか?
幻聴まで聞こえるのはやばいよ 悪いことは言わん 病院行けよ
849 :
デフォルトの名無しさん :2011/10/22(土) 02:27:17.58
うん
>>848 MSが間接的に言ってる
*でワイルドカード検索できるからね
それは正規表現でしょ?w
もうどうしようもないレベル
VBSなんぞ窓から投げ捨てろ
>>853 そういうことは知らない ワイルドカードと正規表現のことだけ聞いて
>>854 VBSを持って病院に行ったほうがいいよ
>>850 >MSが間接的に言ってる
どこで言ってるかURL教えて
ダイレクトにアタマの中で聞こえるだろ?
患者の主張は分裂してないか? ワイルドカードは正規表現 findstrの正規表現はワイルドカード
うにぁ 1 findstrの正規表現はワイルドカード 2 ワイルドカードは正規表現 3 findstrの正規表現は正規表現 という三段論法かも
つーかVBAがVB6基調である限り、VBSも残るだろうな
なんか勘違いしてんだろ
正規表現は元々UNIXコマンドが発祥でPerlで発展して、他はそれ準拠ってうたったりしてるようなもんだから、MSでどーのこーのいってもしょうがない。
>>866 はい
Explorer.exeの検索も*がワイルドカードなのでMSKK的には正規表現
WordやExcelも同様
因みに私はこれらを正規表現と認めたくない派です
>>867 おまいが、findstrで*をワイルドカードだと思って使ったら、
自分の思った動作をしないだろうし、その時はバグだとでも騒ぐ気なのかね?
また、word,excelの検索は独自でこれも正規表現とはMSは言ってないだろ。
まあ、検索オプションに[ワイルドカードを使用する(U)]というものは存在するがな。
>>868 なるほど
でもfindstrが正規表現ってのも何だかなー
Wordのトリッキーな検索も似非正規表現っぽいし
まぁWSHじゃないからスレ違いなんだけどねw
>>867 ワイルドカードを使って検索するにチェック入れといて何言ってんの君?
ワイルドカードを使って検索するー>ワイルドカードを使用する だね
なあんだ直らない病気だったのか
>>848 幻聴じゃなくて幻視だろ
おまいこそ病院逝け
なに幻視が聞こえるのか?そりゃ大変だな
何言ってんの君? まあ、「言う」じゃなくて「書く」だろとかのたまうんだろうな。
口が滑ったんじゃなく手が滑ったんだとか
正気表現でw
やめて!私のために争わないで!
正気狂言だろw
findstrが正規表現じゃないなら grepとかも正規表現じゃないって事にならないか? どっちも.の意味同じだよね
g/RE/p edの作者が何の気なしに作ったg/正規表現/p がちょー便利すぎるって外だしコマンドgrepになったのが正規表現の産声なんだよ。unixのmanに誇らしげに当時のストーリーが書いてある。 findstrはMS社員の劣化コピー。
findstrがあまりに機能が低くて正規表現と言いたくないというのは分かる。 が、それを根拠にエクスプローラの検索がワイルドカード指定できるからこれも正規表現だ という主張は3段論法でも無ければ風が吹いたら桶屋がもうかるの論理でも無く、 あまりにも突飛すぎて誰もついていけない。
>>883 そう書くと、言葉通りに受け取って、誰もそんなこと言ってないぞ、とか言われるぞ。
まあ俺はバカじゃないからそんなことは言わないが。
否定戻り読みが無いと正規表現とは言わないなら findstrだけじゃなくてVBSやJSのRegExpも正規表現じゃないって事になっちゃうんだが
>>883 Explorerのワイルドカードが正規表現でない根拠は?
正規表現とはある文字xで多種類文字列が取得できる表現の事だよ?
要は1:nの関係が成り立つ変数として確立できれば正規表現
>>886 じゃあfindstrも正規表現でいいよね
どっかにAddToFavoriteみたいなAddToHistoryってなかったっけ?
だれもWikipediaとかで調べてないのか? *と(|)に相当する機能がない奴は正規表現じゃないだろ
>>892 wikipediaなんて正式的じゃないし
正規表現の正確な決まりなんてない
言ったモン勝ち状態
正規表現はバズワード
Microsoftは、findstrの検索は正規表現と言ってるが、explorerの検索を正規表現と言ってる記述は無い。 他人が正規表現をどう規定しよう(例えばPOSIX準拠とか、パターンを使ってればワイルドカードもOK)が 勝手ではあるが、少なくともMicrosoftはワイルドカードと正規表現は一緒にはしていないことは確か。
横からレスすると、
一般化した形式言語理論での正規表現なら載ってるね。
1) Σのメンバーは正規表現である。
2) emptyは正規表現である。
3) X, Yが正規表現のとき、連接(X・Y)と合併(X+Y)とKleeneスター(X*)は正規表現である。
4) 以上の手順で得られるものだけが正規表現である。
2つの2項演算子と1つの単項演算子だが、実際はXY, X|Y, X*だから、
*と|の2つと言っても間違いじゃないよね。
で、findstrはこれに該当するわけで立派に正規表現と言えるし、
explorerの検索は該当しないので正規表現とは言えない。
というのが、
>>892 の主張だろう。
補足 単項演算しKleeneスターは 1) V が文字列の集合であるとき、V* は、空文字列 ε を含み、文字列連結演算に 閉じているような最小の集合と定義される。 この集合は、別の書き方をすれば、V に含まれるゼロ個以上の文字列を連結して 作ることができるような文字列の集合である。 2) V がシンボル・文字の集合であるとき、V* は、空文字列を含む V 上の あらゆる文字列の集合である。 一般化してモノイドMの2項演算子としても表せる。 1) (閉包)あらゆる a、b ∈ M に対し、a . b ∈ M 2) (結合法則)あらゆる a、b 、c ∈ M に対し、(a . b) . c = a . (b . c) 3) (単位元)ある ε ∈ M が存在して、あらゆる a ∈ M で a . ε = ε . a = a
すれ違いうざいんだけどよそ行ってくれない
ヒデー展開だな スレ違いもそうだが、ここまで、完全に正しいことを言ってる奴が一人も居ないんだが、、、 HTAスレじゃなくて正規表現スレもあるんだから、どっちに行ってもいいが、ここで低レベルな スレ違い話続けるのはやめてくれ
>>900 ことプログラム言語に関しての正規表現はバズワード
訳が悪いんじゃね Normal Expressionみたい 正規表現厨はabnormalだね
sendKeysの逆ってできますか? キー入力を常に監視して入力されたキーコードをgetしてテキストに出力したいです ただ、ブラウザのwindow内でなくwindows上での全てのキー入力を取得したいです
何をタクラマカン砂漠
できますよ
正規表現を使えばできるのでは?
ワイルドカードじゃむりぽ?
やなこった
まずふくをぬぎます
頭悪いとそういうのが面白いものかね?
馬鹿には無理
頭悪いとそういうのが面白いものかね?
面白い
頭悪い
あくい
919 :
デフォルトの名無しさん :2011/12/15(木) 14:36:06.47
vbsのOPTION EXPLICITってクラスメソッド内だと機能してない 気がするけど気のせい?
どんまい
気のせい
木の精
メチルアルコール?
ちょっとスレチを承知だけど、質問させてください。 DynamicWrapper をこれまでWinXP 32bit で使ってきてたけど、 Win7 64bit に変えたら、dllの登録時にエラーが出てしまう。 (いま、出先の携帯からのカキコでエラー番号とか失念) ググっても、英語の質問掲示板とかで、同症状の質問が見つかるだけで 回答がない。 DynamicWrapperなんて、もはやユーザー少ないのかしら。
単に管理者権限がないだけじゃねーの UAC
927 :
924 :2012/01/25(水) 20:51:05.87
>>925 ,
>>926 レスありがとうございます。
>regsvr32 dynwrap.dll
で
「モジュール "dynwrap.dll" は読み込まれましたが、
DllRegisterServerへの呼び出しはエラーコード
0x80040201 により失敗しました。.... 」
とのエラーが出ていました。
>>925 さん紹介URLのように、
%WINDIR%\SysWOW64\Regsvr32.exe
して見ましたが、上記と同じエラーが出てダメでした。
>>926 さんご指摘に従って、
管理者権限で実行したコマンドプロンプトで実行
(>regsvr32 dynwrap.dll)
したところ、無事に登録ができました。
WSHって息してる?今はじめて存在知ったんだけど。実はちょー便利だったりするの?
コマンドプロンプトやBATが使えない人にとっては無用の長物であることには違いが無いさ
長物って。別に何も邪魔になっとらんやろ
WSHには、スクリプトウィルス実行ホストという役目もあるから 使わない人にとっては正に無用の長物じゃね?
おまえの話が一番無用の長物じゃね?
最近はパワシェル使うことが多くなった
934 :
デフォルトの名無しさん :2012/02/03(金) 21:32:04.88
powershellってまただいぶ違ってたりするの?
にたようなもん
PowerShellはWSHと機能性だけ比較すれば優位だが 他の言語や開発環境まで視野に入れていろんなコストなども含めて総合的に判断すると ほとんど存在価値が無くなってしまう 俺も一通り使ったけどPowerShell使うのは無駄以外の何物でもないと気付いて使わなくなった
>>928 たとえば、Microsoft Officeで作業する場所で、
C++, C#などの開発環境をインストールしてはならない場合でも、
WSHならインストールされてるからつかえる(VBAもつかえるだろう)
>>937 そんな意味でも特別な許可設定しないとスクリプトをダブルクリックで動かすことすらできない PowerShell はダメだな
能力はあるのに
PowerShell、Windows 7からはOS標準になってる。 perlやrubyみたいな他のスクリプト言語に比べたら大きなアドバンテージだけど デフォルトで実行許可されてないのが痛い。痛すぎる
>>940 csc,vbc,jscが普通に入ってるの知らないんだwww
実行ポリシー変えられるときは変えてるし、できない時は スクリプトを読み込んでeval(Invoke-Expression)しちゃえばいいから、 まあそこまで困ってはいない
サクラエディタでWSHをマクロとして使えることに気づいた こんな感じにいろんなソフトがマクロとして使ってるのかな
悔し紛れのオウム返し
悔し紛れの言い張り返し
Windows XP, Office 2003の職場めずらしくないでしょ
なるほど、そういう方向の勘違いか
プログラムを実行させる時、 プロセス1とプロセス2は終了を待つことなく同時に実行し、 プロセス1とプロセス2が両方とも終了したらプロセス3に移行するにはどう書けばいいですか?
exec exec do while .state loop exec
popup出しつつ、ステートメントは次へ行くことって出来ますか? runにはあるのに。
Popupを出すスクリプトをRunで呼び出す
>>954 shell = new ActiveXObject("WScript.Shell")
shell.Popup("hello")
とだけ書かれたスクリプトを
shell.Run("wscript msg.js")
みたいに呼べばいい
957 :
956 :2012/02/18(土) 15:05:10.21
かぶった
runじゃ閉じれないが?
んじゃexec
WshShortcutではマイコンピュータなどのショートカットは扱えませんか? ショートカットからTargetPathなどを取り出してShellExecuteExに渡すことを目的としています。
どうなる? 駄目ならshell.applicationのfolderitem.getlink使え
ありがとうございます。 folderitem.getlink.target.pathでマイコンピュータとマイネットワークのショートカットから "::{GUID}" という形式のターゲットパスが得られました。 これをShellExecuteExに渡すと、開けました。 スタートメニューのファイル名を指定して実行でも使えるけど ショートカットのプロパティのリンク先には入れられないのが謎です。 コントロールパネル項目なんかのショートカットは取得できなかったので これは別に探してみようと思います。
>スタートメニューのファイル名を指定して実行でも使えるけど >ショートカットのプロパティのリンク先には入れられないのが謎です。 GUIが撥ねてるだけで、WshShortcutなら入る >コントロールパネル項目なんかのショートカットは取得できなかったので >これは別に探してみようと思います。 レジストリをshellfolderで検索
ありがとうございます。 >GUIが撥ねてるだけで、WshShortcutなら入る WshShortcutで取得できないものの、Saveはできるようですね。 >レジストリをshellfolderで検索 こちらは、クラスIDを知るのが目的ではなく、ショートカットファイルから 取得するのが目的です。 target.pathが空白なので、検索しようがありませんでした。
なんでそんな必要があるのかわからんが必要なら.lnkのフォーマットをadodb.streamでバイナリで見て取り出せば?
excelのショートカットなんか取り出しても動かんな なんだこのxlicons.exeって?実行可能なアプリケーションじゃありません
javascriptの板でこちらのがいいと誘導されてきました。 var objApl; var objFolder; var objFolderItems; var objItem; var i; objApl = new ActiveXObject("Shell.Application"); objFolder = objApl.NameSpace("c:\\ShortCut"); objFolderItems = objFolder.Items(); for(i=0;i<objFolderItems.Count;i++) { objItem = objFolderItems.Item(i); if (objItem.IsFolder==true) { WScript.echo("D " + objItem.Name + " ModifyDate:" + objItem.ModifyDate); } else { WScript.echo(" " + objItem.Name + " Size:" + objItem.Size + "Bytes ModifyDate:" + objItem.ModifyDate); } } objItem = null objFolderItems = null objFolder = null objApl = null objFolder = objApl.NameSpace("c:\\ShortCut");の部分で、 「書き込みできません」とエラーが出るのは何故でしょうか
c:\ShortCutに対するアクセス許可を持ってない
アクセス許可はどこからどう見た権限でしょうか。 ローカルにあるjsで、 cドライブももちろんローカルです。 全てが同じドライブ上にあるんですが…
c:\ShortCutのアクセス許可を見ろよバカ
なんでWindowsの初歩が解ってない奴がJScriptとかに手出してるんだ? 今はそういう時代なのか?
こういうのって、fsoじゃなくshell使うのがナウいの?
トロいんじゃね?
var o = new ActiveXObject('System.Text.StringBuilder'); o.append('U'); インスタンスは作れるのにメソッドは呼べないorz oはIDISPATCHらしいんだが。
979 :
デフォルトの名無しさん :2012/05/03(木) 14:48:27.89
あ
い
し
て
もんまり
え
め
う
め
うめ
>>563 宇宙には、秩序がある。生物には、多様性がある
うめ
かゆ
うま
うし
うに
うり
うみ
うら
_,. -──-- .,,_ ,. ''" ´`ヽ、 , ' __,,,....,,,ゝ,_ ヽ、 ,' ,.- '"´ ____ `ヽ!、 ヽ, i ,.'´ ,. --ァ'7´ `i⌒ヽ、!.、 ', .i .i,' / / / ハ !─!-`Yヽ、 ', | !/ ,' .i-i─ハノ レ´,≠ト!、ハ i i | イ / ./,!ィ'=-ト、 'ト、 } !ハ,.ヘハノ ノ i ハ/イ ト、 }' ゙ー´,,i/! i イ / ! ヽi` ゝ-゙'´ ` .! | 〈 ,' 〈 ,ヘ', ヘ "" σ ,.イ ノ ! / i ヽ, ハ>.、,,_ ,,.イノ、レ,.ヘノ 〈 ハ V>、!、/ヽ,  ̄! i>ヽ、 / ヽ/ ヽハ/´ ヽゝ、/ヘi/i ', / / i/ i ', /、 ,〈 」、」 _ゝ、
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。