c语言 怎样模拟鼠标键盘操作?
#include <windows.h>
int main(void)
{
char s[100] = "C:\\progam files\encent\\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;
}
可以,需要调用windowsAPI函数。头文件windows.h。简单思路:通过GetStdHandle获取标准输入句柄。再通过ReadConsokeInput将输入信息存储到结构体类型INPUT_RECODE变量中。再通过判断,截取到鼠标电击的事件。具体API函数、参数、功能还有很多。需要网上找资料可以学。我这里就简单写一个,鼠标点击控制台任意位置,并在该位置打印字符串。
#include #include int main(){ HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄 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) //鼠标左键 { p0.X=inRec.Event.MouseEvent.dwMousePosition.X; p0.Y=inRec.Event.MouseEvent.dwMousePosition.Y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p0); printf("你在这里点击的左键
"); } } 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吧?
蛮童醋酸: 函数原型: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...
台山市13693427876: 如何用C语言代替键盘操作不要给我说拿按键精灵或者一大堆麻烦的字 ?
蛮童醋酸: 自己去找键盘对应的ASCII码,系统代替输入既是了
台山市13693427876: 如何用C语言模拟键盘输入? - ?
蛮童醋酸: 1.在Microsoft Windows 中,键盘和鼠标是两个标准的用户输入源,在一些交叠的操作中通常相互补充使用.当然,鼠标在今天的应用程序中比10年前使用得更为广泛.甚至在一些应用程序中,我们更习惯于使用鼠标,例如在游戏、画图程序、音乐程序,以及Web创览器等程序中就是这样.然而,我们可以不使用鼠标,但绝对不能从一般的PC中拆掉键盘.
台山市13693427876: 【20分】C语言程序 如何响应点击鼠标左键的操作 - ?
蛮童醋酸: C语言中键盘扫描码 就是利用bioskey()得到的值.参数为0时,bioskey()的返回值如果低八位非0,表示按下了普通键;如果低八位为0,表示按下了功能键.参数为1时,检测有没有键被按下,如果返回值为0,表示没有键按下,相反有键...
台山市13693427876: 如何写一个用C语言模拟按键的源代码 - ?
蛮童醋酸: keybd_event(VK_LEFT, 0, 0, 0); //键盘方向左键按下 keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0); //左键释放 同样,右键的虚键为 VK_RIGHT 注意要加头文件 "windows.h"
台山市13693427876: C语言找到窗口句柄,然后进行后台鼠标键盘操作?
蛮童醋酸: 鼠标:窗口处理函数中加入WM_MOUSEMOVE消息,然后编写鼠标消息处理函数OnMouseMove,当然,鼠标消息不止这一个,具体请查看msdn 键盘:添加WM_KEYDOWN/WM_KEYUP/WM_CHAR消息,这三个消息的具体请查看msdn,然后就可以编写消息消息处理函数了!
台山市13693427876: c语言模拟键盘随机输入或连续输入不同的数字.. - ?
蛮童醋酸: 用按键精灵去吧孩子,要随机的话编一个,如果固定的直接点录制,把你的操作记录下来,然后需要的时候运行就可以重复之前的鼠标和键盘操作.
台山市13693427876: C语言或者什么写一个简单的按键模拟程序 - ?
蛮童醋酸: #include <stdio.h>#include <conio.h>#include "windows.h" fun() {int c ;system("cls"); printf("\n\n\n"); printf(" 等待一秒 \n"); printf(" ↑ \n"); printf(" ← → \n"); printf(" ↓\n"); printf(" 等待两秒\n"); printf("\n\n请选择:\n"); ...
台山市13693427876: 听说在使用C语言编写程序时只能使用键盘操作,可是该怎样使用键盘代替电脑? - ?
蛮童醋酸: 如果你是使用c-free的话,那么在打开的时候按Esc推出开始时那个界面,然后按ctrl n 新建一个工程,就可以开始写了,其他的操作界面上都有提示.
台山市13693427876: C语言编程图形界面下如何实现鼠标可以连续操作而不消失并且可以和键盘交互使用?
蛮童醋酸: 一般要画鼠标用一个8*16的像素位置,你可以自己先定义好数组,然后步骤如下: while(1){ 如果不是第一次绘制鼠标,则用已保存的图像覆盖曾经鼠标位置. bios中断获取鼠标位置,如果鼠标发生移动(和以前的位置不一样),保存此位置下8*16的图像,保存鼠标位置,绘制鼠标. 如果发生CLK事件,则跳出循环,处理你的程序. }