Üçüncü parti uygulamaların pencerelerini ekran üzerinde hareket ettiren bir uygulama üzerinde çalışıyorum. Pencere Numarasını OSX Erişilebilirlik API'sı Yoluyla Kullanma
, ben Bu, her pencereyi açık tanımlayan sözlükler dizisini döndürürCGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
kullanan tüm anda açık pencerelerin genel bir bakış elde etmek.
{
kCGWindowAlpha = 1;
kCGWindowBounds = {
Height = 442;
Width = 475;
X = 3123;
Y = "-118";
};
kCGWindowIsOnscreen = 1;
kCGWindowLayer = 0;
kCGWindowMemoryUsage = 907184;
kCGWindowName = Untitled;
kCGWindowNumber = 7328;
kCGWindowOwnerName = TextEdit;
kCGWindowOwnerPID = 20706;
kCGWindowSharingState = 1;
kCGWindowStoreType = 2;
kCGWindowWorkspace = 3;
},
Sözlük başka yerde kullanılan iyi bilgi dolu ama windows' pozisyonlarını değiştirmek için kullanılabilecek bir erişilebilirlik nesnesi yoksun: İşte örnek bir sözlük döndü bu. Pencereler Pencere Numarası ile açıkça tanımlanmıştır.
Şimdi pencerenin uygulaması için bir erişilebilirlik nesnesi oluşturmak için PID (kCGWindowOwnerPID) kullanıyorum:
NSArray *result;
AXUIElementCopyAttributeValues(
(AXUIElementRef) app,
kAXWindowsAttribute,
0,
99999,
(CFArrayRef *) &result
);
: Uygulama AXUIElementCopyAttributeValues kullanarak açtı bütün pencerelerin listesini almak Ardından
AXUIElementRef app = AXUIElementCreateApplication(pid);
Bu, çalışır ve bir dizi AXUIElements döndürür. Burada sıkışıp kaldım. Erişilebilirlik nesnesinin Pencere Numarasını almak için API çağrısı yok gibi görünüyor. Ya
a) Aksi takdirde açıkça tarif pencereyi eşleşir) sonuçta sağ pencere)
veya
b diziyi sürekli tekrarlanması ve bulmak için erişilebilirlik nesnenin Pencere Numarası (Bulma herhangi bir yolu var mı CGWindowListCopyWindowInfo tarafından AXUIElementCopyAttributeValues tarafından döndürülen Erişilebilirlik Nesneleri tarafından döndürülen dizi?
Belgelenmemiş API'leri kullananlar için nasıl yapılmalı? – Samuel