WinAPI:FindText、ReplaceText、FRHookProc

一、FindText

   函数功能:该函数创建一个系统定义的无模式Find对话框,为使用户指定一个串来查找文本内的文字。

    函数原型:HWND FindText(LPFINDREPLACE lpfr);

    参数:

    Ipfr:指向一个FINDEPLACE结构,此结构包含用来初始对话框的信息。对话框用此结构把用户输入的信息传送到应用程序。有关更多的信息,请参见下面说明部分。

    返回值:如果函数调用成功,返回值是对话框的窗口句柄。可以使用窗口句柄与对话框联系或关闭它;如果函数调用失败,返回值为NULL。


二、ReplaceText

    函数功能。该函数创建一个系统定义的无模式对话框,此对话框使用户查找或替代一个串,或执行控制和替代操作。

    函数原型:HWND Replace Text (LPFINDREPLACE Ipfr);

    参数:

    Ipfr:指向一个包含初始化对话框的信息的FINDREPLACE结构。对话框应用此结构把用户输入的有关信息传送到应用程序。有关更多的信息,见卜列说明部分。

    返回值:如果函数调用成功,返回值为对话框的窗口句柄,可以用窗口句柄与对话框联系或关闭它。如果函数调用失败,返回值为NULL。


三、FRHookProc

    函数功能:该函数是由应用程序定义或库定义的回调函数。它和FindText函数或Replace Text函数一定使用。挂钩函数接收用于Find或Replace公共对话框的缺省对话框函数的消息和通告。

    LPFRHOOKPROC类型定义了一个指向此回调函数的指针,FRHookProc是一个应用程序定义的函数名的位置持有者。数原型:UINT CALLBACK FRHookProc(HWND hdlg,UINT uiMsg WPARAM wParam,LPARAM IParam);

    参数:

    hdlg:指向消息所传送到的Find或Replace公共对话框窗口的句柄。

    uiMsg:指定有放的消息。

    wParam:指定有关消息的另外的信息,精确的意义要根据uiMsg参数的值来定。

    IParam:指定有关消息的另外的信息,精确的意义要根据uiMsg参数的值来定。如果uiMsg参数表明WM_INItDIALOG消息。IParam是一个指向FINDREPLACE结构的指针,该结构包含公共对话框创建时指定的值。

    返回值:如果挂钩函数返回零,缺省对话框函数处理消息;如果挂钩函数返回非零值,缺省对话框函数忽略消息。


四、样例

说明:hook失败了,要兴趣的小伙伴可以自己研究一下

UINT_PTR CALLBACK  FindTextHook (HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
    switch(uiMessage)
    {
    case WM_INITDIALOG:
        {
                int a = 3;
        }
    
        break;
    default:
        break;
    }
    return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    static TCHAR        szFindText[512] ;
    static UINT            uFindReplaceMsg;
    static FINDREPLACE    fr;
    static HWND            hdlg;
    if(message == uFindReplaceMsg){
        int a = 3;
    }
    switch (message)
    {
    case  WM_CREATE:
        {
            memset(szFindText,0x00,sizeof(szFindText));
        }
        break;
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // 分析菜单选择:
        switch (wmId)
        {
        case ID_TEST:
            {
                ZeroMemory(&fr, sizeof(FINDREPLACE));
                fr.lStructSize = sizeof(FINDREPLACE);
                fr.hwndOwner = hWnd;
                fr.lpstrFindWhat = szFindText;
                fr.wFindWhatLen = 512;
                fr.Flags = 0;
                fr.lpfnHook = FindTextHook;
                hdlg = FindText(&fr);
        
            }    
            break;
        default:
            {
                LPFINDREPLACE lpfr;
                if (message == uFindReplaceMsg){
                    // Get pointer to FINDREPLACE structure from lParam.
                    lpfr = (LPFINDREPLACE)lParam;

                    // If the FR_DIALOGTERM flag is set,
                    // invalidate the handle that identifies the dialog box.
                    if (lpfr->Flags & FR_DIALOGTERM)
                    {
                        hdlg = NULL;
                        return 0;
                    }

                    // If the FR_FINDNEXT flag is set,
                    // call the application-defined search routine
                    // to search for the requested string.
                    if (lpfr->Flags & FR_FINDNEXT)
                    {
                        
                        /*SearchFile(lpfr->lpstrFindWhat,
                            (BOOL) (lpfr->Flags & FR_DOWN),
                            (BOOL) (lpfr->Flags & FR_MATCHCASE)); */
                    }

                    return 0;
                }
                else  {
                    return DefWindowProc (hWnd, message, wParam, lParam) ;
                }

            }
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: 在此添加任意绘图代码...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值