超初心者なんですけど、最近VBをやり始めてだいぶ使えるようになったかなと思ったんですけど、ここの掲示板によくでてくる言葉でわからないものがあります。
『APIのSendMessage』
ってなんですか??(これがわからない時点でわかってない??)
WindowsというOSは、起動中のウィンドウに、メッセージを送ることで、アプリケーションを動作させています。
SendMessageとは、そのメッセージを送るAPIで、本来Windowsが送るメッセージとは別のタイミングで、そのメッセージを受け取ったときに行う動作をさせたいときに使います。
WindowsはいくつものDLLの集まり(Systemフォルダに存在するDLL)で成り立っていて、
その中の関数を使用することにより、Windowsは動作しています。
Windowsはそのアプリケーションを作るときに便利なように、
その関数をDLLという形にして、開発者に使いやすいようにしています。
この関数をAPI(ApplicationProgramingInterface)といいます。
(DLLの中の関数を使うこと自体を、"APIを使う"というように言われることも多いですけど)
本来フォームを作ること自体、APIを使わなければいけないのですけど、
そういった基本的なAPI呼び出しは、VBが内部で行っているため、気にすることはありません。
ちなみにAPIを使うことを、Macでは同じようにAPIというそうですけど、
UNIX系OSでは、"システムコール"というそうです。
こんなかんじでどうでしょう?
追記
ここで言うウィンドウとは、フォームも含め、コマンドボタンやエディットボックスなど、ここのコントロールも含めます。
フォームのようなウィンドウを"親ウィンドウ"。コマンドボタンのような、フォームの中に置かれるウィンドウを、"子ウィンドウ"といいます。
あと、Windowsの使っているAPIは、正式にはWin32API(32BitWindowsのAPIという意味)といいます。
Windows3.1のときからある、16BitのAPIは、Win16APIというんでしょうけど、あんまりそういうふうにいう機会はありません。
今も下位互換性のために16BitAPIのいくつかは残っていますけど、
内部処理は32Bitに置き換わっていたり、近々廃止する予定だったりするんでしょう。
現に32Bitと16Bitの両方のAPIをとっておくと、何かとOSが不安定になることもあるそうで、
WindowsXPProfessionalでは、Win16APIを全廃して、安定させたような話を聞いたことがあります。
うちはWindowsXPHomeなので、知りませんけど。
DLLの関数を使うことを"APIを使う"というのが、正式なことかどうかはわかりません。
たかみちえさんレスありがとうございます。
コマンドボタンもウインドウって言うとは知りませんでした。
つまりWindowsは何か動作するときにメッセージをウインドウに送信する。
SendMessageはそのメッセージを自分で送るということ??
って書いてある通りですね∈^0^∋。
SendMessageがどういうものはわかったような気がしますが(多分)、これって
私が持ってるマニュアルには載ってないんですよね〜・・・。
ヘルプ見たんですけど、ハンドルって何・・・??。ってところでつまずいたし。
みなさんは当たり前のように使ってますけど、どうやって覚えたんですかね??
> ヘルプ見たんですけど、ハンドルって何・・・??。ってところでつまずいたし。
そうそうごめんなさい。このことを忘れていました。
ウィンドウを識別するために、Windowsはウィンドウすべてに"ハンドル"というものを割り当てます。
ハンドルとは、その識別番号のことで、
この識別番号さえわかれば、どんなウィンドウ(他のソフトのものでも、Windowsのシステムが持っている、たとえばタスクバーなどでも)でも、
SendMessageやその他のAPIを使用して、操作することができます。
(一部ラベルコントロールなどは、ウィンドウハンドルを持っていませんけど、これらは例外です。
詳しくはこの掲示板の前の記事http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200209/02090042.txtで書いたので、省略します。まんなかのあたりです)
ただし、タスクバーなどに不用意にメッセージを送ると、
下手をするとExplorerが強制終了したり、システムが破損することもありえる(わたしはそう経験はありませんけど、無きにしも非ずだと思います)ので、
他のソフトや自分のソフトを操作するためにのみ使うのがいいでしょうね。
ウィンドウメッセージ(SendMessageなどで送るメッセージのこと)は、
人間から見るとただの数値ですけど、それではわかりづらいので、
"定数"という形であらかじめ定義されています。
その定義などを閲覧して、必要なものをVBのエディタ内にコピーするのが、
APIビューアなどのソフトです。
ウィンドウメッセージは、WM_から始まる名前で定義されてます。
その他、特定の子ウィンドウに向かって送るためのメッセージは、
CB_なんとかや、EM_なんとかという名前で定義されています。
> みなさんは当たり前のように使ってますけど、どうやって覚えたんですかね??
わたしはこの掲示板や、いろいろなサイトに行って勉強して、そのうち覚えていきました。
結構"VB講座"とか、そういうことをやっているサイトがたくさんあるので、
それらをめぐっていると、結構身につきます。
いまわたしは、Delphiという言語でソフトを作っていますけど、
言語仕様が違うほかは、コツは同じなので、そういうのは今でも活きていると思います。
たかみちえさんまたまた細かい説明のレスありがとうございます。∈^0^∋
ホント勉強にないります。
ハンドルっていうのはウインドウの名前みないなものなんですね。
SendMessageを覚えるといろいろできそうですね。
まだまだ勉強不足なようです。
たかみちえさんいろいろありがとうございました。
また質問があったらヨロシクお願いします!!
> ハンドルっていうのはウインドウの名前みないなものなんですね。
うーん。ちょっと違うような・・・(^_^;)
ハンドルはウィンドウの出席番号のようなものと思ってください。
ウィンドウの名前には、ウィンドウキャプションと、ウィンドウクラスというものがあります。
FindWindowというAPIで、これらの両方または片方で、ウィンドウを指定すると、ハンドルが返されます。
名前を呼ぶと、出席番号を言ってくれるようなものと思ってください。
ウィンドウキャプションとは、言うまでもなく、ウィンドウの上に表示されているタイトルのことです。
ウィンドウクラスというのは、ウィンドウを作成するときにつける名前で、ハンドルを指定してもらうこともできます。
ウィンドウクラスは、VBの作ったウィンドウの場合、
ThanderRTなんとかという名前で固定されています。
(ThanderはVBの前のコードネーム、RTはランタイムの略らしいです)
DelphiやBCBの作ったものの場合、
フォームならフォームのNameプロパティで指定したものにTをつけたもの、
(なぜTがつくかは不明です^^;)
コンポーネントなら、そのコンポーネント名(Tがつく)
C/C++で作ったウィンドウの場合、ウィンドウ作成時に好きな名前をつけられます。
(先頭にCをつける人が多いようですね)
ボタンなどはWindows規定のものです。
ウィンドウクラス名の取得には、
http://www.h3.dion.ne.jp/~hanagex/ ここのソフトなどを使うのが簡単です。
プログラマは必携ですね。
またまたありがとうございます。
なーるほど。
出席番号っすか。
身近な例えなんでわかりやすいっす∈^0^∋
こんな便利そうなツールがあるんですね〜。
SendMessageが使えそうな気がしてきましたよ。
VBって奥が深いっスね。
なんだか自信喪失ぎみ(;O;)。
勉強し直して出直してきます。
遅れましたけど、Application Programing Interfaceは、
Application Program Interface の間違いです(^_^;)
> VBって奥が深いっスね。
そうですねぇー、これについてはVBの奥が深いのではなく、Windowsの奥が深いんですけど、
たしかに、とても奥が深いです。
ただ、基本的なルールはほとんどおんなじです。
なので、ある一つのAPIの使い方を覚えたら、それと同じような動作をするAPIも、
そのAPIを使ってみたら、それに関連するいくつかのAPIも というように、
どんどんわかっていくものだと思います。
APIって一個ではまったく使えないものも相当ありますし。
とりあえず勉強しようより、まず実践してみればいいと思います。
わたしもVBをやりたてのころは、とにかくソフトを作ってみましたけど、
それらを作ってるうちに、いつの間にか結構いろいろできるようになってましたから。
(まあ、まじめに勉強してみたら、そのほうが効率がいいかもしれませんけど)
今そういうページを作ろうと調べてるんですけど、
Gooの英和辞典でAPIを引いてみると、
applications programming interface.
と出てきました。
でも、同サイトの新語辞書で引くと、
application program interface
とでてきます。
どっちが正しいんでしょうかねぇ(^^ゞ
たぶん、下のほうだとは思いますけど…。
間違ってもAmerican Petroleum Institute(アメリカ石油協会)
ではないのは確かですけど。
私が持っているパソコン用語辞典は
application program interfaceです。
APIの本は
application program interfaceです
VB・VBA用語辞典は
applications programming interfaceです。
両方正解???
他で言うAPIはどの頭文字語かはわかりませんが,Windows SDKで提供されるAPIの場合はWindows SDK Documentationによると,
Application Programming Interface
のようです。
see) http://msdn.microsoft.com/library/en-us/winprog/winprog/windows_api_start_page.asp
たかみちえさん、かげうらさん、YuOさんありがとうございます。
>わたしもVBをやりたてのころは、とにかくソフトを作ってみましたけど、
>これらを作ってるうちに、いつの間にか結構いろいろできるようになってましたから。
そうですね。
私も勉強するばかりでなくいろいろ作ってみようと思います。
ガンガンにAPIを使うソフトのネタないかな〜?。
って自分で考えます・・・。
そして私は、
APIは『Application Programming Interface』
に一票!!
結構、間違えて記述されているのがありますね
正しくは "Application Programming Interface"
です。
マイクロソフト単語帳
http://www.microsoft.com/Japan/Terminology/query.asp?ID=28&q=API&key=&kbid=&ui=L
ツイート | ![]() |