Postup:
Existuje celá řada API, které vrací ukazatel (handle) na určitý dialog
(například FindWindowA). Ovšem není již tak často důležité, které aplikaci
dialog patří. Následující kód vrací logickou hodnotu, zda určitý dialog
patří nebo ne Vaší aplikaci:
Option Explicit
Private Declare Function GetWindowThreadProcessId Lib _
"user32" (ByVal hwnd As Long, lpdwProcessId As
Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Function DialogIsMine(lHwnd As Long) As Boolean
Dim lProcessID As Long
If lHwnd <> 0 Then
'Zjistíme
si ID procesu dialogu
Call
GetWindowThreadProcessId(lHwnd, lProcessID)
'Otestujeme,
zda je ID procesu dialogu shodné s ID procesem naší aplikace
If
lProcessID = GetCurrentProcessId() Then
DialogIsMine = True
End If
End If
End Function
Příklad použití
Sub Test()
Debug.Print DialogIsMine(GetActiveWindow)
End Sub |