|
发表于 7-9-2006 09:35 AM
|
显示全部楼层
回复 #59 BillyG 的帖子
wParam (virtual key code)是没有大写,小写的分别。。。
另一点是,virtual key code跟ascii code不同。。。
所以,57楼直接用ascii code代替virtual key code是行不通。。。
59楼的方式对了。。。需要用VkKeyScan把ascii code转化成virtual key。。。不过还缺少shift state。。。
因为,缺少了"shift"所以你的output都是小写。。。
我们需要用shift来转换大写,小写。。。
dim VK_Key as long
dim Shift_State as long
dim KeyCode as integer
KeyCode = VkKeyScan(asc("A"))
VK_Key = KeyCode And &hFF& '= 65
Shift_State = KeyCode / &h100& '= 1
KeyCode = VkKeyScan(asc("a"))
VK_Key = KeyCode And &hFF& '= 65
Shift_State = KeyCode / &h100& '= 0
我暂时还找不到改Shift_State的方法。。。
不知道是在lParam那里改还是做另一个。。。
回复 #60 BillyG 的帖子
di是一个structure。。。有用copymemory???
应该是那个string有"杂质",不是单纯的space。。。所以你trim不到。。。
要准确的trim掉copymemory出来的result,你需要另外做trim的function。。。这个function需要判断出chr(0)在那个string的位置。。。 |
|
|
|
|
|
|
|
发表于 7-9-2006 10:10 AM
|
显示全部楼层
回复 #60 BillyG 的帖子
另一点非常重要的是用的string是dynamic还是static的。。。
Type MyStruc
StaticString as String * 50 'Static string
DynamicString as string 'Dynamic string
End Type
如果用的是dynamic string,需要在copymemory之前allocate memory space不然你会crash掉program
dim di as MyStruc
di.DynamicString = space(50) |
|
|
|
|
|
|
|
楼主 |
发表于 8-9-2006 08:26 PM
|
显示全部楼层
Private Const VK_RETURN = &HD 'Enter
Private Const VK_SHIFT = &H10 'Shift
Private Const VK_TAB = &H9 'Tab
Delay 100
PostMessage test_hwnd, WM_CHAR, VK_TAB, 0
Delay 100
PostMessage test_hwnd, WM_CHAR, VK_SHIFT, 0 Delay 100
PostMessage test_hwnd, WM_KEYDOWN, VK_TAB, 0
PostMessage test_hwnd, WM_KEYUP, 0, 0
Delay 100
PostMessage test_hwnd, WM_KEYDOWN, VK_SHIFT, 0
PostMessage test_hwnd, WM_KEYUP, 0, 0
请问,上面的用法对吗?我用来用去都没效果。。。 |
|
|
|
|
|
|
|
发表于 9-9-2006 10:50 AM
|
显示全部楼层
WM_CHAR是自动被generate出来的。。。
它是用来转换virtual key去ascii code。。。
The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed.
所以,VK_SHIFT不可能generate出WM_CHAR。。。
至于,VK_TAB,我就不确定能不能。。。
tab的virtual key跟ascii code一样,是9。。。
还有一个是tab的scan code。。。15。。。
dim scancode_tab as byte
scancode_tab = &hF '= Scancode of tab
lParam = scancode_tab * &h10000 '= &hF0000
PostMessage test_hwnd, WM_CHAR, VK_TAB, lParam
********************************************************
这个我还不能确定问题出在那里。。。或者你可以试试以下的code
dim scancode_tab as byte
dim repeat as long
dim keyState as long 'for WM_KEYUP
dim lParam as long
scancode_tab = &hF '= Scancode of tab
repeat = &h1&
keyState = &hC0000000
lParam = (scancode_tab * &h10000) & repeat '= &hF0001
PostMessage test_hwnd, WM_KEYDOWN, VK_TAB, lParam
PostMessage test_hwnd, WM_CHAR, VK_TAB, lParam
lParam = lParam & keyState '= &hC00F0001
PostMessage test_hwnd, WM_KEYUP, VK_TAB, lParam
[ 本帖最后由 meemee 于 9-9-2006 10:56 AM 编辑 ] |
|
|
|
|
|
|
| |
本周最热论坛帖子
|