#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)中第一个参数如何解释出来并执行。
我是看到别人这样封装的觉得很不错,所以想自己封装出来,求大神指教
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课