作者luke1209 (Luke)
看板Liu
標題Re: [偽蝦] 偽.蝦米 Ver 3.9b & Dev 0624
時間Sat Jun 30 18:07:39 2007
※ 引述《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)
推 linpien:先推再說了! 06/30 18:38
推 solaris10:辛苦了! 06/30 22:24
推 hatebus:感謝 06/30 23:06
推 solaris10:我完全沒看過vista,也完全沒用過VB,不過剛剛查了一下 06/30 23:26
→ solaris10:裡面也有人提到 sendkeys 在 vista 下不能用的事情 06/30 23:29
→ solaris10:然後有一個人說他是VB Program Manager responsible 06/30 23:30
→ solaris10:for Visual Basic 6 on Vista. 然後他說 sendkeys 在 06/30 23:31
→ solaris10:vista rc1 就會修正了,謹供參考 06/30 23:31
推 luke1209:這個討論區我也有找到過,可是 Vista 都正式上市了, 07/01 17:18
→ luke1209:這個問題還是存在 >< 07/01 17:18