上位・下位ワード(上位・下位バイト)取得          <TOP>


例では、マウスカーソルで指定した座標の色情報を取得し、上位ワード・下位ワードに分解、さらに上位バイト・下位バイトに分解しています。
GetCursorPos マウスカーソル(マウスポインタ)の現在の位置に相当するスクリーン座標を取得
LoByte 16ビット整数値の下位を取得
HiByte 16ビット整数値の上位を取得
LoWord 指定されたダブルワードの下位ワードを返す
HiWord 指定されたダブルワードの上位ワードを返す

上図の色を選択した状態

 

'================================================================
'= 上位・下位ワード(上位・下位バイト)取得
'=    (HiLoByte.bas)
'================================================================
#include "Windows.bi"

Type POINTAPI
    x As Long
    y As Long
End Type

' マウスカーソル(マウスポインタ)の現在の位置に相当するスクリーン座標を取得
Declare Function Api_GetCursorPos& Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI)

' 16ビット整数値の下位を取得
Declare Function Api_LoByte Lib "TLBINF32" Alias "lobyte" (ByVal Word%) As byte

' 16ビット整数値の上位を取得
Declare Function Api_HiByte Lib "TLBINF32" Alias "hibyte" (ByVal Word%) As byte

' 指定されたダブルワードの下位ワードを返す
Declare Function Api_LoWord% Lib "TLBINF32" Alias "loword" (ByVal DWord&)

' 指定されたダブルワードの上位ワードを返す
Declare Function Api_HiWord% Lib "TLBINF32" Alias "hiword" (ByVal DWord&)

' 指定された座標のピクセルのRGB値を取得
Declare Function Api_GetPixel& Lib "gdi32" Alias "GetPixel" (ByVal hDC&, ByVal X&, ByVal Y&)

' ウィンドウ全体のデバイスコンテキストを取得。0(NULL)を指定すると、スクリーン全体のデバイスコンテキストを取得
Declare Function Api_GetWindowDC& Lib "user32" Alias "GetWindowDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

Var Shared Timer1 As Object
Var Shared Text(14) As Object

Timer1.Attach GetDlgItem("Timer1")
For i = 0 To 14
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i+1)))
    Text(i).SetFontSize 14
Next

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Timer1.SetInterval 10
    Timer1.Enable -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    Var pAPI As POINTAPI
    Var Col As Long
    Var R As byte
    Var G As byte
    Var B As byte
    Var lDC As Long
    Var lw As Long
    Var hw As Long
    Var Ret As Long

    lDC = Api_GetWindowDC(0)

    Ret = Api_GetCursorPos(pAPI)

    Col = Api_GetPixel(lDC, pAPI.x, pAPI.y)
    lw = Api_LoWord(Col)
    hw = Api_HiWord(Col)

    R = Api_LoByte(lw)
    G = Api_HiByte(lw)
    B = Api_LoByte(hw)

    Text(6).SetWindowText "&&H" & Hex$(Col)
    Text(7).SetWindowText "&&H" & Hex$(lw)
    Text(8).SetWindowText "&&H" & Hex$(hw)

    Text(9).SetWindowText "&&H" & Hex$(R)
    Text(10).SetWindowText "&&H" & Hex$(G)
    Text(11).SetWindowText "&&H" & Hex$(B)

    Text(12).SetWindowText Str$(R)
    Text(13).SetWindowText Str$(G)
    Text(14).SetWindowText Str$(B)

    Ret = Api_ReleaseDC(0, lDC) 
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End