• 使控制台窗口支持鼠标的程序


    tfref

    //mouse.c - 主程序文件
    #include <windows.h> #include <stdio.h> int main(int argc, char** argv) { DWORD dwMode, dwOldMode; /* 原来的模式与新模式 */ DWORD dwRead; /* 已经读取的输入事件数 */ int mouse_pos; /* 用于返回鼠标位置 */ UINT count; /* 用于循环控制 */ INPUT_RECORD ir[128]; /* 控制台输入记录 */ CONSOLE_CURSOR_INFO cci, cciOld; /* 鼠标相关的设置 */ COORD co; /* 鼠标移动时更新坐标 */ HANDLE hStdIn = NULL, hStdOut = NULL; /* 标准输入输出句柄 */ if(argc == 2 && argv[1][0] == '/' && argv[1][1] == '\?') { printf("控制台鼠标支持程序\n\n" "使用方法:\n" "\t/\?\t查看帮助\n\n" "返回值处理:\n" "\t%%ERRORLEVEL%% 高 16 位包含鼠标 X 坐标\n" "\t%%ERRORLEVEL%% 低 16 位包含鼠标 Y 坐标\n" "比如:返回 65537, 可以用如下方式取得 X,Y\n" "\tset /a ret=%%errorlevel%%\n" "\tset /a \"x=%%ret%%>>16\"\n" "\tset /a \"y=%%ret%%&65535\"\n\n" "女孩不哭,QQ:191035066 @ 批处理之家\n"); return 0; } hStdIn = GetStdHandle(STD_INPUT_HANDLE); /* 取得输入输出句柄 */ hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); if(!GetConsoleMode(hStdIn, &dwOldMode)) /* 取得控制台原来的模式 */ { fprintf(stderr, "GetConsoleMode 错误:%d\n", GetLastError()); goto _exit; } dwMode = dwOldMode | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT; if(!SetConsoleMode(hStdIn, dwMode)) /* 开启鼠标事件 */ { fprintf(stderr, "SetConsoleMode 错误:%d\n", GetLastError()); goto _exit; } GetConsoleCursorInfo(hStdOut, &cciOld); cci.bVisible = TRUE; /* 可见 */ cci.dwSize = 100; /* 块状 */ if(!SetConsoleCursorInfo(hStdOut, &cci)) { fprintf(stderr, "SetConsoleCursorInfo 错误:%d\n", GetLastError()); goto _exit; } for(;;) /* 循环等待用户事件 */ { if(!ReadConsoleInput(hStdIn, &ir[0], 128, &dwRead)) { fprintf(stderr, "ReadConsoleInput 错误:%d\n", GetLastError()); goto _exit; } for(count=0; count<dwRead; count++) { switch(ir[count].EventType) { case MOUSE_EVENT: switch(ir[count].Event.MouseEvent.dwEventFlags) { case 0: /* 取得鼠标单击事件 */ if(ir[count].Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) { SetConsoleMode(hStdIn, dwOldMode); /* 还原原来的设置 */ SetConsoleCursorInfo(hStdOut, &cciOld); mouse_pos = ir[count].Event.MouseEvent.dwMousePosition.X; mouse_pos = mouse_pos << 16 | ir[count].Event.MouseEvent.dwMousePosition.Y; return mouse_pos; } break; case MOUSE_MOVED: /* 更新鼠标位置 */ co.X = ir[count].Event.MouseEvent.dwMousePosition.X; co.Y = ir[count].Event.MouseEvent.dwMousePosition.Y; SetConsoleCursorPosition(hStdOut, co); break; } break; default: break; } } } _exit: return 1; }

    示例脚本程序:

    ::test_mouse.bat - 脚本程序
    @echo
    off :main mouse.exe set /a "ret=%errorlevel%,x=ret>>16,y=ret&65535" title 鼠标演示程序, 鼠标坐标=(%x%,%y%) goto :main

    源代码下载: http://alioss.twofei.com/windows/mouse.7z
    女孩不哭(QQ:191035066)@2012-06-08 23:32:53 @ http://www.cnblogs.com/nbsofer

    发表于:http://bbs.bathome.net/thread-17292-1-1.html

  • 相关阅读:
    吐血巨献:VB网络编程(webbrowser+Inet+抓包封包+经验)
    亦思验证码识别系统3.1详解
    开机自动连接宽带程序
    轻松报选修智能报选修程序(适用于正方教学管理系统)
    低调发布一个百度谷歌关键字搜索工具
    解惑:Postmessage函数模拟鼠标单击指定坐标
    分享一些经典资源
    英文单词缩写查询
    css控制的个性导航栏
    导航栏中加入自动弹出下拉菜单
  • 原文地址:https://www.cnblogs.com/memset/p/2542546.html
Copyright © 2020-2023  润新知