键盘操作时通过shift+←或者→,实现文本高亮选中的效果,但是在程序中 keybd_event( VK_LSHIFT,0,0,0 );
keybd_event( VK_LEFT,0,0,0 ); keybd_event( VK_LEFT,0,KEYEVENTF_KEYUP,0);
keybd_event( VK_LSHIFT,0,EYEVENTF_KEYUP,0);这样做完后显示时只是光标往左移动了一下,但是没有高亮效果,换成VK_SHIFT也不行,但是这时候我进行“复制”“粘贴”,确实是有选中的文字发送上去,所以不知道是哪儿的问题,求教。谢谢
keybd_event( VK_LEFT,0,0,0 ); keybd_event( VK_LEFT,0,KEYEVENTF_KEYUP,0);
keybd_event( VK_LSHIFT,0,EYEVENTF_KEYUP,0);这样做完后显示时只是光标往左移动了一下,但是没有高亮效果,换成VK_SHIFT也不行,但是这时候我进行“复制”“粘贴”,确实是有选中的文字发送上去,所以不知道是哪儿的问题,求教。谢谢
keybd_event( VK_LSHIFT, MapVirtualKey( VK_LSHIFT, 0 ), 0 , 0 ); // ctrl down
Sleep(15);
keybd_event( VK_LEFT, MapVirtualKey(VK_LEFT, 0 ), 0 , 0 ); // enter down
Sleep(5);
keybd_event( VK_LEFT, MapVirtualKey(VK_LEFT, 0 ), KEYEVENTF_KEYUP , 0 ); //enter up
Sleep(15);
keybd_event( VK_LSHIFT, MapVirtualKey( VK_LSHIFT, 0 ),KEYEVENTF_KEYUP , 0 ); // Alt key up
Sleep(15);
刚才测试了下,我的可以啊,是正常的啊,可以高亮啊显示选中啊void CShiftDlg::OnOK()
{
// TODO: Add extra validation here
GetDlgItem(IDC_EDIT1)->SetFocus(); keybd_event( VK_LSHIFT, MapVirtualKey( VK_LSHIFT, 0 ), 0 , 0 ); // ctrl down
Sleep(15);
keybd_event( VK_LEFT, MapVirtualKey(VK_LEFT, 0 ), 0 , 0 ); // enter down
Sleep(5);
keybd_event( VK_LEFT, MapVirtualKey(VK_LEFT, 0 ), KEYEVENTF_KEYUP , 0 ); //enter up
Sleep(15);
keybd_event( VK_LSHIFT, MapVirtualKey( VK_LSHIFT, 0 ),KEYEVENTF_KEYUP , 0 ); // Alt key up
Sleep(15);
}void CShiftDlg::OnSetfocusEdit1()
{
// TODO: Add your control notification handler code here
int len=m_sEdit.GetLength();
((CEdit*)GetDlgItem(IDC_EDIT1))->SetSel(len,len);
}
CEdit控件失去焦点后,选中的文字高亮效果就没了,你可以用SetFocus设置CEdit焦点试试
-----------------------------------------------------------------------
编辑框勾上No hide selection,或者设置ES_NOHIDESEL 属性
shiftscan% = MapVirtualKey(VK_SHIFT, 0)
keybd_event VK_SHIFT, shiftscan, 0, 0
keybd_event VK_TAB, 0, 0, 0
keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_SHIFT, shiftscan, KEYEVENTF_KEYUP, 0
HWND hwnd=::FindWindow("Notepad","新建文本文档.txt - 记事本");
if (hwnd)
{
CWnd *pWnd=FromHandle(hwnd);
pWnd->SetActiveWindow();
pWnd->SetWindowPos(FromHandle(HWND_TOPMOST),NULL,NULL,NULL,NULL,SWP_NOSIZE|SWP_NOMOVE);
hwnd=::FindWindowEx(hwnd,NULL,"Edit",NULL);
::PostMessage(hwnd,WM_SETFOCUS,0,0);
keybd_event( VK_LSHIFT, MapVirtualKey( VK_LSHIFT, 0 ), 0 , 0 ); // ctrl down
Sleep(15);
keybd_event( VK_LEFT, MapVirtualKey(VK_LEFT, 0 ), 0 , 0 ); // enter down
Sleep(5);
keybd_event( VK_LEFT, MapVirtualKey(VK_LEFT, 0 ), KEYEVENTF_KEYUP , 0 ); //enter up
Sleep(15);
keybd_event( VK_LSHIFT, MapVirtualKey( VK_LSHIFT, 0 ),KEYEVENTF_KEYUP , 0 ); // Alt key
}
验证有效,不过打开txt后的光标不能在开始的地方。
就可以成功了。
#define WS_EX_NOACTIVATE 0x08000000L //无焦点
::SetWindowLong(m_hWnd,GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_NOACTIVATE);
::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
AfxRegisterWndClass(CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW,
::LoadCursor(NULL, IDC_ARROW),
(HBRUSH)::CreateSolidBrush(RGB(254, 254, 254))),
_T("InputEasy"),
WS_POPUP /*| WS_DISABLED*/,
0, 0, 0, 0,
pParentWnd, NULL, NULL);BOOL CMainWnd::PreCreateWindow(CREATESTRUCT& cs)
{
BOOL rt = CFrameWnd::PreCreateWindow(cs);
cs.dwExStyle &= ~WS_EX_CLIENTEDGE; //去掉边框的风格
// cs.style &= ~WS_CAPTION;
// cs.dwExStyle |= 0x08000000;
return rt;
}不能设置成 WS_EX_NOACTIVATE 0x08000000L //无焦点,这样窗体就不能处理点击了,上面有很多图片按钮的。
HWND hwnd=::FindWindow("Notepad","新建文本文档.txt - 记事本");
这样也不行,因为不确定当前的编辑框是什么窗口,可能是记事本,也可能是UE等编辑窗口。
keybd_event( VK_LEFT, 0, 0 , 0 );
keybd_event( VK_LEFT, 0, KEYEVENTF_KEYUP , 0 );
keybd_event( VK_RSHIFT, 0,KEYEVENTF_KEYUP , 0 );我已经遇到2次这个问题了,VK_RSHIFT可以,而VK_LSHIFT和VK_SHIFT都不可以,原因不详。
keybd_event( VK_LEFT, 0x45,KEYEVENTF_EXTENDEDKEY | 0,0 );
keybd_event( VK_LEFT, 0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0 );
keybd_event( VK_SHIFT, 0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0 );