编程论坛
注册
登录
编程论坛
→
C语言论坛
求个条件循环命令
hm740604173
发布于 2021-08-16 10:39, 1163 次点击
例子:当我按住鼠标的中键不松时,循环输入键盘ABCABCABC,弹起鼠标中键时,结束ABC的循环
2 回复
#2
rjsp
2021-08-16 12:38
循环 输
入
键盘
ABCABCABC
听不懂,应该是“输
出
”吧,“键盘”不知道是什么意思
C语言中没有“鼠标”这个概念,因此纯C函数是做不到的,必须使用相应平台提供的功能。
给你一个 Windows 上的示例吧
程序代码:
#include
<cstdio>
#include
<windows.h>
int
main(
void
)
{
HANDLE hInput = GetStdHandle( STD_INPUT_HANDLE );
//
允许控制台输入鼠标信息
DWORD mode_save;
GetConsoleMode( hInput, &mode_save );
DWORD mode_new = (mode_save & ~ENABLE_QUICK_EDIT_MODE) | ENABLE_MOUSE_INPUT;
SetConsoleMode( hInput, mode_new );
//
检测 鼠标中键 是否按下
DWORD n;
for
( INPUT_RECORD record; ReadConsoleInput(hInput,&record,
1
,&n) && n==
1
; )
{
if
( record.EventType==MOUSE_EVENT && record.Event.MouseEvent.dwEventFlags==
0
&& (record.Event.MouseEvent.dwButtonState&FROM_LEFT_2ND_BUTTON_PRESSED)!=
0
)
break
;
}
//
检测 鼠标中键 是否释放
size_t loop=
0
;
for
( INPUT_RECORD record; PeekConsoleInput(hInput,&record,
1
,&n); )
{
putchar(
"
ABC
"
[loop++%
3
] );
if
( n==
1
&& record.EventType==MOUSE_EVENT && record.Event.MouseEvent.dwEventFlags==
0
&& (record.Event.MouseEvent.dwButtonState&FROM_LEFT_2ND_BUTTON_PRESSED)==
0
)
break
;
}
//
恢复控制台原先的设置
SetConsoleMode( hInput, mode_save );
}
#3
我善治鬼
2021-08-16 19:16
代码
程序代码:
#include
<stdio.h>
#include
<windows.h>
typedef
char
hotkey[
256
];
int
gethotkey(
char
组合键, hotkey 输出) {
int
i, j =
0
, state;
char
key[
256
] = {
0
};
while
(
1
) {
state = GetAsyncKeyState(组合键);
if
(state ==
0
&& j ==
0
)
continue
;
if
(state ==
0
)
break
;
for
(i =
1
; i <
256
; i++) {
if
(i == 组合键)
continue
;
state = GetAsyncKeyState(i);
//
按键第一次按下第0位和第15位值都为1, 按键持续按下第0位值为1第15位值为0, 按键弹上第0位和15位值都为0
if
(((state >>
0
) &
1
) ==
1
&& ((state >>
15
) &
1
) ==
1
) key[j++] = (
char
)i;
if
(j >=
256
)
break
;
}
}
memcpy(输出, key,
sizeof
(hotkey));
return
1
;
}
int
main()
{
printf(
"
%s
"
,
"
先按下鼠标中键不放再按下其它键再弹上鼠标中键\n
"
);
hotkey key = {
0
};
gethotkey(VK_MBUTTON, key);
//
可将鼠标中键设置为任意组合键
printf(
"
热键组合: %s\n
"
, key);
return
0
;
}
1