class SKeyboardInput {?// KEYBDINPUT
private: INPUT m_keyboard ; public: SKeyboardInput( int iScanCode, bool bDown = TRUE, int iTime = 0 ):m_keyboard() {m_keyboard.type = INPUT_KEYBOARD ;
m_keyboard.ki.wScan = iScanCode ;
m_keyboard.ki.dwFlags = KEYEVENTF_SCANCODE | (bDown ? 0 : KEYEVENTF_KEYUP) ;
m_keyboard.ki.time = iTime ;
m_keyboard.ki.dwExtraInfo = 0 ;
} public: DWORD scan() const {return m_keyboard.ki.wScan ;
} DWORD time() const {return m_keyboard.ki.time ;
} public: int Send( ) const {if( m_keyboard.ki.time )?Sleep( m_keyboard.ki.time ) ;
SendInput( 1, const_cast<LPINPUT>( &m_keyboard ), sizeof(INPUT) ) ;
return 0 ;
} } ;摘自我以前寫的壹個程序片段
用類稍微的封裝了下,
用法:
SKeyboardInput input( 15, TRUE, 100 ) ; // 掃描碼 = 15(tab) 按下, 延時100
SKeyboardInput input2( 15, FALSE, 200 ) ; // 掃描碼 = 15(tab) 松開, 延時200
input.Send() ;
input2.Send()
這裏使用的是掃描碼, 妳可以用MapVirtualKey()來進行 掃描 虛擬碼之間的轉換