BOOL CConghuiDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{ switch (pMsg->wParam)
{
case VK_F2:
LPPOINT lpPoint;
::GetCursorPos(lpPoint);
int xPos,yPos;
xPos = lpPoint->x ;
yPos = lpPoint->y ;
// HWND hwnd = ::GetTopWindow(NULL);
// ::SendMessage(hwnd,WM_LBUTTONDOWN,0,MAKELONG(xPos,yPos));
// ::SendMessage (hwnd,WM_LBUTTONUP,0,MAKELONG(xPos,yPos));
::SetCursorPos(xPos,yPos);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
}编译没有问题运行时报内存错误,不能为读,为什么啊?
以上两种发送消息的函数结果都一样。
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{ switch (pMsg->wParam)
{
case VK_F2:
LPPOINT lpPoint;
::GetCursorPos(lpPoint);
int xPos,yPos;
xPos = lpPoint->x ;
yPos = lpPoint->y ;
// HWND hwnd = ::GetTopWindow(NULL);
// ::SendMessage(hwnd,WM_LBUTTONDOWN,0,MAKELONG(xPos,yPos));
// ::SendMessage (hwnd,WM_LBUTTONUP,0,MAKELONG(xPos,yPos));
::SetCursorPos(xPos,yPos);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
}编译没有问题运行时报内存错误,不能为读,为什么啊?
以上两种发送消息的函数结果都一样。
解决方案 »
- C_BUTTON27' : undeclared identifier
- 在获取视频窗体最小化或为不可见时为什么就无法获取图像了呢?
- 如何获取树形控件里选中项目的完整路径?
- 有点难度的问题,高手止步
- 如何快速获取一个指定的文件夹中所有文件(包含子目录)的信息。(2万个文件以上)
- 我建了一个单文档工程,每次运行时弹出来的框总是比较小。怎么设置让它最大弹出来。
- 文件格式有错
- 如何在已经创建好的SDI程序中加入一个登录框,它的要求是:
- <程序员大本营〉代码 VisualFx: CFormView,CListView 通讯问题
- 如何从指定的路径中加入一个位图文件,然后把它显示在列表控件中
- 在已加载位图的PICTURE控件上画图
- opengl贴图因显卡不同
if (pMsg->message == WM_KEYDOWN)
{ switch (pMsg->wParam)
{
case VK_F2:
{
CPoint pt;
GetCursorPos(&pt);
int xPos,yPos;
xPos = pt.x ;
yPos = pt.y ; ::SetCursorPos(xPos,yPos);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
lz,你的函数没有返回值,参看二楼VisualEleven,另外如果只有一种case,就别用switch 了,switch 语句里定义变量容易出错,你的switch 好像也没有default情况
问题应该出在返回值上。
但是我的函数有返回值的就是最后的这句return Dialog::PreTranslateMessage(pMsg); 返回CDialog基类的函数返回值。由于太长了,我上次没有黏贴。
看来是switch结构需要返回值了,以前用时没有返回值也都正常。莫非C++升级了?
LPPOINT lpPoint;//没分配内存
::GetCursorPos(lpPoint);
可改成
POINT pt;//没分配内存
::GetCursorPos(&pt);
.
.
.
BOOL CMonimosueDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{switch (pMsg->wParam)
{
case VK_F2:
{
CPoint pt;
GetCursorPos(&pt);
int xPos,yPos;
xPos = pt.x ;
yPos = pt.y ;
// HWND hwnd = ::GetTopWindow(NULL);
// ::SendMessage(hwnd,WM_LBUTTONDOWN,0,MAKELONG(xPos,yPos));
// ::SendMessage (hwnd,WM_LBUTTONUP,0,MAKELONG(xPos,yPos));
::SetCursorPos(xPos,yPos);
if(i==1)
{
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
::Sleep (1000);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
}case VK_F3:
{
i=1;
break;
}
return true;
}
//return TRUE;}
return CDialog::PreTranslateMessage(pMsg);
}
我设置了全局变量i,我想当我按下F3后再按F2才模拟鼠标单击,可是运行时发现,只要多按几次F2键就模拟鼠标单击了,根本不用先按F3键,为什么呢?当我按下F3再按F2有时会新启动一个当前的进程这又是什么原因啊?
里多加了个break;
现在好了,什么道理?
case x:
//fall through
//break;
代码会一下往下面运行的,case VK_F3也会执行的,下面有多少代码,都全执行,不管有多少 case,如果没有break,就按代码一直往下执行....\汗一个
游戏有驱动保护的
相关的API会被HOOK掉按键精灵的模拟鼠标键盘用的是驱动实现
我认为加入break的目的主要是提高效率的,不影响程序运行结果。
case 'B':
case 'C':
... do something....break;
case 'D':
....
自己这样去试 如果 你的switch那里,进来的是 A B C 都执行一样的动作,因为有break,所以 case 'D'
只有在进来的是 'D' 才执行