কোন অ্যাপ্লিকেশনটির ক্লিপবোর্ড রয়েছে তা কীভাবে পরীক্ষা করবেন?


9

আমরা রোবট সফটওয়্যার সহ কিছু ভার্চুয়াল মেশিন স্থাপন করছি যা একটি ব্রাউজারে ক্রিয়া সম্পাদন করে, এবং পড়তে বা লেখার জন্য ক্লিপবোর্ডে অ্যাক্সেস করার সময় আমরা সেগুলির কয়েকটিতে সমস্যায় পড়েছি। তারা একটি "ক্লিপবোর্ড খুলতে পারে না" দেখায়।

সুতরাং ক্লিপবোর্ড ধারণ করে অন্য কোনও অ্যাপ্লিকেশন রয়েছে।

কীভাবে আমরা এটি ডিবাগ করতে পারি? এমন কোন সরঞ্জাম আছে যা নিরীক্ষণ করতে পারে? আমি যতদূর জানি ProcMon কাজ করে না।

মেশিনগুলি উইন্ডোজ এক্সপি।


এটি কি সর্বনিম্ন বুট কনফিগারেশনে ঘটে?
রামহাউন্ড

রোবট সফটওয়্যারটি নিরাপদ মোডে কাজ করে না, এটি অন্যতম অসুবিধা
elxel Costas Pena

1
আমি নিরাপদ মোডটি বলিনি আমি ন্যূনতম বুট কনফিগারেশনে বলেছি যে পার্থক্য রয়েছে।
রামহাউন্ড

ম্যানুয়াল ক্লিপবোর্ড: কোনও ফাইলটিতে পাঠ্য সংরক্ষণ করুন, সেই ফাইলটিতে পাঠ্যকে কল করুন, ফাইলটি মুছুন।
Wutnaut

@ রামহাউন্ড মেশিনে রোবটের ক্রিয়াকলাপের জন্য অনেকগুলি প্রয়োজনীয় উপাদান রয়েছে। একটি পরিষ্কার মেশিন থেকে শুরু করে বাগের পুনরুত্পাদন করা পর্যন্ত একের পর এক সফ্টওয়্যার ইনস্টল করা খুব ব্যয়বহুল হবে।
এক্সেল কস্টাস পেনা

উত্তর:


9

ক্লিপবোর্ডের এপিআই এর উইন্ডোজ 3.0 (বা তার আগে?) থেকে এসেছে এবং এটি খারাপভাবে ডিজাইন করা হয়েছে। দুর্ভাগ্যক্রমে, আদিম পেতে / সেট করার পরিবর্তে, এটি উন্মুক্ত / ঘনিষ্ঠ ব্যবহার করে, যা অ্যাপ্লিকেশনগুলির পক্ষে এটির দীর্ঘকাল অ্যাক্সেস রাখা সম্ভব করে তোলে। ভিস্তার ভিউয়ার্স চেইন হ্যান্ডলিংয়ে কিছু উন্নতি এনেছিল, তবে কোনও নতুন এপিআই নেই।

বিদ্যমান এপিআই দিয়ে ক্লিপবোর্ডের মালিককে কেবলমাত্র সনাক্ত করা সম্ভব যদি কেবল তার মালিকের কমপক্ষে একটি খোলা উইন্ডো থাকে। যদি মালিকের কোনও উইন্ডো না থাকে তবে তার ভাগ্যের বাইরে।

থ্রেডে আমার ক্লিপবোর্ড কেন কাজ বন্ধ করে দিয়েছে? , জে প্যারজিচ নিম্নলিখিত ভিবিএস কোডটি অবদান রেখেছেন যেখানে গেটক্লিপবোর্ডলকার ফাংশন ক্লিপবোর্ড ধারণকারী প্রক্রিয়াটির ফাইল-নাম দেয়:

<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

ক্লিপবোর্ডের মালিকদের শিরোনাম / পরিচয়লিপি পোস্টে একটি অনুরূপ সি # ফাংশন পাওয়া যাবে ।


যেহেতু আমাদের দৃশ্যে, আমরা নিশ্চয়তা দিতে পারি যে যে প্রক্রিয়াগুলি করছে তার কোনও উইন্ডো তৈরি হয়নি, আমি এটিকে সঠিক উত্তর হিসাবে চিহ্নিত করব। ধন্যবাদ.
এক্সেল কস্টাস পেনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.