一、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;
 }