c语言mouse函数 c语言mousehit

关于C语言鼠标驱动程序(高手请仔细看)

设置鼠标的光标形状

我们提供的服务有:网站设计制作、成都网站建设、微信公众号开发、网站优化、网站认证、宁波ssl等。为成百上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的宁波网站制作公司

设置鼠标光标需要三个方面信息:

鼠标的外边界:8*8点阵,16个整数

鼠标的内部形状:8*8点阵,16个整数

以及鼠标的热点的相对坐标:int x,y

其中外边界和内边界连续存放,为长度为32的整型数组 int marks[32] SetCurs(unsigned masks[32],x,y)

{ union REGS regs; struct SREGS sregs;

regs.x.ax=9;

regs.x.bx=x; regs.x.cx=y;/* hot spot*/

regs.x.dx=(unsigned)masks;

segread(sregs); int86(0x33,(r)gs,(r)gs);

}

一些不同形状的光标数据:

//mouse

{0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,

0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, //Cursor mask

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x13c0,

0x3ff0, 0x7ff8, 0xfff8, 0xfff8, 0x0824, 0x0822, 0x1ce2, 0x0000},

//empty hand

{0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,

0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,

0x0c00, 0x1200, 0x1200, 0x1200, 0x13fe, 0x1249, 0x1249, 0x1249,

0x7249, 0x9001, 0x9001, 0x9001, 0x8001, 0x8001, 0x4002, 0x3ffc},

//full arrow

{0x3fff, 0x1fff, 0x0fff, 0x07ff, 0x03ff, 0x01ff, 0x00ff, 0x007f,

0x003f, 0x00ff, 0x01ff, 0x10ff, 0x30ff, 0xf87f, 0xf87f, 0xfc3f,

0x0000, 0x4000, 0x6000, 0x7000, 0x7800, 0x7c00, 0x7e00, 0x7f00,

0x7f80, 0x7e00, 0x7c00, 0x4600, 0x0600, 0x0300, 0x0300, 0x0180},

//full hand

{0xf3ff, 0xe1ff, 0xe1ff, 0xe1ff, 0xe001, 0xe000, 0xe000, 0xe000,

0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8001, 0xc003,

0x0c00, 0x1200, 0x1200, 0x1200, 0x13fe, 0x1249, 0x1249, 0x1249,

0x7249, 0x9001, 0x9001, 0x9001, 0x8001, 0x8001, 0x4002, 0x3ffc}

};

Point hotspot[]={{0,11},{4,0},{0,0},{4,0}};/*热点*/

C语言是怎样实现鼠标事件控制的?可不可以用纯C做?

可以,需要调用windowsAPI函数。

头文件windows.h。

简单思路:

通过GetStdHandle获取标准输入句柄。

再通过ReadConsokeInput将输入信息存储到结构体类型INPUT_RECODE变量中。

再通过判断,截取到鼠标电击的事件。

具体API函数、参数、功能还有很多。需要网上找资料可以学。

我这里就简单写一个,鼠标点击控制台任意位置,并在该位置打印字符串。

#include stdio.h

#include windows.h

int main()

{

HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄

INPUT_RECORD inRec;

DWORD res;

COORD p0;

while(1)

{

ReadConsoleInput(hInput, inRec, 1, res);

if (inRec.EventType == MOUSE_EVENT  inRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //鼠标左键

{

p0.X=inRec.Event.MouseEvent.dwMousePosition.X;

p0.Y=inRec.Event.MouseEvent.dwMousePosition.Y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);

printf("你在这里点击的左键\n");

}

}

return 0;

}

C语言openCV鼠标选点void on_mouse函数的写法,急!!!!!

Int pointX;

int pointy;//全局

void on_mouse( int event, int x, int y, int flags,void* param)

{

pointX = x;

pointy = y;

...

}

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语言mouse函数 c语言mousehit
标题来源:http://scyanting.com/article/ddspgss.html