当前位置:首页 » 编程语言 » c语言鼠标无效
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言鼠标无效

发布时间: 2023-04-04 05:47:19

① 用VC6.0编写c语言程序的时候,鼠标光标会消失,怎么回事

呃,兄弟,真心鄙视你还在用VC6.0。
好吧,若干年之前,记得从来没出现过你说的那种情况。
建议你检查一下系统的配置是不是有问题。
没道理只是写C的时候鼠标唯链消失吧,到底是消失还是隐藏鼠标,还有的就是,是写敬拆代码的时候鼠标会消失还是一直都没有指稿孙鼠标指针,你说清楚点啊。

② 求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语言在控制台清屏之后鼠标定位就不行了怎么办

楼主你好。
是因为程序卡在这里了:
Y=(int)pos.Y;
if
(inRec.EventType
==
MOUSE_EVENT
&&
inRec.Event.MouseEvent.dwButtonState
==
FROM_LEFT_1ST_BUTTON_PRESSED&&Y<=3&&Y>=1)
//鼠标左键
break;
这里无法break出来。原因是Y<=3&&Y>=1这个条件无法满足。
程序还在调试中。
【旧租粗启代码省略】
以上调试程序可以看到只要不system("cls")就可以持续读入鼠标事件,但是只要取消system("cls")的注释,在清屏一次之后就会无法读入鼠标事件,程序卡在ReadConsoleInput处,只能读入键盘和聚焦事件什么的。暂时分析到这里。
我用clrscr()代替system("cls")成功了!(clrscr你可以查查网络)
#include
<windows.h>
#include
<conio.h>
#include
<stdlib.h>
#include
<stdio.h>
#define
PERR(bSuccess,
api){if(!(bSuccess))
printf("%s:Error
%d
from
%s
on
line
%d\n",
__FILE__,
GetLastError(),
api,
__LINE__);}
void
MyCls(HANDLE)
;
void
clrscr(void)
{
HANDLE
hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
MyCls(hStdOut);
return;
}
void
MyCls(HANDLE
hConsole)
{
COORD
coordScreen={0,0};//设置清屏后光标返回的屏幕左上角坐标
BOOL
bSuccess;
DWORD
cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO
csbi;//保存缓冲区信息
DWORD
dwConSize;//当前缓冲区可容纳的字符数
bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
PERR(bSuccess,"GetConsoleScreenBufferInfo");
dwConSize=csbi.dwSize.X
*
csbi.dwSize.Y;//缓冲区容纳字符数目
//凳扰用空格填充缓冲区
bSuccess=FillConsoleOutputCharacter(hConsole,(TCHAR)'
',dwConSize,coordScreen,&cCharsWritten);
PERR(bSuccess,"FillConsoleOutputCharacter");
bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
PERR(bSuccess,"ConsoleScreenBufferInfo");
//填充弊如缓冲区属性
bSuccess=FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,coordScreen,&cCharsWritten);
PERR(bSuccess,"FillConsoleOutputAttribute");
//光标返回屏幕左上角坐标
bSuccess=SetConsoleCursorPosition(hConsole,coordScreen);
PERR(bSuccess,"SetConsoleCursorPosition");
return;
}
void
main()
{
int
fh();
int
ret;
HANDLE
hInput
=
GetStdHandle(STD_INPUT_HANDLE);;
//
获取标准输入设备句柄
for(;;)
{
printf("请点击鼠标左键\n");
ret
=
fh(hInput);
printf("%d\n",ret);
Sleep(200);
clrscr();
}
}
int
fh(HANDLE
hInput)
{
INPUT_RECORD
inRec;
DWORD
res;
int
Y;
COORD
pos
=
{0,
0};
for(;;)
{
ReadConsoleInput(hInput,
&inRec,
1,
&res);
pos
=
inRec.Event.MouseEvent.dwMousePosition;
Y=(int)pos.Y;
if
(inRec.EventType
==MOUSE_EVENT
&&inRec.Event.MouseEvent.dwButtonState
==
FROM_LEFT_1ST_BUTTON_PRESSED){
//鼠标左键
break;
}
}
return
Y;
}

④ C语言鼠标操作

我之前给别人写过一个打地鼠的小游戏,就是用鼠标操作的。发给你参考下。代码很简单。

主要函数我在下方说明了,但更多信息你必须自己网络看,一言两语说不完。

SetConsoleCursorPosition函数可以定位光标位置,也就是文字内容显示的起点。

ReadConsoleInput(HANDLE hConsoleInput,*INPUT_RECORD lpBuffer,DWORD nLength,
DWORD lpNumberOfEventsRead)函数可以获取鼠标的操作信息。

调用过上面函数后,lpBuffer由于是传址,所以其地址里的值就包含了鼠标信息。

lpBuffer.EventType == MOUSE_EVENT //判断是鼠标事件

lpBuffer.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED//判断是鼠标左键点击

两个判断一起就是鼠标左键点击的判断,其他事件参数你可以自己网上找。

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string.h>
#include<malloc.h>
#definegSizek30//区域大小宽度
#definegSizeg20//区域大小高度
#definegBegin3//活动区域起始行
intmain()
{
intt=0,s0,s1,i,j,count=0,fen=0,row=0,clo=0;
chargameA[gSizeg][gSizek+1],fSave[10]={0};
SetConsoleTitle("打地鼠");
HANDLEhInput=GetStdHandle(STD_INPUT_HANDLE);//获取标准输入设备句柄
INPUT_RECORDinRec;
DWORDres;
COORDp0;
p0.X=0;
p0.Y=0;

srand(time(0));
s0=time(NULL);
strcpy(gameA[0],"GAME");
strcpy(gameA[1],"未命中次数:0,计分:000000");
for(i=gBegin-1;i<gSizeg;i++)
{
for(j=0;j<gSizek+1;j++)
{
if(i>gBegin-1&&i<gSizeg-1&&j>0&&j<gSizek-1)
gameA[i][j]='';
else
gameA[i][j]=4;
if(j==gSizek)
gameA[i][j]=0;
}
}
for(i=0;i<gSizeg;i++)
printf("%s ",gameA[i]);

while(1)
{

if(t>=3)
{
if(row>0&&clo>0)
gameA[row][clo]='';
row=rand()%(gSizeg-1);
clo=rand()%(gSizek-1);
s0=time(NULL);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);

if(row<3)
row=4;
if(clo<1)
clo=1;
gameA[row][clo]=2;
for(i=0;i<gSizeg;i++)
{
//gameA[i][gSizeg+1]=0;
printf("%s ",gameA[i]);
}

}
if(count==3)
{
p0.X=10;
p0.Y=8;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0);
printf("GAMEOVER!");
break;
}
s1=time(NULL);
t=s1-s0;
ReadConsoleInput(hInput,&inRec,1,&res);
if(inRec.EventType==MOUSE_EVENT&&inRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)//鼠标左键
{
if(inRec.Event.MouseEvent.dwMousePosition.X==clo&&inRec.Event.MouseEvent.dwMousePosition.Y==row)
{

if(fen==0)
fen=1;
if(fen>999999)
fen=999999;
else
fen=fen*2;

sprintf(fSave,"%06d",fen);
gameA[1][18]=0;
strcat(gameA[1],fSave);
}
else
{
count++;
fen=0;
gameA[1][11]=count+'0';
}
t=4;
}
}
while(1);
return0;
}

⑤ C语言运行后,想要在新出来的dos窗口中复制word文档的数据,该如何做 鼠标右击无效,ctrl+v无效,拜托了

鼠标右键点窗口 出来菜单 点粘贴

或者鼠标左键点窗口左铅搏上角槐迅祥的图标 然后相应选昌谨择 编辑...粘贴

⑥ 二级c语言安装完打不开 鼠标转圈圈 然后没反应

右击其快捷方式,点击“属性 - 兼容性”,设置Windows XP兼容,确定。再次打开

⑦ win10中c语言无法响应鼠标函数

在控制台窗口,点击鼠标右键,选择属性,将瞎毕简选项中的“快速编辑模式(Q)磨裤”关掉,
并选择旧版数仿控制台,重新启动即可。

⑧ c语言如何实现控制鼠标

可以,需要调用windowsAPI函数。
头文件windows.h。
简单思路:
通过GetStdHandle获取标准输入句柄。
再通过ReadConsokeInput将输入信息存储到结构体类型INPUT_RECODE变量中。
再通过判断,截取到鼠标电击的事件。
具体API函数、参数、功能还有很多。需要网上找资料可以学。
我这里就简单写一个,鼠标点击控制台任意位置,并在该位置打印字符串。

#include<stdio.h>
#include<windows.h>
intmain()
{
HANDLEhInput=GetStdHandle(STD_INPUT_HANDLE);//获取标准输入设备句柄
INPUT_RECORDinRec;
DWORDres;
COORDp0;
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("你在这里点击的左键 ");
}
}

return0;
}

⑨ C语言 鼠标问题

你哪里不明白

⑩ c语言鼠标中断程序

没有show函数吧