问题描述
现在我点击一个文本框,这个文本框已经获得焦点,怎么向这个文本框里输入内容?不是我写的程序,是windows里的任意应用,使获得焦点的文本框里注入中文
解决方案
解决方案二:
这个功能看起来简单,实现起来有难度,这个代码是delphi的,主要是用了一些api,楼主参考吧://获取系统屏幕上活动窗口中具有输入焦点的控件句柄functionTTntForm2.GetActiveEdit:HWND;varh:HWND;FormThreadID,CWndThreadID:DWORD;beginresult:=0;//得到当前活动窗口h:=GetForegroundWindow;//取得本程序的线程IDFormThreadID:=GetCurrentThreadId;//取得活动窗口的线程IDCWndThreadID:=GetWindowThreadProcessId(h,nil);//将本程序线程附加入活动窗口线程AttachThreadInput(CWndThreadID,FormThreadID,true);//得到当前键盘光标所在的窗口result:=GetFocus();//取消附加的输入线程AttachThreadInput(CWndThreadID,FormThreadID,false);end;procedureTTntForm2.inputtext(sn:WideString);varh:HWND;i,asc:Integer;begin//返回具有输入焦点的窗口控件句柄h:=GetActiveEdit;//通过消息WM_IME_CHAR发送序列号fori:=1tolength(sn)dobeginasc:=ord(sn[i]);//发送文本到活动控件,用文本内码SendMessageW(h,WM_IME_CHAR,asc,0);end;end;
解决方案三:
引用1楼tcmakebest的回复:
这个功能看起来简单,实现起来有难度,这个代码是delphi的,主要是用了一些api,楼主参考吧://获取系统屏幕上活动窗口中具有输入焦点的控件句柄functionTTntForm2.GetActiveEdit:HWND;varh:HWND;FormThreadID,CWndThreadID:DWORD;beginresult:=0;//得到当前活动窗口h:=GetForegroundWindow;//取得本程序的线程IDFormThreadID:=GetCurrentThreadId;//取得活动窗口的线程IDCWndThreadID:=GetWindowThreadProcessId(h,nil);//将本程序线程附加入活动窗口线程AttachThreadInput(CWndThreadID,FormThreadID,true);//得到当前键盘光标所在的窗口result:=GetFocus();//取消附加的输入线程AttachThreadInput(CWndThreadID,FormThreadID,false);end;procedureTTntForm2.inputtext(sn:WideString);varh:HWND;i,asc:Integer;begin//返回具有输入焦点的窗口控件句柄h:=GetActiveEdit;//通过消息WM_IME_CHAR发送序列号fori:=1tolength(sn)dobeginasc:=ord(sn[i]);//发送文本到活动控件,用文本内码SendMessageW(h,WM_IME_CHAR,asc,0);end;end;
这个我试过了,关键是中文怎么发呀。SendMessage(formHandle,WM_CHAR,key,0);只能模拟键盘,关键是当切换到中文输入法的时候用这个模拟键盘输入不触发输入法。伤脑筋了