'daki etkin pencereyi benzersiz olarak tanımlayın Erişilebilirlik API'sini kullanarak pencereleri yeniden boyutlandıran an application dosyasını yamalamaya çalışıyorum.OS X
Önceki boyuttaki pencereleri olan bir sözlüğü korumam gerekir. Anahtar şu an aktif olan pencereyi tanımlamalıdır. Şu anda bu aktif pencere, bir kısayol tuşuna basılarak NSAccessibilityFocusedWindowAttribute
aracılığıyla alınır.
Ancak, her seferinde bu yöntem çağrıldığında, numaralı pencereyi tanımlayan döndürülen AXUIElementRef
farklı! Bu, onu bir sözlük anahtarı olarak kullanamayacağım anlamına gelir - sözlük karşılık gelen girişi bulamıyor.
-(IBAction)testWindowIdentification:(id)sender{
AXUIElementRef focusedApp;
AXUIElementRef focusedWindow;
AXUIElementCopyAttributeValue(_systemWideElement,
(CFStringRef) kAXFocusedApplicationAttribute,
(CFTypeRef*) &focusedApp);
AXUIElementCopyAttributeValue((AXUIElementRef) focusedApp,
(CFStringRef) NSAccessibilityFocusedWindowAttribute,
(CFTypeRef*) &focusedWindow);
CFShow(focusedWindow);
}
_systemWideElement
AXUIElementCreateSystemWide()
bir çağrı kullanarak init
yöntemi başlatıldı edilmiştir:
Aşağıdaki kod sorunu yeniden üretir. documentation on AXUIElement
benzersiz bir özelliği alır bir yöntem göstermez
<AXUIElement 0x47e850> {pid=42463}
<AXUIElement 0x47e890> {pid=42463}
<AXUIElement 0x47e2c0> {pid=42463}
…
:
CFShow
ifadesi açıkça farklı kimlikleri benim için işe yaramaz yöntemi denir her zaman (aynı pencere aktif olsa bile), gösterir UI öğesi için ve that of the NSAccessibility
protocol. Benzersiz PID, benim için yeterli olan değil, çünkü bir işlem birden çok pencereye sahip olabilir.
Kakao'da etkin pencerenin bazı benzersiz tanımlayıcılarını nasıl alabilirim?
(Bu arada, gerçek kod yukarıdaki aramalar dönüş kodları kontrol ediyor, hiçbir hata var, çağrılar başarılı.)
@JeremyBanks Orijinal yanıtlayıcı burada doğru fikre sahiptir. Eğer gerçekten [bu cevap] (http://stackoverflow.com/a/312099/517815) olduğuna inanılırsa, odaklanmış pencereyi belirledikten sonra bir 'CGWindowID' almak için Quartz kullanabilirsiniz. Bu _should_ size umuduyorsunuz benzersiz pencere tanımlayıcısı, mevcut uygulamanızın bağlamında cezasızlıkla geçebilirsiniz. Bunun gerçek bir cevap olarak daha tutarlı ve tam bir versiyonunu öğrenmek isterseniz bana bildirin. – MrGomez
@MrGomez Elbette, bunun gibi bir cevap harika olurdu. :) –
@JeremyBanks Yapacak. Bugün biraz fazla yüklü durumdayım, ama bu akşam daha sonra bu akşam (PST) bir cevap almaya çalışacağım. :) – MrGomez