16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

COM(Component Object Model)についてふわっと学習していく その1 導入編

Last updated at Posted at 2017-05-23

なにはともあれ

IEを立ち上げるだけのVBSです。

StartIEByCOM.vbs
Dim ie
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True

さらにie.xxとメソッドやプロパティを書いていくことで、アプリをコントロールできます。
IEだけではなくエクセルなどのオフィス製品に対しても同様のアプローチができます。
業務の効率化に活用できそうですね。

ベンリダナー。

…で終わってもいいのですが、今回はもう一歩、踏み込んでみましょう。

コードだけ見るとシンプル極まりないですが、なぜこんなことができるのか?

CreateObject("InternetExplorer.Application")

どうやらここで、IEを操作できるオブジェクトを生成しているようです。

CreateObjectとは?

「オートメーション オブジェクトへの参照を作成して返します。」とあります。
https://msdn.microsoft.com/ja-jp/library/cc410215.aspx

「オートメーション」とは、他のアプリケーションの操作をしたり、自分のアプリケーションを他のアプリケーションから操作できる状態にすること。
https://msdn.microsoft.com/ja-jp/library/dt80be78.aspx
今回のコードは前者ですね。IEが後者。

ようやく本題。COMとは?

これを実現するために、「COM(Component Object Model)」
という技術が使われています。
https://ja.wikipedia.org/wiki/Component_Object_Model

CreateObjectの定義に戻ると、

CreateObject(servername.typename [, location])

servernameはアプリケーション名、typenameはオブジェクトまたはクラスを指定するとのこと。
これで、ieを操作できるオブジェクトを取得できるわけです。

COMを使えば、アプリケーションの壁、言語の壁を超えてその操作ができるようになります。
これを活用できれば、あんなことやこんなことができるのではないだろうか?
という可能性を感じます。

単に「IEやエクセルを自動操作する仕組み」としておくのはもったいない!
操作する側だけではなく、される側を作ることもできるのでは!?

ということで、COMを勉強して…と書籍を漁ってみるも。

なるほど、わからん。

一見簡単そうな仕組みの裏で、とっても難解なあれやこれやが動いています。
果たしてほんとうにこれをすべて理解しなければCOMは使いこなせないのか?

いや、そんなはずはない。
現に、IEをVBSから起動できたじゃないか。

そして、今回の目的

COMのめんどくさいところをふわっと理解したつもりになりながら、
便利な機能をそれっぽく使えるようになること

です。

次回

COMが言語非依存であることを確認するために、さまざまな言語での実装を試してみます。
その2 本当に言語非依存なのか? 

16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?