#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
1 /* 2 * ===================================================================================== 3 * 4 * Filename: get_message.cpp 5 * 6 * Description: 子线程产生按键消息,主线程等待输入,并输出 7 * 8 * Version: 1.0 9 * Created: 2013/10/1 10:33:36 10 * Revision: none 11 * Compiler: gcc 12 * 13 * Author: @礼杨_HDU, yuliyang@qq.com 14 * Organization: 15 * 16 * ===================================================================================== 17 */ 18 19 #include <iostream> 20 #include <Windows.h> 21 using namespace std; 22 DWORD WINAPI ThreadFunction(LPVOID lpParameter) 23 { 24 printf("in thread......"); 25 while (TRUE){ 26 //your code 27 28 INPUT Input1 = { 0 }; 29 Input1.type = INPUT_KEYBOARD; 30 Input1.mi.dwFlags = KEYEVENTF_EXTENDEDKEY; 31 Input1.ki.wVk = 0x30; // 0 32 SendInput( 1, &Input1, sizeof( INPUT ) ); 33 INPUT Input2 = { 0 }; 34 Input2.type = INPUT_KEYBOARD; 35 Input2.mi.dwFlags = KEYEVENTF_EXTENDEDKEY; 36 Input2.ki.wVk = 0x0d; // 回车 37 SendInput( 1, &Input2, sizeof( INPUT ) ); 38 39 Sleep(10000); 40 41 Input1.type = INPUT_KEYBOARD; 42 Input1.mi.dwFlags = KEYEVENTF_EXTENDEDKEY; 43 Input1.ki.wVk = 0x31; //1 44 SendInput( 1, &Input1, sizeof( INPUT ) ); 45 46 Input2.type = INPUT_KEYBOARD; 47 Input2.mi.dwFlags = KEYEVENTF_EXTENDEDKEY; 48 Input2.ki.wVk = 0x0d; // 回车 49 SendInput( 1, &Input2, sizeof( INPUT ) ); 50 } 51 return true; 52 } 53 54 int main(){ 55 HANDLE hT=CreateThread(NULL,0,ThreadFunction,NULL,0,NULL); 56 57 char m_char; 58 59 while (cin>>m_char) 60 { 61 printf("%c\n",m_char); 62 } 63 return 0; 64 65 }