子窗口的窗口回调函数的查找

通过消息断点查找子窗口的窗口过程

win32中 通过DialogBox函数创建一个对话框

``
// src.cpp : Defines the entry point for the application.
//

#include “stdafx.h”
#include “resource.h”
#define REGISTER_FALD -0x10 //窗口类注册失败

BOOL CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);

int APIENTRY WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{

DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,WindowProc);

return 0;

}

BOOL CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
TCHAR szUserName[100];
TCHAR szPassword[100];
HWND hUser=0;
HWND hPass=0;
switch(uMsg)
{
case WM_LBUTTONDOWN:

  return true;

case WM_COMMAND:
{
switch(LOWORD(wParam))
{

		   case IDOK:
		 
		   hUser=GetDlgItem(hwnd,IDC_USERNAME);
		   GetWindowText(hUser,szUserName,50);
		   
		    hPass=GetDlgItem(hwnd,IDC_PASSWORD);
		   GetWindowText(hPass,szPassword,50);

	if(!strcmp(szUserName,TEXT("yxp1991"))) 
		{
		 MessageBox(hwnd,TEXT("正确的密码"),TEXT("hip"),0);
		}
	else
	   	 MessageBox(hwnd,TEXT("错误的密码"),TEXT("error"),0);
		   return true;
		 

	       case IDCANCEL:
		 
		 EndDialog(hwnd,0);
		 return true;
		 

	   return false;
	 }
  }

}
return false;
}

为主窗口提供一个窗口消息处理函数。而窗口内的各种控件不需要写处理函数,系统已经写好。
要找到自己写的空间处理程序需要两步。第一步,截获子窗口的WM_LBUTTONUP消息 以确定是哪一个控件。
第二步 ,截获WM_COMMAND消息  因为子窗口的消息会转换成WM_COMMAND消息发送给主窗口。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190124232407407.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDkwODcz,size_16,color_FFFFFF,t_70)
像这个程序中OK按钮的回调函数怎么找呢?
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190124232614115.png)
打开OD  点击W  找到button下消息断点 WM_LBUTTONUP  然后再点击m  在.text代码段下一个内存访问断点。
程序继续运行就会断在应用程序的代码段观察堆栈窗口  当消息类型为111时(下一个条件断点),就找到了子窗口的消息处理函数一直单步就可以了。

猜你喜欢

转载自blog.csdn.net/qq_41490873/article/details/86634943