对其它程序的编辑框进行操作

首先大家很容易的想到用FindWindow函数来进行查找其句柄.就拿记事本来说.如果你用FindWindow获取其句柄是获取不到编辑框的句柄的,只能获取它父窗口的句柄.所以我们可以调整一下思路.先获取它父窗口的句柄,然后通过它找到子窗口句柄.

效果如图:
对其它程序的编辑框进行操作_第1张图片

1.发送内容给其它程序的编辑框

    //获取父窗口句柄
    HWND hFindParent = ::FindWindow(nullptr, L"test.txt - 记事本");
    if (hFindParent)
    {
        //获取子窗口句柄
        HWND hFindEdit = ::FindWindowEx(hFindParent, nullptr, L"Edit", nullptr);
        if (hFindEdit)
        {
            UpdateData(TRUE);
            CString s;
            GetDlgItemText(IDC_EDIT, s);
            //发送 
            ::SendMessage(hFindEdit, WM_SETTEXT, 1024, (LPARAM)s.GetBuffer());
        }
    }

2.获取其它程序编辑框的内容

    //获取父窗口句柄
    HWND hFindParent = ::FindWindow(nullptr, L"test.txt - 记事本");
    if (hFindParent)
    {
        //获取子窗口句柄
        HWND hFindEdit = ::FindWindowEx(hFindParent, nullptr, L"Edit", nullptr);
        if (hFindEdit)
        {
            TCHAR szBuffer[1024]=TEXT("");
            //获取 
            ::SendMessage(hFindEdit, WM_GETTEXT, 1024, (LPARAM)szBuffer);
            SetDlgItemText(IDC_EDIT, szBuffer);
            UpdateData(FALSE);
        }

有些软件的界面并没有编辑框,都是一些自绘的控件,所以发送/获取失败是正常的.

你可能感兴趣的:(windows,api,mfc,编辑框)