Pano API'si Windows 3.0'dan (veya daha önce?) Çıkar ve kötü bir şekilde tasarlanmıştır. Ne yazık ki, alma / ayarlama ilkelerine sahip olmak yerine, açma / kapama işlevini kullanır, bu da uygulamaların erişimini çok uzun süre tutmasını mümkün kılar. Vista tarafından izleyici zincirinin kullanımında bir miktar iyileşme sağlandı, ancak yeni API yoktu.
Mevcut API ile, pano sahibinin tanımını ancak sahipinde en az bir tane açık pencere varsa tanımlamak mümkündür. Sahibinde pencere yoksa, biri şanssız kalır.
Konuda Panom neden çalışmayı durdurdu? , Jay Parzych, GetClipboardLocker işlevinin panoyu tutan işlemin dosya adını döndürdüğü şu vbs koduna katkıda bulundu:
<DllImport("user32.dll")> _
Public Function GetOpenClipboardWindow() As IntPtr
End Function
<DllImport("user32.dll", SetLastError:=True)> _
Public Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer
End Function
Public Function GetClipboardLocker() As String
Dim hwnd As IntPtr = GetOpenClipboardWindow()
If hwnd <> IntPtr.Zero Then
Dim processId As Integer
GetWindowThreadProcessId(hwnd, processId)
Dim p As Process = Process.GetProcessById(processId)
GetClipboardLocker = p.Modules(0).FileName
Else
GetClipboardLocker = String.Empty
End If
End Function
Benzer bir C # işlevi Mesaj
panosu sahiplerinin Başlık / Başlığı yazında bulunabilir .