Pano hangi uygulamada tutulur kontrol edilir?


8

Bazı sanal makineleri bir tarayıcıda eylemler gerçekleştiren robot yazılımlarıyla kullanıyoruz ve panoya okuma veya yazma için erişirken bazıları ile ilgili sorun yaşıyoruz. Bir "Pano açılamıyor" gösterirler.

Yani panoya tutan başka bir uygulama var.

Bunu nasıl hata ayıklayabiliriz? Bunu izleyebilecek herhangi bir araç var mı? AFAIK ProcMon işi yapmaz.

Makineler Windows XP'dir.


Bu minimum önyükleme yapılandırmasında olur mu?
Ramhound

Robot yazılımı güvenli modda çalışmıyor, bu da güçlüklerden biri
Áxel Costas Pena

1
Güvenli Mod demedim. Minimum önyükleme yapılandırmasında fark olduğunu söyledim.
Ramhound

Manuel pano: metni bir dosyaya kaydedin, o dosyadaki metni arayın, dosyayı silin.
Wutnaut

@Ramhound makine, robot etkinliği için çoğu gerekli olan birçok bileşene sahiptir. Temiz bir makineden başlamak ve yazılımı tek tek kurmak hatayı yeniden üretmek kadar çok pahalı olacak.
Áxel Costas Pena

Yanıtlar:


7

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 .


Senaryomuzda, yaptığımız herhangi bir işlemin penceresi oluşturulmadığından emin olabiliriz, doğru cevap olarak işaretleyeceğim. Teşekkür ederim.
Áxel Costas Pena
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.