15,978
社区成员
发帖
与我相关
我的任务
分享
win7+vs2008 express 下通过:
/****************************************************************************
参考: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 不需要准确的值
}