我想要模拟的按键是 Ctrl+"1" ,Ctrl+"+",Ctrl+"-",Ctrl+"*".我知道一个键盘模拟按键API,但是对其中的参数不了解,还有对这些组合键的对应码了不知道。如有其它方法,请说一下思路。
谢谢!

解决方案 »

  1.   

    看msdn里面的 WM_KEYDOWNPostMessage(WM_KEYDOWN)
      

  2.   

    //给你个例子
    #include "stdafx.h"
    #include "Winable.h"
    //#include <mmsystem.h>
    //#pragma comment(lib, "Winmm.lib")BOOL IsCapsLockOn()
    {
    BYTE keyState[256];
    GetKeyboardState(keyState);
    return keyState[VK_CAPITAL] & 1;
    }void TypeKey(BYTE vk, DWORD dwFlag)
    {
    INPUT input;
    input.type = INPUT_KEYBOARD;
    input.ki.wVk = vk;
    input.ki.wScan = vk;
    input.ki.dwFlags = dwFlag;
    input.ki.dwExtraInfo = NULL;
    input.ki.time = 0; SendInput(1, &input, sizeof(input));
    input.ki.dwFlags = dwFlag|KEYEVENTF_KEYUP;
    SendInput(1, &input, sizeof(input)); Sleep(200);
    }void TypeSentence(const char* p)
    {
    int nLen = strlen(p);
    BOOL bLower = FALSE;
    char c; for(int i=0; i<nLen; i++)
    {
    c = p[i];
    if(c>='a' && c<='z')
    {
    c -= 32;
    bLower = TRUE;
    }
    if(!bLower)
    keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY|0, NULL); TypeKey(c, 0); if(!bLower)
    keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, NULL);
    bLower = FALSE; Sleep(100);
    }
    }int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    // BlockInput(TRUE);
    if(IsCapsLockOn())
    TypeKey(VK_CAPITAL, KEYEVENTF_EXTENDEDKEY);
    // mciSendString("set CDAudio door open", NULL, 0, NULL);
      TypeKey(VK_LWIN, KEYEVENTF_EXTENDEDKEY);
    Sleep(300); TypeKey(VK_UP, 0);
    TypeKey(VK_UP, 0);
    TypeKey('R', 0);
    TypeSentence("Notepad");
    TypeKey(VK_RETURN, 0);
    Sleep(200);
    // FindWindow("Notepad", "
    TypeSentence("I am an");
    TypeKey(VK_BACK, 0);
    TypeSentence(" Virus ha ha ha ha");
    TypeKey(VK_RETURN, 0);
    TypeKey(VK_F10, 0);
    TypeKey('F', 0);
    Sleep(200);
    TypeKey('X', 0);
    Sleep(200);
    TypeKey('N', 0);
    // mciSendString("set CDAudio door closed", NULL, 0, NULL);
    // BlockInput(FALSE); MessageBox(NULL, "Only a joke, no virus", "error", MB_OK|MB_ICONHAND);
    return 0;
    }