JohnK 发表于 2005-4-5 15:35:43

一个无名的人。。。

... 在一个类似未命名的论坛上,贴出了对另一张海报的回复,都是令人讨厌的大写字母
一段很长的话,我的回答是--Private Declare Sub keybd_event _
    Lib "user32" _
    (ByVal virtualKeyCode As Byte, _
    ByVal stubbed As Byte, _
    ByVal flags As Long, _
    ByVal pointerToExtraInfo As Long)
Private Declare Function MapVirtualKey _
    Lib "user32" _
    Alias "MapVirtualKeyA" _
    (ByVal virtualKeyCode As Long, _
    ByVal translate As Long) _
    As Long
Private Declare Function GetKeyState _
    Lib "user32" _
    (ByVal virtualKeyCode As Long) _
    As Long
   
Private Const _
    VKC_CAPSLOCK = &H14, _
    TRANSLATE_TO_SCANCODE = 0, _
    SCANF_KEYUP = &H2, _
    SCANF_KEYEXT = &H1, _
    SCANF_KEYNOTEXT = &H0, _
    NULL_POINTER = 0
   
Sub StopShouting()
    If (GetKeyState(VKC_CAPSLOCK) And 1) Then
      Call keybd_event( _
            VKC_CAPSLOCK, _
            MapVirtualKey(VKC_CAPSLOCK, TRANSLATE_TO_SCANCODE), _
            SCANF_KEYEXT Or SCANF_KEYNOTEXT, _
            NULL_POINTER)
      Call keybd_event( _
            VKC_CAPSLOCK, _
            MapVirtualKey(VKC_CAPSLOCK, TRANSLATE_TO_SCANCODE), _
            SCANF_KEYEXT Or SCANF_KEYUP, _
            NULL_POINTER)
    End If
End Sub
Sub Main()
    Call StopShouting
End Sub
一个人给我发了一封电子邮件,“;不要听起来比我现在更愚蠢…所有这些编码的东西意味着什么&引用
真实的故事
顺便说一句,如果你好奇的话……keybd_事件,MapVirtualKey和GetKeyState。

Keith™ 发表于 2005-4-5 15:46:00

哈哈哈!真有趣
嘿,顺便说一句,这很酷,你写那个议员了吗?

JohnK 发表于 2005-4-5 18:05:27

我在谷歌上找到了几个链接。他们都没有精确地做我想要的和/或在XP下工作,但当我去MSDN时,我知道我在寻找什么,这使我能够写我想要的。有趣的代码(在提供它的上下文中),但它确实有效
就垂直风格而言,我编写的VB类似于LISP

Keith™ 发表于 2005-4-5 18:43:04

谢谢您的代码位,这将非常有用。我正在考虑将其放入一个模块,当浏览器有焦点时,该模块将去掉大写锁定。这应该可以防止我对每个人大喊大叫。。。

Keith™ 发表于 2005-4-5 19:36:44

很高兴你能用它做点什么,基思。我把它作为一个笑话写下来并贴出来——当工作的小伙子们发现它实际上是功能性的时,他们就把它丢了。诚然,我们是一群奇怪的人

Keith™ 发表于 2005-4-5 21:34:10

那时我发现我是最有趣的。我说了出来,笑得差点尿裤子
Keith,让它在任何时候启动TEXT,DTEXT都能打开大写字母。

Jeff_M 发表于 2005-4-5 23:12:33

我可以做到…寻找一个整洁的小VBA应用程序即将来到你附近的沼泽。。

JohnK 发表于 2005-4-8 09:20:41

好的,男孩和女孩们……这是第一个化身……如果你数一下上面的代码,这就是第二个。我不得不对代码做了很多修改,这样它才能在其他Windows平台上正常工作,但最初的想法归功于MP
前提是,当窗口变为活动时,它会通知操作系统,我们可以用一个简单的计时器拦截这些调用,获取活动窗口,确定它来自哪个应用程序,如果是AutoCAD,则打开大写锁定如果是浏览器窗口,则关闭大写锁定。好吧,这就是它应该如何工作的
不幸的是,我没有在这里安装FireFox,因此我无法验证它是否能正常工作。如果任何人对它的正常工作有问题,请给我发送浏览器窗口或AutoCAD窗口的屏幕截图,我将尝试解决该问题
然后给我一些反馈…
享受。我知道我会用它。。。

Keith™ 发表于 2005-4-8 09:25:57

它在Firefox和Autocad中运行良好。这很甜蜜。

Jeff_M 发表于 2005-4-8 09:41:30

你看到了吗,它在systray中放置了一个小图标?要关闭应用程序,只需右键单击图标并选择退出,否则它将在后台运行
在我的测试中观察到总内存使用量在3到5兆之间,虽然对于应用程序的大小来说有点高,但我认为大部分都可以归因于在系统中运行所需的开销。
页: [1] 2
查看完整版本: 一个无名的人。。。