クラス名の取得 <TOP>
GetClassName ウィンドウのクラス名を取得
GetFocus フォーカスを持つウィンドウハンドルを取得
GetForegroundWindow ユーザーが操作中のウインドウを取得
GetWindowThreadProcessId ウィンドウのプロセスIDとスレッドIDを取得
SendMessage ウィンドウにメッセージを送信
AttachThreadInput 特定のスレッドの入力処理機構を別のスレッドにアタッチ
SetWindowPos ウィンドウのサイズ、位置、および Z オーダーを設定
'================================================================ '= クラス名の取得 '= (AttachThreadInput.bas) '================================================================ #include "Windows.bi" ' ウィンドウのクラス名を取得 Declare Function Api_GetClassName& Lib "user32" Alias "GetClassNameA" (ByVal hWnd&, ByVal lpClassName$, ByVal nMaxCount&) ' フォーカスを持つウィンドウハンドルを取得 Declare Function Api_GetFocus& Lib "user32" Alias "GetFocus" () ' ユーザーが操作中のウインドウを取得 Declare Function Api_GetForegroundWindow& Lib "user32" Alias "GetForegroundWindow" () ' ウィンドウのプロセスIDとスレッドIDを取得 Declare Function Api_GetWindowThreadProcessId& Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hWnd&, lpdwProcessId&) ' ウィンドウにメッセージを送信 Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any) ' 特定のスレッドの入力処理機構を別のスレッドにアタッチ Declare Function Api_AttachThreadInput& Lib "user32" Alias "AttachThreadInput" (ByVal idAttach&, ByVal idAttachTo&, ByVal fAttach&) ' ウィンドウのサイズ、位置、および Z オーダーを設定 Declare Function Api_SetWindowPos& Lib "user32" Alias "SetWindowPos" (ByVal hWnd&, ByVal hWndInsertAfter&, ByVal X&, ByVal Y&, ByVal CX&, ByVal CY&, ByVal uFlags&) #define HWND_BOTTOM 1 'ウィンドウを最背面に配置 #define HWND_NOTOPMOST (-2) 'ウィンドウを常に最前面に配置(他のウィンドウがHWND_TOPMOSTに配置されている場合はその配下) #define HWND_TOP 0 'ウィンドウを最前面に配置 #define HWND_TOPMOST (-1) 'ウィンドウを常に最前面に配置 #define SWP_DRAWFRAME &H20 '再描画のときウィンドウを囲む枠も描画 #define SWP_FRAMECHANGED &H20 'ウィンドウのサイズ変更中でなくてもWM_NCCALCSIZEを送る #define SWP_HIDEWINDOW &H80 'ウィンドウを隠す #define SWP_NOACTIVATE &H10 'ウィンドウをアクティブにしない #define SWP_NOCOPYBITS &H100 'クライアント領域の内容をクリアする #define SWP_NOMOVE &H2 'ウィンドウの現在位置を保持する #define SWP_NOOWNERZORDER &H200 'オーナーウィンドウのZオーダーは変えない #define SWP_NOREDRAW &H8 'ウィンドウを自動的に再描画しない #define SWP_NOREPOSITION &H200 'SWP_NOOWNERZORDERと同じ #define SWP_NOSIZE &H1 'ウィンドウの現在のサイズを保持する #define SWP_NOZORDER &H4 'ウィンドウリスト内での現在位置を保持する #define SWP_SHOWWINDOW &H40 'ウィンドウを表示する Var Shared hWndCtrl As Long Var Shared Timer1 As Object Var Shared Edit1 As Object Timer1.Attach GetDlgItem("Timer1") Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub GetControl() Sub GetControl() Var Buffer As String Var CurrentThreadID As Long Var OtherThreadID As Long Var Thread1 As Long Var Thread2 As Long Var bMerker As Integer Var Ret As Long 'カレントスレッド取得 Thread1 = Api_GetWindowThreadProcessId(GethWnd, CurrentThreadID) 'ユーザーが操作中のウインドウを取得 Thread2 = Api_GetWindowThreadProcessId(Api_GetForegroundWindow, OtherThreadID) 'スレッドをAttach If Thread1 <> Thread2 Then bMerker = Api_AttachThreadInput(Thread2, Thread1, True) Ret = Api_GetFocus() hWndCtrl = Ret Edit1.SetWindowText Str$(Ret) 'スレッドをDetach If bMerker Then bMerker = Api_AttachThreadInput(Thread2, Thread1, False) 'クラス名取得 Buffer$ = Space$(255) Ret = Api_GetClassName(hWndCtrl, Buffer, Len(Buffer)) Edit1.SetWindowText Buffer End Sub '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var Ret As Long '自身を最前面に Ret = Api_SetWindowPos(GethWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE) Timer1.SetInterval 50 Timer1.Enable -1 End Sub '================================================================ '= '================================================================ Declare Sub Timer1_Timer edecl () Sub Timer1_Timer() GetControl End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() End End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End