
正文
C++模拟键盘鼠标消息
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
#include <Windows.h>
/*
* === FUNCTION ======================================================================
* Name: LeftClick
* Description: 左键按下消息
* =====================================================================================
*/
void LeftClick ( )
{
INPUT Input={0};
// left down
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1,&Input,sizeof(INPUT)); // left up
::ZeroMemory(&Input,sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1,&Input,sizeof(INPUT));
}
/*
* === FUNCTION ======================================================================
* Name: RightClick
* Description: 右键按下消息
* =====================================================================================
*/
void RightClick ( )
{
INPUT Input={0};
// right down
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
::SendInput(1,&Input,sizeof(INPUT)); // right up
::ZeroMemory(&Input,sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
::SendInput(1,&Input,sizeof(INPUT));
} /*
* === FUNCTION ======================================================================
* Name: 鼠标移动消息
* Description:
* =====================================================================================
*/
void MouseMove (int x, int y )
{
double fScreenWidth = ::GetSystemMetrics( SM_CXSCREEN )-1;
double fScreenHeight = ::GetSystemMetrics( SM_CYSCREEN )-1;
double fx = x*(65535.0f/fScreenWidth);
double fy = y*(65535.0f/fScreenHeight);
INPUT Input={0};
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
Input.mi.dx = fx;
Input.mi.dy = fy;
::SendInput(1,&Input,sizeof(INPUT));
}
int main(){ while(true)
{
MouseMove(0,100); Sleep(5000); MouseMove(200,0); Sleep(5000); }
//RightClick ( );
//LeftClick ( );
return 0;
}
以上是使用sendinput函数
以下是使用keybd_event函数
//#include <Windows.h>
#include <afxwin.h> int main()
{ //CWnd *pWnd = CWnd::FromHandle(FindWindow("ConsolWindowClass", NULL)); GetConsoleWindow(void);
CWnd *pWnd = CWnd::FromHandle(GetConsoleWindow()); //本控制台程序发送按键消息
if (pWnd->GetSafeHwnd())
{
pWnd->ShowWindow(SW_NORMAL);
pWnd->SetForegroundWindow();
//keybd_event(VK_CONTROL, 0, 0 ,0);
keybd_event('E', 0, 0 ,0);
keybd_event('E', 0, KEYEVENTF_KEYUP ,0); //keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP,0);
}
return 0;
}
demo
/*
* =====================================================================================
*
* Filename: get_message.cpp
*
* Description: 子线程产生按键消息,主线程等待输入,并输出
*
* Version: 1.0
* Created: 2013/10/1 10:33:36
* Revision: none
* Compiler: gcc
*
* Author: @礼杨_HDU, yuliyang@qq.com
* Organization:
*
* =====================================================================================
*/ #include <iostream>
#include <Windows.h>
using namespace std;
DWORD WINAPI ThreadFunction(LPVOID lpParameter)
{
printf("in thread......");
while (TRUE){
//your code INPUT Input1 = { };
Input1.type = INPUT_KEYBOARD;
Input1.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
Input1.ki.wVk = 0x30; //
SendInput( , &Input1, sizeof( INPUT ) );
INPUT Input2 = { };
Input2.type = INPUT_KEYBOARD;
Input2.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
Input2.ki.wVk = 0x0d; // 回车
SendInput( , &Input2, sizeof( INPUT ) ); Sleep(); Input1.type = INPUT_KEYBOARD;
Input1.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
Input1.ki.wVk = 0x31; //
SendInput( , &Input1, sizeof( INPUT ) ); Input2.type = INPUT_KEYBOARD;
Input2.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
Input2.ki.wVk = 0x0d; // 回车
SendInput( , &Input2, sizeof( INPUT ) );
}
return true;
} int main(){
HANDLE hT=CreateThread(NULL,,ThreadFunction,NULL,,NULL); char m_char; while (cin>>m_char)
{
printf("%c\n",m_char);
}
return ; }






