keybd_event(VK_CONTROL,0,0,0);
keybd_event('C',0,0,0);
keybd_event('C',0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); ok , 可以模拟 CTRL+C
keybd_event('C',0,0,0);
keybd_event('C',0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); ok , 可以模拟 CTRL+C
参考:baidu : 如何在VB中用PostMessage向指定窗口发送带有修饰键的组合键
http://blog.csdn.net/wangjieest/article/details/6958039
****************************************************************************/void SimulateKeyDown(HWND hWnd,UINT nChar)
{
UINT ScanCode= MapVirtualKey( nChar , MAPVK_VK_TO_VSC);
LPARAM KeyDownLPARAM= (ScanCode<<16) | 0x00000001 ;
::PostMessage(hWnd,WM_KEYDOWN,nChar,KeyDownLPARAM);
}void SimulatekeyUp(HWND hWnd,UINT nChar)
{
UINT ScanCode= MapVirtualKey( nChar , MAPVK_VK_TO_VSC);
LPARAM KeyUpLPARAM = (ScanCode<<16) | 0xC0000001 ;
::PostMessage(hWnd,WM_KEYUP,nChar,KeyUpLPARAM);
}
//ctrl+O
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),0,0);
SimulateKeyDown( GetWnd() ,'O');
SimulatekeyUp ( GetWnd() ,'O');
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),KEYEVENTF_KEYUP,0); //发送文本,不限于edit控件。不能用Sendmessage,因为不经过GetMessage循环
//最后一个参数(lParam)低16位(0001)表示按键一次,高8位00表示按下,C0表示抬起,次高8位(01)表示该键的扫描码,
//可用 API MapVirtualKey(VirtualKey, 0)取得(注意:扫描码在各系统可能会不同,在此以具体数值示例,
//实际应用MapVirtualKey取得)。
HWND m_hWnd=GetWnd();
TCHAR SendText[100]="::PostMessage(m_hWnd,WM_CHAR,'a',0x001E0001);";
int len=_tcslen(SendText);
for (int i=0;i<len;i++)
{
::PostMessage(m_hWnd,WM_CHAR,SendText[i],0); // lparam 不需要准确的值
}