回复java_gh的一个问题

我看到java_gh在CSDN C/C++版块的一个问题,因为是初学者所提问题,我就热心帮助一次。但并不表示我赞同那种做法。

唉,那种编程,是不走正路的。初学者做这种东西,不利于学到真正知识,也不利于培养对编程的兴趣。因为这是一种hack式编程。

如果扫雷程序没有公开二次开发接口,只有通过给扫雷窗口发消息的方式,但你心里要知道这种做法是不正规的。我没有直接在原贴上回复,

因为看到有人的回复象刷屏捞分,就不愿意跟在后面回复了。

 

下面是发送消息来触发扫雷程序自定义设置的代码:

    HWND h = ::FindWindow(NULL,_T("扫雷"));
    if (h == NULL) {
        AfxMessageBox(_T("失败"));
        return;
    }
    CWnd *wnd = CWnd::FromHandle(h);
    CMenu *menu = wnd->GetMenu();
    CMenu *s = menu->GetSubMenu(0);
    ::PostMessage(h, WM_COMMAND, MAKELONG(s->GetMenuItemID(5),0), 0);
    Sleep(200);
    HWND hWndCustom = ::FindWindow(NULL, _T("自定义雷区"));
    if (hWndCustom == NULL) {
        AfxMessageBox(_T("失败"));
        return;
    }
    CWnd *wndCustom = CWnd::FromHandle(hWndCustom);
    TCHAR *s1 = _T("20");
    TCHAR *s2 = _T("30");
    TCHAR *s3 = _T("100");
    CWnd *ctrl1 = wndCustom->GetDlgItem(0x8D);
    if (ctrl1) {
        ctrl1->SendMessage(WM_SETTEXT, 0, (LPARAM)s1);
    }
    CWnd *ctrl2 = wndCustom->GetDlgItem(0x8E);
    if (ctrl2)
        ctrl2->SendMessage(WM_SETTEXT, 0, (LPARAM)s2);

    CWnd *ctrl3 = wndCustom->GetDlgItem(0x8F);
    if (ctrl3)
        ctrl3->SendMessage(WM_SETTEXT, 0, (LPARAM)s3);

    //模拟用户点击确定按钮
    CWnd *ctrlOK = wndCustom->GetDlgItem(1);
    if (ctrlOK)
        ctrlOK->PostMessage(BM_CLICK, 0, 0);

简单说明一下:先找到扫雷程序的主窗口,上面的代码是通过FindWindow找到扫雷窗口。如果你已经通过某种方式得到了,就直接用窗口句柄操作,不必用FindWindow了。接着是模拟点击菜单项“自定义”,它是在“游戏”菜单的第5项。若成功则自定义扫雷窗口应该出现。接下来就是给三个edit窗口发送消息,把具体数值填进去,你要把上面的例子数值替换成你要的值。为什么三个edit的control ID是0x8D, 0x8E, 0x8F?因为我通过VC自带的spy工具看到的。如果不能工作,你要在自己的机器上用spy工具看看,给出实际的值。最后是模拟按钮点击消息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值