佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: BillyG

四个 VB 问题~

[复制链接]
发表于 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的位置。。。
回复

使用道具 举报


ADVERTISEMENT

发表于 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 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-9-2024 05:26 PM , Processed in 0.087089 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表