WSH(・∀・)スレッド! Part 4at TECH
WSH(・∀・)スレッド! Part 4 - 暇つぶし2ch13:デフォルトの名無しさん
09/05/30 14:20:31
URLリンク(www.isla-plata.org)

14:デフォルトの名無しさん
09/05/30 16:30:39
で、どっち?

15:デフォルトの名無しさん
09/05/30 17:49:11
>>13
ここまでまとめた人が居るんか、すごいな
でもやっぱりあんまり使えなそう

結局powershell覚えて出力をWSHで受け取るとか
本末転倒だなw

16:デフォルトの名無しさん
09/05/30 21:52:20
PowerShellでもWin32API使いにくいからな
FindWindowやSendMessageが標準環境で簡単に使えるようにならんかな

17:デフォルトの名無しさん
09/05/30 22:39:18
スクリプト言語の中にはC関数を直接呼び出せるものがあってな

18:デフォルトの名無しさん
09/05/30 23:37:40
そんなもん、いくらでも有るが

19:デフォルトの名無しさん
09/05/31 00:00:38
なんでvbscriptは

20:デフォルトの名無しさん
09/05/31 01:55:01
こんなにかわいいの?

21:デフォルトの名無しさん
09/06/02 17:33:30
シフトキーを押しながらの操作はWSHでどうするの?

22:デフォルトの名無しさん
09/06/02 19:00:42
WSHを実行するのにシフトキーを押す必要はありません。

23:デフォルトの名無しさん
09/06/02 22:45:16
なるほど

24:デフォルトの名無しさん
09/06/06 14:55:08
>>21
copyhereやmovehereみたいに用意されてるものもあるが
ショートカットの貼り付けや
invokeverb "delete"みたいに用意されてないものもある
ないものはあきらめてほかの方法さがせ

25:デフォルトの名無しさん
09/06/06 19:22:13
なるほど

26:デフォルトの名無しさん
09/06/10 15:44:18
mailto:sage

27:デフォルトの名無しさん
09/06/10 16:28:32
getobject("hoge.xls")して、それが新規インスタンスか、
既存のインスタンスか、区別する方法は?

28:デフォルトの名無しさん
09/06/10 22:14:31
普通にやれば良いだけでは?

29:デフォルトの名無しさん
09/06/10 23:46:59
抽象的な質問なのですが、wshでアプリケーションを操作する・・・では無くて
wshでアプリケーションを作る事は可能ですか?


30:デフォルトの名無しさん
09/06/10 23:54:37
GUIつきのアプリは厳しいんじゃないか?

31:デフォルトの名無しさん
09/06/10 23:58:39
そのためのHTAです。

32:デフォルトの名無しさん
09/06/11 02:03:46
<SCRIPT language="vbscript">
str = "Hello World!!"
</SCRIPT>
<BODY>
<P><変数strを、ここに出力したい。></P>
</BODY>

33:デフォルトの名無しさん
09/06/11 08:09:32


34:デフォルトの名無しさん
09/06/11 12:27:33
<BODY>
<P>Hello World!!</P>
</BODY>

35:デフォルトの名無しさん
09/06/11 13:11:12
>>27
ないんじゃないか
getobjectする前に排他オープンしてみるとか

36:デフォルトの名無しさん
09/06/11 14:05:51
<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>

37:デフォルトの名無しさん
09/06/11 14:18:30
<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>

38:デフォルトの名無しさん
09/06/11 19:32:35
>変数strを、ここに出力したい。
といってるくせに違うところに出してどうする?

39:デフォルトの名無しさん
09/06/11 19:34:27
>>37
setintervalかsettimeout使えよ

40:デフォルトの名無しさん
09/06/12 19:35:43
getobject("hoge.xls")

getobject("hoge.xls","excel.sheet")
の違いはなんだろう?

41:デフォルトの名無しさん
09/06/12 20:27:34
,"excel.sheet"があるかないかの違い。

42:デフォルトの名無しさん
09/06/13 01:46:37
ハズレ

43:デフォルトの名無しさん
09/06/13 12:43:27
Active にするオブジェクトを指定してるんじゃなかったっけか?

44:デフォルトの名無しさん
09/06/13 15:37:34
どちらもWorkbookオブジェクトが取れる

45:デフォルトの名無しさん
09/06/13 15:41:08
getobject("hoge.xls")
は新規と既存がとれるけど
getobject("hoge.xls","excel.sheet")
は新規のみだろ
getobject("","excel.sheet")がcreateobjectなのはその1例だろ



46:デフォルトの名無しさん
09/06/18 22:56:09
exec.vbs
createobject("wscript.shell").exec("notepad")
を作って
wscript exec.vbs|more
とすると、wscriptは終了してるのに、notepadの終了を待ちます。
なぜか、わかる人いますか?

47:デフォルトの名無しさん
09/06/19 00:09:58
C:\>notepad|more

48:デフォルトの名無しさん
09/06/19 01:06:15
createobject("wscript.shell").run("notepad")
だと待たないからrunとexecの違いのなにかだろ

49:デフォルトの名無しさん
09/06/19 01:40:10
start /b /wait notepad|more
start /b notepad|more
パイプがinheritされて閉じられてないみたいだな

50:デフォルトの名無しさん
09/06/22 18:45:55
作業の自動化ができる、って具体的に何を自動化したいの?
連投スクリプトとかできるの?

51:デフォルトの名無しさん
09/06/22 19:40:30
それはお前さん次第さ

52:デフォルトの名無しさん
09/06/22 19:42:21
明日の会議で自動的に受け答えしてくれる?

53:デフォルトの名無しさん
09/06/22 19:55:21
それもお前さん次第さ

54:デフォルトの名無しさん
09/06/22 19:59:47
俺の代わりに飯食ってきてくれるか?いま手が離せない

55:デフォルトの名無しさん
09/06/22 20:05:23
それはまた別の話

56:デフォルトの名無しさん
09/06/22 20:36:12
どうやら>>52>>54の間辺りにWSHでできる事の限界があるらしい

57:デフォルトの名無しさん
09/06/22 22:43:00
じゃあ俺の心の隙間を埋めてくれるのかい?

58:デフォルトの名無しさん
09/06/23 21:23:44
埋め

59:デフォルトの名無しさん
09/06/24 22:58:30



60:デフォルトの名無しさん
09/06/25 16:04:09
WSHにてインストールされているプリンタの一覧を取得する方法はありますか?

61:デフォルトの名無しさん
09/06/25 16:10:32
あります

62:デフォルトの名無しさん
09/06/28 18:48:32
ありがたい

63:デフォルトの名無しさん
09/07/06 23:32:01
WSHで現在アクティブなウィンドウを取得する方法ってありませんか?
最前面に来て使用しているであろうアプリを調べたいのです。

64:デフォルトの名無しさん
09/07/07 00:20:49
ない
win32api使え

65:デフォルトの名無しさん
09/07/07 00:39:04
SFCminiとAutoitXを入れましょう。これでWSHからwin32apiも使い放題。window操作もやりたい放題。

66:63
09/07/07 00:55:00
>>64、65

ありがとうございます。調べてみます。

ネットで調べてうすうすAPIというものを使わないと無理そうだとは思ってたのですが
やはりそうですか・・

67:デフォルトの名無しさん
09/07/07 01:08:28
WSHから離れて、dmscript( 日本人製作の
Jscriptと同様のスクリプト、dm.exe -l オプションでワンライナーの
ようにも使えるので場合によってはWSHからWin32Apiの機能を利用可能)、
UWSC(日本人製作、ドキュメント多し)、
なでしこ(日本人製作、ドキュメント多し)、
AutohotkeyやAutoIT3(AutoItXとほぼ同じ)をつまんで見るのも吉。
これらは、SFCminiやAutoITXに比べて、ポータブルでも使えるメリットがある。

68:デフォルトの名無しさん
09/07/07 01:11:48
あんま怪しいツールは入れたくないんだよね

69:デフォルトの名無しさん
09/07/07 01:47:20
MS純正
excel
powershell
vb.net

70:デフォルトの名無しさん
09/07/07 01:56:27
どれもOS標準添付じゃないし…

71:デフォルトの名無しさん
09/07/07 20:05:15
結局は XUL が最強だよな

72:デフォルトの名無しさん
09/07/07 21:29:45
.netはvistaに標準添付だろ

73:デフォルトの名無しさん
09/07/07 22:51:00
開発環境も?

74:デフォルトの名無しさん
09/07/08 01:39:17
vbc.exe

75:デフォルトの名無しさん
09/07/08 01:51:31
>>74

URLリンク(www.moonmile.net)
>実は Windows XP3 や Vista のマシンでは既に .NET Framework が(勝手に)導入されており、
>実は環境変数を設定すれば Visual C# Express Edition を入れなくても
>コンパイルができます。当然実行もできます。

へぇそうなんだ。常識なの?良いこと聞いた、thx


76:デフォルトの名無しさん
09/07/08 19:59:39
IEで、Ctrl+Nでウィンドウの新規作成を行った時と等価な状態(セッション情報等を継承)で、
WSHでIEのウィンドウの新規作成を行い、
かつそのIEのウィンドウのオブジェクトIDを得るにはどうしたら宜しいでしょうか?


77:デフォルトの名無しさん
09/07/08 20:44:55
>>76
ここはWSHのスレであって
IEコンポーネントAPIのスレではないのでスレ違い。

78:デフォルトの名無しさん
09/07/08 23:01:22
Shell.apliction でグルグルすると既存のieオブジェクトやエクスプローラーのハンドルとれるじゃん。
またはieオブジェクト作ったときのオブジェクトに、例えば objIe.hWndってやってもハンドル取れる。

79:デフォルトの名無しさん
09/07/09 02:51:48
>>78
やりたい事は、セッション情報を引き継いだIEの新規ウィンドウの生成(Ctrl+Nに相当)です。

例えば、

ie1 = new ActiveXObject("InternetExplorer.Application");
ie1.Navigate("URLリンク(www.example.com)");
// ログイン処理

ie2 = new ActiveXObject("InternetExplorer.Application");
ie2.Navigate("URLリンク(www.example.com)");

とした場合、ie1の派生物とie2の派生物では別セッションとなってしまい、
ie1でログイン状態がセッション管理により行われている場合、
ie2では非ログイン状態になってしまいます。


80:デフォルトの名無しさん
09/07/09 03:30:44
>>79
window.open ではダメなの?

81:デフォルトの名無しさん
09/07/13 17:21:30
>>78
どれがアクティブか調べる方法は?

82:デフォルトの名無しさん
09/07/13 18:38:09
普通にやれば良いんじゃないの?

83:デフォルトの名無しさん
09/07/13 19:48:59
普通にWin32APIのFindWindow クラス名でやれば良いんじゃないの?


84:デフォルトの名無しさん
09/07/15 21:19:25
>>83
タブの区別がつかん

85:デフォルトの名無しさん
09/08/11 19:02:06
statustextでつくとは!

86:デフォルトの名無しさん
09/08/22 06:23:12
CreateObject("Shell.Application").Windows.Item
でアクティブ取れるんだね。

87:デフォルトの名無しさん
09/08/22 15:05:28
正確には
でアクティブ取れたんだね。

88:デフォルトの名無しさん
09/08/22 19:44:04
>>87
え?Vista以降は取れないとか?

89:デフォルトの名無しさん
09/08/23 14:13:39
え?IE7以降は取れないとか?


90:デフォルトの名無しさん
09/08/27 15:49:26
どこで聞けばいいのかわからないのでここで質問を
piyo1hogera.txt
piyo2hogera.txt
piyo3hogera.txt
piyo5hogera.txt
pito8hogera.txt
というように番号がとびとびになっているようなファイルの集まりから数字だけを抽出して
htmlファイルに反映させたいんだけどどうすればいい?

一応, ファイル一覧は抽出できるんだけどそっから数字だけを抽出するにはどうすればいいかわからないので。

91:デフォルトの名無しさん
09/08/27 19:08:52
>>90
正規表現を使うのが簡単
var num;
if (/(\d+)/.exec(ファイル名) != null) { // ファイル名に数字を含んでいたら
num = RegExp.$1; //抽出した数字
}


92:デフォルトの名無しさん
09/08/29 01:14:59
$1wwwwwwwwwwww

93:デフォルトの名無しさん
09/09/07 19:22:11
WScript.Echoで文字色変えられますか?もし変えられるなら方法も

94:デフォルトの名無しさん
09/09/08 05:55:20
>>93
コンソールの文字色変更だったらオススメはしない
一応、コンソールAPI or エスケープシーケンス を使うことで出来るけどね
↑は環境を変更する必要があるので、HTAを使った方がマシだと思う

95:デフォルトの名無しさん
09/09/08 16:20:44
tscmd.zipのechoc.exeを使うといいかも

96:デフォルトの名無しさん
09/09/08 16:48:43
createobject("wscript.shell").exec "cmd /c color ac"

97:デフォルトの名無しさん
09/09/08 20:36:48
>>95-96
間違ってはいないけど >>93 の意図とは違うだろ・・・ワザとか?

98:デフォルトの名無しさん
09/09/08 22:19:41
>>96はだめみたいよ
標準入出力をリダイレクトしてコンソール環境を継承してない?

99:デフォルトの名無しさん
09/09/08 22:58:31
>>93
NT系OSのコマンドプロンプトでは色指定などのエスケープシーケンスは標準ではサポートされない
エスケープシーケンス ANSI.SYS などのキーワードで検索

100:デフォルトの名無しさん
09/09/08 23:43:35
echo エスケープシーケンス | ansi.exe
みたいなのがあったような

101:デフォルトの名無しさん
09/09/09 01:02:43
PowerShellの中では文字色変えられるけど、
CMDに戻ると色が消えるのはなんでだろう?

102:デフォルトの名無しさん
09/09/09 15:31:45
>>98
ok cmd /c color ac
ng cmd /c color ac <nul >nul 2>nul



103:デフォルトの名無しさん
09/09/09 20:43:53
createobject("wscript.shell").exec "command con /c cmd /c color ac"

104:デフォルトの名無しさん
09/09/10 17:30:19
無理ぽ

105:デフォルトの名無しさん
09/09/11 17:34:00
なんかズレテるな

106:デフォルトの名無しさん
09/09/11 19:35:57
>>105
なんかズレてるな


107:デフォルトの名無しさん
09/09/11 20:06:31
excel経由でコンソールAPIを呼ぶ

108:デフォルトの名無しさん
09/09/12 19:25:50
>>103
なんかコードページがズレてるな
createobject("wscript.shell").exec "chcp.com 932"

109:デフォルトの名無しさん
09/09/14 14:35:30
InvokeVerbで、右クリックメニューのサブメニューは 呼べないんでしょうか

110:デフォルトの名無しさん
09/09/15 07:22:20
>>109
どういう状況下で何をしたいのか理解できないけど
InvokeVerbで呼べないならレジストリ読んで実行しとけ

111:デフォルトの名無しさん
09/09/15 14:46:42
InvokeVerb "メニュー項目\サブメニュー項目"
とでもできればよいが

112:デフォルトの名無しさん
09/09/16 12:44:13
InvokeVerbEx "メニュー項目","サブメニュー項目"


113:デフォルトの名無しさん
09/09/17 23:30:32
WordのActiveXコンポーネントについて聞いて良いですか?
WSHから、documentオブジェクトに
他所で生成したリストをMailMergeさせることは出来たんですが、
実際のデータが割り当てられたプレビュー状態を表示させるメソッドってありますか?
ツールバーのボタンを押せばちゃんと表示されます。

114:デフォルトの名無しさん
09/09/18 00:15:01
>>113
こんなんで良いの?
var word = new ActiveXObject('Word.Application');
word.visible = true
var doc = word.Documents.Add();
doc.Content.InsertAfter("hello, world.");
doc.PrintPreview();


115:デフォルトの名無しさん
09/09/18 00:28:10
>>114
ありがとうございます。
説明が悪かったのですが、印刷プレビューではなくて、
通常のレイアウト内の、差し込み印刷のプレビュー表示です。
右、左でレコードを移動できるあれです。
ツールバーのボタンを押さないと、<<名前>>みたいなフィールドのままですよね。
それを、差し込んだ状態で見せたいんです。
ちゃんとデータソースと結合は出来ているのですが。
スレ違いですかね・・・

116:デフォルトの名無しさん
09/09/18 00:42:13
>>115
失礼、差込印刷なって使ったことなかったので

とすると、これ?
doc.MailMerge.ViewMailMergeFieldCodes = false

117:116
09/09/18 00:43:29
×差込印刷なって
○差込印刷なんて
orz...


118:デフォルトの名無しさん
09/09/18 00:46:24
>>116
調べてみたら、それで間違いないと思います!
今ちょっとWordが無い環境なんで、改めて試してみます。
ありがとうございました。

119:デフォルトの名無しさん
09/09/19 01:54:02
ABALE.ZIPとかいうCOMが入っているのですが、これって使えるの?

120:デフォルトの名無しさん
09/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);

121:デフォルトの名無しさん
09/09/24 23:08:20
>>120
試してないけど、
pf.ActivePrinter = "プリンタ名"
あたり?

ちなみに、明らかにword固有の機能はスレ違い
VBAスレなどに行ってください

122:デフォルトの名無しさん
09/09/25 00:41:38
>>121
ありがとうございます.
その方法で動きました

123:デフォルトの名無しさん
09/09/25 00:44:39
ちなみに、VBAスレでは、VBやVBSでも書ける話はスレ違いと言われるので、
さらにほかのスレに行ってください

124:デフォルトの名無しさん
09/09/25 04:29:36
> ちなみに、VBAスレでは、VBやVBSでも書ける話はスレ違いと言われる
ハズレ

「VBやVBSでも書ける話」がスレ違いなのではなく
「Word.ApplicationやExcel.Applicationを使わずにVBやVBSでも書ける話」がスレ違いと言われる

VBやVBSでも書ける話でも、WordやExcel固有機能の話なら、当然スレ違いじゃない
だってVBAのAはWord.[A]pplicationやExcel.[A]pplicationのAなんだから

125:デフォルトの名無しさん
09/09/25 14:50:55
new ActiveXObject("Shell.Application").ShellExecute(objArgs(0),"プリンタ名",null,"printto");
は、どのスレだろう?

126:デフォルトの名無しさん
09/09/25 17:04:12
すいません。質問させてください。
「画面のプロパティ」の内容に当たるレジストリを書き換えるコードを書いています。
が、ログオフか再起動をしないと反映されません。
ログオフ、再起動なしで反映させる方法はありませんか?

127:デフォルトの名無しさん
09/09/25 19:13:20
たぶんスレ違いと言われるんじゃまいか

128:デフォルトの名無しさん
09/09/25 20:04:19
>>126
設定するモノによる
「画面のプロパティ」の画面自体をVBSで操作した方が楽ぢゃねぇ?

129:デフォルトの名無しさん
09/09/25 20:15:00
VBSで画面の操作なんかできんのか

130:デフォルトの名無しさん
09/09/25 20:38:11
sendkeysだろ
>>126
inichangeとかsettingchangeとかぐぐれ

131:デフォルトの名無しさん
09/09/25 20:56:04
sendkeysはVBSじゃないけど

132:デフォルトの名無しさん
09/09/26 02:07:43


133:デフォルトの名無しさん
09/09/26 10:29:44
wはVBSじゃないけど

134:デフォルトの名無しさん
09/09/29 15:59:53
WScript.Echo "w"
はVBSね

135:デフォルトの名無しさん
09/09/29 18:50:17
Is there any here document in WSH?

136:デフォルトの名無しさん
09/10/01 23:18:05
UserとPasswdを指定してリモートのファイルにアクセスするならMapNetworkDriveが使えるけど
ドライブのマッピングをしたくない場合って他に何か方法あるかな?
net useコマンド叩けばいいんだけど、あんまり美しくない。。。

137:デフォルトの名無しさん
09/10/01 23:26:31
pushdとかは?

138:デフォルトの名無しさん
09/10/01 23:28:32
FileSystemObject って UNC に対応してなかったけ?

139:デフォルトの名無しさん
09/10/02 01:32:32
UNCってUser/Pass指定できるんだっけ?

140:デフォルトの名無しさん
09/10/02 01:53:29
マップしてfsoで開いてアンマップ

141:デフォルトの名無しさん
09/10/07 12:46:15
指定したパスのフォルダをエクスプローラーで、
サイズや位置を指定して開く方法があったら教えてください。
ぐぐろうとすると InternetExplorerでのやり方ばかりヒットしてしまって・・・

142:デフォルトの名無しさん
09/10/07 13:25:15
' 変数の定義,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()

143:デフォルトの名無しさん
09/10/07 20:30:11
Set ie=GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
ie.Visible=True
ie.Top=
ie.Width=
...

144:デフォルトの名無しさん
09/10/09 13:05:03
FSOその他でシンボリックリンクの判定できる?
ターゲット取り出せる?

145:デフォルトの名無しさん
09/10/09 19:10:05
ExecuteExcel4Macro("CALL(""user32"",""FindWindowExA"",
はよくあるが、
ExecuteExcel4Macro("CALL(""user32"",""FindWindowExW"",
はできないのか?

146:デフォルトの名無しさん
09/10/09 22:54:27
>>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


147:デフォルトの名無しさん
09/10/09 22:57:38
ごみが残ってた。これいらん。
' If isFolder = 1 Then
' Set fEntry = fso.GetFolder(filePath)
' Else
' Set fEntry = fso.GetFile(filePath)
' End If

148:デフォルトの名無しさん
09/10/10 14:48:07
おー、さんきゅう
ただし、Vistaでは属性に、Lが付かんね
リンク先はあるので、ショートカットでなければで区別するかな

149:デフォルトの名無しさん
09/10/10 17:33:03
そうなんだ。それじゃ >>147 の fEntry で fEntry.Attributes AND 1024 を調べてみ。

150:デフォルトの名無しさん
09/10/11 16:10:12
分類に「リンク」があるかでも区別できるかも

folder.GetDetailsOf(fname, 188)
Vistaで187 
ExtendedPropertyのほうがよいが、IDが不明
GetDetailsOfとExtendedPropertyの対応表か調べる方法があればよいが

151:デフォルトの名無しさん
09/10/11 20:57:35
あった
System.Link.TargetParsingPath
ms-help://MS.MSDNQTR.v90.ja/shellcc/platform/shell/reference/properties/link/system_link_targetparsingpath.htm


152:デフォルトの名無しさん
09/10/12 21:37:40
すみません
URLリンク(detail.chiebukuro.yahoo.co.jp)
この答えを教えていただけないでしょうか
よろしくお願いします

153:デフォルトの名無しさん
09/10/12 22:32:38
>>152
取得順はソートされない(詳細はFATやNTFSの構造の話になるので省略する)
取得したデータを自前でソートしろ

154:デフォルトの名無しさん
09/10/12 22:50:19
>>152
自前ソートが面倒であれば以下のとちらかで手抜きしろ
・ソート指定したdirコマンドの結果を使う
・basp21のReadDirを利用する

155:デフォルトの名無しさん
09/10/12 23:01:18
>>153-154
ソートするには取得してからでないとダメということですね
ありがとうございます

取得するフォルダの順番というものは決まっているのでしょうか?
対象のフォルダに
20090101
20090102
20090201
20090202
とこのような感じでサブフォルダがありまして
フォルダが読み込まれる順番を調べているのですが
どうも情報がうまくさがせないものでして
echoなどで出しておりますとおそらく昇順だとは思うのですが
明示的にできないか・もしくは昇順であることを裏付ける何かがないかと思いまして

156:デフォルトの名無しさん
09/10/12 23:12:55
ループの処理のあとにsleep10000くらい入れて
処理フォルダ見とけばいいんじゃない?

157:デフォルトの名無しさん
09/10/12 23:19:53
>>155
FATに関して言えば情報格納順であり
ファイルやフォルダ削除/作成により順番が変わる
NTFSについても確実に名称でソートされている訳ではない
環境依存にしたくなければソートしろ

158:デフォルトの名無しさん
09/10/12 23:24:42
>>156-157
ありがとうございます
複雑な内部の問題なんですね…
ソートしてから使いチアと思います。
本当に助かりました

159:デフォルトの名無しさん
09/10/13 00:12:04
横レスですが、
みなさんソートはどうしてますか?
バブルソートが楽ですけど、量が増えると遅くて重くて。
エクスプローラがどんなに大量のファイルがあっても一瞬でソートできるように、
何か便利な方法ないでしょうか?

160:159
09/10/13 00:16:54
すんません、>>154で出てた・・・

161:デフォルトの名無しさん
09/10/13 15:32:29
JSciptのArray.sort()でええ

162:デフォルトの名無しさん
09/10/13 15:41:58
CreateObject("System.Collections.SortedList")

163:デフォルトの名無しさん
09/10/14 18:16:19
>>21-25
keybd_eventでシフトキー押しながら
invokeverb "delete"
すればよいよ

164:デフォルトの名無しさん
09/11/08 21:10:28
質問です
vbsで特定ページのソースを取得し、X行目がYという内容と一致するかのチェックをするスクリプトを作りたいのですが
ソース全体を出力する方法はobjIE.Document.Body.InnerHtmlでできるのは分かったんですが
ソース全体の閲覧ではなくソースのX行目がYという文字列と一致するかどうかの分岐を作るのはどうすればいいのでしょうか?

165:デフォルトの名無しさん
09/11/08 21:42:02
>>164
ネタ? どこまで理解できていないのか読み取れない・・・

InStr系関数で改行コードをカウントしてX行目の開始/終了位置を取得
Mid系関数でX行目のデータを取得
If文で分岐

当然ループは使うぞ

166:デフォルトの名無しさん
09/11/08 23:00:09
>>165
分かりにくくてすみません
>InStr系関数で改行コードをカウントしてX行目の開始/終了位置を取得
>Mid系関数でX行目のデータを取得
ここが分かりませんでした

もう少し調べてみます

167:デフォルトの名無しさん
09/11/08 23:58:40
俺ならXMLDOMで全体取ってから
\nでsplitするかな。

168:デフォルトの名無しさん
09/11/09 01:21:37
StrBody = objIE.Document.Body.InnerHTML
lntPos = InStr(1, StrBody, Chr(13), 1)
これの戻り値がどうやっても0になってしまいます
対処法お願いします

169:デフォルトの名無しさん
09/11/09 15:46:51
Chr(13)?

170:デフォルトの名無しさん
09/11/09 15:54:55
>>169
段落コードのつもりなんですが

171:デフォルトの名無しさん
09/11/09 16:38:05
Chr(10)

172:デフォルトの名無しさん
09/11/09 17:26:14
段落コード?

173:デフォルトの名無しさん
09/11/09 17:33:14
HTMLにおける「段落」をめぐって
URLリンク(www.asahi-net.or.jp)

174:デフォルトの名無しさん
09/11/09 18:32:24
ソース?

175:デフォルトの名無しさん
09/11/09 19:13:38
>>170
HTMLの段落はそっちでしたか
InStrが返す値が明らかに存在する文字を検索しても0になってしまうのはStrBodyが長すぎるせいなのでしょうか?
長さ制限は無いはずだしStrBodyをためしにechoで出力してみたらちゃんと表示されてるのでStringは収納されてるはずなんですが

>>167
ちょっとこちらも調べて見ます

176:デフォルトの名無しさん
09/11/09 21:58:26
>長すぎるせいなのでしょうか?
それはない
>InStrが返す値が明らかに存在する文字を検索しても0になってしまう
それもない

177:デフォルトの名無しさん
09/11/09 23:21:28
>>176
無いはずなのは分かってるんですけどなぜかそうなってしまうんです
ためしにVBで>>168のIntPosをMsgBoxで出力しようとしてもなぜか0に


178:デフォルトの名無しさん
09/11/10 01:02:57
すみません
IntPos = の部分がうまく変数として認識されていなかったのが問題だった見たいです
解決しました

179:デフォルトの名無しさん
09/11/10 17:02:37
意味不明だが
on error resume next
でも使ってんのか?やめとけ
option explicit
は使っとけ

180:デフォルトの名無しさん
09/11/16 22:17:29
URLリンク(d.hatena.ne.jp)

181:デフォルトの名無しさん
09/11/17 15:03:31
いみふ
結局使えないんだろ?

182:デフォルトの名無しさん
09/11/18 20:01:43
以前は
cscript //e:jscript -
が使えたが

183:デフォルトの名無しさん
09/11/18 22:00:30


>cscript //e:jscript -
WScript.Echo(WScript.Version);
^Z
5.7

184:デフォルトの名無しさん
09/11/22 15:42:09
>cscript //e:jscript -
入力エラー: スクリプト ファイル "-" が見つかりません。

185:デフォルトの名無しさん
09/11/25 02:05:32
>cscript //e:jscript con
WScript.Echo(WScript.Version);
^Z
5.7

186:デフォルトの名無しさん
09/11/26 12:03:39
レンホウ「こんなロボット作って、なんになるんです?」

187:デフォルトの名無しさん
09/11/26 18:04:00
ロボットになるんです

188:デフォルトの名無しさん
09/11/28 17:39:05
>cscript //e:jscript con
CScript エラー: Windows Script Host の実行に失敗しました。 (この操作を完了するの
に十分な記憶域がありません。 )

189:デフォルトの名無しさん
09/11/28 19:47:24
純粋なあの頃は仕事で追い詰められて自殺なんて都市伝説だと思ってたけど
今じゃ知り合いの失踪も自殺も体験した

190:デフォルトの名無しさん
09/12/02 10:59:46
正規表現が文法的に正しいかどうかを判別する方法はありませんか
括弧が足りないとか教えてくれなくていい
スクリプトが異常終了しないでtrueかfalseを返してくれればいい

191:デフォルトの名無しさん
09/12/02 18:48:37
try catch

192:デフォルトの名無しさん
09/12/02 19:26:27
>>191
駄目だった
try {var re = /asd(fgh/;}
catch(e){WScript.echo("error");}

193:デフォルトの名無しさん
09/12/02 19:36:59
RegExp.compile

194:デフォルトの名無しさん
09/12/02 19:58:42
>>192
RegExp

195:デフォルトの名無しさん
09/12/05 00:05:02
wshで
var n=/a]b/;
と打ったらエラーが出ませんでした。他の括弧ならエラーが出ます。
エスケープ無しの右かぎ括弧ってなにか特別な意味はありますか?
この場合は、"a]bと続く三文字"と解釈して大丈夫なんですか?

196:デフォルトの名無しさん
09/12/05 14:20:01
ためせば?

197:デフォルトの名無しさん
09/12/13 13:23:44
Excel2003と2010が共存している環境で
WSHを使うことで両者を使い分けようとしています。
参考 : URLリンク(www.drk7.jp)

RegRead("HKEY_CLASSES_ROOT\\CLSID\\{00024500-0000-0000-C000-000000000046}\\LocalServer32\\").replace(/ \/[^ \/]+/g, '')
で、Excel 最新版(最後にインストールしたもの?)のパスは得られるのですが、古い方のパスを得られません。

何か良い方法はないでしょうか?

198:デフォルトの名無しさん
09/12/13 13:24:56
今は決めうちで、「C:\Program Files\Microsoft Office\*\EXCEL.EXE」の * の部分を変えて存在確認をとって処理しています。
* の部分は、
Office2010 : office14
Office2007 : office12
Office2003 : office11
Office2002 : office10
Office2000 : office9
Office97 : office8
Office95 : office
であっているでしょうか?
よろしくお願いします。

199:デフォルトの名無しさん
09/12/13 19:27:38
URLリンク(support.microsoft.com)

200:デフォルトの名無しさん
09/12/15 18:19:27
EXCEL.EXEを検索してFileVersionで判定すべき

201:デフォルトの名無しさん
09/12/23 00:00:12
Office2010ってもう発売されてるんだ.....

202:デフォルトの名無しさん
09/12/23 14:44:53
さあ

203:デフォルトの名無しさん
09/12/23 14:50:06
office13は?

204:デフォルトの名無しさん
09/12/24 09:35:19
スレちがい

205:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/13 18:37:51
205ですけど

座標とかハードコーディングで大丈夫ですので肝を簡潔にお願い;;


207:デフォルトの名無しさん
10/01/13 23:40:26
スレちがい
Windows PowerShell 2.0 Part2

208:デフォルトの名無しさん
10/01/14 00:07:23
普通はDOM使うんじゃなかろうか、いや知らんけど

209:デフォルトの名無しさん
10/01/14 02:56:55 BE:1403990069-PLT(23400)
>>207
URLも貼ってあげなよ

スレリンク(win板)

210:デフォルトの名無しさん
10/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) でもダメでした。


211:デフォルトの名無しさん
10/02/22 21:44:18
c.Items(i)

212:210
10/02/22 21:50:27
それだと
オブジェクトでサポートされていないプロパティまたはメソッドです。:'c.Items'
です。
ちなみに、c.Item("Test") みたいに、実在するフォルダ名を与えればフォルダオブジェクトは取って来れます。
それじゃ意味無いですが。


213:デフォルトの名無しさん
10/02/22 22:06:18
c(i).Value
c(i).Item()

214:210
10/02/22 22:17:28
>>213
プロシージャの呼び出し、または引数が不正です。


215:デフォルトの名無しさん
10/02/22 23:29:43
Shell.Application の FolderItems のほうを使ったら?

216:デフォルトの名無しさん
10/02/25 21:55:47
配列に入れて使え

217:デフォルトの名無しさん
10/02/25 22:13:00
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

218:デフォルトの名無しさん
10/02/25 22:55:24
番号は使えないみたいだな
ItemクリックしたらDictionaryに飛んだ

URLリンク(msdn.microsoft.com)

219:デフォルトの名無しさん
10/03/01 21:36:27
test

220:デフォルトの名無しさん
10/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

221:デフォルトの名無しさん
10/03/12 19:00:04
素朴な疑問なのですが・・・
JScriptの変数の宣言(var文)って書いても書かなくても動きますが
どちらが推奨されますか?

222:デフォルトの名無しさん
10/03/12 20:20:27
>>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
10/03/14 04:11:27
>>222
なるほど。そう言う違いがあるのですか・・・
ありがとうございました

224:デフォルトの名無しさん
10/03/20 12:34:38
varといえば

var a = 10;
var a;

で、aがundefinedになると思い込んでいて
はまりかけたことがあった。

225:デフォルトの名無しさん
10/04/05 23:24:20
バッチファイルからWSHを呼び出す際、
バッチからサブルーチン呼出すみたいにパラメータ渡すことは可能ですか・

226:デフォルトの名無しさん
10/04/05 23:52:43
>>225
可能
渡されたパラメタはWScript.Argumentsで参照できる

227:デフォルトの名無しさん
10/04/06 00:13:23
有難う御座います!

228:デフォルトの名無しさん
10/04/09 10:28:58
WSHの何か良いリファレンスブックみたいなのってありますか?
言語は何の奴でもまぁ使えると思うんで何でも良いんですが

229:デフォルトの名無しさん
10/04/09 11:49:47
Scripting Guide 2000

230:228
10/04/10 01:11:59
すいません、日本語の書籍でお願いしますorz

231:デフォルトの名無しさん
10/04/10 01:32:23
>>230
初心者なら scd56jp.exe 内の script56.chm だけで良くねぇ?

232:228
10/04/10 02:27:18
>>231
おお、これは凄い便利ですね。
ありがとうございます、凄い役にたちそうなんで嬉しいんですが
オフラインで使える本も、それはそれで欲しいです。
書籍の持ち込みは可能だけどデータの持ち込みは厳しい場所に持ち込みたいので。

233:デフォルトの名無しさん
10/04/10 11:33:33
公式のヘルプを知らなかったって…

234:デフォルトの名無しさん
10/04/17 11:37:25
VWD2005でVBSのコード補完してくれるらしいから
インストールしたけどVBSは全く補完してくれないよ。
かんか設定必要?

235:デフォルトの名無しさん
10/04/24 04:06:49
CoInitialize は呼び出されていません。
こういう場合はどうすれば?

236:デフォルトの名無しさん
10/04/25 18:46:06
CoInitialize を呼び出せば?

237:デフォルトの名無しさん
10/04/29 21:04:56
ちょっと教えてください。

Wshからバッチファイルを呼び出す事は可能ですか?

238:デフォルトの名無しさん
10/04/29 22:01:02
ちょっと教えてください。

WshからCoInitializeを呼び出す事は可能ですか?

239:デフォルトの名無しさん
10/04/29 22:53:38
COMを挟めば可能

240:デフォルトの名無しさん
10/04/29 22:59:32
COMが呼べるってことは既にCoInitializeされてることを意味するので無意味

241:デフォルトの名無しさん
10/04/30 00:39:11
意味しないよ

242:デフォルトの名無しさん
10/05/01 18:16:08
explorerのnavigation paneのshow/hideはshowbrowsebarでできないのか?

243:デフォルトの名無しさん
10/05/01 21:52:27
セキュリティ対策だから無理だろ

244:デフォルトの名無しさん
10/05/28 18:03:17
Windowsスクリプティング環境比較:PowerShell vs WSH
URLリンク(www.atmarkit.co.jp)
>Windows XPがリリースされ、先日Windows Vistaがリリースされるまで何年も経過したにもかかわらず、
>WSHのバージョンはVer.5.6からVer.5.7へとマイナー・バージョンアップにとどまっている。
>実はWSHは今後メジャー・バージョンアップされない運命にあるのだ。

バージョンアップされないってホント?

245:デフォルトの名無しさん
10/05/28 22:30:32
うそ

246:デフォルトの名無しさん
10/05/28 22:47:28
>>244
なんか困るの?
つか、他の手段への以降してるんじゃないの?

247:デフォルトの名無しさん
10/05/28 22:50:33
移行だね。


248:デフォルトの名無しさん
10/05/29 16:07:55
バージョンアップしなくてもよいからインラインスクリプトをサポートしてほしいな

249:デフォルトの名無しさん
10/05/29 21:25:33
exec("cmd",0) も


250:デフォルトの名無しさん
10/06/14 11:44:46
質問です。
例えば、sample01.exeという単一ファイルに対して、コンテキストメニューでavast!の"検査(S) sample01.exe"を実行することは
FolderItems→FolderItem→InvokeVerbでできます。
一方、ファイルが複数選択された状態では、コンテキストメニューは、"選択した領域のウィルス検査(S)"となり、
これを実行すると選択された全てのファイルに対してまとめて処理が行われます。
この例のようにファイルを複数選択した状態で、"選択した領域のウィルス検査(S)"をWSHで実行するにはどうすればよいですか?

251:デフォルトの名無しさん
10/06/14 15:20:04
set items=folder.items
items.filter SHCONTF_NONFOLDERS,"*.exe"
items.invokeverbex "選択した領域のウィルス検査(S)"

252:デフォルトの名無しさん
10/06/14 15:22:56
ashQuick.exeを呼べばいいんじゃないの

253:デフォルトの名無しさん
10/06/14 16:29:09
>>251-252
ありがとうございます。

252のサンプル、大変参考になりました。



254:デフォルトの名無しさん
10/06/14 16:31:01
>>253
失礼。まちがえました。
× 252のサンプル、大変参考になりました。
○ 251のサンプル、大変参考になりました。

255:デフォルトの名無しさん
10/06/20 19:09:05
JavaScriptを使ったWSHでIEを操作してハイパーリンクをクリックさせるってどうやってる?

256:デフォルトの名無しさん
10/06/20 20:36:09
>>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
でも同じようにエラーになるんだけどなぜ?

257:デフォルトの名無しさん
10/06/20 21:36:56
>>256
エラーの質問の時は環境とエラー詳細を書け

まさか
×test
○text
なんてことはないよね

258:デフォルトの名無しさん
10/06/21 18:54:32
>>257
Windows7
エラーは詳細不明 エラー番号が8004005

259:デフォルトの名無しさん
10/06/21 19:11:02
>>258
80004005だよ・・・orz

260:デフォルトの名無しさん
10/06/21 19:43:57
Dim K As Long

For K = 0 To 5
MsgBox "今" & K & "周目"
Next K

これ
7で動かないんだけど7以外で動く人いる?

261:デフォルトの名無しさん
10/06/21 19:52:13
>>260
それは vba の書き方じゃないの?
vbscript なら以下

Dim K

For K = 0 To 5
MsgBox "今" & K & "周目"
Next

262:デフォルトの名無しさん
10/06/22 14:23:24
>>260
いない

263:デフォルトの名無しさん
10/06/24 18:25:10
JavaScriptのWSHにVBScriptで取得した文字列を渡す方法ってある?

264:デフォルトの名無しさん
10/06/24 19:29:43
つwsf

265:デフォルトの名無しさん
10/06/24 20:06:17
sss="xxx"
createobject("wscript.shell").run "aaa.js " & sss

266:デフォルトの名無しさん
10/06/24 20:11:05
runするならプロセス環境変数で渡してもOKだな

267:デフォルトの名無しさん
10/06/24 22:20:36
ちょっと難しい質問


WSHで起動したExcelのInputBoxに入力された数値を別のWSHに渡すことはできる?


WSH1.vbsでExcelのInputBoxを起動して数値を入力
その数値を
WSH2.vbsに渡す




268:デフォルトの名無しさん
10/06/24 23:27:10
>>267
普通にできる
逆に「どーやったらできない」のか聞きたいくらいだ

269:デフォルトの名無しさん
10/06/24 23:59:10
>>268
どうやればいいんだ…orz

270:デフォルトの名無しさん
10/06/25 00:24:25
sss=inputbox()
createobject("wscript.shell").run "wsh2.vbs " & sss


271:デフォルトの名無しさん
10/06/25 00:36:54
wsh2.vbsにも指定したsssにはwsh1で入力した数値が入ってるんだね?
参考になった!本当にありがとう!

272:デフォルトの名無しさん
10/06/25 00:45:02
sssに入ってるというより、sssに渡したい値を引数として入れて
別のスクリプトを起動するっつうことだろ。
その結果、受けるほうはWScript.Argumentsで引数として受け取る。
またはWScript.CreateObject("WScript.Shell").Environment("Process")で渡して、受け取る。
テキストファイルを使っても渡せることは渡せる。

273:デフォルトの名無しさん
10/06/25 00:48:40
「~できる?」
  ↓
「どうやればいいんだ…orz」
  ↓                 ←今ココ
「全部ソース書いて」

274:デフォルトの名無しさん
10/06/25 00:52:37
JScriptは永遠に不滅です!

275:デフォルトの名無しさん
10/06/25 11:46:42
>>272
Processに入力されたデータを入れるには?

276:デフォルトの名無しさん
10/06/25 15:27:41
それはとっても難しい質問だね

277:デフォルトの名無しさん
10/06/25 15:41:12
どうやればいいんだ…orz

278:デフォルトの名無しさん
10/06/25 16:20:56
>>275
> ○○に入力された××を入れるには?

「誤字」と言うよりは「理解不足」だと思う
って言うか、もう少し「人間としてのレベル」を上げて来い



以下に示す程度のガキは相手にされないことが多い
・どこまで分かるのか書かない        ←「オレが分かるように答えろ」というレベル
・「どうやればいいんだ…orz」を多用     ←「助けてママ~」というレベル
・スレ内を検索できない
・ググれない
・scd56jp.exeをDLしてマニュアルを読むことができない

279:デフォルトの名無しさん
10/06/25 22:46:06
>>278
>scd56jp.exeのマニュアル見てやっとわかった ありがとう

280:デフォルトの名無しさん
10/06/26 11:09:02
>>279
そうか。具体的にどう解決できた?サンプルを書いてみて。

281:デフォルトの名無しさん
10/06/26 12:51:16
>>280
WSH = WScript.CreateObject("WScript.Shell").Environment("Process")a = Inputbox
WSH = Item("A") = a

282:デフォルトの名無しさん
10/06/26 13:30:20
>>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)

283:デフォルトの名無しさん
10/06/26 14:13:16
WSHのコードやよく使う関数をdllにできたらすごく便利だね うふ

284:デフォルトの名無しさん
10/06/26 14:17:06
classでまとめておくのはやってる。

285:デフォルトの名無しさん
10/06/26 14:25:54
>>282
vbsだからset 使わんと駄目なんだろう。あとWSHもオブジェクトだからたぶん駄目だろ。あとはrun付け足せばいいはず。
WScript.CreateObject("WScript.Shell").Run "wscript.exe " & WScript.CreateObject("ファイルシステムなんちゃら").GetParentなんちゃら(WSH.ScriptFullName) & "\2.vbs"

vbs全然つかってねえやw

286:デフォルトの名無しさん
10/06/26 14:39:49
>>285
だってこれJScript用だし

287:デフォルトの名無しさん
10/06/26 14:56:09
>>286
>>だってこれJScript用だし
>>282 に >>1.vbs
って書いてあるのに、それはねえべよ~w こんな後だしジャンケンは初めてみたわw

288:デフォルトの名無しさん
10/06/26 15:16:12
>>287
うん
そりゃね
VBSで動作実験してからJScript用に変えたから…



先にそれを書いておくべきだった すまない

289:デフォルトの名無しさん
10/06/26 15:39:06
今回は >>278 の忠告を聞かない>>287が悪い。

290:デフォルトの名無しさん
10/06/26 16:08:30
wscript.exe //e:jscript 2.vbs
で起こすから…

291:デフォルトの名無しさん
10/06/26 17:35:03
審判長「ただ今の協議について説明いたします。
行事は、忠告を聞かなかった>>287の右足が俵を割ったと判定して
>>286に軍配を上げましたが、
>>290 のカウンターが>>287のあごにヒットしたため、
>>290の勝ちと判定いたします。」

292:デフォルトの名無しさん
10/06/26 20:10:52
URLリンク(memoofwork.seesaa.net)

のリンク数分回すのがうまく動かない


Length はリンク個数を取得してるのはわかるんだが・・・
なんで次へ のリンクに飛ばないんだ?

293:デフォルトの名無しさん
10/06/26 20:31:48
>>292
わすれてた
リンクの場所はGoogleの検索結果です


294:デフォルトの名無しさん
10/06/26 20:47:07
>>292
ちょっと見た感じ、元のページの内容が怪しそう
hrefってURLを表してるんじゃないの?

×If objIE.Document.links(i).href = "次へ" Then
○If objIE.Document.links(i).innerText = "次へ" Then
これならどう?


295:デフォルトの名無しさん
10/06/26 20:58:08
>>294
できました!ありがとうございます!


296:デフォルトの名無しさん
10/06/26 22:05:16
ごめんなさい 追加で質問です・・・
>>292をJScriptで同じようなことをさせてみようと思ったんですけどうまくできないんです

var IE,i,a
IE=new ActiveXObject('InternetExplorer.Application');IE.Visible=true;
IE.navigate2("URLリンク(www.google.co.jp)");
WScript.sleep(1000);
a = IE.Document.links.length;
for (i = 0; i < a; i++) {
IE.Document.links(i).innerText=("次へ");
IE.Document.links(i).Click();};

これだと動かないんですがどうしたらいいでしょうか・・・

297:デフォルトの名無しさん
10/06/26 22:26:35
>>297
これで動いた

var IE,i,a
IE=new ActiveXObject('InternetExplorer.Application');IE.Visible=true;
IE.navigate2("URLリンク(www.google.co.jp)");
WScript.sleep(1000);
a = IE.Document.links.length;
for (i = 0; i < a; i++) {
if ((""+IE.Document.links[i].innerText)==("次へ")) {
IE.Document.links[i].click();
break;
}
};


298:デフォルトの名無しさん
10/06/26 22:33:41
>>298
ありがとうございました

299:デフォルトの名無しさん
10/06/26 22:59:09
>>297
>if ((""+IE.Document.links[i].innerText)==("次へ"))
このような方法は知りませんでした

もっと勉強します ありがとうございました!

300:デフォルトの名無しさん
10/06/26 23:03:25
ああ、失礼
最初の ""+ はなくてもよいかも
オブジェクトが null になる可能性がある場合、これをいれておくととりあえあず文字列になって
エラーにならないので入れてみた(最初に>>296を起動したときエラーになったので念のために)
正しくオブジェクトが取得できる前提なら不要


301:デフォルトの名無しさん
10/06/27 00:13:58
>>300
エラーになったみたいです・・・
一行目の1文字目の文字が正しくないって・・・
どういうことなんでしょうか

302:デフォルトの名無しさん
10/06/27 03:19:22
1行目1文字目はいくらなんでもおかしい

文字が全角になってるとか、
ファイルがBOM付きのUTF-8になってるとか、
構文以前の基本的な個所でエラーになってる可能性がないか?

303:デフォルトの名無しさん
10/06/28 03:00:29
WSHでOperaやFireFoxにURLを渡すのは不可能なんだろうか…


スレイプニルはできるのになぁ

304:デフォルトの名無しさん
10/06/28 03:14:35
bugbrowser や Nilbrowserも出来るね。

305:デフォルトの名無しさん
10/06/28 03:15:26
>>303
釣りとしか思えないなぁ・・・

バカが「OperaやFireFoxにURLを渡すのは不可能なんだろうか」って言うようなソースを晒してくれ

306:デフォルトの名無しさん
10/06/28 03:33:17
>>305
ActiveXがないからWSHが使えないだけでActiveXがあればWSHが使えるんだからOperaやFireFoxにもActiveXが搭載できればいいんじゃないかと思うんだが

307:デフォルトの名無しさん
10/06/28 03:47:18
>>306
コレは完全に釣りだな
面白いからソース晒せ

308:デフォルトの名無しさん
10/06/28 03:56:58
>>307
RunでOpera.exeだのFireFox.exeを起動させただけのソースコードがみたいとは奇っ怪な

309:デフォルトの名無しさん
10/06/28 04:07:27
>>308
「Sleipnirではできる」のに「OperaやFireFoxではできない」って言う奇怪なソースを早く晒せ

釣りには「ノリ」も必要だぞ

310:デフォルトの名無しさん
10/06/28 09:43:40
恥ずかしい後釣り宣言来ました

311:デフォルトの名無しさん
10/06/28 14:35:12
つDDE

312:デフォルトの名無しさん
10/06/28 14:44:54
>>303
で何したいン?ただ外部のスクリプトからFirefoxでURLを開ければいいのか、FireFoxをスクリプトでいろいろ制御したいのか?

313:デフォルトの名無しさん
10/06/28 19:25:00
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);

314:デフォルトの名無しさん
10/06/28 19:31:11
>>313
なんでSendKeys?
FSO使えばいいだろ
あと変数名が酷いなw

315:デフォルトの名無しさん
10/06/28 19:37:26
個人で作って使ってんだ。
変数名なんて本人の好きで構わんだろ。


316:デフォルトの名無しさん
10/06/28 19:45:00
これは難読化されたコードなんだよ

317:デフォルトの名無しさん
10/06/28 19:47:44
>>314
FSOですか・・・それは知りませんでした

あと 変数名は適当に決めています


318:デフォルトの名無しさん
10/06/28 19:52:35
変数と言うぐらいだから変な名前で何が悪い!

319:デフォルトの名無しさん
10/06/28 20:40:07
変な名前では無いと思うが。w

320:デフォルトの名無しさん
10/06/28 21:08:39
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 は改行をしてくれるはずだったんですが・・・

321:デフォルトの名無しさん
10/06/28 21:52:44
>>320
WriteLine()は最後に1つだけ改行する

aaa="";
while(...) {
aaa = aaa+なんとか;
}
の代わりに以下のようにすればよい
aaa=[]; // 配列にする
while(…) {
aaa.push(なんとか); //配列への要素の追加
}

abc.WriteLine(aaa.join("\r\n")); // 配列の各要素を改行で連結し、それを書き込み

322:デフォルトの名無しさん
10/06/29 21:01:01
SeraphyScriptDialogは新しいのが出て64bitWindows7にも対応してた。AutoItXも更新してる。
みなさんは使ってますか?

323:デフォルトの名無しさん
10/06/29 22:43:15
いいえ

324:デフォルトの名無しさん
10/06/29 22:46:49
いいえ

325:デフォルトの名無しさん
10/06/29 23:02:55
つかってるがぜよ

326:デフォルトの名無しさん
10/06/30 14:04:56
>>312
後者

327:デフォルトの名無しさん
10/06/30 16:32:44
大変だから止めた方がいい

328:デフォルトの名無しさん
10/07/01 05:52:09
Opera,FireFoxも「JavaScript系で簡単に制御」できる
WSHじゃないのでスレチ


>>322
レジストリ使う時点で糞なので使わんだろ
汎用GUIからScriptControlでWSHを使うのが普通だな

329:デフォルトの名無しさん
10/07/01 07:39:59
>>328
そのスレはどこに?

330:デフォルトの名無しさん
10/07/01 09:26:23
>>329
「何をしたい」のか明記せずに糞みたいな質問ばかりすんな
とりあえず >>278 を読み直して内容を理解しろ
そして質問し直せ

それが出来なければ、自分でスレを探せ

331:デフォルトの名無しさん
10/07/01 16:13:45
糞みたいなレスばかりすんな

332:デフォルトの名無しさん
10/07/02 12:40:39
>>328
XPのmanifest使えばインストール無しでもDllは使える。
起動時のwscript.exeは、マニフェストがあるパスのwscript.exeを使わなきゃいけないけど。
システムを汚さなくても使うことは出来る。
エディタのマクロやブラウザのマクロのjscriptでも同じように使える。
システムへのインストールはいらない。

お前ら、wsh使ってますか? Part7
スレリンク(win板: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


333:デフォルトの名無しさん
10/07/02 14:05:58
>>332
ソレ知ってる
SeraphyScriptDialogとAutoItXは「機能不足なので使わない」って方が正しい
>>328 を分かりやすくしておく

 レジストリ使う時点で糞なので使わんだろ
    ↓
 レジストリ使わなくても鼻糞なので使わんだろ

334:デフォルトの名無しさん
10/07/02 16:03:24
>>333
ならそう書けよ。後出しジャンケン好きはプライドだけは高いから困るんだw
会社でもそういわれてるだろ?違うかい?
それで低機能ならSFCminiでも使ってみりゃいいさ。

335:デフォルトの名無しさん
10/07/02 16:09:06
会社でも近所でも鼻つまみ者です

336:デフォルトの名無しさん
10/07/03 02:10:03
>>334
自作の汎用GUIは「GUI/DLL絡みは外部テキストファイル定義」で、WSHからもコントロール可能にしてある
だから SeraphyScriptDialog,AutoItX,SFCmini のような「WSHにベース機能を提供するもの」は使わんよ

「他人がする評価」については否定も肯定もしない
因みにオレは未成年で学生だ
社会人扱いは止めてくれ

337:デフォルトの名無しさん
10/07/03 13:51:54
>>336
ちなみにwin32APIにアクセスしたいときはどうしてるん?プロセス間通信とか、外部のアプリにメッセージ投げたいときとか?

338:デフォルトの名無しさん
10/07/03 16:10:54
学校でも家庭でも鼻つまみ者です

339:デフォルトの名無しさん
10/07/03 18:29:24
わざわざ外部ソフト入れんでも.NETやPowerShell使えばええやん

340:デフォルトの名無しさん
10/07/03 22:24:23
>>339
標準語でおk

341:デフォルトの名無しさん
10/07/03 23:33:34
またPowerShellかよw このスレの意味がない。

342:デフォルトの名無しさん
10/07/03 23:55:49
>>337へのレスが無いね。
質問しといて遊び呆けて無ければ良いが…

343:デフォルトの名無しさん
10/07/04 00:41:11
2chは煽るばっかりで難しい質問には答えられません

344:デフォルトの名無しさん
10/07/04 01:14:33
VBScript コマンドから Windows PowerShell コマンドへの変換

345:デフォルトの名無しさん
10/07/04 11:21:04
GUIはHTAでもいいかも。
足りない部分は外部のDll使おうが、PowerShell使おうが、
そこを関数化しておけばいいんじゃないの?
あとで簡単に置換え出来るでしょ。
Postmessageが使えるだけでもWSHやHTAから出来ることは大きく広がる。

346:デフォルトの名無しさん
10/07/04 15:46:37
TextStreamオブジェクトをFunctionとかで呼んで戻すことができない・・

347:デフォルトの名無しさん
10/07/04 16:40:06
>>346
あほにはできない・・

348:デフォルトの名無しさん
10/07/04 19:22:33
>>346
できるよ・・

349:デフォルトの名無しさん
10/07/04 21:33:20
そういやPowerShellのスレはないんだな

350:デフォルトの名無しさん
10/07/05 08:54:52
win板にあるあるよ

351:デフォルトの名無しさん
10/07/05 19:50:29
ボタンのあるHTMLをieオブジェクトで開いた時、
ボタンクリックのイベントをWSH側で拾うことは
可能ですか?

352:デフォルトの名無しさん
10/07/05 20:09:42
はい

353:351
10/07/07 08:05:20
ヒントちょうだい

354:デフォルトの名無しさん
10/07/07 12:34:28
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);
  }
}

355:デフォルトの名無しさん
10/07/07 12:56:52
>>354
それだと不便だろ?
ScriptControl使え

356:デフォルトの名無しさん
10/07/07 14:32:00
>>354
それだと不便だろ?
WSF使え

357:デフォルトの名無しさん
10/07/07 17:10:21
// wsfでいいんじゃねえの?.wsf
// scriptControlつかおうが、readallでeval使おうが、どっちみち
// スクリプトの中からファイル読込みしてやらんと駄目だろ。
// それならwsfのほうが楽だ。
// エディタのマクロには使えんけどな。
//
// <job id='main'> <script language='JScript' src='./subinclude.js'>
WScript.Echo('wsf');
// </script></job>

358:デフォルトの名無しさん
10/07/07 17:55:12
スクリプトを動的に変更する場合は、一般的にScriptControlを使用する

>>354 は必要なときにスクリプトを後付けする構造なので
何でもできるScriptControlにする方がベストだと思う

>>357 のやり方はスクリプトの一括読み込みなので構造が違う
無駄なスクリプトも全部読み込みたい場合はwsfでも良いけど
ファイル構成も異なるので使い難い

359:デフォルトの名無しさん
10/07/07 18:04:38
>>358
スクリプトコントロールを使うっていっても、その元になるスクリプトを書かれたファイルを読み込まなくていいのか?
たとえばどうやって書くわけよ?
vbsのinput使うみたいな形で、scriptcontrol使ってる例はあるわな。
どうしてもその言語じゃ処理できない場合に使う方法として。
その場合は、スクリプトのなかで記述しちゃってるよね。
>>354は、メインのスクリプトファイルから外部の関数やクラスをimportしたいんだろうから、
その都度読み込もうが、wsfでも何の問題もないと思うんだが。
ScriptControlを使う場合の方法と、そのメリットを判り安く解説してみてくれ。

360:デフォルトの名無しさん
10/07/07 18:12:49
vbsからjsならscriptcontrolかもしれんが、jsからjsならevalでええ、scriptcontrolつかうなんてあほくさ

361:デフォルトの名無しさん
10/07/07 18:16:58
だいたいimportしたいってのは、ファイル構成をわけて、
過去に作った関数を再利用しやすくするためのもんだと思うんだが・・・
ファイル構成をわけたくなきゃ、同じファイルにその関数をコピペすりゃいいだけだが、
それやってくと、それはそれで面倒臭いこともある。

362:デフォルトの名無しさん
10/07/07 18:34:23
scriptcontrolつかいたければつかえば? どうぞどうぞ とめないよ

363:デフォルトの名無しさん
10/07/07 19:57:08
importしたい奴にScriptControlのほうがいいと薦めるのか?
意味がわからん。誰か解説ヨロ

364:デフォルトの名無しさん
10/07/07 21:34:04
断る

365:デフォルトの名無しさん
10/07/07 21:41:20
<?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>


366:デフォルトの名無しさん
10/07/07 22:46:31
つまらん

367:デフォルトの名無しさん
10/07/08 13:33:47
IEのハンドル調べて、オブジェクトとプロパティのやり取りしていろいろやるのか。凄いな。
で何が凄いんだが、解説ヨロ

368:デフォルトの名無しさん
10/07/08 19:10:09
面倒だからやだ

369:デフォルトの名無しさん
10/07/08 21:27:57
複数ジョブを走らせると
終了時にcmd.exe が成仏しないことに
気がつきましたので
差し替えさせていただきます

どーも すみません

370:デフォルトの名無しさん
10/07/08 21:28:51
<?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>

371:デフォルトの名無しさん
10/07/09 17:55:11
GetObject("new:つかってみたかったのか?
CreateObject(ie)でよかろうもん

372:デフォルトの名無しさん
10/07/09 18:28:23
どっちもいらんけどな

373:デフォルトの名無しさん
10/07/16 21:18:50
おまいらWSHのデバッグどうしてる?
エラーダイアログ見て直す?あと個別に変数表示させる?
またはスクリプトデバッガいれてレジストリ直して//xでやってる?
もっと他にいい方法あるかな?
自分でツール作ってやってる人いるかな?

374:デフォルトの名無しさん
10/07/16 22:43:29
>>373
いわゆる printf デバッグ

ただ、WScript.Echo() のままでは面倒なので、
msgout("a={0}, b={1}", [a, b])
みたいに使えるヘルパ関数は自作してる

375:デフォルトの名無しさん
10/07/16 22:53:26
よく使うのは
msgbox escape()
msgbox typname()
だね

376:デフォルトの名無しさん
10/07/16 23:09:08
正規表現とかの文字列処理は組み込んでからデバッグするんじゃなくて
該当部分だけ先にインタプリタ系ツールで試して問題ないことを確認してから
プログラムの本体に組み込む

377:デフォルトの名無しさん
10/07/17 00:36:58
なるほどなるほど・・・
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
一応チラ裏ってことでメモ。

378:デフォルトの名無しさん
10/07/17 13:59:43
IE8に標準のデバッガ使うのはどうだ?ラッパー関数つかって誤魔化せばどうにかなりそうだが。

379:デフォルトの名無しさん
10/07/20 00:33:11
JScript(HTA)で
20→"\x20\00\00\00" // 32bitリトルエンディアン
みたいな変換をする方法があったら教えてください
バイナリ列を扱おうとして詰まった・・・(´・ω・`)

380:デフォルトの名無しさん
10/07/20 01:05:23
>>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
10/07/20 02:32:44
>>380
レスありがとうございます
>20 => "\x14\x00\x00\x00" でよいのかな?
そうです。>>379は誤りですorz
そのような力業しかないのですか・・・
がんばってみます

382:デフォルトの名無しさん
10/07/20 03:45:38
こういうのじゃだめなん?

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
10/07/20 13:13:50
>>382
以前試したとき、文字列で保持するとファイル読み書きが
うまくできなかった気がした
バイナリファイルの解析みたいなものだとそれがネックになる

逆にいえば、それを気にしないか、あるいは読み書きがクリアできるなら
確かに文字列の方が楽だと思う
JavaScriptで画像解析みたいなネタもどこかで見たので、
ひょっとするとそもそもそんな難しい問題ではないのかもしれないが

384:デフォルトの名無しさん
10/07/21 03:22:23
JScriptのバイナリファイルアクセスは鬼門だよな。
書き出しはADODB.Streamをlatin-1で使えばいいとして、読み込みがしんどい。
バイナリタイプでは手も足も出ないからテキストタイプを使うしかないけど、
latin-1で読み込むと0x80-0x9fがutf-16の対応する文字に変換されちゃうし(逆変換で対応)、
utf-16で読み込むと先頭がBOMに一致する場合の対処が必要だし、
他のキャラクタセットだともっとめんどいし。

385:デフォルトの名無しさん
10/07/21 15:29:48
そうかなぁ
ADODB.Stream使えば読むのも書くのも自由自在だけど
バイナリを1バイト置きにコピーしてUnicodeで見ればよい。

386:デフォルトの名無しさん
10/07/22 00:54:32
結局テキストファイルほど簡単にはいかなくて、>>380みたいな変換処理が必要になるのか。

387:デフォルトの名無しさん
10/07/22 02:41:08
00-ffを透過するコードページを使う

388:デフォルトの名無しさん
10/07/22 19:15:04
ADODB.Streamはマカフィーが問答無用で警告を出すのでちょっと使いにくい(特にスクリプトを配布する場合)

389:デフォルトの名無しさん
10/07/22 19:49:06
HTML+JavaScriptでアプリ作成の決め手になるの?Titaniumってやつ。
Windows, Linux, Mac, Andoroid,iPhoneまで同じ技術でカバー出来るらしいが。
HTAみたいなもんか? オマイらどう思う?

ここはAppcelerator Titaniumの日本語情報を整備するためのプロジェクトです。
クロスプラットフォームのアプリ開発としては非常に敷居が低く、javascriptだけでなくpythonやruby、phpなどを利用する事で、
webサービス系ライブラリの流用も可能であり、手軽なツールからサービスクライアントの作成が非常に容易になります。 * 2010/03/22 o 公開
URLリンク(www.appcelerator.com)

Titanium Desktopでアプリケーション開発中
URLリンク(blog.livedoor.jp)

Appcelerator Titanium DesktopでRuby,Python,PHPを使ったお手軽デスクトップアプリ開発その1
URLリンク(d.hatena.ne.jp)

390:デフォルトの名無しさん
10/07/24 09:49:36
謎のオブジェクトを発見

rem a.vbs
msgbox WSH Is WScript

391:デフォルトの名無しさん
10/07/24 15:39:44
>>390
ほれ

謎のオブジェクトを発見.js

for(var o in this){WScript.Echo(o);}

392:デフォルトの名無しさん
10/07/27 11:04:47
//なるほど。その方法でも関数の名前が取得できるね。

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() );

393:デフォルトの名無しさん
10/07/28 10:14:25
ログをExecelシートに貼り付け~なんて非生産的な作業があって、これをKeyLoggerみたいなので
自動化できればと思いまして、WSHで作れるかなと思ったのですが。
あまり詳しくないんだけども、イベントを追跡してってソフトの起動、ボタンクリック等の操作を記録で
きますでしょうか?それが無理ならキーボードのキーやマウス操作を記録して操作の再現ができますか?


394:デフォルトの名無しさん
10/07/28 10:52:32
Excelのオブジェクトを操作するんじゃなくて、キー操作でうにゃうにゃしたいなら
UWSCでいいんじゃないの?日本語HELPもある。ポータブルでも動くし。
途中で複雑な判断いらない処理なら、UWSCでキー操作を記録して片付けるのがいい。
WSHに詳しくて、その技術を使って途中でいろいろ処理を分けたほうがいいとしたら、
他のソフトに絡むとこだけUWSCで記録しといたマクロをRunさせてまぜて使うとか。
またはAutoItXのDLL使って、ほかのソフトと絡む部分だけ処理させる。
USBのフォルダにシステムからコピーしたWScript.ExeやCscript.exeとmanifestとDLL使えば
UWSCと同じようにポータブルでも使える。

395:デフォルトの名無しさん
10/07/28 16:58:13
excelでやれば

396:デフォルトの名無しさん
10/07/28 22:50:48
ありがとうございますAutoItにUWSCですね。これはしかし動作を指定する必要がありますね。

癖とかありそうで結構手間がかかりそう。。

単純にWindows上の操作を一定期間記録して後で再現とか、できないんですかね。


397:デフォルトの名無しさん
10/07/29 02:52:53
すれ違いだよ

398:デフォルトの名無しさん
10/07/29 02:59:51
ソフト板で聞け

399:デフォルトの名無しさん
10/07/29 03:21:57
謎のオブジェクトを発見

rem a.vbs
msgbox typename(me)

400:デフォルトの名無しさん
10/07/29 05:19:19
>>396
こいつ、UWSCについて調べずに書き込んだな。

401:デフォルトの名無しさん
10/07/29 08:02:10
>>単純にWindows上の操作を一定期間記録して後で再現とか、できないんですかね。
UWSCってそういうことするためのソフトなんだが・・・

402:デフォルトの名無しさん
10/07/29 09:52:25
ゴメンさらっと見てそういう事ができると思わなかった。UWSC便利ですね。
複数のソフトをダウンロード&自動インストールなんて事もできるんだろうか・・
ちょっと使ってみます。どうも。

403:デフォルトの名無しさん
10/07/31 17:11:20
Document.body.innerTextでWeb上の文字列を取得し
その文字列に含まれるキーワードを検索して
発見した場合の処理と見つからなかった時の処理をするにはどうしたらいいでしょうか


if ((IE.Document.body.innerText)==("文字列")) { //処理1 } else { //処理2 };

これだと動かないのです

404:デフォルトの名無しさん
10/07/31 18:31:36
vbscriptならinstr()だな

405:デフォルトの名無しさん
10/07/31 19:08:06
>>404
ありがとうございます
JavaScriptではどうなのでしょうか


406:デフォルトの名無しさん
10/07/31 19:21:28
Stringオブジェクトのメソッドに同じようなものがあるだろ

407:デフォルトの名無しさん
10/07/31 19:33:28
match()?

408:デフォルトの名無しさん
10/07/31 21:22:20
if( /hogehoge/i.test(IE.Document.body.innerText)){ / * true * /;  ;}else{ / * false * / ;};

//正規表現のtestじゃだめか?

409:デフォルトの名無しさん
10/08/03 15:41:46
>>403
自分は、この方法で逃げている。

if ((IE.document.body.innerText).indexOf("文字列") != -1) { // 処理1} else { // 処理2 };

VBSはシラネ


410:409
10/08/03 15:53:02
match()を使うなら、

if ((IE.document.body.innerText).match(/文字列/) != null) { // 処理1 } else { // 処理2 };


411:デフォルトの名無しさん
10/08/03 17:43:08
Webページを操作するなら、スクリプト使うのが前提の
NilとかBugとかプニルつかって、そっちのオブジェクトつかったほうがいいんじゃない?
どうしてもIE使ったほうがいいの?

412:デフォルトの名無しさん
10/08/03 20:15:08
>>409のついでに質問してみる

innerHTMLで文字列を発見した時その行のリンクをクリックするのは可能?

413:409
10/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;
}
}


414:デフォルトの名無しさん
10/08/03 20:54:03
>>412
リンクからたどればよい

for (i=0; i<ie.document.links.length; i++) {
if (ie.document.links[i].innerText=="リンク文字列") {
ie.document.links[i].click(); break;
}
}

もし、リンク文字列ではない文字列から近隣のリンクを探したいってことならもっと面倒になる

415:デフォルトの名無しさん
10/08/03 21:55:44
>>414
>もし、リンク文字列ではない文字列から近隣のリンクを探したいってことならもっと面倒になる
それがやりたいけど方法が思いつかないのよね

>>413のように
IE.document.all.tags("a")[i].click();
を使えばできるかもしれないけど
これだと 目的のリンクをクリックしてくれるとは限らないというね

416:デフォルトの名無しさん
10/08/03 21:59:15
>>415
indexOfで文字列を発見した所より前の文字列でIE.document.all.tags("a")[i].click();
を使う・・・あ できるかも

ちょっとソースコード書いてみる

417:409
10/08/03 22:09:17
>>415
>>もし、リンク文字列ではない文字列から近隣のリンクを探したいってことならもっと面倒になる
>それがやりたいけど方法が思いつかないのよね

文字列が、aタグの外に有る場合なの?
文字列0<a href="...">文字列1</a>文字列2
で、文字列1ではなく、文字列0や文字列2を探してクリックとか。

確かに面倒だね。
.parentNodeとか、.previosSiblingや.nextSiblingとか、ゴチャゴチャ使わないと駄目そうだね。


418:409
10/08/03 22:10:27
もう眠い。
今日は寝る。


419:デフォルトの名無しさん
10/08/03 22:13:23
>>417
<a href="...">文字列1</a>文字列2

文字列2を検索するのは
if ((IE.document.body.innerText).indexOf("文字列2") != -1)
文字列1を検索するには 文字列2より前の文字列を検索する必要がある




420:デフォルトの名無しさん
10/08/03 22:20:14
>>419
調べてみたら使えそうなものがあった
lastIndexOf

これでソースコードを完成できるよ みんなありがとう


421:デフォルトの名無しさん
10/08/03 22:43:38
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
10/08/04 06:50:25
>>421
それ、後方から文字列を探すやつ。
前方から探すより、後方から探す方が探す時間が短い場合が有るから、そういう時に自分は使っている。
例えば、文字列1と文字列2が、非常に酷似していて、最後の数文字だけが異なる様な場合、比較回数が多分少ないのではないかと…

<a href="...">[文字列A][文字列1][文字列B][文字列2][文字列C]</a>

とかの場合。


423:409
10/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
10/08/04 15:29:47
それより、JScriptからファイルをランダムアクセスする事って出来ないのかなぁ?
JScriptから利用出来るフリーのDLLとか有れば良いんだけど。

Perl等のファイルにランダムアクセス可能なスクリプトからIE操作すれば、一番良いんだろうけど、
PerlもVBも分かんねーし。


425:デフォルトの名無しさん
10/08/04 18:06:24
>>ファイルをランダムアクセスする
???

426:デフォルトの名無しさん
10/08/04 21:24:12
>>424
adodb.streamは?

427:デフォルトの名無しさん
10/08/05 08:18:18
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();



428:デフォルトの名無しさん
10/08/05 09:31:37
これも反応しない

<input type="text" value="" size="20" class="test">

IE.Document.forms(0).Item(0).value = "あああ"

429:デフォルトの名無しさん
10/08/05 10:22:11
そういうことなら、その部分だけとりあえずはスクリプトコントロールで逃げといて、あとでじっくり考えるw

430:デフォルトの名無しさん
10/08/05 22:30:49
JScriptで普通にいけるんじゃないの?

ie = new ActiveXObject('InternetExplorer.Application');
ie.visible = true;
ie.navigate('URLリンク(www.google.co.jp)')
WScript.Sleep(2000);
ie.document.forms(0).item(2).value='WSH';
ie.document.forms(0).item(3).click();


431:デフォルトの名無しさん
10/08/06 08:25:47
>>430
どうもそのページだけできないんだ

入力フォームをクリックするとフォームの横に文字が表示されるものだから Inputタグのclassが怪しいと思うんだが


432:409
10/08/06 12:13:20
>>431
nameやclassの属性がformsになっていたりしない?


433:デフォルトの名無しさん
10/08/06 12:30:33
>>432
なってない
さすがにそんなミスはない



434:デフォルトの名無しさん
10/08/06 13:04:00
wshでツールチップを指定した座標位置に表示させることは可能ですか?

435:デフォルトの名無しさん
10/08/06 13:16:46
AutoItX使えば出来る。
oAutoIt = new ActiveXObject( "AutoItX3.Control.1" );
oAutoIt.ToolTip("WSH★★★こんばんみ★★★Part7",500,500);

436:デフォルトの名無しさん
10/08/08 11:53:00
if文でWEB上にボタンがある時の処理とない時の処理をする方法ってある?



437:409
10/08/08 19:39:00
>>436
outerHTMLを取得して、解析すれば良いだけでは?
ボタンがFlashとか、HTML以外だと厄介だけど。
見た目がボタンでも、 type = "button" の場合と、 type = "image" の場合が有るから、また厄介だけどね。


438:デフォルトの名無しさん
10/08/08 21:17:28
>>437
なるほどそれがあったか・・・
と なると

if ((IE.Document.body.outerHTML)==(IE.Document.forms[0])) {
WScript.echo("YES")} else{WScript.echo("No")}

こうかな・・・

439:409
10/08/08 21:33:13
>>438
それだと、うまくいかないでしょ。


440:デフォルトの名無しさん
10/08/08 21:58:08
>>439
となると

if ((IE.Document.body.innerText)==(IE.Document.body.innerText.indexOf("form"))){ //処理 } else { //処理2 }

こう・・・でもないな

441:デフォルトの名無しさん
10/08/08 22:07:32
innerTextでページ内のHTMLを・・・

・・・あれ?


if ((IE.Document.body.innerHTML)==(IE.Document.body.innerHTML.indexOf("form")))
これでもだめ?


442:デフォルトの名無しさん
10/08/08 22:13:58
innerHTMLでページ内のHTMLを全部取り出すんだから
innerHTML.indexOf("文字列") で検出した文字列とinnerHTMLのソースと照らし合わして処理・・・じゃないのか?
ならなんで動かないのかと

443:409
10/08/08 22:15:05
>>441
その条件式では、左辺値と右辺値は永遠にイコールにはならないから。


444:デフォルトの名無しさん
10/08/08 22:22:21
>>443
IE.Document.body.innerHTML.indexOf("form")は文字列を検出して表示するんじゃないのか?

文字列があるならその文字列を表示してなければ-1だったはずだが
それと左辺値を比較して左辺値の文字列の中に右辺値の検出した文字列があれば処理1 なければ処理2じゃないのか?



445:デフォルトの名無しさん
10/08/08 22:33:22
あぁ・・・そういうことね

左辺値からすでに間違えていたのか俺は

if((IE.Document.body.innerHTML.match("form")==("form"))

左辺値がソース全体だったら右辺値はformだけでソースとまったく一致しない
ならば左辺値をソース全体からformだけを検出し なければnull それを右辺値と比較

こんな簡単なことに気付かなかった自分が恥ずかしいわ。。。


446:409
10/08/08 22:39:18
>>444
indexOfの説明を良く読んだ方がいいと思う。

URLリンク(www.microsoft.com)
から、 scd56jp.exe をダウンロードし、インストールすればヘルプファイルがインストールされると思う。

直リンクはこちら
URLリンク(download.microsoft.com)

結構役に立つ。
あと、 IE Developer Toolbar も便利。
URLリンク(www.microsoft.com)


447:デフォルトの名無しさん
10/08/09 01:17:32
URLリンク(www.mbga.jp)
URLリンク(www.mbga.jp)
この子ね

>>403 と全く同じ質問しててワラタ
ポイント稼ぐために、必死こいてスクリプト組んでるみたいよw

448:デフォルトの名無しさん
10/08/09 09:59:26
>>447
ワロタ
なんだこのハゲ リアルでのハゲなのか?w

449:デフォルトの名無しさん
10/08/09 13:35:23
IEで
document.location.reload() はできて
document.location.back() はできないんだな

450:デフォルトの名無しさん
10/08/09 13:51:43
document.histry が使えないって・・・

451:409
10/08/09 18:45:15
ところで、WSH使いって、仕事の案件等の為に使っている人と>>447みたいな人とどっちが多いの?

自分は>>447の様な理由でやってるだけだけどさ。
プログラムは20年近く昔に学生の頃に授業でFortran77とLispのS式を習った程度。
学生時代、一緒だった人は何だか未踏のスーパークリエイターで表彰台に上っている写真がIPAのサイトに掲載されてたけどさ。

楽天のメルマガが1週間で2千通を超えるので、メルマガ解除用のスクリプトでも書くか…



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