diff --git a/CSharpLibraryTools/CSharpLibraryTools/Application.cs b/CSharpLibraryTools/CSharpLibraryTools/Application.cs index 1f53285..1650d15 100644 --- a/CSharpLibraryTools/CSharpLibraryTools/Application.cs +++ b/CSharpLibraryTools/CSharpLibraryTools/Application.cs @@ -36,37 +36,37 @@ public Application(ActiveProgramImp activeProgramImp, public async Task Run() { - //TitlePrinter("Active Program Information"); - //await _activeProgramImp.Run(); - //PrintSeperator(20); + TitlePrinter("Active Program Information"); + await _activeProgramImp.Run(); + PrintSeperator(20); TitlePrinter("Browser Activity"); await _browseActivityImp.Run(); PrintSeperator(20); - //TitlePrinter("Directory Manager"); - //await _directoryManagerImp.Run(); - //PrintSeperator(20); + TitlePrinter("Directory Manager"); + await _directoryManagerImp.Run(); + PrintSeperator(20); - //TitlePrinter("Webcam"); - //await _egmaCv.Run(); - //PrintSeperator(20); + TitlePrinter("Webcam"); + await _egmaCv.Run(); + PrintSeperator(20); - //TitlePrinter("File Manager"); - //await _fileManagerImp.Run(); - //PrintSeperator(20); + TitlePrinter("File Manager"); + await _fileManagerImp.Run(); + PrintSeperator(20); - //TitlePrinter("Running Programs"); - //await _runningProgramImp.Run(); - //PrintSeperator(20); + TitlePrinter("Running Programs"); + await _runningProgramImp.Run(); + PrintSeperator(20); - //TitlePrinter("Screen Capture"); - //await _screenCaptureImp.Run(); - //PrintSeperator(20); + TitlePrinter("Screen Capture"); + await _screenCaptureImp.Run(); + PrintSeperator(20); - //TitlePrinter("Google Drive Api"); - //await _googleDriveApiImp.Run(); - //PrintSeperator(20); + TitlePrinter("Google Drive Api"); + await _googleDriveApiImp.Run(); + PrintSeperator(20); } public void TitlePrinter(string title) diff --git a/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs b/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs index 7aa0e3a..9a21d3a 100644 --- a/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs +++ b/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs @@ -42,10 +42,26 @@ await Task.Run(() => var activeUrl = _browserActivity.EnlistActiveTabUrl(BrowserType.Chrome); Console.WriteLine($"Active URL: {activeUrl}\n"); + var activeTitle = _browserActivity.EnlistActiveTabTitle(BrowserType.Chrome); + Console.WriteLine($"Active Tab Title: {activeTitle}\n"); + var tabs = _browserActivity.EnlistAllOpenTabs(BrowserType.Chrome); foreach (var item in tabs) Console.WriteLine($"Tab: {item}"); } + + if (_browserActivity.IsBrowserOpen(BrowserType.Edge)) + { + var activeUrl = _browserActivity.EnlistActiveTabUrl(BrowserType.Edge); + Console.WriteLine($"Active URL: {activeUrl}\n"); + + var activeTitle = _browserActivity.EnlistActiveTabTitle(BrowserType.Chrome); + Console.WriteLine($"Active Tab Title: {activeTitle}\n"); + + var tabs = _browserActivity.EnlistAllOpenTabs(BrowserType.Edge); + foreach (var item in tabs) + Console.WriteLine($"Tab: {item}"); + } }); } } diff --git a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs index f7c7afd..82e38ab 100644 --- a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs +++ b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs @@ -13,46 +13,47 @@ public class BrowserActivityAdaptee public BrowserActivityAdaptee(BrowserActivityEnumAdaptee browserActivityEnumAdaptee) => _browserActivityEnumAdaptee = browserActivityEnumAdaptee; - public string GetActiveTabUrl(BrowserType browserType) + public string GetActiveTabTitle(BrowserType browserType) { try { - // There are always multiple chrome processes, so we have to loop through all of them to find the - // process with a Window Handle and an automation element of name "Address and search bar" + // Find the automation element + var elm = GetAutomationElement(browserType); + if (elm != null) + return elm.Current.Name; - var browserName = _browserActivityEnumAdaptee.ToDescriptionString(browserType); - var browserProcess = Process.GetProcessesByName(browserName); + return string.Empty; + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } - if (browserProcess.Length > 0) + public string GetActiveTabUrl(BrowserType browserType) + { + try + { + // Find the automation element + var elm = GetAutomationElement(browserType); + if(elm != null) { - var url = string.Empty; - foreach (var chrome in browserProcess) - { - // The browser process must have a window - if (chrome.MainWindowHandle == IntPtr.Zero) - continue; + var elmUrlBar = elm.FindFirst(TreeScope.Descendants, + new PropertyCondition(AutomationElement.NameProperty, "Address and search bar")); - // Find the automation element - var elm = AutomationElement.FromHandle(chrome.MainWindowHandle); - var elmUrlBar = elm.FindFirst(TreeScope.Descendants, - new PropertyCondition(AutomationElement.NameProperty, "Address and search bar")); - - // If it can be found, get the value from the URL bar - if (elmUrlBar != null) + // If it can be found, get the value from the URL bar + if (elmUrlBar != null) + { + var patterns = elmUrlBar.GetSupportedPatterns(); + if (patterns.Length > 0) { - var patterns = elmUrlBar.GetSupportedPatterns(); - if (patterns.Length > 0) - { - var val = (ValuePattern)elmUrlBar.GetCurrentPattern(patterns[0]); - url = val.Current.Value; - } + var val = (ValuePattern)elmUrlBar.GetCurrentPattern(patterns[0]); + return val.Current.Value; } } - - return url; } - else - return string.Empty; + + return string.Empty; } catch (Exception ex) { @@ -67,17 +68,17 @@ public IList GetOpenTabsInfos(BrowserType browserType) var tabInfos = new List(); var browserName = _browserActivityEnumAdaptee.ToDescriptionString(browserType); - var processes = Process.GetProcessesByName(browserName); + var processes = GetBrowserProcessByBrowserType(browserType); - if (processes.Length <= 0) - throw new Exception($"No process found with this {browserName} name"); + if (processes.Count <= 0) + return new List(); else { foreach (var proc in processes) { - if (proc.MainWindowHandle != IntPtr.Zero) + if (proc.Process.MainWindowHandle != IntPtr.Zero) { - var root = AutomationElement.FromHandle(proc.MainWindowHandle); + var root = AutomationElement.FromHandle(proc.Process.MainWindowHandle); var condition = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.TabItem); var tabs = root.FindAll(TreeScope.Descendants, condition); var enumerator = tabs.GetEnumerator(); @@ -99,11 +100,57 @@ public IList GetOpenTabsInfos(BrowserType browserType) } } - public IList GetBrowserProcessByBrowserType(BrowserType browserType) + public IList GetBrowserProcessByBrowserType(BrowserType browserType) { var browser = _browserActivityEnumAdaptee.ToDescriptionString(browserType).ToLower(); - var processes = Process.GetProcessesByName(browser); - return processes.Select(x => x.MainWindowTitle).GroupBy(x => x).Select(x => x.Key).ToList(); + var processes = Process.GetProcesses(); + + return processes.Select(x => new ProcessAndTitle + { + MainWindowTitle = x.MainWindowTitle, + Process = x + }).Where(x => x.MainWindowTitle.ToLower().Contains(browser)) + .GroupBy(x => x.MainWindowTitle) + .Select(x => x.First()) + .ToList(); } + + private AutomationElement GetAutomationElement(BrowserType browserType) + { + try + { + // There are always multiple chrome processes, so we have to loop through all of them to find the + // process with a Window Handle and an automation element of name "Address and search bar" + var browserProcess = GetBrowserProcessByBrowserType(browserType); + + if (browserProcess.Count > 0) + { + AutomationElement url = null; + foreach (var chrome in browserProcess) + { + // The browser process must have a window + if (chrome.Process.MainWindowHandle == IntPtr.Zero) + continue; + + // Find the automation element + return AutomationElement.FromHandle(chrome.Process.MainWindowHandle); + } + + return url; + } + else + return null; + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } + } + + public class ProcessAndTitle + { + public string MainWindowTitle { get; set; } + public Process Process { get; set; } } } diff --git a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs index ff9e726..b1c5851 100644 --- a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs +++ b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs @@ -9,6 +9,7 @@ public interface IBrowserActivity bool IsBrowserOpen(BrowserType browserType); IList EnlistAllOpenTabs(BrowserType browserType); string EnlistActiveTabUrl(BrowserType browserType); + string EnlistActiveTabTitle(BrowserType browserType); } public class BrowserActivityAdapter : IBrowserActivity @@ -23,6 +24,16 @@ public BrowserActivityAdapter(BrowserActivityAdaptee browserActivityAdaptee, _browserActivityEnumAdaptee = browserActivityEnumAdaptee; } + public string EnlistActiveTabTitle(BrowserType browserType) + { + var tabTitle = _browserActivityAdaptee.GetActiveTabTitle(browserType); + + if (string.IsNullOrWhiteSpace(tabTitle)) + throw new Exception($"No active tab title found in {_browserActivityEnumAdaptee.ToDescriptionString(browserType)} browser"); + + return tabTitle; + } + public string EnlistActiveTabUrl(BrowserType browserType) { var tabUrl = _browserActivityAdaptee.GetActiveTabUrl(browserType); @@ -44,9 +55,9 @@ public IList EnlistAllOpenTabs(BrowserType browserType) public bool IsBrowserOpen(BrowserType browserType) { - var title = _browserActivityEnumAdaptee.ToDescriptionString(browserType); + var title = _browserActivityEnumAdaptee.ToDescriptionString(browserType).ToLower(); var browserTitles = _browserActivityAdaptee.GetBrowserProcessByBrowserType(browserType); - return browserTitles.Count > 0 && browserTitles.Any(x => x.ToLower().Contains(title.ToLower())); + return browserTitles.Count > 0 && browserTitles.Any(x => x.MainWindowTitle.ToLower().Contains(title.ToLower())); } } } diff --git a/CSharpLibraryTools/CoreActivities/CoreActivities.csproj b/CSharpLibraryTools/CoreActivities/CoreActivities.csproj index edb8949..60932e1 100644 --- a/CSharpLibraryTools/CoreActivities/CoreActivities.csproj +++ b/CSharpLibraryTools/CoreActivities/CoreActivities.csproj @@ -4,7 +4,7 @@ Library net5.0-windows netcoreapp3.1 - true + false Md Shams Wadud Reason Follower ReasonFollower.CSharpLibraryTools.CoreActivities @@ -12,6 +12,9 @@ MIT https://github.com/abbirku/CSharpLibraryTools Screen Capture, Running Programs, Google Drive, File Manager, Directory manager, Browser Activity, Active Program + false + 1.2.1 + Add EnlistActiveTabTitle in IBrowserActivity diff --git a/README.md b/README.md index b3182ab..733e61b 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ _**Interface & Its members**_ | ------ | ------ | | EnlistAllOpenTabs(BrowserType browserType) | Returns list of open tabs title of a browser. | | EnlistActiveTabUrl(BrowserType browserType) | Returns url string of present visting website in a browser. | +| EnlistActiveTabTitle(BrowserType browserType) | Returns tab title of present visting website in a browser. | | IsBrowserOpen(BrowserType browserType) | Returns bool. | _**Notes**_