Bryco 发表于 2006-4-29 16:29:16

帽子

我们总是在cad中使用大写字母,所以写电子邮件等并找到大写字母让我发疯。我想我有一个解决方案,这要归功于MP和dubb不小心大喊大叫。
尽管这实际上是一个直接的副本,但我花了一个小时才想出一种方法让它在我想喊的时候大喊大叫。Api有点棘手。
如果有更好的方法,我洗耳恭听。
Option Explicit
Private WithEvents AutoCAD As AcadApplication
Private Declare Function FindWindow _
    Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Private Declare Function GetActiveWindow _
    Lib "user32" () As Long
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, _
    SCANF_KEYDOWN = &H28
Public Sub Acadstartup()
Set AutoCAD = Application
AutoCAD.WindowState = acMax
ThisDrawing.WindowState = acMax
End Sub
Private Sub AutoCAD_AppActivate()
    Set AutoCAD = Application
    Dim Shout As Long
    Dim Key As Long
    Key = GetKeyState(VKC_CAPSLOCK)
    If GetActiveWindow = FindWindow("wndclass_desked_gsk", vbNullString) Then
      If Key = 1 Then
            Shout = SCANF_KEYEXT Or SCANF_KEYNOTEXT
      End If
    Else
      If Key = 0 Then
            Shout = SCANF_KEYDOWN
      End If
    End If
    If Shout Then ToggleShout (Shout)
End Sub
Private Sub AutoCAD_AppDeactivate()
    If GetKeyState(VKC_CAPSLOCK) = 1 Then
      ToggleShout (SCANF_KEYEXT)
    End If
End Sub
Sub ToggleShout(Shout As Long)
      
    Call keybd_event( _
      VKC_CAPSLOCK, _
      MapVirtualKey(VKC_CAPSLOCK, TRANSLATE_TO_SCANCODE), _
      Shout Or SCANF_KEYNOTEXT, _
      NULL_POINTER)
    Call keybd_event( _
      VKC_CAPSLOCK, _
      MapVirtualKey(VKC_CAPSLOCK, TRANSLATE_TO_SCANCODE), _
      Shout Or SCANF_KEYUP, _
      NULL_POINTER)
End Sub

**** Hidden Message *****

Jeff_M 发表于 2006-4-29 18:05:38

好文章。您需要VB才能下载工作吗?

Bryco 发表于 2006-4-30 10:52:51

所有 dll 都位于 C:\WINNT\system32 中,但如果这有所作为,则其中一些以大写字母命名。

Jeff_M 发表于 2006-4-30 14:31:12

大写没有区别..只要文件位于系统文件夹中并指向注册表...
页: [1]
查看完整版本: 帽子