mirror of
https://github.com/go-vgo/robotgo.git
synced 2025-05-31 06:13:55 +00:00
Merge 9aa4059a31
into 57b5e5bca2
This commit is contained in:
commit
4f43d5cfb0
16
window/pub.h
16
window/pub.h
@ -42,7 +42,7 @@ typedef struct _Bounds Bounds;
|
||||
static Boolean(*gAXIsProcessTrustedWithOptions) (CFDictionaryRef);
|
||||
static CFStringRef* gkAXTrustedCheckOptionPrompt;
|
||||
|
||||
AXError _AXUIElementGetWindow(AXUIElementRef, CGWindowID* out);
|
||||
//AXError _AXUIElementGetWindow(AXUIElementRef, CGWindowID* out);
|
||||
static AXUIElementRef GetUIElement(CGWindowID win){
|
||||
intptr pid = 0;
|
||||
// double_t pid = 0;
|
||||
@ -90,13 +90,25 @@ typedef struct _Bounds Bounds;
|
||||
AXUIElementRef element = (AXUIElementRef) CFArrayGetValueAtIndex(windows, i);
|
||||
CGWindowID temp = 0;
|
||||
// Use undocumented API to get WindowID
|
||||
_AXUIElementGetWindow(element, &temp);
|
||||
/*_AXUIElementGetWindow(element, &temp);
|
||||
|
||||
if (temp == win) {
|
||||
// Retain element
|
||||
CFRetain(element);
|
||||
result = element;
|
||||
break;
|
||||
}*/
|
||||
CFTypeRef cfWindow = NULL;
|
||||
if (AXUIElementCopyAttributeValue(element, kAXWindowAttribute, &cfWindow) == kAXErrorSuccess && cfWindow != NULL) {
|
||||
temp = *(CGWindowID*)CFDataGetBytePtr(cfWindow);
|
||||
CFRelease(cfWindow);
|
||||
|
||||
if (temp == win) {
|
||||
// Retain element
|
||||
CFRetain(element);
|
||||
result = element;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -366,12 +366,12 @@ MData get_active(void) {
|
||||
AXUIElementRef focused = AXUIElementCreateApplication(pid);
|
||||
if (focused == NULL) { return result; } // Verify
|
||||
|
||||
AXUIElementRef element;
|
||||
/*AXUIElementRef element;
|
||||
CGWindowID win = 0;
|
||||
// Retrieve the currently focused window
|
||||
if (AXUIElementCopyAttributeValue(focused, kAXFocusedWindowAttribute, (CFTypeRef*) &element)
|
||||
== kAXErrorSuccess && element) {
|
||||
|
||||
|
||||
// Use undocumented API to get WID
|
||||
if (_AXUIElementGetWindow(element, &win) == kAXErrorSuccess && win) {
|
||||
// Manually set internals
|
||||
@ -383,7 +383,31 @@ MData get_active(void) {
|
||||
} else {
|
||||
result.CgID = win;
|
||||
result.AxID = element;
|
||||
}*/
|
||||
|
||||
AXUIElementRef windowElement = NULL;
|
||||
CGWindowID win = 0;
|
||||
|
||||
// Retrieve the currently focused window
|
||||
if (AXUIElementCopyAttributeValue(focused, kAXFocusedWindowAttribute, (CFTypeRef*) &windowElement) == kAXErrorSuccess && windowElement) {
|
||||
// Use AXUIElementCopyAttributeValue to get parent window
|
||||
CFTypeRef cfWindow = NULL;
|
||||
if (AXUIElementCopyAttributeValue(windowElement, kAXParentAttribute, &cfWindow) == kAXErrorSuccess && cfWindow != NULL) {
|
||||
AXUIElementRef parentWindow = (AXUIElementRef)cfWindow;
|
||||
if (AXUIElementCopyAttributeValue(parentWindow, kAXWindowAttribute, (CFTypeRef*)&win) == kAXErrorSuccess && win) {
|
||||
// Manually set internals
|
||||
result.CgID = win;
|
||||
result.AxID = windowElement;
|
||||
} else {
|
||||
CFRelease(parentWindow);
|
||||
}
|
||||
}
|
||||
CFRelease(windowElement);
|
||||
} else {
|
||||
result.CgID = 0;
|
||||
result.AxID = NULL;
|
||||
}
|
||||
|
||||
CFRelease(focused);
|
||||
|
||||
return result;
|
||||
|
Loading…
Reference in New Issue
Block a user