资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言鼠标功能函数 c语言鼠标操作

c语言如何实现控制鼠标

可以,需要调用windowsAPI函数。

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

头文件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语言:鼠标和键盘函数的相关问题

首先最简单的但可以后台处理的有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语言怎样用鼠标控制播放一首歌?

你是想问通过控制鼠标操作播放器播放歌(类似按键精灵那样重复用户操作)。还是直接播放音乐文件。

两种都需要window API支持。

一、直接播放文件,可用函数playSound,头文件windows.h和mmsystem.h。(注意不是支持所有文件格式)。

二、控制鼠标模拟操作:

1、鼠标点击操作可用SendInput函数或keybd_event函数。

2、鼠标移动可用SetCursorPos或mouse_event。

三、通过FundWindow函数获取播放软件的窗口句柄,再通过FindWindowEx遍历窗口下所有控件,直接对窗口控件发送消息。

C语言什么函数能发送鼠标移消息?postmessage能吗

可以

B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

关于后两个类型:

typedef UINT WPARAM;

typedef LONG LPARAM;

都是4字节

hWnd--要发给的程序句柄

Msg:

Msg=WM_MOUSEMOVE..鼠标移动事件

wParam:

MK_CONTROL ctrl键按下.

MK_LBUTTON 鼠标左键键按下.

MK_MBUTTON 鼠标中间键按下.

MK_RBUTTON 鼠标右键按下.

MK_SHIFT shift键按下.

lParam--高位当前鼠标y坐标,低位当前鼠标x坐标

比如给句柄为hWnd的程序队列发送一个鼠标移动信息,同时鼠标左键和中间处于按下状态,鼠标坐标为(120,100)

PostMessage(hWnd, WM_MOUSEMOVE ,MK_LBUTTON|MK_MBUTTON,(16100)|120);

如果是要发送数据,然后你在程序端自己处理的话,推荐用sendmessage函数,因为PostMessage只是把消息发送到程序的消息队列去,程序自动处理.就是说,如果接收消息的程序是你自己写,用sendmessage就可以,如果是别人写的程序,你要仿真一个事件给那个程序,那么就用PostMessage

如果用

SendMessage(Hwnd, WM_MOUSEMOVE , x, y);

其中

x:wParam,取值范围

MK_CONTROL Set if the ctrl key is down.

MK_LBUTTON Set if the left mouse button is down.

MK_MBUTTON Set if the middle mouse button is down.

MK_RBUTTON Set if the right mouse button is down.

MK_SHIFT Set if the shift key is down.

y:lParam,鼠标的坐标

xPos = LOWORD(lParam); //horizontal position of cursor

yPos = HIWORD(lParam); //vertical position of cursor

你就可以在程序里重载虚函数LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)

switch(message)

{

case WM_MOUSEMOVE:

//写你要在鼠标移动时做的处理

break;

.....

}

CDialog::WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);

}

CDialog::WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);是MFC自己的处理函数,最好加上,不然会很麻烦

很简单的SendMessage和postmessage一样使用方法


名称栏目:c语言鼠标功能函数 c语言鼠标操作
网页URL:http://cdkjz.cn/article/hpepse.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220