L o a d i n g . . .
主打一个C++
文章详情

C++控制台获取鼠标在自身窗口点击的坐标

Posted on 2023-03-15 03:08:00 by 主打一个C++

#include <iostream>
#include <Windows.h>
//热键
#define D_IS_KEY(_vk) ((GetAsyncKeyState(_vk) & 0x8000) ? true : false)
bool GetConsoleWH(int& _w,int& _h) {
	// 获取控制台句柄
	HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	if (INVALID_HANDLE_VALUE != hConsole) {
		// 获取控制台信息
		CONSOLE_SCREEN_BUFFER_INFO csbi;
		if (GetConsoleScreenBufferInfo(hConsole, &csbi)) {
			// 宽度和高度
			_w = csbi.srWindow.Right - csbi.srWindow.Left + 1; // 注意加1
			_h = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; // 注意加1
			//printf("%d %d\n", width, height);
			return true;
		}
	}
	return false;
}
bool HideCursor() {
	//隐藏控制台光标
	CONSOLE_CURSOR_INFO curinfo;
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	if (INVALID_HANDLE_VALUE != handle) {
		if (GetConsoleCursorInfo(handle, &curinfo)) {
			curinfo.bVisible = FALSE;
			//重设
			return (bool)SetConsoleCursorInfo(handle, &curinfo);
		}
	}
	return false;
}
bool ProhibitInput() {
	//禁止所有输入
	HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
	if (INVALID_HANDLE_VALUE != handle) {
		DWORD mode = 0;
		if (GetConsoleMode(handle, &mode)) {
			mode &= ~ENABLE_QUICK_EDIT_MODE;
			mode &= ~ENABLE_INSERT_MODE;
			mode &= ~ENABLE_MOUSE_INPUT;
			return (bool)SetConsoleMode(handle, mode);
		}
	}
	return false;
}
int main() {
    //隐藏光标
	HideCursor();
	//获取窗口宽高
	int w, h;
	GetConsoleWH(w, h);
	//禁止输入等
	ProhibitInput();
	//获取控制台句柄
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	//获取当前激活窗口
	HWND currWin = GetForegroundWindow();
    //字体
	CONSOLE_FONT_INFO consoleFont;
	POINT curPos;
	do
	{
	    //判断热键
		if (D_IS_KEY(VK_LBUTTON)) {
			//获取鼠标位置
			GetCursorPos(&curPos);
			//获取鼠标在窗口上的位置
			ScreenToClient(currWin, &curPos);
			//获取字体信息
			GetCurrentConsoleFont(handle, FALSE, &consoleFont);
			//得到实际
			curPos.x /= consoleFont.dwFontSize.X;
			curPos.y /= consoleFont.dwFontSize.Y;
			//排除非窗口区域
			if ((curPos.x > 0) && (curPos.y > 0) && (curPos.x < w) && (curPos.y < h)) {
				printf("x=%d y=%d\n", curPos.x, curPos.y);
				//防三击
				Sleep(333);
			}
		}
		//常规延迟
		Sleep(20);
	} while (!D_IS_KEY(VK_ESCAPE));
	printf("程序结束!\n");
	return 0;
}



*转载请注明出处:原文链接:https://cpp.vin/page/38.html

作者近期文章
  • 随手笔记
  • 主打一个C++   2025-01-11 20:02:01
  • 都2000000025年了。还有不能随意访问guthub的,仔细看。在国内其实是可以正常访问的,gfw并没屏蔽。这里给出其中一个简单直接的方法稳定访问。1. 随便百度一个”dn
提示
×
确定
数据库执行: 8次 总耗时: 0.03s
页面加载耗时: 



wechat +447752296473
wechat cpp-blog