vb 如何使textbox不响应ctrl+x、ctrl+c、ctrl+v等系统消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb 如何使textbox不响应ctrl+x、ctrl+c、ctrl+v等系统消息相关的知识,希望对你有一定的参考价值。

如果只拦截其中一个呢?即仅仅是不对ctrl+v做出响应,又该如何?

窗体代码
Option Explicit

Private Sub Form_Load()
hhk = SetWindowsHookEx(2, AddressOf hookproc, App.hInstance, App.ThreadID)

End Sub

Private Sub Form_Unload(Cancel As Integer)
UnhookWindowsHookEx hhk
End Sub

新建一个模块,加入代码

Option Explicit
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wparam As Long, lparam As Any) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public hhk As Long
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Public Function hookproc(ByVal icode As Integer, ByVal wparam As Long, ByVal lparam As Long) As Long
If icode > 0 Then
If GetAsyncKeyState(vbKeyControl) Then
If wparam = vbKeyX Or wparam = vbKeyC Then
hookproc = 1
Exit Function
End If
End If
End If
hookproc = CallNextHookEx(hhk, icode, wparam, ByVal lparam&)
End Function
参考技术A 其实我觉的拦截的话有点复杂了
简单点饶过去!
你可以在text获得焦点之前取得剪贴板的数据!
当Text获得焦点后,如果发现数据改变就改回去,如果Text内容被剪切了,就还原下!
参考技术B HOOK

在 Vb 6 中禁用哔声

【中文标题】在 Vb 6 中禁用哔声【英文标题】:Disable Beep Sound in Vb 6 【发布时间】:2010-03-05 17:59:43 【问题描述】:

当我在 VB 6.0 的 TextBox 中按 Ctrl+其他键时,系统会发出哔哔声。 如何在 VB 6.0 中禁用此功能?

【问题讨论】:

哔声是有意的,警告用户击键无效。为什么要禁用部分 Windows UI? 【参考方案1】:

VB 5.0/6.0 '将此代码复制并粘贴到您的 Textbox_KeyPress() 事件中。

If KeyAscii = 13 Then  

    KeyAscii = 0   

End If

Source

【讨论】:

【参考方案2】:

您需要捕获 KeyPress 事件并将 KeyAscii 代码更改为 0(您可以有条件地执行此操作,以仅禁用某些“哔哔声”)。 很像 F.Aquino 的代码,只是 KeyAscii = 13 用于禁用由 Enter 键触发的哔声。更改条件以匹配您的情况。

【讨论】:

【参考方案3】:
    Private Sub Command1_Click()
    'Beep off
    Dim res
    res = Shell("reg add " + Chr(34) + "HKEY_CURRENT_USER\Control Panel\Sound" + Chr(34) + " /t REG_SZ /v Beep /d no /f", vbHide)
    End Sub

    Private Sub Command2_Click()
    'Beep on
    Dim res
    res = Shell("reg add " + Chr(34) + "HKEY_CURRENT_USER\Control Panel\Sound" + Chr(34) + " /t REG_SZ /v Beep /d yes /f", vbHide)
    End Sub

代码生效仍需重启资源管理器/系统。

【讨论】:

以上是关于vb 如何使textbox不响应ctrl+x、ctrl+c、ctrl+v等系统消息的主要内容,如果未能解决你的问题,请参考以下文章

vb TextBox 禁止复制

vb.net如何运算一个字符串

VB.NET如何使控件不能响应KeyDown事件

vb中的DoEvents是干啥用的?

VB在textbox中怎么禁止右键菜单中的复制粘贴功能

在 Vb 6 中禁用哔声