乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 58|回复: 3

帽子

[复制链接]

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-4-29 16:29:16 | 显示全部楼层 |阅读模式
我们总是在cad中使用大写字母,所以写电子邮件等并找到大写字母让我发疯。我想我有一个解决方案,这要归功于MP和dubb不小心大喊大叫。
尽管这实际上是一个直接的副本,但我花了一个小时才想出一种方法让它在我想喊的时候大喊大叫。Api有点棘手。
如果有更好的方法,我洗耳恭听。
  1. Option Explicit
  2. Private WithEvents AutoCAD As AcadApplication
  3. Private Declare Function FindWindow _
  4.     Lib "user32" Alias "FindWindowA" _
  5.     (ByVal lpClassName As String, _
  6.     ByVal lpWindowName As String) As Long
  7. Private Declare Function GetActiveWindow _
  8.     Lib "user32" () As Long
  9. Private Declare Sub keybd_event _
  10.     Lib "user32" _
  11.     (ByVal virtualKeyCode As Byte, _
  12.     ByVal stubbed As Byte, _
  13.     ByVal flags As Long, _
  14.     ByVal pointerToExtraInfo As Long)
  15. Private Declare Function MapVirtualKey _
  16.     Lib "user32" _
  17.     Alias "MapVirtualKeyA" _
  18.     (ByVal virtualKeyCode As Long, _
  19.     ByVal translate As Long) _
  20.     As Long
  21. Private Declare Function GetKeyState _
  22.     Lib "user32" _
  23.     (ByVal virtualKeyCode As Long) _
  24.     As Long
  25.    
  26. Private Const _
  27.     VKC_CAPSLOCK = &H14, _
  28.     TRANSLATE_TO_SCANCODE = 0, _
  29.     SCANF_KEYUP = &H2, _
  30.     SCANF_KEYEXT = &H1, _
  31.     SCANF_KEYNOTEXT = &H0, _
  32.     NULL_POINTER = 0, _
  33.     SCANF_KEYDOWN = &H28
  34. Public Sub Acadstartup()
  35.   Set AutoCAD = Application
  36.   AutoCAD.WindowState = acMax
  37.   ThisDrawing.WindowState = acMax
  38. End Sub
  39. Private Sub AutoCAD_AppActivate()
  40.     Set AutoCAD = Application
  41.     Dim Shout As Long
  42.     Dim Key As Long
  43.     Key = GetKeyState(VKC_CAPSLOCK)
  44.     If GetActiveWindow = FindWindow("wndclass_desked_gsk", vbNullString) Then
  45.         If Key = 1 Then
  46.             Shout = SCANF_KEYEXT Or SCANF_KEYNOTEXT
  47.         End If
  48.     Else
  49.         If Key = 0 Then
  50.             Shout = SCANF_KEYDOWN
  51.         End If
  52.     End If
  53.     If Shout Then ToggleShout (Shout)
  54. End Sub
  55. Private Sub AutoCAD_AppDeactivate()
  56.     If GetKeyState(VKC_CAPSLOCK) = 1 Then
  57.         ToggleShout (SCANF_KEYEXT)
  58.     End If
  59. End Sub
  60. Sub ToggleShout(Shout As Long)
  61.       
  62.     Call keybd_event( _
  63.         VKC_CAPSLOCK, _
  64.         MapVirtualKey(VKC_CAPSLOCK, TRANSLATE_TO_SCANCODE), _
  65.         Shout Or SCANF_KEYNOTEXT, _
  66.         NULL_POINTER)
  67.     Call keybd_event( _
  68.         VKC_CAPSLOCK, _
  69.         MapVirtualKey(VKC_CAPSLOCK, TRANSLATE_TO_SCANCODE), _
  70.         Shout Or SCANF_KEYUP, _
  71.         NULL_POINTER)
  72. End Sub

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-4-29 18:05:38 | 显示全部楼层
好文章。您需要VB才能下载工作吗?
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-4-30 10:52:51 | 显示全部楼层
所有 dll 都位于 C:\WINNT\system32 中,但如果这有所作为,则其中一些以大写字母命名。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-4-30 14:31:12 | 显示全部楼层
大写没有区别..只要文件位于系统文件夹中并指向注册表...
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 18:05 , Processed in 2.089819 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表