c语言获取鼠标信息的函数 c语言获取鼠标位置

c语言如何获取鼠标键盘信息

我估计你分数给的在高也没人回答。来个这样的代码太麻烦了。而且百度金币用处也不大。

专注于为中小企业提供网站建设、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业双峰免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

不过,我可以写几个鼠标函数给你参考一下。

首先了解一下鼠标的中断。

_ax=0x01

表示显示光标

_ax=0x02

停止显示光标

_ax=0x03

读取光标位置与案件

_ax=0x04

设置光标位置

所以啊。根据这四个中断,有以下几个函数

----------------------------------------------------

void

mouseon(void)//鼠标光标显示

{

_ax

=

0x01;

geninterrupt(0x33);

}

----------------------------------------------------

void

mouseoff(void)//鼠标光标隐藏

{

_ax

=

0x02;

geninterrupt(0x33);

}

---------------------------------------------------

void

mousesetxy(int

x,int

y)//设置当前位置

{

_cx

=

x,

_cd

=

y;

_ax

=

0x04;

geninterrupt(0x33);

}

---------------------------------------------------

int

leftpress(void)//鼠标左键按下

{

_ax

=

0x33;

geninterrupt(0x33);

return(_bx1);

}

-----------------------------------------------------

鼠标右键的应该也会了吧。不过要return(_bx2);

-----------------------------------------------------

void

mousegetxy(void)//得到当前位置

{

_ax

=

0x33;

geninterrupt(0x33);

mousex

=

_cx;

mousey

=

_dx;

}

---------------------------------------------------------------

最好要复制粘贴,打字打得手疼。

谁有c语言的鼠标操作函数集

分类: 电脑/网络 程序设计 其他编程语言

问题描述:

谁有c语言的鼠标操作函数集,越多越好

解析:

我给你个程序,里面涉及到鼠标操作,具体你可以下载《DOS编程大全》这本书,有关于鼠标的。

还不懂,加我QQ(先声明我也是菜鸟):***********。注明:C语言

#includedos.h

#includegraphics.h

#includeconio.h

#includestdio.h

union REGS regs;

int X__max,Y__max,x_max,y_max;

void Initgr(void) /*屏幕初始化成图形模式*/

{

int w,h,grdriver=DETECT,grmode;

registerbgidriver(EGAVGA_driver);

initgraph(grdriver,grmode,"");/*在双引号中可加你tc放的路径,但要在tc里有EGAVGA.BGI这个来初始图形*/

if(graphresult())/*若调用不成功,退出*/

{printf("\n 调用失败!\n");

exit(1);

}

X__max=getmaxx();/*求横向象点坐标数*/

Y__max=getmaxy();/*求纵向象点坐标数*/

getaspectratio(w,h);/*求纵横比*/

x_max=1000; /*设置屏幕坐标的宽度*/

y_max=x_max*(float)Y__max*h/((float)X__max*w);

}

int Msinit(int Xlo,int Xhi,int Ylo,int Yhi)/*鼠标初始化*/

{int retcode;

regs.x.ax=0;/*初始化鼠标*/

int86(0x33,regs,regs);

retcode=regs.x.ax;

if(retcode==0) return 0;

regs.x.ax=7;/*设置鼠标X方向的移动范围*/

regs.x.cx=Xlo;

regs.x.dx=Xhi;

int86(0x33,regs,regs);

regs.x.ax=8;/*设置鼠标Y方向的移动范围*/

regs.x.cx=Ylo;

regs.x.dx=Yhi;

int86(0x33,regs,regs);

regs.x.ax=15;/*设置mickey与象素的比,这各会影响鼠标移动速度*/

regs.x.cx=(int)(x_max/X__max);

regs.x.dx=(int)(y_max/Y__max);

int86(0x33,regs,regs);

return retcode;

}

int Msread(int *px,int *py,int *pbuttons)/*读鼠标位置及状态*/

{static int x0=320,y0=240,but0=0;

int xnew,ynew,ch;

do{

if(kbhit()){

ch=getch();

if(ch==13){

*pbuttons=1;

return -1;

}

else return ch; /*返回键盘输入*/

}

regs.x.ax=3; /*调用功能3,读鼠标位置及状态*/

int86(0x33,regs,regs);

xnew=regs.x.cx;/*返回鼠标当前的位置的X坐标*/

ynew=regs.x.dx;/*返回鼠标当前的位置的Y坐标*/

*pbuttons=regs.x.bx;/*返回鼠标当前的状态*/

}while(xnew==x0ynew==y0*pbuttons==but0);

/*当鼠标状态改变或位置改变终止循环*/

but0=*pbuttons;/*将鼠标状态保存到静态变量中*/

x0=xnew;y0=ynew;/*将鼠标位置保存到静态变量中*/

*px=xnew;*py=(int)(y_max-ynew);

return -1;

}

int Xpixel(int x)/*由象素坐标变换为屏幕坐标*/

{ return (int)((long)X__max*x/x_max);}

int Ypixel(int y)

{ return Y__max-(int)((long)Y__max*y/y_max);}

void Cursor(int x,int y) /*显示十字光标*/

{int X=Xpixel(x),Y=Ypixel(y),color;

char *str=" \0";

line(X-8,Y,X-3,Y);

line(X,Y-8,X,Y-4);

line(X+3,Y,X+8,Y);

line(X,Y+4,X,Y+8);

color=getcolor();

setcolor(BLACK);

outtextxy(X__max-100,10,str);/*删除前次显示值*/

sprintf(str,"%d,%d",x,y);

setcolor(WHITE);

outtextxy(X__max-100,10,str);/*在屏幕右上角显示当前光标的坐标*/

setcolor(color);

}

main()

{int buttons,X,Y,x,y,a,b;

char i;

Initgr();/*初始化图形屏幕*/

setcolor(EGA_LIGHTRED);/*设置屏幕前景色*/

line(1,1,X__max-1,1); /*在屏幕四周画一矩形*/

line(1,1,1,Y__max-1);

line(X__max-1,1,X__max-1,Y__max-1);

line(1,Y__max-1,X__max-1,Y__max-1);

setcolor(EGA_WHITE);

printf("\n 按鼠标右键终止程序\n");

printf(" 然后按任意键退出");

seritemode(XOR_PUT);/*设置屏幕输出模式*/

Msinit(0,(int)x_max,0,(int)y_max);/*初始化鼠标*/

a=x_max;b=y_max;

x=0;

Cursor(a,b); /*在a=x_max;b=y_max;处画指针*/

while(x!=2)

{Msread(X,Y,x);

Cursor(a,b); /*删除之前的鼠标,因为屏幕输出模式的关系*/

if(x==1){

a=(int)(X*1.0/x_max*X__max);b=(int)((y_max-Y)*1.0/y_max*Y__max);

circle(a,b,1); } /*画点*/

Cursor(X,Y);

a=X;b=Y;

}

Cursor(X,Y);/*再调用一次把原来的指针削掉*/

getch();

closegraph();

}

c语言:鼠标和键盘函数的相关问题

首先最简单的但可以后台处理的有SendMessage()PostMessage()

发送鼠标,

键盘消息,

这个百度一搜n多了

然后中等级的模拟就是keyboard_eventmouse_event了这个比较用的比较多,

给个例子你

模拟键盘点击void

Press(UINT

key)

{

keybd_event(key,MapVirtualKey(key,

0),0,0);

keybd_event(key,MapVirtualKey(key,

0),KEYEVENTF_KEYUP,0);

}

模拟

鼠标左键单击mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

这里注意调用

keyboard_event

的时候一定要用MapVirtualKey

网上大部分的代码都是没用的,

这个函数时获取

硬件扫描码

的先说下keybd_event();函数的参数keybd_event(要模拟按下的虚拟按键码,

虚拟按键码对应的硬件扫描码,0,0);网上的代码大部分都有

虚拟按键码,

当然你运行大部分都是没问题的,

因为对于一般的程序而言是没问题的但有的程序为了防止

外挂

或者

防止其他程序恶意修改什么的,会对

鼠标键盘

消息进行检测,

如果检测到没有硬件扫描码会拒绝执行的

然后还有比较高级的就是SendInput模拟了void

OnSendCharCode(unsigned

short

unicode

=

0,unsigned

short

vcode

=

0,bool

bDown

=

false,bool

bUnicode

=

true);

void

OnSendCharCode(unsigned

short

unicode,unsigned

short

vcode,bool

bDown,bool

bUnicode)

{

unsigned

short

uNum

=

0;

//

v-code

Clicked

INPUT

事件设定

KEYBDINPUT

kDown;

KEYBDINPUT

kUp;

if(!bUnicode)

{

//

'A';

(Virtual

Code

只有大写),

要输入小写

//

Enter:

13,

Backspace:

8,

Up:38

kDown.wVk

=

kUp.wVk

=

vcode;

kDown.wScan

=

kUp.wScan

=

::MapVirtualKey(kDown.wVk,0);

//kDown.dwFlags

=

KEYEVENTF_EXTENDEDKEY;

kUp.dwFlags

=

KEYEVENTF_KEYUP;

}else{

kDown.wVk

=

kUp.wVk

=

0;

kDown.wScan

=

kUp.wScan

=

unicode;

kDown.dwFlags

=

KEYEVENTF_UNICODE;

kUp.dwFlags

=

KEYEVENTF_UNICODE

|

KEYEVENTF_KEYUP;

}

//

建立

KeyDown

事件

建立

KeyUP

事件

INPUT

inputKeyDown,

inputKeyUP;

inputKeyDown.type

=

inputKeyUP.type

=

INPUT_KEYBOARD;

//

指定

input

keyboard

kDown.time

=

kUp.time

=

0;

//

the

system

will

provide

its

own

time

stamp.

kDown.dwExtraInfo

=

kUp.dwExtraInfo

=

(WORD)::GetMessageExtraInfo();

inputKeyDown.ki

=

kDown;//

指定

键盘

属性结构

inputKeyUP.ki

=

kUp;

//

指定

键盘

属性结构

//

v-code

Clicked

INPUT

事件设定完成

//

INPUT

事件送到

Root

视窗,

系统会根据视窗位置,送给目标视窗

if(bDown)

{

INPUT

event[1]

=

{inputKeyDown};

uNum

=

::SendInput(1,event,

sizeof(INPUT));

}else{

INPUT

event[2]

=

{inputKeyDown,inputKeyUP};

uNum

=

::SendInput(2,event,

sizeof(INPUT));

}

}

//例子:

OnSendCharCode(0,VK_SHIFT,true,false);

OnSendCharCode(0,'A',false,false);

OnSendCharCode(0,VK_SHIFT,false,false);

OnSendCharCode(0,'A',false,false);

//KEYEVENTF_UNICODE

能区分大小写

OnSendCharCode('A');

OnSendCharCode('a');

不过还是有很多游戏,它是用

DirectX

技术去做的,这些大部分对他们没用所以还有最最最高级的模拟,

就是

对硬件驱动程序的模拟这个有个外国人写的

winio.h

的头文件,

有兴趣可以去学,

一般用不到的,


当前标题:c语言获取鼠标信息的函数 c语言获取鼠标位置
分享地址:http://cdiso.cn/article/ddsshoe.html

其他资讯