一个有趣的小程序:给应用程序套个马甲

        一日浏览Visual Studio6 的Tools,发现其中有一个很好玩的工具:SPY++;使用了一下,原来可以探测应用程序中的各种资源,包括对话框、菜单等等。于是写了一个计算器的马甲,测试了一番。

         首先打开计算器,然后打开SPY++,便可以在SPY++中看到当前Windows运行的所有程序的进程,可以找到一个含有“计算器SciCalc”的进程项,这一项即是计算器的资源,展开可以看到所有计算器的按钮资源,包括:1、2、3、4、5、6、7、8、9、+、-、×、÷等等这些按钮,还有十进制、十六进制、角度、弧度等单选按钮,以及Inv和Hyp这样的复选按钮。除了按钮资源,还有一个文本框资源,即我们平常计算结果的显示区域,和几个静态文本框资源。例如,双击3按钮,显示了一些信息,其中,Control ID即是我们需要的,这个代码就是我们要操作的代码。

        我在vc6中仿计算器做了一个工程,关键代码如下:

       

1    ShellExecute( NULL, "open", "calc.exe", NULL, NULL, SW_SHOW);                   // 打开计算器

    ......

2    HWND hWnd = ::FindWindow("SciCalc", NULL);                                                 // 获取计算器句柄

    ......

3    HWND hButton = ::GetDlgItem( hWnd, 0x7f);             // 获取计算器中按钮“3”的句柄,其中0x7f是按钮“3”的Control ID

4    ::SendMessage( hButton, WM_LBUTTONDOWN, MK_LBUTTON, NULL);  // 按下按钮“3”   

5    ::SendMessage( hButton, WM_LBUTTONUP, MK_LBUTTON, NULL);         // 松开按钮“3”,和上一步一起完成了一次点击

6    hButton = ::GetDlgItem( hWnd, 0x193);                                                                 // 获取计算器中文本显示框句柄

7    ::SendMessage( hButton, WM_GETTEXT,255, (LPARAM)(LPCTSTR)str);    // 获取计算器中文本框显示的内容

8    m_Edit.SetWindowText(str);                                                                                  // 在我的工程中显示计算器的文本框内容

 

 

       运行效果如下图所示。

 

     

 

虽然实现了功能,但是还有一些问题:

1、我想把第1句和第2句放在一起,都搁在OnInitDialog中,计算器是打开了,但是并没有获取计算机句柄,跟踪了一下,发现执行获取句柄这句时,tst这个对话框还没有出现,猜想是否tst还不能执行获取句柄这句?

2、我将第1句的最后一个参数换成SW_HIDE,但是运行后还是会出现计算器这个对话框,不知道为何?

这些问题还要探索一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值