VC程序获取程序窗体的句柄和修改窗体的类名

 在VC程序中我们经常要获取到某一指定程序的窗体句柄,大家经常用到的两个函数的是

FindWindowFindWindowEx,两函数的具体用法可参考MSDN。

其中FindWindow函数可以通过窗体的名字来找

   例如  HWND hwnd = ::FindWindow(NULL, "窗体名");

FindWindowEx通过窗体的类名来找

   例如  HWND hwnd =::FindWindowEx(0,0, TEXT("窗体类名"), NULL);  其中窗体类名是程序对话框注册的类名,例如通过spy++查看的微软的IE浏览器的类名一般为"IEFrame", 然而很多人发现自己写的MFC程序的窗体的类名用SPY++查看之后得出的类名都是固定的“ #32770 ”,其实是你没有设置,微软给你个默认的名字罢了,你可以自己设置,操作步骤如下。


微软官方解答地址:

http://support.microsoft.com/kb/251059

第一步 在窗体属性中修改类名

第二步 在InitInstance中注册窗体名

若要提供自己的窗口类名,请执行以下步骤:

打开包含对话框中,您项目的工作空间,然后单击ResourceView。

在资源编辑器中打开对话框。用鼠标右键单击对话框,然后选择属性。注意到为类名在右下角的一个条目。如果您正在使用 Microsoft 基础类库支持的资源文件,则该编辑框被禁用。要启用此选项,请切换到顶级节点上的资源视图中,然后右键单击并选择属性。清除启用 MFC 功能复选框。或 Visual C++.net,清除MFC 模式属性为 FALSE。现在显示的对话框中的属性。应启用类名称编辑框。键入类的名称 ;例如 MyPrivateClassName

另外,作为文本文件打开.rc 文件。转到所需的对话框资源,然后添加类别选项。

IDD_LIMITDLGINSTANCE_DIALOG DIALOGEX 0, 0, 195, 44

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

EXSTYLE WS_EX_APPWINDOW

CAPTION "LimitDlgInstance"

CLASS "MyPrivateClassName" // Add your class name here!

FONT 8, "MS Sans Serif"

BEGIN

    DEFPUSHBUTTON   "OK",IDOK,138,7,50,14

    PUSHBUTTON      "Cancel",IDCANCEL,138,23,50,14

    PUSHBUTTON      "&Test!",IDC_BUTTON1,48,14,49,15

END

                        

CWinApp 派生类的InitInstance()函数中添加以下代码。

BOOL CLimitDlgInstanceApp::InitInstance()

{

    / 

    / 

    WNDCLASS wc;

 

    // Get the info for this class.

         // #32770 is the default class name for dialogs boxes.

    ::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wc);

 

    // Change the name of the class.

    wc.lpszClassName = "MyPrivateClassName";

 

    // Register this class so that MFC can use it.

    AfxRegisterClass(&wc);  

    / 

    / 

 

// ...

}

                        

在第步中,在调用:: GetClassInfo(),请确保使用正确的 HINSTANCE 调用,如果对话框资源都位于单独的 DLL

生成并运行您的应用程序。使用 Spy + + 工具来验证对话框现在使用新的类名。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值