スナップショットを取得(T) <TOP>
GetCursorPos マウスカーソル(マウスポインタ)の現在の位置に相当するスクリーン座標を取得
WindowFromPoint 指定の座標位置にあるウィンドウハンドルを取得
GetWindowThreadProcessId ウィンドウのプロセスIDとスレッドIDを取得
CreateToolhelp32Snapshot プロセスのスナップショットを取得
Process32First 最初のプロセスに関する情報を取得
Process32Next 2番目以降のプロセスに関する情報を取得
CloseHandle オープンされているオブジェクトハンドルをクローズ
マウスを当てた座標のスナップショットを取得します。EXE名とそのハンドルを表示します。
'================================================================ '= スナップショット '= (SnapShot.bas) '================================================================ #include "Windows.bi" #define TH32CS_SNAPPROCESS &H2 'プロセス一覧のスナップショット #define MAX_PATH 260 Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwflags As Long szexeFile As String * MAX_PATH End Type Type POINTAPI x As Long y As Long End Type ' マウスカーソル(マウスポインタ)の現在の位置に相当するスクリーン座標を取得 Declare Function Api_GetCursorPos& Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) ' 指定の座標位置にあるウィンドウハンドルを取得 Declare Function Api_WindowFromPoint& Lib "user32" Alias "WindowFromPoint" (ByVal xPoint&, ByVal yPoint&) ' ウィンドウのプロセスIDとスレッドIDを取得 Declare Function Api_GetWindowThreadProcessId& Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hWnd&, lpdwProcessId&) ' プロセスのスナップショットを取得 Declare Function Api_CreateToolhelp32Snapshot& Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal dwFlag&, ByVal th32ProcessID&) ' 最初のプロセスに関する情報を取得する関数 Declare Function Api_Process32First& Lib "kernel32" Alias "Process32First" (ByVal hSnapshot&, lppe As PROCESSENTRY32) ' 2番目以降のプロセスに関する情報を取得する関数 Declare Function Api_Process32Next& Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot&, lppe As PROCESSENTRY32) ' オープンされているオブジェクトハンドルをクローズ Declare Function Api_CloseHandle& Lib "kernel32" Alias "CloseHandle" (ByVal hObject&) Var Shared Text(1) As Object Var Shared Edit(1) As Object Var Shared Timer1 As Object For i = 0 To 1 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14 Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1))) : Edit(i).SetFontSize 14 Next Timer1.Attach GetDlgItem("Timer1") '================================================================ '= '================================================================ Declare Function GetExeFromHWND(hWnd As Long) As String Function GetExeFromHWND(hWnd As Long) As String Var ThreadID As Long Var ProcessID As Long Var Snapshot As Long Var Process As PROCESSENTRY32 Var ProcessFound As Long Var ExeName As String Var Ret As Long 'プロセスID取得 ThreadID = Api_GetWindowThreadProcessId(hWnd, ProcessID) If ThreadID <> 0 and ProcessID <> 0 Then 'スナップショット取得 Snapshot = Api_CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) If Snapshot = -1 Then Exit Function 'プロセスサイズ Process.dwSize = Len(Process) '最初に見つかった ProcessFound = Api_Process32First(Snapshot, Process) Do While ProcessFound If Process.th32ProcessID = ProcessID Then 'プロセスIDが見つかった場合、そのEXE名を取得 If InStr(Process.szexeFile, Chr$(0)) > 0 Then ExeName = Left$(Process.szexeFile, InStr(Process.szexeFile, Chr$(0)) - 1) End If Exit Do Else '見つからない場合次を探す ProcessFound = Api_Process32Next(Snapshot, Process) End If Loop 'ハンドルクローズ Ret = Api_CloseHandle(Snapshot) End If GetExeFromHWND = ExeName End Function '================================================================ '= '================================================================ 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 pa As POINTAPI Var hWnd As Long 'マウス位置取得 If Api_GetCursorPos(pa) <> 0 Then 'マウスカーソル座標のハンドル取得 hWnd = Api_WindowFromPoint(pa.x, pa.y) 'EXE名 Edit(0).SetWindowText GetExeFromHWND(hWnd) 'ハンドル Edit(1).SetWindowText "&H" & hex$(hWnd) End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End