sendmessage 傳遞字串會掉字 |
答題得分者是:aquarius
|
fivker
一般會員 ![]() ![]() 發表:24 回覆:38 積分:12 註冊:2006-12-05 發送簡訊給我 |
大家好:
在使用sendmessag時,將字串傳到記事本時,不是很穩定 比如: AAA BBB CCC sendmessage到記事本時會變成 AAABBB CCC 或是 AAA BBCCC 查了很多天的網路上的資訊,加了sleep與改用postmessage,都有這樣的問題. 不知道是不是我的程式寫法有沒寫好,還是這是sendmessage本身就存在的問題. |
pprayer
高階會員 ![]() ![]() ![]() ![]() 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
我有抓你的程式測試
用Delphi Step Over的方式trace 會發生你說的情形 下面兩行會傳輸 回車鍵給目前的視窗 keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); 不過因為正在trace , focused window 為Delphi 所以這兩行傳的命令傳給Delphi了 結果是 Notepad 沒有換到行 我猜你說的不穩定是指 在Delphi 下Run才會這樣 建議你 1. keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); 把這兩行mark 2. memostring:=str[j]; 改成 memostring:=str[j] #10; 或 memostring:=str[j] #13; 3. 另外,你傳輸字串陣列的起始值可以由1開始,不用從0開始 |
fivker
一般會員 ![]() ![]() 發表:24 回覆:38 積分:12 註冊:2006-12-05 發送簡訊給我 |
真的非常感謝pprayer,您還費心幫我測程式。
1. 您文中所提之狀況,我有注意到。 在測試時,我是以執行檔去跑,並且避免切換視窗。 以免enter鍵的的訊息,傳到其他視窗。 但仍有一兩筆,會有 「文字」或是「enter」的message消失之狀況。(如第一篇文章之情況) 2. 改用 memostring:=str[j] #10;或 memostring:=str[j] #13; ,我將原本傳遞對象「記事本」改為「listbox」,便無法換行。 真的很神奇,是不是listbox無法辨認 #10與#13??? 3.感謝pprayer的提醒,我還沒發現到 哈。 ===================引 用 pprayer 文 章=================== 我有抓你的程式測試 用Delphi Step Over的方式trace 會發生你說的情形 下面兩行會傳輸 回車鍵給目前的視窗 keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); 不過因為正在trace , focused window 為Delphi 所以這兩行傳的命令傳給Delphi了 結果是 Notepad 沒有換到行 我猜你說的不穩定是指 在Delphi 下Run才會這樣 建議你 1. keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); 把這兩行mark 2. memostring:=str[j]; 改成 memostring:=str[j] #10; 或 memostring:=str[j] #13; 3. 另外,你傳輸字串陣列的起始值可以由1開始,不用從0開始 |
pprayer
高階會員 ![]() ![]() ![]() ![]() 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
|
fivker
一般會員 ![]() ![]() 發表:24 回覆:38 積分:12 註冊:2006-12-05 發送簡訊給我 |
原來如此,感謝您的說明.
因為我沒碰過wmpaint,可能需要再花時間研究. 我推測發生原因,可能是因為使用者的電腦過於忙碌, 導致字元傳遞順序錯亂. 原本 AAA enter BBB 變成 AAA BBB ENTER (以上只是推測) 目前我修改方式 1. keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); 改為 sleep(5); 先以這樣的方式處理.(接下來只希望老天幫幫忙了@@) ===================引 用 pprayer 文 章=================== 就我的理解 listbox 這種 listcontrol 把Data的內容 和 繪圖 分開處理 listbox 是一行一行地 drawText 是在Canvas 上把字串畫上去 你字串表現出來是什麼樣 它畫出來就是什麼 所以要表現出換行要 先變更他的Items 然後呼叫 WMPaint 讓物件重畫 |
aquarius
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
keybd_event 不建議在 Windows 2000 以上的系統使用, 可以改用 SendInput
可參考這2篇 http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=86597 http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=69142
------
水瓶男的blog: http://791909.blogspot.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |