From 04a8109523788ec2654d2bc77e2da57ce4783a76 Mon Sep 17 00:00:00 2001 From: abbirku Date: Thu, 23 Sep 2021 00:50:11 +0600 Subject: [PATCH 1/9] Provide GetAllFilesAndFolders options in GoogleDriveApiManager --- .../Implementations/GoogleDriveApiImp.cs | 37 +++---------------- .../GoogleDriveApi/GoogleDriveApiManager.cs | 30 +++++++++++++++ 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/CSharpLibraryTools/CSharpLibraryTools/Implementations/GoogleDriveApiImp.cs b/CSharpLibraryTools/CSharpLibraryTools/Implementations/GoogleDriveApiImp.cs index 3f9511b..264ad76 100644 --- a/CSharpLibraryTools/CSharpLibraryTools/Implementations/GoogleDriveApiImp.cs +++ b/CSharpLibraryTools/CSharpLibraryTools/Implementations/GoogleDriveApiImp.cs @@ -2,12 +2,8 @@ using CoreActivities.FileManager; using CoreActivities.GoogleDriveApi; using CoreActivities.GoogleDriveApi.Models; -using CoreActivities.GoogleDriveApi.Parms; using CoreActivities.RunningPrograms; -using Google.Apis.Drive.v3.Data; using System; -using System.Collections.Generic; -using System.Text; using System.Threading.Tasks; namespace CSharpLibraryTools @@ -88,37 +84,16 @@ public async Task Run() } } - private async Task> PrintFilesInAGoogleDirectory() + private async Task PrintFilesInAGoogleDirectory() { - var files = new List(); - - var optionals = new FilesListOptionalParms - { - PageSize = 5, //Provide positive integer for pagination - Fields = "nextPageToken, files(id, name, mimeType, kind, trashed)" //Follow this pattern to retrive only specified object fields - }; - - GoogleDriveFiles results = null; var counter = 0; + var files = await _googleDriveApiManager.GetAllFilesAndFolders(); - do + foreach (var item in files) { - if (results == null) - results = await _googleDriveApiManager.GetFilesAndFolders(null, optionals); - else - results = await _googleDriveApiManager.GetFilesAndFolders(results.NextPageToken, optionals); - - files.AddRange(results.Files); - - foreach (var item in results.Files) - { - Console.WriteLine($"SL: {counter} Name: {item.Name}"); - counter++; - } - - } while (results != null && !string.IsNullOrEmpty(results.NextPageToken)); - - return files; + Console.WriteLine($"SL: {counter} Name: {item.Name}"); + counter++; + } } } } diff --git a/CSharpLibraryTools/CoreActivities/GoogleDriveApi/GoogleDriveApiManager.cs b/CSharpLibraryTools/CoreActivities/GoogleDriveApi/GoogleDriveApiManager.cs index 26b694d..464353b 100644 --- a/CSharpLibraryTools/CoreActivities/GoogleDriveApi/GoogleDriveApiManager.cs +++ b/CSharpLibraryTools/CoreActivities/GoogleDriveApi/GoogleDriveApiManager.cs @@ -16,6 +16,7 @@ namespace CoreActivities.GoogleDriveApi public interface IGoogleDriveApiManager { Task GetFilesAndFolders(string nextPageToken = null, FilesListOptionalParms optional = null); + Task> GetAllFilesAndFolders(FilesListOptionalParms optional = null); Task UploadFileAsync(UploadFileInfo uploadFileInfo, Action uploadProgress = null); Task DeleteAsync(string fileId, FilesDeleteOptionalParms optional = null); Task DownloadAsync(File file, string filePath, Action downloadProgress = null); @@ -103,6 +104,35 @@ public async Task GetFilesAndFolders(string nextPageToken = nu } + public async Task> GetAllFilesAndFolders(FilesListOptionalParms optional = null) + { + GoogleDriveFiles results = null; + FilesListOptionalParms optionals = null; + var files = new List(); + + if(optional == null) + { + optionals = new FilesListOptionalParms + { + PageSize = 5, //Provide positive integer for pagination + Fields = "nextPageToken, files(id, name, mimeType, kind, trashed)" //Follow this pattern to retrive only specified object fields + }; + } + + do + { + if (results == null) + results = await GetFilesAndFolders(null, optionals); + else + results = await GetFilesAndFolders(results.NextPageToken, optionals); + + files.AddRange(results.Files); + + } while (results != null && !string.IsNullOrEmpty(results.NextPageToken)); + + return files; + } + public async Task UploadFileAsync(UploadFileInfo uploadFileInfo, Action uploadProgress = null) { //Initialization From 75c3771e7926af619513bd1360acf7a4f76b5db8 Mon Sep 17 00:00:00 2001 From: abbirku Date: Tue, 28 Sep 2021 18:30:23 +0600 Subject: [PATCH 2/9] Ignore Debug/Nuget --- .gitignore | 1 + CSharpLibraryTools/CoreActivities/CoreActivities.csproj | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/.gitignore b/.gitignore index 69a99ab..d92ad33 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ /CSharpLibraryTools/CoreActivities/bin/Debug/netcoreapp3.1 /CSharpLibraryTools/CoreActivities/obj /CSharpLibraryTools/.vs/CSharpLibraryTools/config +/CSharpLibraryTools/CoreActivities/bin/Debug diff --git a/CSharpLibraryTools/CoreActivities/CoreActivities.csproj b/CSharpLibraryTools/CoreActivities/CoreActivities.csproj index e7d910c..edb8949 100644 --- a/CSharpLibraryTools/CoreActivities/CoreActivities.csproj +++ b/CSharpLibraryTools/CoreActivities/CoreActivities.csproj @@ -4,6 +4,14 @@ Library net5.0-windows netcoreapp3.1 + true + Md Shams Wadud + Reason Follower + ReasonFollower.CSharpLibraryTools.CoreActivities + Aim of this package is to separate daily code in a SOLID manner so that we could re-use the code again without reinventing the wheel. + MIT + https://github.com/abbirku/CSharpLibraryTools + Screen Capture, Running Programs, Google Drive, File Manager, Directory manager, Browser Activity, Active Program From 43992d43e6d32ca2abbcc2517b0560b211e1c694 Mon Sep 17 00:00:00 2001 From: abbirku Date: Tue, 28 Sep 2021 19:13:01 +0600 Subject: [PATCH 3/9] Provide IsBrowserOpen method and its implementation --- .../CSharpLibraryTools/Application.cs | 42 +++++++++---------- .../Implementations/BrowseActivityImp.cs | 35 +++++++++++++--- .../BrowserActivity/BrowserActivityAdaptee.cs | 8 ++++ .../BrowserActivity/BrowserActivityAdapter.cs | 9 ++++ 4 files changed, 67 insertions(+), 27 deletions(-) diff --git a/CSharpLibraryTools/CSharpLibraryTools/Application.cs b/CSharpLibraryTools/CSharpLibraryTools/Application.cs index 1650d15..1f53285 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 3de39a9..7aa0e3a 100644 --- a/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs +++ b/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs @@ -7,22 +7,45 @@ namespace CSharpLibraryTools public class BrowseActivityImp { private readonly IBrowserActivity _browserActivity; + private readonly BrowserActivityEnumAdaptee _browserActivityEnumAdaptee; - public BrowseActivityImp(IBrowserActivity browserActivity) + public BrowseActivityImp(IBrowserActivity browserActivity, + BrowserActivityEnumAdaptee browserActivityEnumAdaptee) { _browserActivity = browserActivity; + _browserActivityEnumAdaptee = browserActivityEnumAdaptee; } public async Task Run() { await Task.Run(() => { - var activeUrl = _browserActivity.EnlistActiveTabUrl(BrowserType.Chrome); - Console.WriteLine($"Active URL: {activeUrl}\n"); + //Check browser open or not + Console.WriteLine($"The browser {_browserActivityEnumAdaptee.ToDescriptionString(BrowserType.Chrome)} " + + $"{(_browserActivity.IsBrowserOpen(BrowserType.Chrome)?"is open": "is not open")}"); - var tabs = _browserActivity.EnlistAllOpenTabs(BrowserType.Chrome); - foreach (var item in tabs) - Console.WriteLine($"Tab: {item}"); + Console.WriteLine($"The browser {_browserActivityEnumAdaptee.ToDescriptionString(BrowserType.Edge)} " + + $"{(_browserActivity.IsBrowserOpen(BrowserType.Edge) ? "is open" : "is not open")}"); + + Console.WriteLine($"The browser {_browserActivityEnumAdaptee.ToDescriptionString(BrowserType.FireFox)} " + + $"{(_browserActivity.IsBrowserOpen(BrowserType.FireFox) ? "is open" : "is not open")}"); + + Console.WriteLine($"The browser {_browserActivityEnumAdaptee.ToDescriptionString(BrowserType.Opera)} " + + $"{(_browserActivity.IsBrowserOpen(BrowserType.Opera) ? "is open" : "is not open")}"); + + Console.WriteLine($"The browser {_browserActivityEnumAdaptee.ToDescriptionString(BrowserType.Safari)} " + + $"{(_browserActivity.IsBrowserOpen(BrowserType.Safari) ? "is open" : "is not open")}"); + + //Check open browser active url and tabs + if (_browserActivity.IsBrowserOpen(BrowserType.Chrome)) + { + var activeUrl = _browserActivity.EnlistActiveTabUrl(BrowserType.Chrome); + Console.WriteLine($"Active URL: {activeUrl}\n"); + + var tabs = _browserActivity.EnlistAllOpenTabs(BrowserType.Chrome); + foreach (var item in tabs) + Console.WriteLine($"Tab: {item}"); + } }); } } diff --git a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs index 4625cc5..f7c7afd 100644 --- a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs +++ b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Windows.Automation; namespace CoreActivities.BrowserActivity @@ -97,5 +98,12 @@ public IList GetOpenTabsInfos(BrowserType browserType) throw new Exception(ex.Message); } } + + 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(); + } } } diff --git a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs index 5c60cf8..ff9e726 100644 --- a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs +++ b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; +using System.Linq; namespace CoreActivities.BrowserActivity { public interface IBrowserActivity { + bool IsBrowserOpen(BrowserType browserType); IList EnlistAllOpenTabs(BrowserType browserType); string EnlistActiveTabUrl(BrowserType browserType); } @@ -39,5 +41,12 @@ public IList EnlistAllOpenTabs(BrowserType browserType) return tabs; } + + public bool IsBrowserOpen(BrowserType browserType) + { + var title = _browserActivityEnumAdaptee.ToDescriptionString(browserType); + var browserTitles = _browserActivityAdaptee.GetBrowserProcessByBrowserType(browserType); + return browserTitles.Count > 0 && browserTitles.Any(x => x.ToLower().Contains(title.ToLower())); + } } } From b6c3dd4176d0aeeb2a198970378982b742a3f178 Mon Sep 17 00:00:00 2001 From: abbirku Date: Tue, 28 Sep 2021 19:16:00 +0600 Subject: [PATCH 4/9] Update Readme.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index be05969..b3182ab 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. | +| IsBrowserOpen(BrowserType browserType) | Returns bool. | _**Notes**_ - **BrowserType** is an Enum which contains **Chrome**, **FireFox**, **Edge**, **Opera**, **Safari** From eff5db7ee31ea806e7be828aaf4a7df3d41aa565 Mon Sep 17 00:00:00 2001 From: abbirku Date: Tue, 28 Sep 2021 21:08:48 +0600 Subject: [PATCH 5/9] Fix IBrowserActivity for edge --- .../Implementations/BrowseActivityImp.cs | 10 +++++ .../BrowserActivity/BrowserActivityAdaptee.cs | 38 ++++++++++++------- .../BrowserActivity/BrowserActivityAdapter.cs | 4 +- .../CoreActivities/CoreActivities.csproj | 5 ++- 4 files changed, 41 insertions(+), 16 deletions(-) diff --git a/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs b/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs index 7aa0e3a..b1fb89d 100644 --- a/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs +++ b/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs @@ -46,6 +46,16 @@ await Task.Run(() => 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 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..d34c815 100644 --- a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs +++ b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs @@ -19,21 +19,19 @@ public string GetActiveTabUrl(BrowserType browserType) { // 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); - var browserName = _browserActivityEnumAdaptee.ToDescriptionString(browserType); - var browserProcess = Process.GetProcessesByName(browserName); - - if (browserProcess.Length > 0) + if (browserProcess.Count > 0) { var url = string.Empty; foreach (var chrome in browserProcess) { // The browser process must have a window - if (chrome.MainWindowHandle == IntPtr.Zero) + if (chrome.Process.MainWindowHandle == IntPtr.Zero) continue; // Find the automation element - var elm = AutomationElement.FromHandle(chrome.MainWindowHandle); + var elm = AutomationElement.FromHandle(chrome.Process.MainWindowHandle); var elmUrlBar = elm.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "Address and search bar")); @@ -67,17 +65,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) + if (processes.Count <= 0) throw new Exception($"No process found with this {browserName} name"); 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 +97,25 @@ 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(); } } + + 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..dbb3709 100644 --- a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs +++ b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs @@ -44,9 +44,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..c198341 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.0.1 + Provide IsBrowserOpen(BrowserType type) In IBrowserActivity From 119d30d01c23a7f6d33561fcd5ca256366b41bd6 Mon Sep 17 00:00:00 2001 From: abbirku Date: Thu, 7 Oct 2021 22:42:22 +0600 Subject: [PATCH 6/9] Fix IBrowserActivity for edge --- CSharpLibraryTools/CoreActivities/CoreActivities.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpLibraryTools/CoreActivities/CoreActivities.csproj b/CSharpLibraryTools/CoreActivities/CoreActivities.csproj index c198341..c511d9d 100644 --- a/CSharpLibraryTools/CoreActivities/CoreActivities.csproj +++ b/CSharpLibraryTools/CoreActivities/CoreActivities.csproj @@ -13,8 +13,8 @@ https://github.com/abbirku/CSharpLibraryTools Screen Capture, Running Programs, Google Drive, File Manager, Directory manager, Browser Activity, Active Program false - 1.0.1 - Provide IsBrowserOpen(BrowserType type) In IBrowserActivity + 1.1.1 + Fix IBrowserActivity for edge From 7b8edea20e8af5e104a23f0ca62a053f2efd754d Mon Sep 17 00:00:00 2001 From: abbirku Date: Thu, 7 Oct 2021 22:59:20 +0600 Subject: [PATCH 7/9] Integrate active tab title method --- .../Implementations/BrowseActivityImp.cs | 6 ++ .../BrowserActivity/BrowserActivityAdaptee.cs | 91 +++++++++++++------ .../BrowserActivity/BrowserActivityAdapter.cs | 11 +++ 3 files changed, 80 insertions(+), 28 deletions(-) diff --git a/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs b/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs index b1fb89d..c352265 100644 --- a/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs +++ b/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs @@ -42,6 +42,9 @@ await Task.Run(() => var activeUrl = _browserActivity.EnlistActiveTabUrl(BrowserType.Chrome); Console.WriteLine($"Active URL: {activeUrl}\n"); + var activeTitle = _browserActivity.EnlistActiveTabUrl(BrowserType.Chrome); + Console.WriteLine($"Active Tab Title: {activeTitle}\n"); + var tabs = _browserActivity.EnlistAllOpenTabs(BrowserType.Chrome); foreach (var item in tabs) Console.WriteLine($"Tab: {item}"); @@ -52,6 +55,9 @@ await Task.Run(() => var activeUrl = _browserActivity.EnlistActiveTabUrl(BrowserType.Edge); Console.WriteLine($"Active URL: {activeUrl}\n"); + var activeTitle = _browserActivity.EnlistActiveTabUrl(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 d34c815..e32e7b7 100644 --- a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs +++ b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs @@ -13,44 +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" - var browserProcess = GetBrowserProcessByBrowserType(browserType); + // Find the automation element + var elm = GetAutomationElement(browserType); + if (elm != null) + return elm.Current.Name; - if (browserProcess.Count > 0) - { - var url = string.Empty; - foreach (var chrome in browserProcess) - { - // The browser process must have a window - if (chrome.Process.MainWindowHandle == IntPtr.Zero) - continue; + return string.Empty; + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } - // Find the automation element - var elm = AutomationElement.FromHandle(chrome.Process.MainWindowHandle); - var elmUrlBar = elm.FindFirst(TreeScope.Descendants, - new PropertyCondition(AutomationElement.NameProperty, "Address and search bar")); + public string GetActiveTabUrl(BrowserType browserType) + { + try + { + // Find the automation element + var elm = GetAutomationElement(browserType); + if(elm != null) + { + 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) { @@ -111,6 +114,38 @@ public IList GetBrowserProcessByBrowserType(BrowserType browser .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 diff --git a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdapter.cs index dbb3709..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); From 83409b87e2491c4f7099214c6c6180b41f9715d4 Mon Sep 17 00:00:00 2001 From: abbirku Date: Thu, 7 Oct 2021 23:25:42 +0600 Subject: [PATCH 8/9] Improve code --- .../CSharpLibraryTools/Application.cs | 42 +++++++++---------- .../Implementations/BrowseActivityImp.cs | 4 +- .../BrowserActivity/BrowserActivityAdaptee.cs | 2 +- 3 files changed, 24 insertions(+), 24 deletions(-) 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 c352265..9a21d3a 100644 --- a/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs +++ b/CSharpLibraryTools/CSharpLibraryTools/Implementations/BrowseActivityImp.cs @@ -42,7 +42,7 @@ await Task.Run(() => var activeUrl = _browserActivity.EnlistActiveTabUrl(BrowserType.Chrome); Console.WriteLine($"Active URL: {activeUrl}\n"); - var activeTitle = _browserActivity.EnlistActiveTabUrl(BrowserType.Chrome); + var activeTitle = _browserActivity.EnlistActiveTabTitle(BrowserType.Chrome); Console.WriteLine($"Active Tab Title: {activeTitle}\n"); var tabs = _browserActivity.EnlistAllOpenTabs(BrowserType.Chrome); @@ -55,7 +55,7 @@ await Task.Run(() => var activeUrl = _browserActivity.EnlistActiveTabUrl(BrowserType.Edge); Console.WriteLine($"Active URL: {activeUrl}\n"); - var activeTitle = _browserActivity.EnlistActiveTabUrl(BrowserType.Chrome); + var activeTitle = _browserActivity.EnlistActiveTabTitle(BrowserType.Chrome); Console.WriteLine($"Active Tab Title: {activeTitle}\n"); var tabs = _browserActivity.EnlistAllOpenTabs(BrowserType.Edge); diff --git a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs index e32e7b7..82e38ab 100644 --- a/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs +++ b/CSharpLibraryTools/CoreActivities/BrowserActivity/BrowserActivityAdaptee.cs @@ -71,7 +71,7 @@ public IList GetOpenTabsInfos(BrowserType browserType) var processes = GetBrowserProcessByBrowserType(browserType); if (processes.Count <= 0) - throw new Exception($"No process found with this {browserName} name"); + return new List(); else { foreach (var proc in processes) From 31085111a3828a6d2207199dcd49542446be6d89 Mon Sep 17 00:00:00 2001 From: abbirku Date: Fri, 8 Oct 2021 00:38:19 +0600 Subject: [PATCH 9/9] Update readme --- CSharpLibraryTools/CoreActivities/CoreActivities.csproj | 4 ++-- README.md | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CSharpLibraryTools/CoreActivities/CoreActivities.csproj b/CSharpLibraryTools/CoreActivities/CoreActivities.csproj index c511d9d..60932e1 100644 --- a/CSharpLibraryTools/CoreActivities/CoreActivities.csproj +++ b/CSharpLibraryTools/CoreActivities/CoreActivities.csproj @@ -13,8 +13,8 @@ https://github.com/abbirku/CSharpLibraryTools Screen Capture, Running Programs, Google Drive, File Manager, Directory manager, Browser Activity, Active Program false - 1.1.1 - Fix IBrowserActivity for edge + 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**_