■ 메인 크롬 브라우저 활성 탭에서 URL을 구하는 방법을 보여준다.
※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다.
※ TestProject.csproj 프로젝트 파일에서 WindowsPackageType 태그를 None으로 추가했다.
▶ ChromeHelper.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
using System; using System.Diagnostics; using System.Management; using FlaUI.Core.AutomationElements; using FlaUI.UIA3; namespace TestProject; /// <summary> /// 크롬 헬퍼 /// </summary> public class ChromeHelper { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Public #region 크롬 주소바 텍스트 구하기 - GetChromeAddressBarText() /// <summary> /// 크롬 주소바 텍스트 구하기 /// </summary> /// <returns></returns> public static string GetChromeAddressBarText() { Process[] chromeProcessArray = Process.GetProcessesByName("chrome"); if(chromeProcessArray.Length == 0) { return null; } nint mainChromeWindowHandle = FindMainChromeWindowHandle(); if(mainChromeWindowHandle == IntPtr.Zero) { return null; } using(UIA3Automation uia3Automation = new UIA3Automation()) { AutomationElement windowAutomationElement = uia3Automation.FromHandle(mainChromeWindowHandle); AutomationElement addressEditAutomationElement = windowAutomationElement.FindFirstDescendant(conditionFactory => conditionFactory.ByClassName("OmniboxViewViews")); if(addressEditAutomationElement != null) { return addressEditAutomationElement.Patterns.Value.Pattern.Value; } else { return null; } } } #endregion //////////////////////////////////////////////////////////////////////////////// Private #region 메인 크롬 윈도우 핸들 찾기 - FindMainChromeWindowHandle() /// <summary> /// 메인 크롬 윈도우 핸들 찾기 /// </summary> /// <returns></returns> private static IntPtr FindMainChromeWindowHandle() { SelectQuery selectQuery = new SelectQuery("SELECT ProcessId, CommandLine FROM Win32_Process WHERE Name = 'chrome.exe'"); using(ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(selectQuery)) { foreach(ManagementObject process in managementObjectSearcher.Get()) { string commandLine = process["CommandLine"].ToString(); if(!commandLine.Contains("--type=")) { int processID = Convert.ToInt32(process["ProcessId"]); Process chromeProcess = Process.GetProcessById(processID); return chromeProcess.MainWindowHandle; } } } return IntPtr.Zero; } #endregion } |
▶ MainPage.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?xml version="1.0" encoding="utf-8"?> <Page x:Class="TestProject.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" FontFamily="나눔고딕코딩" FontSize="16"> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Spacing="10"> <Button Name="fetchButton" HorizontalAlignment="Center" Padding="10" Content="가져오기" /> <TextBlock Name="textBlock" HorizontalAlignment="Center" /> </StackPanel> </Page> |
▶ MainPage.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace TestProject; /// <summary> /// 메인 페이지 /// </summary> public sealed partial class MainPage : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainPage() /// <summary> /// 생성자 /// </summary> public MainPage() { InitializeComponent(); this.fetchButton.Click += fetchButton_Click; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private #region 가져오기 버튼 클릭시 처리하기 - fetchButton_Click(sender, e) /// <summary> /// 가져오기 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void fetchButton_Click(object sender, RoutedEventArgs e) { string addressBarText = ChromeHelper.GetChromeAddressBarText(); if(addressBarText != null) { this.textBlock.Text = addressBarText; } } #endregion } |