Option Explicit

'*************************************************************
'API ウィンドウの位置やサイズ、表示を設定
'*************************************************************

Declare Function SetWindowPos Lib "user32" _
        (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
        ByVal X As Long, ByVal Y As Long, _
        ByVal cx As Long, ByVal cy As Long, _
        ByVal wFlags As Long) As Long

'hWndInsertAfterに指定する値の定義
Const HWND_TOP = 0           '手前にセット
Const HWND_BOTTOM = 1        '後ろにセット
Const HWND_TOPMOST = -1      '常に手前にセット
Const HWND_NOTOPMOST = -2    '常に手前を解除

'wFlagsに指定する値の定義
Const SWP_SHOWWINDOW = &H40  'ウィンドウを表示する
Const SWP_NOSIZE = &H1       'ウィンドウのサイズを変更しない
Const SWP_NOMOVE = &H2       'ウィンドウの位置を変更しない


'////////////////////////////////////////////////////////////
' API
'------------------------------------------------------------

'キーコード
Public Const VK_ESCAPE = &H1B   'エスケープキー
Public Const VK_PAUSE = &H13    'PAUSEキー
Public Const VK_SHIFT = &H10    'SHIFTキー
Public Const VK_CONTROL = &H11  'CONTROLキー

'点のx座標とy座標を定義する構造体
Public Type POINTAPI
    X As Long
    Y As Long
End Type

'指定時間(ミリ秒)の待ち
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'現在のマウスカーソルの位置座標を取得する
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

' 指定位置にあるウィンドウのハンドルを取得
Public Declare Function WindowFromPoint Lib "user32.dll" _
   (ByVal xPoint As Long, _
    ByVal yPoint As Long) As Long

'ウィンドウのクラス名を取得
Private Declare Function GetClassName Lib "user32.dll" _
    Alias "GetClassNameA" _
   (ByVal hwnd As Long, _
    ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long
  
' 親ウィンドウのハンドルを取得
Private Declare Function GetParent Lib "user32.dll" (ByVal hwnd As Long) As Long

'キー押下状態判定
Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Integer) As Integer


'//////////////////////////////////////////////////////////////////////
' API ラッパー関数
'----------------------------------------------------------------------
Public Function GetTopParent(ByVal hwnd As Long) As Long
'
' 最上位の親ウィンドウのハンドルを取得
'
    Dim rc As Long
    
    GetTopParent = hwnd
    Do
        rc = GetParent(hwnd)
        If rc <> 0 Then
            GetTopParent = rc
            hwnd = rc
        End If
    Loop While rc <> 0

End Function

Public Function MyGetClassName(hwnd As Long) As String
'
' ウィンドウハンドルからクラス名を取得
'
    Dim lngRc As Long
    Dim strBuffer As String * 128
    
    ' クラス名をバッファへ取得
    lngRc = GetClassName(hwnd, strBuffer, Len(strBuffer))
    ' クラス名を表示
    MyGetClassName = left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
    
End Function

Public Sub DispTop(hwnd As Long)    '最全面表示
    SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, _
                       0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub

Public Sub DispUntop(hwnd As Long)  '最全面表示解除
    SetWindowPos hwnd, HWND_NOTOPMOST, 0, 0, 0, _
                       0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub