javascriptでコンピュータ名取得

[7640]javascriptでコンピュータ名取得 投稿者:kuw 投稿日:2013/07/03 18:21:04
WindowsのInDesignCSのjavascript上で
コンピュータ名を取得したいのですが、
どうにも実現できません。
ご教授お願いします。

1行記載なので、どうにも読みにくいかも
しれませんが…
var tmpStr='Set ws=CreateObject("WScript.Shell")\nSet colItems = GetObject("winmgmts:\\\\.\\root\\cimv2").ExecQuery("Select * From Win32_ComputerSystem")\nFor Each aa in colItems\nws.Echo aa.Name\nNext\n';
はエラーを吐かれてダメ…

var tmpStr='Set colItems = GetObject("winmgmts:\\\\.\\root\\cimv2").ExecQuery("Select * From Win32_ComputerSystem")\nFor Each aa in colItems\nmsgbox aa.Name\nNext\n';
alert(app.doScript(tmpStr,ScriptLanguage.VISUAL_BASIC));
は行けるが、
戻り値が戻らない…

この辺りで手が挙がってきてしまいました。
[7646]Re: javascriptでコンピュータ名取得 投稿者:流星光輝 投稿日:2013/07/04 10:00:33
> 戻り値が戻らない…

せうぞーさんの所に記載があるのですが、
http://d.hatena.ne.jp/seuzo/20080804/1217855399

取り出したい値がVBソース上に無いですね。
msgboxで取り出した内容を表示しようとしているだけです。
まぁ、そんなこと書いても動かないですから、
うごくコード晒しておきます。たぶんググれば解決できたはず(過去の自分がググって解決したんで)

あ、ちなみに、CS1でテストしてないです。
CS3でテストしました。


#target 'InDesign'
var tmpStr='Set colItems = GetObject("winmgmts:\\\\.\\root\\cimv2").ExecQuery("Select * From Win32_ComputerSystem")\nFor Each aa in colItems\nPCName=aa.Name\nNext\napp.scriptArgs.SetValue \"myPCNAME\",PCName';
app.doScript(tmpStr,ScriptLanguage.VISUAL_BASIC);
alert(app.scriptArgs.getValue("myPCNAME"));
[7647]Re: javascriptでコンピュータ名取得 投稿者:お~まち 投稿日:2013/07/04 10:15:45
> 流星さん
scriptArgはCS2からで、CSにはありません(ToT)

なので戻り値として取得できないので、
VBScript中でapp.userNameとかapp.FindPreferences.FindTextなどに書き込んでおいて、
それをJavascriptで読み出す。
という手順が必要になると思います。

CSはもう使ってないので全然テストできないですが(^^;
[7648]Re: javascriptでコンピュータ名取得 投稿者:流星光輝 投稿日:2013/07/04 10:39:37
> scriptArgはCS2からで、CSにはありません(ToT)
IDLファイル検索して存在しないことを確認してきました…
なんだかすみません。
CS1の環境は、そろそろ脱出できそうと思い、
最近は、もっぱらjsxはCS3を動作確認にしているのが仇に…
そしてCS1にjs入れて玉砕したところです。orz

CreateObjectの失敗を恐れていて、
doScript内のコードで完結できないと、
困るんだと思うですが、思うだけです。

少し深追いしてみますけど……
[7649]Re: javascriptでコンピュータ名取得 投稿者:流星光輝 投稿日:2013/07/04 11:24:59
お~まちさんのご指摘を受け、
CS1では動かないので、どーしてもCS1で動かしたいんだよ。
という場合の応急処置で、CreateObjectで参照して、
findPreferences.findTextに取得した値入れて、
doScript後に拾うように書きました。

このコードはCS1で動作確認済です。

var tmpStr='Set colItems = GetObject("winmgmts:\\\\.\\root\\cimv2").ExecQuery("Select * From Win32_ComputerSystem") \n For Each aa in colItems \n PCName=aa.Name \n Next \n set idapp=CreateObject("InDesign.Application.CS") \n idapp.FindPreferences.FindText=PCName';
app.doScript(tmpStr,ScriptLanguage.VISUAL_BASIC);
alert(app.findPreferences.findText);

あんまし、綺麗じゃないなぁ…
[7650]Re: javascriptでコンピュータ名取得 投稿者:kuw 投稿日:2013/07/04 13:34:03
流星光輝さん
お~まちさん
ありがとうございます。

そうか!
findTextとかに一度書き出す手もありですね。
Quitで戻り値得られないもんだから
textで書き出す事ばかり考えてました。
目から鱗です。
質問してよかったです^^

レジストリからコンピュータ名を取得するようにして、
少しスリム化させました

var tmpStr='CreateObject("InDesign.Application.CS").FindPreferences.FindText= CreateObject("WScript.Shell").RegRead("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ComputerName\\ComputerName")\n';
app.doScript(tmpStr,ScriptLanguage.VISUAL_BASIC);
alert(app.findPreferences.findText);
で上手く動きました。
感謝!
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)