为什么按方向键显示4个

xzp1030 2004-05-14 08:29:17
做一个后台运行的程序,把在键盘上按下的所有键都记录下来。按一些字母键还可以只显示一个,可按方向键时,显示4个(我是把键盘上按下的所有键记录在richtext中内)uparrowuparrowuparrowuparrow,可我只按了一下键盘啊。
部分代码如下:

Public Function EnableKBDHook()
If hnexthookproc <> 0 Then
Exit Function
End If
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, 0)
If hnexthookproc <> 0 Then
EnableKBDHook = hnexthookproc
End If
End Function

Public Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
MyKBHFunc = 0 '信息要处理
If iCode < 0 Then
MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
Exit Function
End If
If Not ConvChar(wParam) Then
Call UnHookKBD
frmwin.Show
Exit Function
End If
Call CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
End Function

Private Function ConvChar(ByVal vData As Long) As Boolean
ConvChar = True
Dim KeyResult As Integer
Select Case vData
Case 107 '小键盘+
frmwin.RText.Text = frmwin.RText.Text + "+"
Case 109 '小键盘—
frmwin.RText.Text = frmwin.RText.Text & "-"
Case 106 '小键盘*
frmwin.RText.Text = frmwin.RText.Text & "*"
Case 111 '小键盘/
frmwin.RText.Text = frmwin.RText.Text & "/"
Case 37
frmwin.RText.Text = frmwin.RText.Text & "leftarrow"
Case 38
frmwin.RText.Text = frmwin.RText.Text & "uparrow"
Case 39
frmwin.RText.Text = frmwin.RText.Text & "rightarrow"
Case 40
frmwin.RText.Text = frmwin.RText.Text & "downarrow"
end select
end function
高手帮帮忙,解决后马上结贴。
...全文
72 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinweihong 2004-05-14
  • 打赏
  • 举报
回复
let me sese
bafony@163.com
supergreenbean 2004-05-14
  • 打赏
  • 举报
回复
偶也想看看诶~~ ^_^
yuan505@163.net
xzp1030 2004-05-14
  • 打赏
  • 举报
回复
to:zhujiechang(小朱) 能留下你的mail吗。我给您发过去,您也帮我检查一下。
xzp1030 2004-05-14
  • 打赏
  • 举报
回复
to:Kivic(享受·生活) , 我已发过去了,就麻烦你了。 :)

我编它编绎成.exe也不行,我运行的就是这些代码,怎么不行啊??
ryuginka 2004-05-14
  • 打赏
  • 举报
回复
up
zhujiechang 2004-05-14
  • 打赏
  • 举报
回复
编译成exe后,直接运行看一下。
Kivic 2004-05-14
  • 打赏
  • 举报
回复
kivic@sohu.com,发过来我看看
xzp1030 2004-05-14
  • 打赏
  • 举报
回复
我调试了一下,当程序一步一步的执行时richtext上显示的是一个。当我运行起来时就不行了,又显示4个了,这是什么原因??
xzp1030 2004-05-14
  • 打赏
  • 举报
回复
一些字母键可以,按一下只显示一个。可方向键,退格键按一下它就是richtext中写入4个。
开始监视键盘上的动作时就调用EnableKBDHook,调用的方式就是按照上面的那些代码,你是怎么调用的??
zhujiechang 2004-05-14
  • 打赏
  • 举报
回复
我看调用程序也没有不正确,这是通用的调用过程。
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, 0)
改为
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, App.ThreadID)
看一下。
wea1978 2004-05-14
  • 打赏
  • 举报
回复
我试着调用了一下,没什么问题。
wea1978 2004-05-14
  • 打赏
  • 举报
回复
看看你调用的方式。
用于windows下面的vim编辑器。 给喜欢vim的人使用。详细如下: 好吧,详细点,这里写出一些基本的命令: 【什么是vi】 vi就是linux命令行下的最著名的编辑器之一,(编辑器就是类似windows记事本的功能,不过vi功能比记事本强大无限倍!^_^),现在实际使用的都是vim,它是vi的改进版本,所以现在的vi基本上就是vim了。 【vi能做什么】 第一个功能不用多说,vi可以编辑文本文件。至于其他的功能,多得无法列举,我只说我所知的一些典型的功能应用: (1)编辑文本文件 (2)方便地阅读程序源代码 (3)当文件目录浏览器来用 (4)提供编程、调试环境 (5)利用vi执行一些脚本文件(vi有自己的脚本文件语法) (x)等等等等...... 【vi的操作模式】   vi具有两种基本模式,为输入模式(或插入模式、编辑模式)和指令模式(或命令模式)。输入模式下输入字符,文本就会显示在屏幕上;而指令模式下输入字符就解释为一个输入命令并执行,而不会显示相应的字符。理解指令模式最简单方式就是想象平时剪切、复制以及粘贴数据时所发生的情况。 使用[Esc]键可以停止当前操作(插入或者命令)重新回到指令模式,准备接受新的指令。如果本来就在指令模式下面,将会响铃一下。 【最基本的使用】 这里提供了使用vi得最基本的操作,能够实现大多数的编辑目的。如果你肯花几分钟把“最基本的使用”的内容都实践一下,那么你至少可以独立地在vim中朝你想要得方向“前进”了。如果你不想学习,那么就把它当作一个“字典”吧。 *用vi打开一个文件: 输入“vi filename”. 这里,filename就是你要打开的文件的名字,默认打开文件后vi处于指令模式。 *进入编辑模式编辑打开的文件: 输入“i”. 或输入“a”. 进入编辑模式后,你可以直接敲入想要输入的字符到文件,两者的区别是i在当前字符前面开始插入,a在当前字符后面开始插入。 *退出编辑模式: 输入“[Esc]”. 这样,将返回指令模式,准备接收你要传达给vi的指令并执行,如果之前已经在指令模式下,那么系统将响铃提醒一下。 **以下命令都是在命令模式下进行: *撤销修改: 输入“u”. 这里,相比以前的vi来说,vim支持多步撤销。 *恢复修改: 输入“[Ctrl]r”. 这里,和撤销命令相反,是撤销的撤销,也可多步。 *复制行到剪切板: 输入“yy”. *复制选定内容到剪切板: (1)输入“v”。 (2)按方向键将高亮选择的内容。 (3)输入“y”。 这里,开始输入v使vi临时进入了一个"选择模式",输入方向键可以选择,输入y将选择的内容复制剪切板。 *删除行: 输入“dd”. 注意,vi的删除等价于剪切,删除的内容会保存到剪切板中。 *删除选定内容: (1)输入“v”。 (2)按方向键将高亮选择的内容。 (3)输入“d”。 这里,开始输入v使vi临时进入了一个“选择模式”,输入方向键可以选择,输入d将选择的内容删除。 *粘贴: 输入“p”. 这样会将剪切板的内容粘贴到光标位置或者光标下一行。 *查找字符并定位到第一个匹配处: 输入“/character”. 这里character是待查找的字符,只要先输入/,再输入待查字符,最后回车即可定位到第一个匹配的字符处。 *定位到匹配查找的下一个字符处: 输入“n”. *定位到匹配查找的上一个字符处: 输入“N”. *保存文件: 输入“:w”. 注意w前面的':',输入':'之后,vim会将':'之后的输入解释为待执行的指令。 *退出: 输入“:q”. 这里,如果文件没有保存,将提示无法退出,除非你强制退出,不保存文件,或者保存退出。 *强制退出: 输入“:q!”. *保存退出: 输入“:wq”. 或输入“ZZ”. *察看帮助 输入":help". ** 另外还有一个简易的教程: 输入命令:vimtutor.

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧