推 linpien:先推再說了! 06/30 18:38
※ 引述《ChrisTorng (ChrisTorng)》之銘言:
: Dev 0624 在 Vista 下,目前發現有
: Windows Live Messenger 8.5.1238.0601 英文版與
: Visual Studio 2005 SP1 繁體中文版
: 任何一個送字方法均無效,包括剪貼簿。
: 另外印象中,以前開啟偽蝦米時,
: 按 Ctrl-Shift 可切到系統的官蝦與新注音,而偽蝦自己會關掉。
: 現況是按 Ctrl-Shift 時,官蝦/新注音會出來,
: 但偽蝦還是在,而偽蝦會攔截掉所有的按鍵,官蝦/新注音並不會收到按鍵。
經測試
在 Vista 的 Windows Live Messenger 8.1.0178 中文版上是可以正常輸入的
另 Space 和 Backspace 鍵的作用亦是正常的
但目前手邊沒有 8.5 版和 VS2005 可以測試
不確定問題所在,有機會會再測試
至於和系統輸入法衝突的問題
是因為我還沒有測試關於在 Vista 下控制系統輸入法的這個部份
(不過初步測試發現,原本在 XP 下控制的方式在 Vista 下行不通 ><)
* * * *
目前已知的 Bug,是 Dev0624 在剪貼簿送字時
會有目標視窗尚未執行貼上的動作前,剪貼簿的內容就被復原了
因此會貼上先前剪貼簿內的文字,而非想輸入的文字
(以下是和程式設計有關的內容,沒有興趣的人可以跳過 ^^)
問題發生的原因是這樣的
Vista 非常神奇的禁止了 VB 的 Sendkeys 函數的運作
因此,為了修正這個問題
我改成使用 Windows API : SendInput 函數來實作 Sendkeys
但是目前遇到的瓶頸是,原本的 VB Sendkeys 有第二個參數 Wait
可以在確認送出的按鍵已經被處理後才返回函數
但使用 SendInput 實作時,卻做不到一樣的效果
因此我查了很多文件,是有找到一些解決辦法,可是不知道為什麼我做出來就是不能用
比方說
-----------------------
If Wait Then
Do While PeekMessage(KeyboardMsg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)
TranslateMessage KeyboardMsg
DispatchMessage KeyboardMsg
Loop
End If
----------------------
這個解決方法最常見,但一樣沒用 ^^"
還有一個解決辦法是用 SendMessage 來實作,但是這個函數的相容性較差
我會繼續查查看有沒有什麼好的解決辦法(當然,也希望有前輩可以提示一些作法)
但是在這個問題還沒有解決之前,我目前的折衷辦法是
只好讓 Vista 下的剪貼簿送字不會自動還原原本剪貼簿的內容
心得...Vista 真是麻煩 >"<
--
╭═╮ ╭═╮
║▌║ ╭═╮╭╮║▌╭═╮╭═══╮
║▌║ ║▌║║║║▌ ╮║▌╭╮║
║˙╰═╮║˙╰╯║║˙╭╮║║˙╰╯╯
╰═══╯╰═══╯╰═╯╰╯╰═══╯
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.172.87
※ 編輯: luke1209 來自: 203.73.172.87 (06/30 18:08)