Náleží dialog mojí aplikaci ?

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

Zpět

Autor: The Bozena