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