本文目录一览:
用C语言怎么判断鼠标在窗口的位置?
用API函数GetCursorPos()可以得到鼠标现在的位置:
//---------------------------------------------------------------------------
#include stdio.h
#include windows.h
int main(void)
{
POINT pt;
GetCursorPos(pt);
printf("%ld %ld\n",pt.x,pt.y);
return 0;
}
//---------------------------------------------------------------------------
C语言在控制台清屏之后鼠标定位就不行了怎么办
楼主你好。
是因为程序卡在这里了:
Y=(int)pos.Y;
if
(inRec.EventType
==
MOUSE_EVENT
inRec.Event.MouseEvent.dwButtonState
==
FROM_LEFT_1ST_BUTTON_PRESSEDY=3Y=1)
//鼠标左键
break;
这里无法break出来。原因是Y=3Y=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语言里怎么定位光标
设置CMD窗口光标位置
void setxy(int x, int y) //x,y为光标座标
{
COORD coord = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
c语言鼠标定时点击指定位置
c语言鼠标定时点击指定位置需要模拟鼠标在远程桌面中进行移动。定时模拟点击屏幕坐标位置工具,程序采用c语言编写,可以自定义设置时间,设置屏幕坐标,到时间鼠标会自动根据坐标的位置点击一次。