为了账号安全,请及时绑定邮箱和手机立即绑定

怎么用SendInput模拟CTRL+C按键?

/ 猿问

怎么用SendInput模拟CTRL+C按键?

慕容4345310 2019-02-06 18:07:09

怎么用SendInput模拟CTRL+C按键


查看完整描述

2 回答

?
慕神8447489

INPUT input_Copy[4] = {0};
input_Copy[0].type = input_Copy[1].type = input_Copy[2].type = input_Copy[3].type = INPUT_KEYBOARD;

input_Copy[0].ki.wVk = input_Copy[3].ki.wVk = VK_CONTROL;
input_Copy[1].ki.wVk = input_Copy[2].ki.wVk = 'C';

input_Copy[2].ki.dwFlags = input_Copy[3].ki.dwFlags = KEYEVENTF_KEYUP;

input_Copy[0].ki.time = input_Copy[1].ki.time = GetTickCount();
Sleep(100);
input_Copy[2].ki.time = input_Copy[3].ki.time = GetTickCount();

SendInput(sizeof(input_Copy)/sizeof(input_Copy[0]), input_Copy, sizeof(INPUT));

写得不对吗???代码哪里出错了,麻烦高手指出来。3Q了!

------解决方案--------------------
这个问题,你不要这样写,单独处理才有调理。给你个函数,用它可以组合成你需要的

// 模拟一个键的动作。vKey 是键的虚拟码 Orientation 表示按下还是释放 , 1按下 0释放
void KeyAction( int vKey , int Orientation )
{
INPUT Inputs888;
SecureZeroMemory(&Inputs888,sizeof(INPUT));

Inputs888.type = INPUT_KEYBOARD;

// ki 共 5 个成员,仅3个需要赋值
if(Orientation)
Inputs888.ki.dwFlags = 0;
else
Inputs888.ki.dwFlags = KEYEVENTF_KEYUP;

Inputs888.ki.wScan = MapVirtualKey(vKey, 0);
if( Inputs888.ki.wScan == 0 ) // 失败就放弃这个
{

return;
}
Inputs888.ki.wVk = vKey;

UINT ret77 = SendInput( 1, &Inputs888,sizeof(INPUT));

ASSERT(1==ret77);
}



查看完整回答
反对 回复 2019-03-10
?
犯罪嫌疑人X

INPUT input[4];
memset(input, 0, sizeof(input));

//设置模拟键盘输入
input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;
input[0].ki.wVk = input[2].ki.wVk = VK_MENU;
input[1].ki.wVk = input[3].ki.wVk = VK_F4;

// 释放按键,这非常重要
input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;

SendInput(4,input,sizeof(INPUT));



查看完整回答
反对 回复 2019-03-10

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信