16,472
社区成员
发帖
与我相关
我的任务
分享
//
LPARAM MakeKeyLparam1(int VirtualKey, int flag)
{
LPARAM s;
unsigned char firstByte;
// if (flag == WM_KEYDOWN) firstByte = 0;
// else firstByte = 0xc0;
switch (flag)
{// 16–23 Specifies the scan code.
case WM_KEYDOWN: firstByte = 0; break;// 0000 0000
case WM_KEYUP: firstByte = 0xC0;break;// 1100 0000
case WM_CHAR: firstByte = 0x20;break;// 0010 0000
case WM_SYSKEYDOWN: firstByte = 0x20;break;
case WM_SYSKEYUP: firstByte = 0xE0;break;// 1110 0000
case WM_SYSCHAR: firstByte = 0xE0;break;// 1110 0000
}
//
int scanCode;
scanCode = MapVirtualKey(VirtualKey, 0);
afxDump << VirtualKey << ";" << scanCode << "\n";
//
unsigned char secondByte;
secondByte = scanCode & 0xff;
s = (firstByte << 24) | (secondByte << 16) | 0x0001;
//
return s;
}
void CToNotePadDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HWND hwnd=::FindWindow("NotePad","无标题 - 记事本");
if( hwnd)
{
// ::BringWindowToTop(hwnd);
#if 0 // Alt+F
// keybd_event(VK_MENU,0,0,0);
// keybd_event('F',0,0,0);
// keybd_event('F',0,KEYEVENTF_KEYUP,0);
// keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
// CTRL+O
keybd_event(VK_CONTROL,0,0,0);
keybd_event('O',0,0,0);
keybd_event('O',0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
// ::PostMessage(hwnd, WM_COMMAND,MAKEWPARAM(2,BN_CLICKED),NULL);//打开“打开”对话框 //第2句
Sleep(100);
hwnd=::FindWindow(NULL,"打开");
// 1148 = 0x47C cmb13 ComboBoxEx32
HWND hCmb13 = ::GetDlgItem(hwnd,0x047C);
if(hCmb13)
{
Sleep(500);
::SendMessage(hCmb13,WM_SETTEXT,0,(LPARAM)"abc.txt");
}
#else // OK
//WM_SYSKEYDOWN
//nVirtKey = (int) wParam; // virtual-key code
//lKeyData = lParam; // key data
// Alt+F must
::PostMessage(hwnd, WM_SYSKEYDOWN, VK_MENU, MakeKeyLparam(VK_MENU,WM_SYSKEYDOWN));
::PostMessage(hwnd, WM_SYSKEYDOWN, 'F', MakeKeyLparam('F',WM_SYSKEYDOWN));
::PostMessage(hwnd, WM_CHAR, 'F', MakeKeyLparam('F',WM_CHAR));
::PostMessage(hwnd, WM_SYSKEYUP, 'F', MakeKeyLparam('F',WM_SYSKEYUP));
::PostMessage(hwnd, WM_KEYUP, VK_MENU, MakeKeyLparam(VK_MENU,WM_KEYUP));
// Ctrl + O
// ::PostMessage(hwnd, WM_SYSKEYDOWN, VK_CONTROL, MakeKeyLparam1(VK_CONTROL,WM_SYSKEYDOWN));
// ::PostMessage(hwnd, WM_SYSKEYDOWN, 'O', MakeKeyLparam1('O',WM_SYSKEYDOWN));
// ::PostMessage(hwnd, WM_CHAR, 'O', MakeKeyLparam1('O',WM_CHAR));
// ::PostMessage(hwnd, WM_SYSKEYUP, 'O', MakeKeyLparam1('O',WM_SYSKEYUP));
// ::PostMessage(hwnd, WM_KEYUP, VK_CONTROL, MakeKeyLparam1(VK_CONTROL,WM_KEYUP));
// ::PostMessage(hwnd, WM_COMMAND,MAKEWPARAM(2,BN_CLICKED),NULL);//“打开”对话框
Sleep(110);
hwnd=::FindWindow(NULL,"打开");
// 1148 = 0x47C cmb13 ComboBoxEx32
HWND hCmb13 = ::GetDlgItem(hwnd,0x047C);
//
if(hCmb13)
{
Sleep(500);
::SendMessage(hCmb13,WM_SETTEXT,0,(LPARAM)"abc.txt");
}
#endif
}
}
BOOL SendCharToNotepand(UINT vKey)
{
BOOL bRet = FALSE;
HWND hNotePad = FindWindow(_T("Notepad"), NULL);
HWND hEdit = FindWindowEx(hNotePad, NULL, _T("Edit"), NULL);
if(hEdit)
{
bRet = ::PostMessage(hEdit, WM_CHAR, vKey, 0);
}
return bRet;
}
HWND formHandle=NULL;
HWND childHandle=NULL;
formHandle=FindWindow(NULL,"记事本窗体名字");
if(formHandle==NULL) return;
childHandle=FindWindowEx(formHandle,NULL,NULL,NULL);//看spy++,第一个子句柄就是编辑框,找到这个句柄,就可以发送消息了
if(childHandle==NULL) return;
PostMessage(childHandle,WM_CHAR,'2',0);//这里发送消息就能在记事本的编辑框里面显示了