Edge 같은 브라우저의 검색창에 복사해 넣고 싶습니다.

안녕하세요.

주로 c#으로 간단한 프로그램을 짜고 있습니다.
이번에는 클립보드에 있는 텍스트를 특정 웹사이트 검색창에 붙여 넣고 싶습니다.

그런데 아래한글 같은 곳에는 잘 되는데,
웹브라우저에서는 안 되네요.
Edge가 아예 활성화되지를 않습니다.

고수님들의 지도 부탁드립니다.

아래처럼 코딩했습니다.

var proc = Process.GetProcessesByName(“msedge”).FirstOrDefault();
if (proc != null)
{

                var handle = proc.MainWindowHandle;
                SetForegroundWindow(handle);
                SendKeys.Send("^v");

이 방식이 별로라면,
아예 Edge 같은 브라우저 검색 창에서 특정 값을 입력하면 자동으로 특정 단어로 바꿔주는 것도 괜찮습니다.

UI Automation을 이용한 방법

using System.Windows.Automation;

...

var processes = Process.GetProcessesByName("msedge");

foreach (var process in processes.Where(x => x.MainWindowHandle != IntPtr.Zero))
{
    var elm = AutomationElement.FromHandle(process.MainWindowHandle);

    var elmUrlBar = elm?.FindFirst(TreeScope.Subtree, new AndCondition(
        new PropertyCondition(AutomationElement.ControlTypeProperty, 
                              ControlType.Edit),
        new PropertyCondition(AutomationElement.ClassNameProperty, 
                              "OmniboxViewViews")));

    if (elmUrlBar != null)
    {
        elmUrlBar.SetFocus(); // Focus

        var urlPattern = 
            elmUrlBar.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;

        var url = urlPattern.Current.Value; // Get URL

        Debug.WriteLine(url);

        urlPattern.SetValue("google.com"); // Set URL
    }
}
1 Like

와. 정말 감사합니다.
이런 곳이 있을 줄 몰랐습니다. 신세계네요.

그런데 선생님, UIAutomation Types, Clien를 참조에 추가해서 다른 문제는 없는데,
이 부분에서만 이런 에러가 나는데 혹시 확인해 주실 수 있으신지요?

foreach (var process in processes.Where(x => x.MainWindowHandle != 0))

|오류|CS0019|‘!=’ 연산자는 ‘IntPtr’ 및 ‘int’ 형식의 피연산자에 적용할 수 없습니다.

.NET Framework을 사용하신다면 == 0대신 == IntPtr.Zero를 사용해보세요ㅎ

감사합니다. 즐거운 주말 되세요^^

아, 그런데 실행해 보니까 URL 주소창에 추가가 되네요.

혹시 검색창에 붙이는 것 좀 추가로 여쭤봐도 될까요?

검색창이 어떤걸 말씀하시는건가요? 캡쳐로 부탁드립니다.

이런 곳입니다. 검색어 입력 창입니다.

해당 부분은 우리가 일반적인 API로 제어할 수 있는 컨트롤 영역이 아니라 웹페이지 영역입니다.
구글 웹사이트(혹은 웹페이지)의 검색 영역인 것이죠.
자바스크립트로 제어할 수 있지만 msedge 프로세스에 직접 접근해서 제어하는 것은 쉽지 않을 것 같습니다.
주소창에 키워드를 입력해도 검색창에 입력한 것과 동일한 결과를 낼텐데 그렇게 하지 않는 이유가 있을신가요?

이 경우 꼭 외부에 실행된 msedge프로세스를 사용하지 않아도 된다면 WPF나 WinForms의 WebView2 컨트롤을 사용하시는 방법도 있습니다.

네. 제가 초보 수준이라서요.ㅎ

사실은 게시판의 다른 글에서도 질문을 드렸던 사항인데,

검색창에 검색 옵션을 입력할 때 한영 변환을 매번 하는 것이 싫어서
이렇게 구현해 보려고 한 것입니다.

‘/n’ 을 입력해야 하는데, 한글로 워드를 찍다보면 '/ㅜ’가 찍혀서
매번 변환을 해 줘야 하거든요.

저런 경우 자동으로 변환해 주는 기능을
후킹으로 구현할 수 있으면 좋은데,
아직 그 수준은 안 되어서요.