作者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)
1F:推 linpien:先推再说了! 06/30 18:38
2F:推 solaris10:辛苦了! 06/30 22:24
3F:推 hatebus:感谢 06/30 23:06
4F:推 solaris10:我完全没看过vista,也完全没用过VB,不过刚刚查了一下 06/30 23:26
6F:→ solaris10:里面也有人提到 sendkeys 在 vista 下不能用的事情 06/30 23:29
7F:→ solaris10:然後有一个人说他是VB Program Manager responsible 06/30 23:30
8F:→ solaris10:for Visual Basic 6 on Vista. 然後他说 sendkeys 在 06/30 23:31
9F:→ solaris10:vista rc1 就会修正了,谨供参考 06/30 23:31
10F:推 luke1209:这个讨论区我也有找到过,可是 Vista 都正式上市了, 07/01 17:18
11F:→ luke1209:这个问题还是存在 >< 07/01 17:18