标题:求个条件循环命令
只看楼主
hm740604173
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2021-8-16
结帖率:0
已结贴  问题点数:20 回复次数:2 
求个条件循环命令
例子:当我按住鼠标的中键不松时,循环输入键盘ABCABCABC,弹起鼠标中键时,结束ABC的循环
搜索更多相关主题的帖子: 命令 结束 鼠标 条件 循环 
2021-08-16 10:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
循环 输 键盘 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 );
}
2021-08-16 12:38
我善治鬼
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:107
专家分:181
注 册:2015-2-16
得分:10 
代码

程序代码:

#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;
}


2021-08-16 19:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506536-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052838 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved