SetWindowLong修改窗口过程后能否在内部实现窗口操作?

assicen 2010-07-13 03:43:31
首先使用SetWindowLong指向自己的过程MyMsgProc 然后在自己的过程中监听键盘的WM_KEYDOWN事件后 鼠标移动到0x100 0x100 按下面的代码写失败了 求解~~~~~~~


WNDPROC OldMsgProc=(WNDPROC)SetWindowLong (hwnd, GWL_WNDPROC, (LONG)MyMsgProc);


LRESULT MyMsgProc(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam)
{
if(message==WM_KEYDOWN)
{
OldMsgProc(hwnd,WM_MOUSEMOVE,0,0x01000100);
CallWindowProc(OldMsgProc,hwnd,WM_MOUSEMOVE,0,0x01000100);
}
return CallWindowProc(OldMsgProc,hwnd,message,wParam,lParam);
}
...全文
256 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishion 2010-07-15
  • 打赏
  • 举报
回复
不过如果是捐控制鼠标移动的话还是用SetCursorPos吧
fishion 2010-07-15
  • 打赏
  • 举报
回复
LRESULT MyMsgProc(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam)
{
if(message==WM_KEYDOWN)
{
OldMsgProc(hwnd,WM_MOUSEMOVE,0,0x01000100);
return CallWindowProc(OldMsgProc,hwnd,WM_MOUSEMOVE,0,0x01000100);
}
return CallWindowProc(OldMsgProc,hwnd,message,wParam,lParam);
}
Eleven 2010-07-15
  • 打赏
  • 举报
回复
你要移动鼠标就用mouse_event吧
wltg2001 2010-07-14
  • 打赏
  • 举报
回复
OldMsgProc(hwnd,WM_MOUSEMOVE,0,0x01000100);
CallWindowProc(OldMsgProc,hwnd,WM_MOUSEMOVE,0,0x01000100);
==================
前面一句OldMsgProc(hwnd,WM_MOUSEMOVE,0,0x01000100);应该去掉吧
wltg2001 2010-07-13
  • 打赏
  • 举报
回复
SetWindowLong只能处理自己进程内的窗口的消息处理函数,对于别的进程的窗口这种做法是无效的,Win32程序不能跨进程访问内存,所以你写的函数地址,对外部进程是无效的。
zjfhgdx 2010-07-13
  • 打赏
  • 举报
回复
你是要修改别人程序是的控件过程还是自己的?

如果是自己的,
你可以先自己继承一个控件,然后重载你想修改的消息或虚函数
然后子类化你对话框上的这个控件。
m_MyCtl.SubclassDlgItem(IDC_EDIT1, this);
m_MyCtl是你自己写的控件。
这样被子类化的控件就会按你的过程动作了。
assicen 2010-07-13
  • 打赏
  • 举报
回复
如果我修改目标窗口的处理过程 用SetWindowLong肯定指向的是他程序内部的一个指针 否则目标窗口早就崩溃了

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧