c语言 怎样模拟鼠标键盘操作? C语言是怎样实现鼠标事件控制的?可不可以用纯C做?

C\u8bed\u8a00\u600e\u6837\u6a21\u62df\u952e\u76d8\u548c\u9f20\u6807\uff1f

#include <windows.h>
int main(void)
{
char s[100] = "C:\\progam files\\tencent\\qq\\bin\\qq.exe" ;

ShellExecute(NULL,TEXT("open"),TEXT("C:\\Program Files\\Tencent\\QQ\\Bin\\QQ.exe"),NULL,NULL,SW_SHOW);

Sleep(3000);

HWND hWnd = FindWindow(NULL,TEXT("QQ2010"));
HWND hWndc = ::GetWindow(hWnd,GW_CHILD);

SendMessage(hWndc,WM_SYSKEYDOWN,VK_RETURN,0);

return 0;
}

\u53ef\u4ee5\uff0c\u9700\u8981\u8c03\u7528windowsAPI\u51fd\u6570\u3002\u5934\u6587\u4ef6windows.h\u3002\u7b80\u5355\u601d\u8def\uff1a\u901a\u8fc7GetStdHandle\u83b7\u53d6\u6807\u51c6\u8f93\u5165\u53e5\u67c4\u3002\u518d\u901a\u8fc7ReadConsokeInput\u5c06\u8f93\u5165\u4fe1\u606f\u5b58\u50a8\u5230\u7ed3\u6784\u4f53\u7c7b\u578bINPUT_RECODE\u53d8\u91cf\u4e2d\u3002\u518d\u901a\u8fc7\u5224\u65ad\uff0c\u622a\u53d6\u5230\u9f20\u6807\u7535\u51fb\u7684\u4e8b\u4ef6\u3002\u5177\u4f53API\u51fd\u6570\u3001\u53c2\u6570\u3001\u529f\u80fd\u8fd8\u6709\u5f88\u591a\u3002\u9700\u8981\u7f51\u4e0a\u627e\u8d44\u6599\u53ef\u4ee5\u5b66\u3002\u6211\u8fd9\u91cc\u5c31\u7b80\u5355\u5199\u4e00\u4e2a\uff0c\u9f20\u6807\u70b9\u51fb\u63a7\u5236\u53f0\u4efb\u610f\u4f4d\u7f6e\uff0c\u5e76\u5728\u8be5\u4f4d\u7f6e\u6253\u5370\u5b57\u7b26\u4e32\u3002

#include #include int main(){ HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); // \u83b7\u53d6\u6807\u51c6\u8f93\u5165\u8bbe\u5907\u53e5\u67c4 INPUT_RECORD inRec; DWORD res; COORD p0; while(1) { ReadConsoleInput(hInput, &inRec, 1, &res); if (inRec.EventType == MOUSE_EVENT && inRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //\u9f20\u6807\u5de6\u952e { p0.X=inRec.Event.MouseEvent.dwMousePosition.X; p0.Y=inRec.Event.MouseEvent.dwMousePosition.Y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0); printf("\u4f60\u5728\u8fd9\u91cc\u70b9\u51fb\u7684\u5de6\u952e\n"); } } return 0;}

函数原型:
VOID keybd_event( BYTE bVk, BYTE bScan, DWORD dwFlags, DWORD dwExtraInfo );
4个参数都是输入参数。
bVk:键名,例如: VK_NUMPAD7,VK_BACK, VK_TAB,VK_SHIFT,VK_F1,。。。
keybd_event(VK_MENU,0xb8,0 , 0); -- 按下Alt 键
keybd_event(VK_MENU,0xb8,KEYEVENTF_KEYUP,0); -- 放开 Alt 键 (复位,弹上来)
===
下面程序模拟按 notepad 编辑器。等于C语言 system("notepad"); 弹出 记事本。
void simu_notepad()
{
keybd_event(VkKeyScan('N'),1,0,0);
keybd_event(VkKeyScan('N'),1,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan('O'),0x98,0,0); keybd_event(VkKeyScan('O'),0x98,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan('T'),0x94,0,0); keybd_event(VkKeyScan('T'),0x94,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan('E'),0x92,0,0); keybd_event(VkKeyScan('E'),0x92,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan('P'),0x99,0,0); keybd_event(VkKeyScan('P'),0x99,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan('A'),0x9E,0,0); keybd_event(VkKeyScan('A'),0x9E,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan('D'),0xA0,0,0); keybd_event(VkKeyScan('D'),0xA0,KEYEVENTF_KEYUP,0);
keybd_event(VK_RETURN,1,0,0);
keybd_event(VK_RETURN,1,KEYEVENTF_KEYUP,0);
}

模拟鼠标如下:
1、这里是鼠标左键按下和松开两个事件的组合即一次单击:
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
2、模拟鼠标右键单击事件:
mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )
3、两次连续的鼠标左键单击事件 构成一次鼠标双击事件:
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
4、使用绝对坐标
MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0
模拟键盘输入如下:
void EnterString(const char* text)
{
bool bShift = false;
size_t length = strlen(text);
for(size_t index = 0;index < length;index++)
{
int val = text[index];
if(val >= 97 && val <= 122) //小写a-z
{
val -= 32;
bShift = false;
}
else if(val >= 65 && val <= 90) //大写A-Z
{
bShift = true;
}
else if(val >= 48 && val <= 57) //数字0-9
{
bShift = false;
}
else //特殊符号
{
switch(val)
{
case '`':
val = 192;
bShift = false;
break;
case '~':
val = 192;
bShift = true;
break;
case '!':
val = '1'; //!和1在同一个键盘,使用同一个键盘码,以下相同
bShift = true;
break;
case '@':
val = '2'; //@和2在同一个键盘,使用同一个键盘码,以下相同
bShift = true;
break;
case '#':
val = '3';
bShift = true;
break;
case '$':
val = '4';
bShift = true;
break;
case '%':
val = '5';
bShift = true;
break;
case '^':
val = '6';
bShift = true;
break;
case '&':
val = '7';
bShift = true;
break;
case '*':
val = '8';
bShift = true;
break;
case '(':
val = '9';
bShift = true;
break;
case ')':
val = '0';
bShift = true;
break;
case '-':
val = 189;
bShift = false;
break;
case '=':
val = 187;
bShift = false;
break;
case '_':
val = 189;
bShift = true;
break;
case '+':
val = 187;
bShift = true;
break;
case '[':
val = 219;
bShift = false;
break;
case '{':
val = 219;
bShift = true;
break;
case ']':
val = 221;
bShift = false;
break;
case '}':
val = 221;
bShift = true;
break;
case '\\':
val = 220;
bShift = false;
break;
case '|':
val = 220;
bShift = true;
break;
case ';':
val = 186;
bShift = false;
break;
case ':':
val = 186;
bShift = true;
case '\'':
val = 222;
bShift = false;
break;
case '\"':
val = 222;
bShift = true;
break;
case ',':
val = 188;
bShift = false;
break;
case '<':
val = 188;
bShift = true;
break;
case '.':
val = 190;
bShift = false;
break;
case '>':
val = 190;
bShift = true;
break;
case '/':
val = 191;
bShift = false;
break;
case '?':
val = 191;
bShift = true;
break;
default:
break;
}
}
if(bShift)
keybd_event(VK_SHIFT,0,0,0);
keybd_event(val,0,0,0);
keybd_event(val,0,KEYEVENTF_KEYUP,0);
if(bShift)
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
}
}

你说的是VC吧?

扩展阅读:手机模拟键盘鼠标软件 ... 键盘位置对照表 ... 电脑键盘鼠标失灵一招搞定 ... 键盘功能键详细图 ... 键盘怎么切换中文打字 ... 电脑26键盘图片大全 ... 键盘功能一览表 ... 只有键盘怎么控制电脑 ... 电脑键盘功能键大全 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网