क्लिपबोर्ड एपीआई विंडोज 3.0 (या उससे पहले?) से तारीख करता है और बुरी तरह से डिज़ाइन किया गया है। दुर्भाग्य से, प्राइमरी को पाने / सेट करने के बजाय, यह ओपन / क्लोज का उपयोग करता है, जो अनुप्रयोगों के लिए बहुत लंबे समय तक इसकी पहुंच को रोकना संभव बनाता है। कुछ सुधार विस्टा द्वारा दर्शकों की श्रृंखला की हैंडलिंग के लिए लाया गया था, लेकिन कोई नया एपीआई नहीं।
मौजूदा एपीआई के साथ, क्लिपबोर्ड के मालिक की पहचान करना केवल तभी संभव है जब उस मालिक के पास भी कम से कम एक खुली खिड़की हो। यदि मालिक के पास कोई खिड़की नहीं है, तो एक भाग्य से बाहर है।
धागे में मेरे क्लिपबोर्ड ने काम करना क्यों बंद कर दिया है? , Jay Parzych ने निम्नलिखित vbs कोड का योगदान दिया है जहां GetClipboardLocker फ़ंक्शन क्लिपबोर्ड को पकड़े हुए प्रक्रिया का फ़ाइल-नाम लौटाता है:
<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
एक समान C # फ़ंक्शन पोस्ट क्लिपबोर्ड मालिकों के शीर्षक / कैप्शन में पाया जा सकता है
।