首页
社区
课程
招聘
[求助]如何封装这段代码,如何传递参数是关键问题,请指教
发表于: 2015-3-15 10:59 4191

[求助]如何封装这段代码,如何传递参数是关键问题,请指教

2015-3-15 10:59
4191
#define GWL_MOVE         (20001)  //自定义一个消息

HWND handle;
LONG lwndProc;

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        if (uMsg == GWL_MOVE)
        {
                MoveTo(200, 300);//这里是需要让主线程执行的函数,
                SetWindowLong(handle, GWL_WNDPROC, lwndProc); //设置回原来的函数,不然的话,窗口收不到消息了。。
        }
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

void PostThreadCall()
{
        handle = ::FindWindowA(NULL, "窗口名称");
        if (handle != 0)
        {
                lwndProc = ::GetWindowLong(handle, GWL_WNDPROC);   //保存原地址
                SetWindowLong(handle, GWL_WNDPROC, (LONG)WndProc);  //设置回调函数
                SendMessage(handle, GWL_MOVE, 0,0);
        }
}

这段代码是主线程执行代码的源码,我想封装起来,方便调用
封装效果如:
PostThreadCall("MoveTo",x,y)
第一个参数:函数名称(字符串)
后面是函数的参数

要求:
1、上面代码红色部分处执行需要调用的函数
2、执行的参数和函数参数都通过外部参数传入
3、要执行的函数参数个数不确定,所以封装的参数需要设置成可变参数

问题:
1、sendmessage如何传递多个参数
2、可变参数如何确定到底传入了几次参数
3、PostThreadCall("MoveTo",x,y)中第一个参数如何解释出来并执行。

我是看到别人这样封装的觉得很不错,所以想自己封装出来,求大神指教

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
public int (char[],...)
2015-3-15 11:35
0
雪    币: 22
活跃值: (458)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用结构体....
2015-3-15 12:08
0
雪    币: 200
活跃值: (38)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
用c++11的可变参数模板就可以了
2015-3-15 17:24
0
雪    币: 459
活跃值: (398)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
同意,传个结构体指针过去,想多少参数就多少,自己定义好
struct param
{
     int paramcount;
     int type;//对应不同功能
     //下面自己扩展
}
2015-3-15 18:08
0
雪    币: 4941
活跃值: (2370)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
结构体怎么是想传多少就传多少呢?
2015-3-15 18:30
0
雪    币: 4941
活跃值: (2370)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
b哥,还有将字符串解析出来执行对应函数又该怎么搞呢
2015-3-15 18:31
0
雪    币: 459
活跃值: (398)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
传过去的只是一个指针地址嘛,四个字节,直接寻址找参数
2015-3-15 19:54
0
游客
登录 | 注册 方可回帖
返回
//