记事本动态显示文本字符


谨以此文,向微软负责记事本项目的工程师表示敬意!


注意:下面都是以 记事本已经打开 作为前提。

(如果懒,就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测试通过,如有疑问或错误,谢谢指出。


你可能感兴趣的:(C/C++)