Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2007-10-23

WMI (1)

| 04:20 |  WMI (1) - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  WMI (1) - Ci.nsIZIGOROu

とりあえず

var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(null, "root\\cimv2"); // ここまでおまじない
var com = service.execQuery("SELECT * FROM Win32_ClassicCOMClassSetting WHERE ProgID <> NULL AND TypeLibraryId <> NULL");

このいかにもSQLちっくな奴はWQLと言うらしい。ってかほぼSQLです。w

LIKE句も使えた。

このテーブルもどきみたいな奴は、WMI Classes (Windows)辺りから漁れるみたい。

ちなみにWQL使った検索、めちゃくちゃ早い。Registryなんて見ちゃダメだたね。



WMIとProgIDメモ

| 03:39 |  WMIとProgIDメモ - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  WMIとProgIDメモ - Ci.nsIZIGOROu

  1. WbemScripting.SWbemDateTime
  2. WbemScripting.SWbemLastError
  3. WbemScripting.SWbemLocator
  4. WbemScripting.SWbemNamedValueSet
  5. WbemScripting.SWbemObjectPath
  6. WbemScripting.SWbemRefresher
  7. WbemScripting.SWbemSink

むぅ、多いなぁ。

参考

  1. Document Conventions for the Scripting API (Windows)
  2. Scripting API Object Model (Windows)

Windows Script Component (1)

| 02:19 |  Windows Script Component (1) - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  Windows Script Component (1) - Ci.nsIZIGOROu

Windows Script Componentとは?

(ActiveScriptがサポートする)スクリプト言語でActiveXコントロールが作れる枠組みの事。

MozillaだったらJavaScriptでXPCOMを実装するような感じだと考えて構わない。

wscファイルの作り方

基本はXMLファイルです。複数のコントロールを同時に作る事が可能。

基本的な構造
<?xml version="1.0" encoding="utf-8"?>
<package>
  <component id="Counter" />
  <component id="AnotherComponent" />
</package>
componentの中に記述すること
regstration要素
progid, classid(CLSID), version, descriptinの定義*1
public要素
公開するプロパティ、メソッド、イベントの定義
script要素
各言語での実装*2

registration要素のサンプル

<registration
  description="Sample Counter Component"
  progid="SampleComponent.Counter"
  version="1.00"
  classid="{B49187E5-946E-4A07-A1C1-C0BC02659B94}"
>
  <script language="JScript">
    <![CDATA[
function Register() {
  // このコンポーネントが登録される際に実行される処理
}

function Unregister() {
  // このコンポーネントが削除される際に実行される処理
}
    ]]>
  </script>
</registration>

public要素のサンプル

<public>
  <property name="count">
    <get/>
    <put/>
  </property>
  <method name="incrCount">
    <parameter name="duration"/>
  </method>
  <method name="decrCount">
    <parameter name="duration"/>
  </method>
  <event name="OnIncr" />
  <event name="OnDecr" />
</public>

script要素のサンプル

<script language="JScript">
  <![CDATA[
var description = new SampleComponentCounter();

function IEReplObserverService() {
  this.get_counter = get_counter;
  this.put_counter = put_counter;

  this.incrCount = incrCount;
  this.decrCount = decrCount;
}

var counter = 0;

function get_conter() {
  return counter;
}

function put_counter(newValue) {
  counter = newValue;
}

function incrCount(duration) {
  fireEvent("OnIncr", counter, duration);
  counter += duration;
}

function decrCount(duration) {
  fireEvent("OnDecr", counter, duration);
  counter -= duration;
}
  ]]>
</script>

今の所分かってること

  • 作った後で右クリックしてレジストリに登録しないと使えません
  • Component.prototypeで必要なメソッドやプロパティを定義してもどうも動作しないっぽぃ。公開するプロパティとメソッドはGlobalオブジェクトに居ないとダメみたい。prototypeプロパティ自体には定義は出来る。

まだ試してないこと

  • 公開としていないプロパティ、メソッドが宣言できるか、また使えるかどうか。
  • WSCの中で他のコンポーネントを呼び出した際に、COMイベントを処理出来るか。(多分出来ない)
    • そもそもWScriptオブジェクトが無いので、CreateObject, ConnectObjectが出来ない
    • やるならActiveXObject, object要素のいずれか
    • object要素はevents属性でそのobjectのイベントを使うかどうかある。id属性で指定した値で多分出来るとは思うんだけど、動的にobject要素の生成は出来ないハズ。

まぁ動的に出来たらちと危険かw


GUIDの生成

| 01:39 |  GUIDの生成 - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  GUIDの生成 - Ci.nsIZIGOROu

各所に載せられてるけど自分も書いておく。

WScript.Echo((new ActiveXObject("Scriptlet.Typelib")).GUID);

んでもってこんな風に使うと便利(on cygwin)

cscript //NoLogo guid.js | putclip

とするとクリップボードにGUIDが入ってます。

追記1 (2007-11-02T04:58:21+09:00)

WScript.StdOut.Write((new ActiveXObject("Scriptlet.Typelib")).GUID);

こっちのが便利だな。

覚えておくと便利なActiveXコントロール集

| 21:53 |  覚えておくと便利なActiveXコントロール集 - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  覚えておくと便利なActiveXコントロール集 - Ci.nsIZIGOROu

あとは自分のこのブログでの検索。

随時追加する。

ScriptX.Factory
本来プリンタ云々の為に使うらしいけどEventSinkでキモいCOMイベントに対してハンドラを追加出来るようになる。(Download: MeadCo’s ScriptX )
ScriptControl
任意のスクリプトエンジンを動的に組み込む為のコントロール
MSWinsock.Winsock
ネットワーク系コントロールとしては最も低レベルなコントロール。大概これでネットワークスクリプトは書ける
TLI.TLIApplication
TypeLibをinspectするコントロール。素敵。恐らくVisual Studioが入って無いと存在しない。
Shell.Application
Windowsの簡易操作、Explorer/Internet Explorerの管理など
Scripting.FileSystemObject
FileSystemを扱うコントロール
WbemScripting.SWbemLocator
WMIを扱うコントロール、schema指定もあるけどどう違うか分からない。そのうち詳細に。
InternetExplorer.Application
IEの画面そのもの。メニューバーとかコンテキストメニューとかは含まない。端的に言えばWebControl
Scriptlet.TypeLib
TypeLibの生成、GUIDの生成、DHTML Behavior Componentの何か。*3
htmlfile
JSで言うならdocumentオブジェクト相当。IEのレンダリング部。IHTMLDocumentインターフェースかな。
Scripting.Dictionary
Hash的な使い方が出来る。
ADODB.Stream
IStreamを実装したコンポーネント。バイナリ処理する時も必要。

TODO

  • MSXML系
  • ADODB系
  • htmlfilemshtml

他なんかあったかな。忘れた。

*1:レジストリに登録される

*2:これはまた今度

*3:Behaviorの方は多分知らなくて良いw