CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  Windows SDK/API

鼠标位置的奇怪问题!

楼主vick(古来圣贤皆寂寞,唯有淫贼留其名)2003-12-04 10:51:07 在 C++ Builder / Windows SDK/API 提问

我依次在两个位置按下某个键,键盘钩子会自动纪录这两个位置的坐标(tagPOINTpt;getcursorpos(&pt,纪录pt.x,pt.y))  
  然后再按某个键,自动依次在这两个位置释放鼠标左键点击消息()setcursorpos(pt.x,pt.y),为什么每次点击的坐标和纪录是的坐标相差有点大呢?  
   
  我是把pt.x,pt.y(long)保存在一struct里面。 问题点数:100、回复次数:9Top

1 楼heng2003(哼哼)回复于 2003-12-04 11:14:04 得分 20

代码呢?  
  Top

2 楼ljianq(泉深水清)回复于 2003-12-04 11:18:34 得分 20

你将坐标都转换为屏幕坐标试试。Top

3 楼heng2003(哼哼)回复于 2003-12-04 11:19:53 得分 40

简单写一个钩子函数  
  long   CALLBACK   KeyProc(int   code,   WPARAM   wParam,   LPARAM   lParam)  
  {  
            static   TPoint   pt;   //用静态变量  
            KBDLLHOOKSTRUCT   *key   =   (KBDLLHOOKSTRUCT*)lParam;  
            if(key->vkCode   ==   VK_CONTROL||key->vkCode   ==   VK_LCONTROL   ||   key->vkCode   ==   VK_RCONTROL){   //当按下control   键   ,记录鼠标位置  
                  GetCursorPos(&pt);  
            }  
            if(key->vkCode   ==   VK_RETURN){  
                  SetCursorPos(pt.x,pt.y);   //按下回车,回复记录的鼠标位置  
            }  
            return   CallNextHookEx(OldHook,code,wParam,lParam);  
  }Top

4 楼constantine(飘遥的安吉儿)回复于 2003-12-04 11:20:47 得分 20

你要的是什么的坐标啊?说得很不清楚。有没有坐标转换啊,比如是FORM上的到SCREEN  
  最好有代码看,比较清楚。Top

5 楼vick(古来圣贤皆寂寞,唯有淫贼留其名)回复于 2003-12-04 11:48:24 得分 0

取坐标:  
  if   (mark==1)  
                                      {  
                                          tagPOINT   cpoint;  
                                          GetCursorPos(&cpoint);  
                                          pcik_struct   pos;  
                                          pos.xpos   =   cpoint.x;  
                                          pos.ypos   =   cpoint.y;  
                                          pfile   =   fopen(fname,"r+");  
                                          if   (pfile   ==   NULL)  
                                          {  
                                                pfile   =   fopen(fname,"w+");  
                                                fclose(pfile);  
                                                pfile   =   fopen(fname,"r+");  
                                          }  
                                          fseek(pfile,0L,SEEK_SET   );  
                                          fwrite(&pos,sizeof(pos),1,pfile);  
                                          fclose(pfile);  
                                            mark++;  
                                            return   1;  
                                    }  
                                    if   (mark==2)  
                                    {  
                                          tagPOINT   cpoint;  
                                          GetCursorPos(&cpoint);  
                                          pcik_struct   pos;  
                                          pos.xpos   =   cpoint.x;  
                                          pos.ypos   =   cpoint.y;  
                                          pfile   =   fopen(fname,"r+");  
                                          if   (pfile   ==   NULL)  
                                          {  
                                                pfile   =   fopen(fname,"w+");  
                                                fclose(pfile);  
                                                pfile   =   fopen(fname,"r+");  
                                          }  
                                          fseek(pfile,sizeof(pos),SEEK_SET   );  
                                          fwrite(&pos,sizeof(pos),1,pfile);  
                                          fclose(pfile);  
                                          mark   =   0;  
                                          return   1;  
                                }  
   
  在以上纪录的两个位置依次释放鼠标左键点击信息:  
  if   (mark   ==   0)   //执行秒杀  
                                    {  
                                            pfile   =   fopen(fname,"r");  
                                            if   (pfile==NULL)  
                                            {  
                                                  MessageBox(FindWindow(NULL,NULL),"没有设置参数,请重新设置!","破天一剑秒:",MB_OK);  
                                                  return   1;  
                                            }  
                                            pcik_struct   pos1,pos2;  
                                            fseek(pfile,0L,SEEK_SET);  
                                            int   temp   =   fread(&pos1,1,sizeof(pos1),pfile);  
                                            if   (temp!=sizeof(pos1))  
                                            {  
                                                  MessageBox(FindWindow(NULL,NULL),"读参数出错!","破天一剑秒:",MB_OK);  
                                                  fclose(pfile);  
                                                  return   1;  
                                            }  
                                            fclose(pfile);  
                                            pfile   =   fopen(fname,"r");  
                                            if   (pfile==NULL)  
                                            {  
                                                MessageBox(FindWindow(NULL,NULL),"没有设置参数,请重新设置!","破天一剑秒:",MB_OK);  
                                                return   1;  
                                            }  
                                            fseek(pfile,sizeof(pos1),SEEK_SET);  
                                            temp   =   fread(&pos2,1,sizeof(pos2),pfile);  
                                            if   (temp!=sizeof(pos2))  
                                            {  
                                                MessageBox(FindWindow(NULL,NULL),"读参数出错!","破天一剑秒:",MB_OK);  
                                                fclose(pfile);  
                                                return   1;  
                                            }  
                                            tagPOINT   pt;  
                                            GetCursorPos(&pt);  
                                            Sleep   (30);  
                                            SetCursorPos(pos1.xpos,   pos1.ypos);  
                                            //Sleep   (30);  
                                            //SetCursorPos(280,   527);  
                                            mouse_event(MOUSEEVENTF_LEFTDOWN,   0,   0,   0,   0);  
                                            Sleep   (50);  
                                            mouse_event(MOUSEEVENTF_LEFTUP,   0,   0,   0,   0);  
                                            Sleep   (50);  
                                            SetCursorPos(pos2.xpos,   pos2.ypos);  
                                            //SetCursorPos(320,   558);  
                                            //Sleep   (50);  
                                            mouse_event(MOUSEEVENTF_LEFTDOWN,   0,   0,   0,   0);  
                                            Sleep   (50);  
                                            mouse_event(MOUSEEVENTF_LEFTUP,   0,   0,   0,   0);  
                                            Sleep   (30);  
                                            SetCursorPos(pt.x,   pt.y);  
                                            Sleep   (30);  
                                            return   1;  
                                          //MessageBox(FindWindow(NULL,NULL),"ss","a   text   message   from   a   dll   class",MB_OK);  
                                      }  
  Top

6 楼vick(古来圣贤皆寂寞,唯有淫贼留其名)回复于 2003-12-04 11:53:40 得分 0

而且我这个执行纪录、释放左键消息都是在游戏中执行的,我试了一下,在窗口、屏幕情况下都没有问题,但是如果有输入框等一些子控件就会产生偏差。  
   
  怎么在屏幕坐标和窗口坐标之间转换?  
  如果要转换,那么取得游戏窗口的句柄怎么取?Top

7 楼ljlln(阿明)回复于 2003-12-04 16:39:57 得分 0

GetCursorPos(&pt);  
  ScreenToClient()   ;Top

8 楼goneaway1981(当我们踏上征程)回复于 2003-12-06 11:54:42 得分 0

好像是外挂,呵呵~~~~~  
   
  Top

9 楼yjy1001(蓝鲸--优秀得郁闷的鱼)回复于 2003-12-06 13:41:54 得分 0

..........外挂?!  
      可惜身边   没有对游戏感兴趣的家伙,要不   早拉他们开发   外挂去了~!^Q^Top

相关问题

  • 鼠标的位置
  • 检测鼠标位置!
  • 关于鼠标位置
  • 鼠标位置问题?
  • *********鼠标位置限定**************
  • 关于鼠标位置
  • WIN98里奇怪的鼠标的光标!!!???
  • 奇怪问题:水晶报表的图表显示不出来.把鼠标放到该位置,只出现"Chart"字样
  • 鼠标悬停时怎么获得鼠标的位置?(很急!)
  • 怎么样得到鼠标的位置??

关键词

  • 坐标
  • 鼠标
  • 转换
  • null
  • pfile
  • cpoint
  • vkcode
  • pcik
  • getcursorpos
  • pt

得分解答快速导航

  • 帖主:vick
  • heng2003
  • ljianq
  • heng2003
  • constantine

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo