スポンサードリンク
« »


API「sendmessage」とHSP「sendmsg」

2009 年 5 月 21 日 木曜日  【 カテゴリー: HSP3 , sendmsg


前回は「windows API」について簡単にみていきました。今回はHSP3の「sendmsg」についてみていきます。

【HSP3】 【windows API】
sendmsg p1,p2,p3,p4 sendmessage(p1,p2,p3,p4)

前回、HSP命令の「sendmsg」は「windowsAPI」の1つである「sendmessage関数」を利用すると説明しました。
windows API:sendmessageは4つのパラメータをもちますが、HSP3:sendmsgも同様4つのパラメータを持ち、意味は全く同じです。

p1 HWND 送信先ウィンドウのハンドル
p2 UINT Msg メッセージ
p3 WPARAM wParam メッセージの最初のパラメータ
p4 LPARAM lParam メッセージの 2 番目のパラメータ

【例:ウィンドウタイトルを取得して表示】

sendmsg02

ウィンドウタイトルを取得して表示する例をみながら、「sendmsg」の使い方をみていきます。HSP「sendmsg」のパラメータはwindows API「sendmessage」と全く同じでしたので、windowsAPI「sendmessage」からタイトルを取得するメッセージを探します。

WM_GETTEXT」メッセージでタイトルが取得できそうです。マイクロソフトサイトの「WM_GETTEXT」メッセージの説明を引用します。

lResult = SendMessage(     // returns LRESULT in lResult
   (HWND) hWndControl,     // handle to destination control
   (UINT) WM_GETTEXT,     // message ID
   (WPARAM) wParam,     // = (WPARAM) () wParam;
   (LPARAM) lParam     // = (LPARAM) () lParam;
);

wParam

Specifies the maximum number of TCHARs to be copied, including the terminating null character.
確保する最大バイト数

lParam

Pointer to the buffer that is to receive the text.
テキストを受けてるバッファ領域のポインタ
指示されているとおりに、パラメータを指定します。

p1:

メッセージを送るウィンドウハンドルです。HSP3ではアクティブウィンドウの「ウィンドウハンドル値」はシステム変数「hwnd」で取得できます。

p2:

今回は定数「WM_GETTEXT」です。しかし、HSP3はsendmessageの定数は定義されていないので使えないようです。「ちょくとのページ」さんのメッセージリストには定数のコードも記載されていました。「WM_GETTEXT」は「0x000D」です。

p3:

確保する最大バイト数を指定します。

p4:

バッファー領域のポインタを指定します。変数を定義すればバッファーが確保されます。その変数のバッファーアドレス(ポインタ)は、「varptr関数」で求めることができます。
【HSP3例コード】
title "タイトル取得"
; 文字列確保領域(64バイト)
sdim buf
; WM_GETTEXT
sendmsg hwnd, 0x000D, 64, varptr(buf)
mes buf

これで「sendmsg」を利用してウィンドウタイトルを取得し表示することができました。


にほんブログ村 IT技術ブログ Webサイト構築へ
にほんブログ村
【WEBサイト構築・プログラムブログ】
ランキング参加中!よろしければ「クリック」お願いします。
にほんブログ村 IT技術ブログ プログラム・プログラマへ
にほんブログ村
2009 年 5 月 21 日 木曜日  【 カテゴリー: HSP3 , sendmsg

コメント / トラックバック 2 件

  1. サイト構築日記 » ウィンドウハンドルの取得 『HSP3』 より:

    [...] API「sendmessage」とHSP「sendmsg」 [...]

  2. ダムダム人 より:

    初めまして。

    以前、エクセルVBAを利用して他のプログラムを制御した時、「sendmessage」を使いました。
    最近、HSPで実験したのですが、中々思うように制御できず、困っていたところ
    ここを参考にしたら何とかできました。
    (ウインドウズ付属の電卓の外部制御の実験です。)
    助かりました。

    エクセルVBAではapiの書式どおりSendMessage(hwd2,BM_CLICK,0,0)で
    動作したのですが。hspではsendmsg hwd2, BM_CLICK, 0, 0となり
    apiの書式とは異なるのですね?

    あと、最初の「定義」(#cfuncや#defineの事)も
    エクセルVBAとは、かなり異なり面食らっています。

コメントをどうぞ

※管理者による確認後に表示されます。表示までしばらくお待ちください。





デジもの通販