bool SetClipboardText(const std::string& text) {
    // 打开剪贴板
    if (!OpenClipboard(nullptr)) {
        std::cerr << "无法打开剪贴板" << std::endl;
        return false;
    }
    
    // 清空剪贴板
    EmptyClipboard();
    
    // 分配全局内存(需要+1给结束符)
    HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, text.size() + 1);
    if (!hMem) {
        CloseClipboard();
        return false;
    }
    
    // 锁定内存并复制数据
    char* pMem = static_cast<char*>(GlobalLock(hMem));
    memcpy(pMem, text.c_str(), text.size() + 1);
    GlobalUnlock(hMem);
    
    // 设置剪贴板数据
    SetClipboardData(CF_TEXT, hMem);
    
    // 关闭剪贴板
    CloseClipboard();
    return true;
}
// 模拟单个按键
void SimulateKeyPress(WORD keyCode, bool extended = false) {
	INPUT input[2] = {0};

	// 按下按键
	input[0].type = INPUT_KEYBOARD;
	input[0].ki.wVk = keyCode;
	input[0].ki.dwFlags = 0;
	if (extended) {
		input[0].ki.dwFlags |= KEYEVENTF_EXTENDEDKEY;
	}

	// 释放按键
	input[1].type = INPUT_KEYBOARD;
	input[1].ki.wVk = keyCode;
	input[1].ki.dwFlags = KEYEVENTF_KEYUP;
	if (extended) {
		input[1].ki.dwFlags |= KEYEVENTF_EXTENDEDKEY;
	}

	SendInput(2, input, sizeof(INPUT));
}

// 模拟组合键(如Ctrl+C)
void SimulateCtrlC() {
	INPUT inputs[4] = {0};

	// 按下Ctrl
	inputs[0].type = INPUT_KEYBOARD;
	inputs[0].ki.wVk = VK_CONTROL;

	// 按下C
	inputs[1].type = INPUT_KEYBOARD;
	inputs[1].ki.wVk = 'A';

	// 释放C
	inputs[2].type = INPUT_KEYBOARD;
	inputs[2].ki.wVk = 'A';
	inputs[2].ki.dwFlags = KEYEVENTF_KEYUP;

	// 释放Ctrl
	inputs[3].type = INPUT_KEYBOARD;
	inputs[3].ki.wVk = VK_CONTROL;
	inputs[3].ki.dwFlags = KEYEVENTF_KEYUP;

	SendInput(4, inputs, sizeof(INPUT));
}

void SimulateCtrlV() {
	INPUT inputs[4] = {0};

	// 按下Ctrl
	inputs[0].type = INPUT_KEYBOARD;
	inputs[0].ki.wVk = VK_CONTROL;

	// 按下C
	inputs[1].type = INPUT_KEYBOARD;
	inputs[1].ki.wVk = 'V';

	// 释放C
	inputs[2].type = INPUT_KEYBOARD;
	inputs[2].ki.wVk = 'V';
	inputs[2].ki.dwFlags = KEYEVENTF_KEYUP;

	// 释放Ctrl
	inputs[3].type = INPUT_KEYBOARD;
	inputs[3].ki.wVk = VK_CONTROL;
	inputs[3].ki.dwFlags = KEYEVENTF_KEYUP;

	SendInput(4, inputs, sizeof(INPUT));
}

// 模拟Shift+字母(大写)
void SimulateShiftKey(WORD keyCode) {
	INPUT inputs[4] = {0};

	// 按下Shift
	inputs[0].type = INPUT_KEYBOARD;
	inputs[0].ki.wVk = VK_SHIFT;

	// 按下字母键
	inputs[1].type = INPUT_KEYBOARD;
	inputs[1].ki.wVk = keyCode;

	// 释放字母键
	inputs[2].type = INPUT_KEYBOARD;
	inputs[2].ki.wVk = keyCode;
	inputs[2].ki.dwFlags = KEYEVENTF_KEYUP;


	// 释放Shift
	inputs[3].type = INPUT_KEYBOARD;
	inputs[3].ki.wVk = VK_SHIFT;
	inputs[3].ki.dwFlags = KEYEVENTF_KEYUP;

	SendInput(4, inputs, sizeof(INPUT));
}

// 模拟输入字符串
void TypeString(const std::string& text) {
	for (char c : text) {
		// 处理大小写
		if (isupper(c)) {
			SimulateShiftKey(toupper(c));
		} else {
			SimulateKeyPress(toupper(c));
		}

		// 小延迟,模拟真实打字速度
		std::this_thread::sleep_for(std::chrono::milliseconds(50));
	}
}

void MoveMouse(int x, int y) {
	double fScreenWidth = ::GetSystemMetrics(SM_CXSCREEN) - 1;
	double fScreenHeight = ::GetSystemMetrics(SM_CYSCREEN) - 1;

	INPUT input = {0};
	input.type = INPUT_MOUSE;
	input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
	input.mi.dx = (LONG)(x * (65535.0 / fScreenWidth));
	input.mi.dy = (LONG)(y * (65535.0 / fScreenHeight));
	::SendInput(1, &input, sizeof(INPUT));
}

// 鼠标点击
void MouseClick() {
	INPUT input = {0};

	// 按下左键
	input.type = INPUT_MOUSE;
	input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
	::SendInput(1, &input, sizeof(INPUT));

	// 释放左键
	::ZeroMemory(&input, sizeof(INPUT));
	input.type = INPUT_MOUSE;
	input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
	::SendInput(1, &input, sizeof(INPUT));
}

// 右键点击
void RightClick() {
	INPUT input = {0};

	input.type = INPUT_MOUSE;
	input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
	::SendInput(1, &input, sizeof(INPUT));

	::ZeroMemory(&input, sizeof(INPUT));
	input.type = INPUT_MOUSE;
	input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
	::SendInput(1, &input, sizeof(INPUT));
}