C #을 사용하여 다른 응용 프로그램의 텍스트 상자에 입력 된 텍스트 가져 오기

Bharath

다른 응용 프로그램의 텍스트 상자에있는 텍스트를 얻고 싶습니다. gtalk 클라이언트의 텍스트 상자 또는 soap UI 화면 일 수 있습니다.

내 연구에 따르면 대부분의 포럼에서 제안한 winapi는 내가 이것을 달성하기 위해 사용해야하는 개념입니다. 나는 이것을 구현하는 좋은 예를 얻지 못했습니다.

프랜시스 맥도날드

다음은 창 제목으로 창에서 모든 텍스트를 가져 오는 방법의 예입니다.

이것이 어떻게 작동하는지에 대한 설명은 주석을 참조하십시오.

public class GetWindowTextExample
{
    // Example usage.
    public static void Main()
    {
        var allText = GetAllTextFromWindowByTitle("Untitled - Notepad");
        Console.WriteLine(allText);
        Console.ReadLine();
    }

    // Delegate we use to call methods when enumerating child windows.
    private delegate bool EnumWindowProc(IntPtr hWnd, IntPtr parameter);

    [DllImport("user32")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i);

    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
    private static extern IntPtr FindWindowByCaption(IntPtr zeroOnly, string lpWindowName);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, [Out] StringBuilder lParam);

    // Callback method used to collect a list of child windows we need to capture text from.
    private static bool EnumChildWindowsCallback(IntPtr handle, IntPtr pointer)
    {
        // Creates a managed GCHandle object from the pointer representing a handle to the list created in GetChildWindows.
        var gcHandle = GCHandle.FromIntPtr(pointer);

        // Casts the handle back back to a List<IntPtr>
        var list = gcHandle.Target as List<IntPtr>;

        if (list == null)
        {
            throw new InvalidCastException("GCHandle Target could not be cast as List<IntPtr>");
        }

        // Adds the handle to the list.
        list.Add(handle);

        return true;
    }

    // Returns an IEnumerable<IntPtr> containing the handles of all child windows of the parent window.
    private static IEnumerable<IntPtr> GetChildWindows(IntPtr parent)
    {
        // Create list to store child window handles.
        var result = new List<IntPtr>();

        // Allocate list handle to pass to EnumChildWindows.
        var listHandle = GCHandle.Alloc(result);

        try
        {
            // Enumerates though all the child windows of the parent represented by IntPtr parent, executing EnumChildWindowsCallback for each. 
            EnumChildWindows(parent, EnumChildWindowsCallback, GCHandle.ToIntPtr(listHandle));
        }
        finally
        {
            // Free the list handle.
            if (listHandle.IsAllocated)
                listHandle.Free();
        }

        // Return the list of child window handles.
        return result;
    }

    // Gets text text from a control by it's handle.
    private static string GetText(IntPtr handle)
    {
        const uint WM_GETTEXTLENGTH = 0x000E;
        const uint WM_GETTEXT = 0x000D;

        // Gets the text length.
        var length = (int)SendMessage(handle, WM_GETTEXTLENGTH, IntPtr.Zero, null);

        // Init the string builder to hold the text.
        var sb = new StringBuilder(length + 1);

        // Writes the text from the handle into the StringBuilder
        SendMessage(handle, WM_GETTEXT, (IntPtr)sb.Capacity, sb);

        // Return the text as a string.
        return sb.ToString();
    }

    // Wraps everything together. Will accept a window title and return all text in the window that matches that window title.
    private static string GetAllTextFromWindowByTitle(string windowTitle)
    {
        var sb = new StringBuilder();

        try
        {
            // Find the main window's handle by the title.
            var windowHWnd = FindWindowByCaption(IntPtr.Zero, windowTitle);

            // Loop though the child windows, and execute the EnumChildWindowsCallback method
            var childWindows = GetChildWindows(windowHWnd);

            // For each child handle, run GetText
            foreach (var childWindowText in childWindows.Select(GetText))
            {
                // Append the text to the string builder.
                sb.Append(childWindowText);
            }

            // Return the windows full text.
            return sb.ToString();
        }
        catch (Exception e)
        {
            Console.Write(e.Message);
        }

        return string.Empty;
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C를 사용하여 사용자 입력에서 텍스트 가져 오기

분류에서Dev

사용자가 텍스트 상자에 입력 한 여러 줄을 인쇄하는 루프를 작성합니다. 이것은 C # Windows 응용 프로그램을 사용합니다.

분류에서Dev

여러 텍스트 상자에서 텍스트를 가져 오는 방법은 다른 프로그램을 제어합니다. C # WM_GETTEXT

분류에서Dev

C #을 사용하여 XML에서 중첩 된 요소의 텍스트 가져 오기

분류에서Dev

SendKeys 문을 사용하여 다른 응용 프로그램에 텍스트를 삽입하는 방법

분류에서Dev

다른 응용 프로그램의 텍스트 상자에서 텍스트 읽기

분류에서Dev

텍스트 상자에 입력 된 값을 기반으로 javascript를 사용하여 여러 텍스트 상자 열기

분류에서Dev

Python 스크립팅을 사용하여 XML에서 다른 요소의 텍스트 또는 속성을 기반으로 요소의 텍스트 가져 오기

분류에서Dev

win32 C ++ 및 후크를 사용하여 응용 프로그램의 단추에서 텍스트 가져 오기

분류에서Dev

VBscript를 사용하여 응용 프로그램 창에서 텍스트 읽기 / 가져 오기

분류에서Dev

사용자 입력 (텍스트 상자)에 의해 생성 된 여러 쿠키를 한 번에 설정 / 가져 오기 / 확인

분류에서Dev

다른 응용 프로그램의 텍스트 상자에 프로그래밍 방식으로 텍스트 붙여 넣기

분류에서Dev

사용자가 옵션을 선택할 때 다른 입력 텍스트 열기

분류에서Dev

mvc 텍스트 상자에서 사용자 입력 데이터 가져 오기

분류에서Dev

다른 응용 프로그램에서 선택한 텍스트를 가져오고 클립 보드 텍스트를 동시에 유지하는 방법

분류에서Dev

"If 문"을 사용하여 Javascript의 색상 텍스트 값 가져 오기

분류에서Dev

사용자가 텍스트 상자에 입력 한 이름으로 파일 가져 오기

분류에서Dev

grep을 사용하여 텍스트에서 URL 가져 오기

분류에서Dev

beautifulsoup을 사용하여 br 태그에서 텍스트 가져 오기

분류에서Dev

BeautifulSoup을 사용하여 HTML 태그 뒤에있는 텍스트 가져 오기

분류에서Dev

입력 텍스트 값을 다른 페이지 jQuery를 사용하여 다른 입력 텍스트로 전달

분류에서Dev

C # Windows 응용 프로그램에서 기본값이 0 인 텍스트 "SELECT"로 콤보 상자에 첫 번째 항목을 삽입하는 방법

분류에서Dev

Python에서 BeautifulSoup을 사용하여 HTML 텍스트의 중첩 된 요소 내에서 텍스트 가져 오기

분류에서Dev

Selenium을 사용하여 <div> 내의 <span>에서 텍스트 가져 오기

분류에서Dev

fstream을 사용하여 C ++의 .txt 파일에서 텍스트 가져 오기 문제

분류에서Dev

정규식을 사용하여 C ++의 텍스트 줄에서 데이터 가져 오기

분류에서Dev

importrange를 사용하여 다른 시트에서 텍스트 및 특정 텍스트 수 가져 오기

분류에서Dev

JTextArea 사용자 입력 텍스트 가져 오기

분류에서Dev

사용자가 사용자 이름 및 암호 텍스트 상자를 지우고 제출을 누른 후에도 저장된 자격 증명을 사용하는 ASP 응용 프로그램

Related 관련 기사

  1. 1

    C를 사용하여 사용자 입력에서 텍스트 가져 오기

  2. 2

    사용자가 텍스트 상자에 입력 한 여러 줄을 인쇄하는 루프를 작성합니다. 이것은 C # Windows 응용 프로그램을 사용합니다.

  3. 3

    여러 텍스트 상자에서 텍스트를 가져 오는 방법은 다른 프로그램을 제어합니다. C # WM_GETTEXT

  4. 4

    C #을 사용하여 XML에서 중첩 된 요소의 텍스트 가져 오기

  5. 5

    SendKeys 문을 사용하여 다른 응용 프로그램에 텍스트를 삽입하는 방법

  6. 6

    다른 응용 프로그램의 텍스트 상자에서 텍스트 읽기

  7. 7

    텍스트 상자에 입력 된 값을 기반으로 javascript를 사용하여 여러 텍스트 상자 열기

  8. 8

    Python 스크립팅을 사용하여 XML에서 다른 요소의 텍스트 또는 속성을 기반으로 요소의 텍스트 가져 오기

  9. 9

    win32 C ++ 및 후크를 사용하여 응용 프로그램의 단추에서 텍스트 가져 오기

  10. 10

    VBscript를 사용하여 응용 프로그램 창에서 텍스트 읽기 / 가져 오기

  11. 11

    사용자 입력 (텍스트 상자)에 의해 생성 된 여러 쿠키를 한 번에 설정 / 가져 오기 / 확인

  12. 12

    다른 응용 프로그램의 텍스트 상자에 프로그래밍 방식으로 텍스트 붙여 넣기

  13. 13

    사용자가 옵션을 선택할 때 다른 입력 텍스트 열기

  14. 14

    mvc 텍스트 상자에서 사용자 입력 데이터 가져 오기

  15. 15

    다른 응용 프로그램에서 선택한 텍스트를 가져오고 클립 보드 텍스트를 동시에 유지하는 방법

  16. 16

    "If 문"을 사용하여 Javascript의 색상 텍스트 값 가져 오기

  17. 17

    사용자가 텍스트 상자에 입력 한 이름으로 파일 가져 오기

  18. 18

    grep을 사용하여 텍스트에서 URL 가져 오기

  19. 19

    beautifulsoup을 사용하여 br 태그에서 텍스트 가져 오기

  20. 20

    BeautifulSoup을 사용하여 HTML 태그 뒤에있는 텍스트 가져 오기

  21. 21

    입력 텍스트 값을 다른 페이지 jQuery를 사용하여 다른 입력 텍스트로 전달

  22. 22

    C # Windows 응용 프로그램에서 기본값이 0 인 텍스트 "SELECT"로 콤보 상자에 첫 번째 항목을 삽입하는 방법

  23. 23

    Python에서 BeautifulSoup을 사용하여 HTML 텍스트의 중첩 된 요소 내에서 텍스트 가져 오기

  24. 24

    Selenium을 사용하여 <div> 내의 <span>에서 텍스트 가져 오기

  25. 25

    fstream을 사용하여 C ++의 .txt 파일에서 텍스트 가져 오기 문제

  26. 26

    정규식을 사용하여 C ++의 텍스트 줄에서 데이터 가져 오기

  27. 27

    importrange를 사용하여 다른 시트에서 텍스트 및 특정 텍스트 수 가져 오기

  28. 28

    JTextArea 사용자 입력 텍스트 가져 오기

  29. 29

    사용자가 사용자 이름 및 암호 텍스트 상자를 지우고 제출을 누른 후에도 저장된 자격 증명을 사용하는 ASP 응용 프로그램

뜨겁다태그

보관