比如我的滑鼠在A程式的視窗上我可以獲得a的行程名 PID和路徑
uj5u.com熱心網友回復:
既然行程名、PID、路徑,這些都獲得了,那不就知道是哪個“程式”了嗎,還要判斷什么……
uj5u.com熱心網友回復:
我主要是想靠滑鼠的移動來判斷懸停所處的程式位置這樣很方便 比如通過滑鼠的雙坐標來判斷坐標所對應的視窗句柄在從句柄取pid得到行程名uj5u.com熱心網友回復:
并不是想做任務管理器那種的列舉行程uj5u.com熱心網友回復:
咋說呢就是事實判斷如果滑鼠離開視窗指向桌面那么得到的結果應該是explorer.exe這個意思uj5u.com熱心網友回復:
搞了半天,你是“想取得”滑鼠所在處的視窗是哪個程式啊, 并不是你“已經取得了”……
給你一個參考方法:
1. GetCursorPos( ) 取得滑鼠坐標。
2. WindowFromPoint( ) 取得滑鼠處的視窗句柄。
注意,獲取到的有可能是控制元件句柄,或者“子視窗”句柄,
這是就要“往上找”父視窗,直到它的“父視窗”是“桌面”為止。
3. 按“頂級視窗”的句柄,用 GetWindowThreadProcessId( )獲取到視窗所屬行程的PID。
有了“PID”,剩下的事,就有N多種方法處理了,自己搜索一下相關API吧……
uj5u.com熱心網友回復:
使用Spy++軟體。uj5u.com熱心網友回復:
GetForegroundWindow 獲取當前置頂的視窗GetCursorPos( ) 取得滑鼠當前所在的坐標
判斷滑鼠是否在這置前的表單內
****************************************************************
另種方法使用 WindowFromPoint與GetCursorPos 這兩個API
Private Sub Timer1_Timer()
GetCursorPos Pt
HwndVal = WindowFromPoint(Pt.X, Pt.Y)
If HwndVal = Me.hWnd Then
Me.Caption = "滑鼠在表單上"
ElseIf HwndVal = Picture1.hWnd Then
Me.Caption = "滑鼠在圖片框內"
ElseIf HwndVal = Text1.hWnd Then
Me.Caption = "滑鼠在文本框內"
End If
End Sub
uj5u.com熱心網友回復:
'根據視窗句柄得到應用程式的路徑通過WindowFromPoint得到的句柄(不用管控制元件還是視窗的)可以直接傳入這個函式得到程式路徑。相關api函式和常數宣告自己補充。 函式是摘自clswindow類,如果懶得找宣告可以直接下載,然后呼叫。
Public Function AppPath(Optional ByVal hwn1) As String
Dim dwProcessID As Long, hProcess As Long, hModule As Long
Dim nSize As Long
If IsMissing(hwn1) Then '如果沒寫則表示處理當前存盤的句柄
If hWnd_ > 0 Then dwProcessID = ProcessID() 'GetWindowThreadProcessId hWnd_, dwProcessID
Else
dwProcessID = ProcessID(hwn1)
End If
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcessID)
AppPath = Space(255)
nSize = GetModuleFileNameEx(hProcess, 0, StrPtr(AppPath), 255)
AppPath = Mid(AppPath, 1, nSize)
Call CloseHandle(hProcess)
End Function
w.hWnd = 332302 '自己通過WindowFromPoint得到
MsgBox w.AppName
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/43604.html
