API Clipboard berasal dari Windows 3.0 (atau sebelumnya?) Dan dirancang dengan buruk. Sayangnya, alih-alih memiliki / menetapkan primitif, ia menggunakan buka / tutup, yang memungkinkan aplikasi untuk menahan aksesnya terlalu lama. Beberapa perbaikan dibawa oleh Vista ke penanganan rantai pemirsa, tetapi tidak ada API baru.
Dengan API yang ada, dimungkinkan untuk mengidentifikasi pemilik clipboard hanya jika pemilik itu juga memiliki setidaknya satu jendela terbuka. Jika pemilik tidak memiliki jendela, maka seseorang tidak beruntung.
Di utas Mengapa clipboard saya berhenti bekerja? , Jay Parzych telah menyumbangkan kode vbs berikut ini di mana fungsi GetClipboardLocker mengembalikan nama file proses memegang clipboard:
<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
Sebuah fungsi yang sama C # dapat ditemukan di pos
Dapatkan pemilik Clipboard Judul / Keterangan .