'(SHAppBarMessage)------------------------------------------------------------------------------- Public Const ABE_BOTTOM = 3 '下辺にある Public Const ABE_LEFT = 0 '左辺にある Public Const ABE_RIGHT = 2 '右辺にある Public Const ABE_TOP = 1 '上辺にある Public Const ABM_ACTIVATE = &H6 'タスクバーがアクティブ非アクティブになった Public Const ABM_GETAUTOHIDEBAR = &H7 '自動非表示のタスクバーのハンドル Public Const ABM_GETSTATE = &H4 '自動非表示、トップ位置表示の状態を取得 Public Const ABM_GETTASKBARPOS = &H5 'タスクバーの位置とサイズ Public Const ABM_NEW = &H0 '新しいタスクバーを登録する Public Const ABM_QUERYPOS = &H2 'タスクバーの位置とサイズを調べる Public Const ABM_REMOVE = &H1 'タスクバーを削除する Public Const ABM_SETAUTOHIDEBAR = &H8 '自動非表示に設定・取消す Public Const ABM_SETPOS = &H3 'タスクバーの位置とサイズを設定する Public Const ABM_WINDOWPOSCHANGED = &H9 'タスクバーの位置が変わった Public Const ABS_AUTOHIDE = &H1 '自動で隠す Public Const ABS_ALWAYSONTOP = &H2 '常に手前に表示 ' 長方形の左上隅と右下隅の座標を定義する構造体 Type RECT left As Long top As Long right As Long bottom As Long End Type ' タスクバーメッセージを定義する構造体 Type APPBARDATA cbSize As Long '構造体のサイズ hWnd As Long 'タスクバーのウインドウのハンドル uCallbackMessage As Long 'コールバック関数へのポインタ uEdge As Long 'タスクバーの位置を示す次の定数 rc As RECT 'タスクバーの矩形を示す RECT 構造体 lParam As Long 'メッセージのパラメータ End Type Declare Function SHAppBarMessage Lib "SHELL32" (ByVal dwMessage As Long, pData As APPBARDATA) As Long '(SetWindowPos)--------------------------------------------------------------------------------------------- ' クラス名またはウィンドウ名からウィンドウのハンドルを取得 Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long ' ウィンドウのサイズと位置とZオーダーを設定する 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 uFlags As Long) As Long '(SetWindowPos) Public Const SWP_FRAMECHANGED = &H20 Public Const SWP_DRAWFRAME = SWP_FRAMECHANGED '再描画の時、ウィンドウを囲む枠を描画 Public Const SWP_HIDEWINDOW = &H80 '再描画の時、ウィンドウを非表示にする Public Const SWP_NOACTIVATE = &H10 'ウィンドウをアクティブにしない Public Const SWP_NOCOPYBITS = &H100 Public Const SWP_NOMOVE = &H2 'ウィンドウを移動しないでサイズだけ変える Public Const SWP_NOOWNERZORDER = &H200 'Don't do owner Z ordering Public Const SWP_NOREDRAW = &H8 '順序は変えるがウィンドウの再表示をしない Public Const SWP_NOREPOSITION = SWP_NOOWNERZORDER ' Public Const SWP_NOSIZE = &H1 'ウィンドウのサイズを変えないで移動のみ Public Const SWP_NOZORDER = &H4 'hWndInsertAfter%を無視して現在の順序を保持 Public Const SWP_NOSENDCHANGING = &H400 'WM_WINDOWPOSCHANGINGを送らない Public Const SWP_SHOWWINDOW = &H40 '再描画の時、ウィンドウを再表示 Public Const HWND_BOTTOM = 1 'ウィンドウを最背面に置く Public Const HWND_NOTOPMOST = -2 'ウィンドウを最前面の次に置く Public Const HWND_TOP = 0 'ZOrderのトップに置く Public Const HWND_TOPMOST = -1 'ウィンドウを最前面に置く Public Const WM_GETTEXT = &HD 'コントロールのキャプション、テキストボックスのテキストをバッファにコピー ' ウィンドウにメッセージを送る Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long 'Form Module Private Sub cmdABM_GETTASKBARPOS_Click() 'タスクバーの左上隅と右下隅の座標を取得 Dim uAppBarData As APPBARDATA Dim rtncd As Long uAppBarData.cbSize = Len(uAppBarData) rtncd = SHAppBarMessage(ABM_GETTASKBARPOS, uAppBarData) If rtncd <> False Then With uAppBarData.rc MsgBox "左=" & .left & " 上=" & .top & " 右=" & .right & " 下=" & .bottom End With End If End Sub Private Sub cmdALWAYSONTOP_Click() Dim rtncd As Long rtncd = AbmGetState("常に手前に表示", ABS_ALWAYSONTOP) End Sub Private Sub cmdAUTOHIDE_Click() Dim rtncd As Long rtncd = AbmGetState("自動的に隠す", ABS_AUTOHIDE) End Sub Private Function AbmGetState(strState As String, lngState As Long) 'タスクバーの設定を取得 Dim uAppBarData As APPBARDATA Dim rtncd As Long Dim flg As Boolean uAppBarData.cbSize = Len(uAppBarData) rtncd = SHAppBarMessage(ABM_GETSTATE, uAppBarData) flg = rtncd And lngState MsgBox "タスクバーに「" & strState & "」が設定されていま" & IIf(flg, "す。", "せん。") End Function Private Sub cmdNotepad_Click() ' メモ帳を起動 Shell "Notepad.exe", vbNormalFocus End Sub Private Sub cmdSendMessage_Click() Dim WinHnd As Long Dim buf As String * 255 Dim rc As Long 'クラス名でウィンドウハンドルを取得 WinHnd = FindWindow("Notepad", vbNullString) If WinHnd <> 0 Then 'ウィンドウタイトルを取得 rc = SendMessage(WinHnd, WM_GETTEXT, Len(buf), ByVal buf) 'ウィンドウのテキストを表示 MsgBox left(buf, InStr(buf, vbNullChar) - 1) End If End Sub Private Sub cmdSetWindowPos_Click() Dim WinHnd As Long Dim rc As Long 'クラス名でウィンドウハンドルを取得 WinHnd = FindWindow("Notepad", vbNullString) If WinHnd <> 0 Then 'ウィンドウを最前面に rc = SetWindowPos(WinHnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) End If End Sub