谨以此文,向微软负责记事本项目的工程师表示敬意!
注意:下面都是以 记事本已经打开 作为前提。
(如果懒,就ShellExecute自己打开记事本,然后显示方式SW_XXX、设置焦点SetFocus啥的,怎么方便怎么设置)
1. 利用Application向记事本发送WM_CHAR消息,然后动态显示英文字符。
HWND hNotepad = ::FindWindow("Notepad", NULL); // 获取记事本句柄
HWND hNoteEdit = ::ChildWindowFromPoint(hNotepad, CPoint(20, 20)); // 获取记事本编辑框控件的句柄 (PS:这些消息发给WM_CHAR就不是我们想要的了)
::SendMessage(hNoteEdit, WM_CHAR, 'A', 0); // 给记事本发送WM_CHAR消息
2. 利用Application向记事本发送WM_IME_CHAR消息,动态显示中文字符。
HWND hNotepad = ::FindWindow("Notepad", NULL); // 获取记事本句柄
HWND hNoteEdit = ::ChildWindowFromPoint(hNotepad, CPoint(20, 20)); // 获取记事本编辑框控件的句柄 (PS:这些消息发给WM_CHAR就不是我们想要的了)
::SendMessage(hNoteEdit, WM_IME_CHAR, '你', 0); // 给记事本发送WM_IME_CHAR消息
3. 这次Application就不发送消息了,keydb_event模拟键盘操作,往记事本里动态写。
这里,就不需要获取啥编辑框控件句柄了,如果记事本在需要的时候已经获取焦点,那连获取记事本句柄都省了。
关键就是keybd_event的使用。英文字符就不多说了,如下
keybd_event(0x41, 0, 0, 0);
// 具体的那些虚拟键码和参数MSDN很详细
// 这里注意一下,第三个参数如果不设置 KEYEVENTF_KEYUP 就默认按下··· 那不好意思了,第二次设置 KEYEVENTF_KEYUP 模拟抬起就可以了。
你以为这样就结束了吗?图样图森破!
打英文字符,国人还是很难看懂的;还是中文比较靠谱。
char show[] = "HUANYING LAI DAO ZHONGGUO "; // 这里拼音必须是大写,并且按照拼写习惯加上空格
// (最好让输入法能识别的词组分开,单个字的拼音容易不和谐)
// 如果你的电脑输入法,默认是美式键盘,那就在这里先keydb_event模拟按下 Ctrl+Shift 或者 Ctrl+Space 来调出中文输入法(注意按键的按下抬起顺序)
for (int i = 0; i < strlen(show); ++i)
{
keybd_event(show[i], 0, 0, 0);
keybd_event(show[i], 0, KEYEVENTF_KEYUP, 0);
}
以上方法,VC6.0测试通过,如有疑问或错误,谢谢指出。