From e565e4feb7371db0d46efe84ce434ccdd6978f29 Mon Sep 17 00:00:00 2001 From: vcaesar Date: Tue, 21 Aug 2018 12:18:43 -0400 Subject: [PATCH 1/4] refactoring get_title() allow by pid, window.h [ci skip] --- window/window.h | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/window/window.h b/window/window.h index a7569ca..4af60b1 100644 --- a/window/window.h +++ b/window/window.h @@ -549,7 +549,29 @@ void CloseWin(void){ #endif } -char *GetTitle(){ +char* get_main_title(){ + get_title_by_hand(mData); +} + +char* get_title_by_pid(uintptr pid, uintptr isHwnd){ + MData m_data; + + #if defined(IS_MACOSX) + m_data.AxID = AXUIElementCreateApplication(pid); + #elif defined(USE_X11) + m_data.XWin = (Window)pid; + #elif defined(IS_WINDOWS) + if (isHwnd == 0) { + m_data.HWnd= GetHwndByPId(pid); + } else { + m_data.HWnd = (HWND)pid; + } + #endif + + get_title_by_hand(m_data); +} + +char* get_title_by_hand(MData m_data){ // Check if the window is valid if (!IsValid()) {return "IsValid failed.";} @@ -558,7 +580,7 @@ char *GetTitle(){ CFStringRef data = NULL; // Determine the current title of the window - if (AXUIElementCopyAttributeValue(mData.AxID, + if (AXUIElementCopyAttributeValue(m_data.AxID, kAXTitleAttribute, (CFTypeRef*) &data) == kAXErrorSuccess && data != NULL) { char conv[512]; @@ -581,7 +603,7 @@ char *GetTitle(){ XDismissErrors(); // Get window title (UTF-8) - result = GetWindowProperty(mData, WM_NAME,NULL); + result = GetWindowProperty(m_data, WM_NAME,NULL); // Check result value if (result != NULL) { @@ -593,7 +615,7 @@ char *GetTitle(){ } // Get window title (ASCII) - result = GetWindowProperty(mData, XA_WM_NAME,NULL); + result = GetWindowProperty(m_data, XA_WM_NAME,NULL); // Check result value if (result != NULL) { @@ -608,8 +630,8 @@ char *GetTitle(){ #elif defined(IS_WINDOWS) return GetWindowText( - mData.HWnd, mData.Title, 512) > 0 ? - mData.Title : ""; + m_data.HWnd, m_data.Title, 512) > 0 ? + m_data.Title : ""; // return GetWindowText // (mData.HWnd, name, 512) > 0 ? // _UTF8Encode(name) : "null"; From 873e9d30dcd3ee57a20637454dc4002fb313ade8 Mon Sep 17 00:00:00 2001 From: vcaesar Date: Tue, 21 Aug 2018 12:47:31 -0400 Subject: [PATCH 2/4] update getTitle func and .h name --- robotgo.go | 19 ++++++++++++++++--- window/goWindow.h | 4 ++-- window/window.h | 16 ++++++++-------- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/robotgo.go b/robotgo.go index b57e25c..417ed68 100644 --- a/robotgo.go +++ b/robotgo.go @@ -1385,10 +1385,23 @@ func GetBHandle() int { } // GetTitle get the window title -func GetTitle() string { - title := C.get_title() +func GetTitle(args ...int32) string { + if len(args) <= 0 { + title := C.get_main_title() + gtittle := C.GoString(title) + return gtittle + } + + var hwnd, isHwnd int32 + if len(args) > 0 { + hwnd = args[0] + } + if len(args) > 1 { + isHwnd = args[1] + } + title := C.get_title(C.uintptr(hwnd), C.uintptr(isHwnd)) gtittle := C.GoString(title) - // fmt.Println("title...", gtittle) + return gtittle } diff --git a/window/goWindow.h b/window/goWindow.h index 8f111e6..6792c0b 100644 --- a/window/goWindow.h +++ b/window/goWindow.h @@ -129,8 +129,8 @@ MData get_active(){ return mdata; } -char* get_title(){ - char* title = GetTitle(); +char* get_title(uintptr pid, uintptr isHwnd){ + char* title = get_title_by_pid(pid, isHwnd); // printf("title::::%s\n", title ); return title; } diff --git a/window/window.h b/window/window.h index 4af60b1..efb229a 100644 --- a/window/window.h +++ b/window/window.h @@ -18,6 +18,7 @@ bool IsValid(); bool IsAxEnabled(bool options); MData GetActive(void); void initWindow(); +char* get_title_by_hand(MData m_data); //int findwindow() @@ -545,7 +546,6 @@ void CloseWin(void){ #elif defined(IS_WINDOWS) PostMessage(mData.HWnd, WM_CLOSE, 0, 0); - #endif } @@ -554,27 +554,27 @@ char* get_main_title(){ } char* get_title_by_pid(uintptr pid, uintptr isHwnd){ - MData m_data; + MData win; #if defined(IS_MACOSX) - m_data.AxID = AXUIElementCreateApplication(pid); + win.AxID = AXUIElementCreateApplication(pid); #elif defined(USE_X11) - m_data.XWin = (Window)pid; + win.XWin = (Window)pid; #elif defined(IS_WINDOWS) if (isHwnd == 0) { - m_data.HWnd= GetHwndByPId(pid); + win.HWnd = GetHwndByPId(pid); } else { - m_data.HWnd = (HWND)pid; + win.HWnd = (HWND)pid; } #endif - get_title_by_hand(m_data); + get_title_by_hand(win); } char* get_title_by_hand(MData m_data){ // Check if the window is valid if (!IsValid()) {return "IsValid failed.";} - + #if defined(IS_MACOSX) CFStringRef data = NULL; From 1bb08731d1c7a41708c76a837ec3d5cc5f9a075a Mon Sep 17 00:00:00 2001 From: vcaesar Date: Tue, 21 Aug 2018 13:04:23 -0400 Subject: [PATCH 3/4] add set_hand_pid and add return --- window/goWindow.h | 18 ++---------------- window/window.h | 42 +++++++++++++++++++++++++----------------- 2 files changed, 27 insertions(+), 33 deletions(-) diff --git a/window/goWindow.h b/window/goWindow.h index 6792c0b..526feb5 100644 --- a/window/goWindow.h +++ b/window/goWindow.h @@ -10,7 +10,6 @@ #include "alert_c.h" #include "window.h" -#include "win32.h" #include "win_sys.h" int show_alert(const char *title, const char *msg, @@ -87,6 +86,7 @@ bool set_handle(uintptr handle){ uintptr get_handle(){ MData mData = GetActive(); + #if defined(IS_MACOSX) return (uintptr)mData.CgID; #elif defined(USE_X11) @@ -106,21 +106,7 @@ void set_active(const MData win){ } void active_PID(uintptr pid, uintptr isHwnd){ - MData win; - #if defined(IS_MACOSX) - // Handle to a AXUIElementRef - win.AxID = AXUIElementCreateApplication(pid); - #elif defined(USE_X11) - win.XWin = (Window)pid; // Handle to an X11 window - #elif defined(IS_WINDOWS) - // win.HWnd = (HWND)pid; // Handle to a window HWND - if (isHwnd == 0) { - win.HWnd = GetHwndByPId(pid); - } else { - win.HWnd = (HWND)pid; - } - #endif - + MData win = set_hand_pid(pid, isHwnd); SetActive(win); } diff --git a/window/window.h b/window/window.h index efb229a..6a32c75 100644 --- a/window/window.h +++ b/window/window.h @@ -12,6 +12,7 @@ // #include #include "process.h" #include "pub.h" +#include "win32.h" bool setHandle(uintptr handle); bool IsValid(); @@ -47,6 +48,26 @@ void initWindow(uintptr handle){ setHandle(handle); } +MData set_hand_pid(uintptr pid, uintptr isHwnd){ + MData win; + + #if defined(IS_MACOSX) + // Handle to a AXUIElementRef + win.AxID = AXUIElementCreateApplication(pid); + #elif defined(USE_X11) + win.XWin = (Window)pid; // Handle to an X11 window + #elif defined(IS_WINDOWS) + // win.HWnd = (HWND)pid; // Handle to a window HWND + if (isHwnd == 0) { + win.HWnd = GetHwndByPId(pid); + } else { + win.HWnd = (HWND)pid; + } + #endif + + return win; +} + bool IsValid(){ initWindow(initHandle); if (!IsAxEnabled(true)) { @@ -550,31 +571,18 @@ void CloseWin(void){ } char* get_main_title(){ - get_title_by_hand(mData); + return get_title_by_hand(mData); } char* get_title_by_pid(uintptr pid, uintptr isHwnd){ - MData win; - - #if defined(IS_MACOSX) - win.AxID = AXUIElementCreateApplication(pid); - #elif defined(USE_X11) - win.XWin = (Window)pid; - #elif defined(IS_WINDOWS) - if (isHwnd == 0) { - win.HWnd = GetHwndByPId(pid); - } else { - win.HWnd = (HWND)pid; - } - #endif - - get_title_by_hand(win); + MData win = set_hand_pid(pid, isHwnd); + return get_title_by_hand(win); } char* get_title_by_hand(MData m_data){ // Check if the window is valid if (!IsValid()) {return "IsValid failed.";} - + #if defined(IS_MACOSX) CFStringRef data = NULL; From de0ebaaf3c2e6ce841a02be15a24dba8c14a4625 Mon Sep 17 00:00:00 2001 From: vcaesar Date: Thu, 23 Aug 2018 10:42:23 -0400 Subject: [PATCH 4/4] add get main title check isValid() --- window/window.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/window/window.h b/window/window.h index 6a32c75..12951c6 100644 --- a/window/window.h +++ b/window/window.h @@ -571,6 +571,9 @@ void CloseWin(void){ } char* get_main_title(){ + // Check if the window is valid + if (!IsValid()) {return "IsValid failed.";} + return get_title_by_hand(mData); }