向其他程式傳送中文字元

2021-09-07 21:25:40 字數 3004 閱讀 5081

老問題,最近做了乙個自定義詞組程式為的是自動向某個輸入框傳送字串,其中

的核心函式是取得當前滑鼠下的視窗控制代碼後向該視窗中擁有焦點的輸入欄傳送中文或

西文字元,在記事本下傳送中文或西文均正常,但向ie,word,excel等傳送

西文正常而中文卻出現亂碼,開啟輸入法後傳送又正常了,不知是什麼問題,

怎麼解決?廢話少說,不歡迎灌水!請發修改後的源程式,本人除錯成功後立

即給分!!!!!!!

--------------第一種方法------------

這種方法在中文輸入法開啟的情況下中西文都正常,

但我不想用這種費事的辦法.

------------------------------------

//模擬按鍵函式

procedure tform1.sendkeys(ssend:string);

vari:integer;

sstr:string;

focushld,windowhld:hwnd;

threadld:dword;

ch: byte;

begin

windowhld:=getforegroundwindow;

threadld:=getwindowthreadprocessid(windowhld,nil);

attachthreadinput(getcurrentthreadid,threadld,true);

focushld:=getfocus;

getcursorpos(p); //查滑鼠座標

focushld:=windowfrompoint(p); //返回控制代碼

attachthreadinput(getcurrentthreadid,threadld,false);

if (focushld=0) or

(focushld=self.memo1.handle) or

(focushld=self.edit1.handle) or

(focushld=self.edit2.handle) or

(focushld=spinedit1.handle)  then

begin

exit;

end;

i := 1;

while i <= length(ssend) do

begin

ch := byte(ssend[i]);

if windows.isdbcsleadbyte(ch) then

begin

inc(i);

sendmessage(focushld, wm_ime_char, makeword(byte(ssend[i]), ch), 0);

endelse

begin

sendmessage(focushld, wm_ime_char, word(ch), 0);

end;

inc(i);

end;

sendmessage(focushld, wm_ime_char, word(13), 0);

end;

//定時器定時傳送字元

procedure tform1.timer1timer(sender: tobject);

begin

sendkeys('abcd1234大話西遊');

end;

--------------第二種方法------------

這種方法用拷貝-貼上的方式,在記事本下正常,

但在word下毫無反應!

------------------------------------

procedure tgooddictform.sendkey();

vari:integer;

focushld,windowhld:hwnd;

threadld:dword;

ch: byte;

begin

windowhld:=getforegroundwindow;

threadld:=getwindowthreadprocessid(windowhld,nil);

attachthreadinput(getcurrentthreadid,threadld,true);

getcursorpos(p); //查滑鼠座標

focushld:=windowfrompoint(p); //返回控制代碼

attachthreadinput(getcurrentthreadid,threadld,false);

if (focushld=0) or (focushld=self.memo1.handle) then

begin

exit;

end;

sendmessage(focushld, wm_paste, 0, 0);

end;

//定時器定時傳送字元

procedure tform1.timer1timer(sender: tobject);

begin

edit1.selectall;

edit1.copytoclipboard;

sendkeys();

end;

to kingkong

要正確送出中文字元一定要依照微軟的ime機制, 單純用sendmessage

是不能夠的. 你可以把要送出的字元放在剪貼簿中, 使用keybd_event

這個api送出 ctrl 與 v 兩鍵的組合. 就能夠把中英文本串放到word

等軟體中, 

keybd_event(vk_control, 0, 0, 0);

keybd_event(ord('v'),   0, 0, 0);

keybd_event(ord('v'),   0, keyeventf_keyup, 0);

keybd_event(vk_control, 0, keyeventf_keyup, 0);

uses sendkey32

sendkeys('^x',true); 

傳送 control+x訊息

java 向 mysql插入中文字元亂碼問題解決

1 首先保證建立資料庫和資料表時,字元編碼為gbk或utf 8,這樣才能支援中文 2 將資料庫的連線字串改為 jdbc mysql xx 3306 dbname?useunicode true characterencoding utf 8 如果連線串是在xml檔案中,則需將 改為 如果是將連線字串...

輸出中文字元

輸出中文字元 要想在圖形中輸出中文字元,需要對輸出的中文字元進行編碼。使用iconv 函式,可以把一種編碼的字元,轉換為其他編碼的字元。下面介紹在圖形中輸出中文字元的方法,建立乙個新圖形 image imagecreate 400,200 設定背景,分配顏色 bgcolor imagecoloral...

MySQL不能插入中文字元及中文字元亂碼問題

mysql的預設編碼是latin1,不支援中文,要支援中午需要把資料庫的預設編碼修改為gbk或者utf8。在安裝後mysql之後,它的配置檔案不是很給力,不知道你們的是不是,反正我的是!開始插入中文字元的時候出現如下錯誤 error 1366 hy000 incorrect string value...