कैसे जांचें कि क्लिपबोर्ड की किस एप्लिकेशन पर पकड़ है?


9

हम रोबोट सॉफ़्टवेयर के साथ कुछ आभासी मशीनों को तैनात कर रहे हैं जो एक ब्राउज़र में कार्रवाई करता है, और हम पढ़ने या लिखने के लिए क्लिपबोर्ड तक पहुंचने पर उनमें से कुछ के साथ परेशानी कर रहे हैं। वे एक "क्लिपबोर्ड नहीं खोल सकते" दिखाते हैं।

तो क्लिपबोर्ड को पकड़े हुए कोई अन्य एप्लिकेशन है।

हम कैसे डिबग कर सकते हैं? क्या कोई उपकरण है जो उस पर निगरानी रख सकता है? AFAIK ProcMon काम नहीं करता है।

मशीनें विंडोज एक्सपी हैं।


क्या यह न्यूनतम बूट विन्यास में होता है?
रामधुन

रोबोट सॉफ्टवेयर सुरक्षित मोड में काम नहीं करता है, कि कठिनाइयों में से एक है
asxel कोस्टास पेना

1
मैंने यह नहीं कहा कि सुरक्षित मोड मैंने कहा कि न्यूनतम बूट विन्यास में अंतर है।
रामहुंड

मैनुअल क्लिपबोर्ड: पाठ को किसी फ़ाइल में सहेजें, उस फ़ाइल में पाठ को कॉल करें, फ़ाइल को हटा दें।
वुटनट

@ रामहाउंड मशीन में बहुत सारे घटक होते हैं, जिनकी आवश्यकता रोबोट गतिविधि के लिए बहुत होती है। एक साफ मशीन से शुरू करना और सॉफ़्टवेयर को एक-एक करके स्थापित करना जब तक बग को पुन: पेश करना बहुत महंगा नहीं होगा।
14एक्सल कोस्टास पेना

जवाबों:


9

क्लिपबोर्ड एपीआई विंडोज 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 # फ़ंक्शन पोस्ट क्लिपबोर्ड मालिकों के शीर्षक / कैप्शन में पाया जा सकता है ।


चूंकि हमारे परिदृश्य में, हम आश्वस्त कर सकते हैं कि कोई भी प्रक्रिया जो कर रही है जिसमें कोई विंडो नहीं बनाई गई है, मैं इसे सही उत्तर के रूप में चिह्नित करूंगा। धन्यवाद।
16एक्सल कोस्टास पेना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.