- 注册时间
 - 2010-7-22
 
- 最后登录
 - 2017-5-28
 
- 在线时间
 - 4 小时
 
 
 
 
 
编程入门 
  
	- 魔鬼币
 - 570 
 
 
 
 | 
 
 
SendInput比keybd_event要方便多了,可以支持发送中文。 
 
#include <atlconv.h>    
   
#pragma comment(lib,"User32.lib")   
#pragma comment(lib,"shlwapi.lib")   
   
void SendAscii(wchar_t data, BOOL shift)   
{   
    INPUT input[2];   
    memset(input, 0, 2 * sizeof(INPUT));   
   
    if (shift)   
    {   
        input[0].type = INPUT_KEYBOARD;   
        input[0].ki.wVk = VK_SHIFT;   
        SendInput(1, input, sizeof(INPUT));   
    }   
   
    input[0].type = INPUT_KEYBOARD;   
    input[0].ki.wVk = data;   
   
    input[1].type = INPUT_KEYBOARD;   
    input[1].ki.wVk = data;   
    input[1].ki.dwFlags = KEYEVENTF_KEYUP;   
   
    SendInput(2, input, sizeof(INPUT));   
   
    if (shift)   
    {   
        input[0].type = INPUT_KEYBOARD;   
        input[0].ki.wVk = VK_SHIFT;   
        input[0].ki.dwFlags = KEYEVENTF_KEYUP;   
        SendInput(1, input, sizeof(INPUT));    
    }   
}   
   
   
void SendUnicode(wchar_t data)   
{   
    INPUT input[2];   
    memset(input, 0, 2 * sizeof(INPUT));   
   
    input[0].type = INPUT_KEYBOARD;   
    input[0].ki.wVk = 0;   
    input[0].ki.wScan = data;   
    input[0].ki.dwFlags = 0x4;//KEYEVENTF_UNICODE;   
   
    input[1].type = INPUT_KEYBOARD;   
    input[1].ki.wVk = 0;   
    input[1].ki.wScan = data;   
    input[1].ki.dwFlags = KEYEVENTF_KEYUP | 0x4;//KEYEVENTF_UNICODE;   
   
    SendInput(2, input, sizeof(INPUT));   
}   
   
//为方便使用,下面这个函数包装了前两个函数。   
void SendKeys(TCHAR *strMsg)   
{   
    short vk;   
    BOOL shift;   
   
    USES_CONVERSION;   
    wchar_t* data = T2W(strMsg);   
    int len = wcslen(data);   
   
    for(int i=0;i<len;i++)   
    {   
        if (data[i]>=0 && data[i]<256) //ascii字符   
        {   
            vk = VkKeyScanW(data[i]);   
   
            if (vk == -1)   
            {   
                SendUnicode(data[i]);   
            }   
            else   
            {   
                if (vk < 0)   
                {   
                    vk = ~vk + 0x1;   
                }   
   
                shift = vk >> 8 & 0x1;   
   
                if (GetKeyState(VK_CAPITAL) & 0x1)   
                {   
                    if (data[i]>='a' && data[i]<='z' || data[i]>='A' && data[i]<='Z')   
                    {   
                        shift = !shift;   
                    }   
                }   
   
                SendAscii(vk & 0xFF, shift);   
            }   
        }   
        else //unicode字符   
        {   
            SendUnicode(data[i]);   
        }   
    }   
}   
 
int _tmain(int argc, _TCHAR* argv[])   
{   
   
    Sleep(5000);   
    SendKeys(L"Sysprogram 测试中文");   
   
    return 0;   
}   
 |   
 
 
 
 |