/db_自贡黄明儒_ 发表于 2016-9-6 16:22:35

切换输入法的Ctrl+空格

本帖最后由 /db_自贡黄明儒_ 于 2016-9-6 16:32 编辑

wscript.shell大有可为

objwsh.SendKeys strRead                      '向当前活动窗口发送按键
'下面是操作键的发送代码
退格键             {BACKSPACE}、{BS} 或 {BKSP}
BREAK            {BREAK}
CAPS LOCK          {CAPSLOCK}
DEL 或 DELETE      {DELETE} 或 {DEL}
向下键             {DOWN}
END                {END}
ENTER            {ENTER} 或 ~
ESC                {ESC}
HELP               {HELP}
HOME               {HOME}
INS 或 INSERT      {INSERT} 或 {INS}
向左键             {LEFT}
NUM LOCK         {NUMLOCK}
PAGE DOWN          {PGDN}
PAGE UP            {PGUP}
向右键             {RIGHT}
SCROLL LOCK      {SCROLLLOCK}
TAB                {TAB}
向上键             {UP}
F1 至 F12          {F1} 至 {F12}
SHIFT            +
CTRL               ^
ALT                %
+ { 等修饰符       {+} {{} {^} {}} {%}

'如果在按 e 和 c 的同时按 SHIFT 键,则发送字符串参数 +(ec)
'可发送一个键的重复键击。如10次x,为{x 10},但不可发送10次组合键,如Ctrl+x
'不能发送 PRINT SCREEN 键 {PRTSC}
'常用 Wscript.Sleep 来延时若干毫秒发送按键,避免程序来不及响应
(defun sendkeys(keys)
(or *WSH* (setq *WSH* (vlax-get-or-create-object "wscript.shell")))
(vlax-invoke-method *WSH* 'sendkeys keys)
(princ)
)

/db_自贡黄明儒_ 发表于 2016-9-6 16:24:17

本帖最后由 /db_自贡黄明儒_ 于 2016-9-6 16:29 编辑

哦,原来是这样的
**** Hidden Message *****中英文输入自动切换,有些高手写了这个程序,但是要先进行设置,这很不爽。我们可以向键盘发送ctrl+空格来切换,剩下的问题就是如何判断是否在中文(或者英文)状态下。先发送一个字母,根据返回结果来判断?

HLCAD 发表于 2016-9-6 17:17:33

SENDKEY,曾经用过,但不明其理,黄大侠的文章也许对我有帮助

Lisphk 发表于 2016-9-6 17:17:55

原来是怎么样的呢{:1_9:}

hao3ren 发表于 2016-9-7 02:36:59

看看黄大师最近的作品

/db_自贡黄明儒_ 发表于 2016-12-7 11:42:09

按高飞鸟大师的DynamicWrapperX注册后,终于可以关闭中文输入法了{:1_12:}

;;不论CapsLock是否锁定,小写返回0,大写1
;;&H14 十六进制;20十进制
(DEFUN CapsLock ()
;;(setq :VK_CAPITAL 20)
(setq *wrap* (vlax-create-object "DynamicWrapperX"))
(vlax-invoke *wrap* 'Register "user32" "GetKeyState" "i=l" "r=l")
(vlax-invoke *wrap* 'GetKeyState 20);同(vlax-invoke wrap 'GetKeyState &H14)
)

;;;GetKeyboardLayout(0) '134481924英文
;;;返回T 为英文状态
(DEFUN IMSEnglish ()
(setq *wrap* (vlax-create-object "DynamicWrapperX"))
(vlax-invoke *wrap* 'Register "user32" "GetKeyboardLayout" "i=l" "r=l")
(= (vlax-invoke *wrap* 'GetKeyboardLayout 0) 134481924)
)

**** Hidden Message *****

elitefish 发表于 2016-12-7 12:23:11

(setq :VK_CAPITAL 20)        ;0x14
(setq $DWrapX (vlax-create-object "DynamicWrapperX"))
(if $DWrapX
(progn
    ;(vlax-invoke $DWrapX 'Register "user32.dll" "keybd_event" "i=bbll" "r=l")        ;注册keybd_event函数:模拟键盘事件
    ;(vlax-invoke $DWrapX 'Register "user32.dll" "MapVirtualKey" "i=uu" "r=u")        ;注册MapVirtualKey函数:获取键盘映射
    (vlax-invoke $DWrapX 'Register "user32.dll" "GetKeyState" "i=l" "r=n")        ;注册GetKeyState函数:获取键状态
    ;(vlax-invoke $DWrapX 'Register "kernel32.dll" "Sleep" "i=d" "r=n")                ;
    )
)

;输入命令
(defun EF_SendKeys (sKeys / obj)
(setq obj (vlax-create-object "WScript.Shell"))
(vlax-invoke-method obj 'SendKeys sKeys)
(vlax-release-object obj)
)

;执行
(defun EF_AutoCapsLock:ON()
(if $EF_AutoCapsLock:Debug (princ (strcat "\n")))
(if (/= (vlax-invoke $DWrapX 'GetKeyState :VK_CAPITAL) 1)
    (EF:SendKeys "{CAPSLOCK}")
    )
)
   
(defun EF_AutoCapsLock:OFF()
(if $EF_AutoCapsLock:Debug (princ (strcat "\n")))
(if (/= (vlax-invoke $DWrapX 'GetKeyState :VK_CAPITAL) 0)
    (EF:SendKeys "{CAPSLOCK}")
    )
)

/db_自贡黄明儒_ 发表于 2016-12-7 14:43:47

本帖最后由 /db_自贡黄明儒_ 于 2016-12-7 14:44 编辑

elitefish 发表于 2016-12-7 12:23

我觉得AutoCad是用来画图的,所以很少关心处理文字。
但是在处理明细表时,得输入汉字。于是不断输入ed,处理明细;输入ed,处理明细...
可是再次输入ED是,忘了要切换输入法,结果一看是汉字,只好关闭重新输入。有一天,终于烦了,
于是我想,鼠标在命令栏,“输入法”总是英文多好。
最先看到的是elitefish大师的中英切换,便是感觉设置比较麻烦

经过多方尝试,终于可以实现。下面简单的代码在08、16下就可以实现(但在05(EN)未成功)。这毕竟是好的开头。
虽然08、16下实现了,但如果中文状态,总是会被关闭。同我的想像还是有点距离。
如果05(en)下要成功,还得注册高飞鸟大师发了DynamicWrapperX

(VLR-editor-Reactor
nil
'((:vlr-commandEnded . command-will-start))
)
(defun command-will-start (reactor command-list)
(vl-vbarun "KeyStatesCAPITAL")
)
;;KeyStatesCAPITAL上在KeyStatesCapital.dvb中定义的,当然你得先加载它,其源码如下
;;;Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
;;;Public Sub KeyStatesCAPITAL()
;;;    Set WshShell = CreateObject("wscript.shell")
;;;    If GetKeyState(&H14) = 1 Then WshShell.SendKeys "{CAPSLOCK}"
;;;End Sub


langke52 发表于 2017-3-30 01:25:22

好东西,谢谢分享

wowan1314 发表于 2017-4-27 01:54:30

回帖 我 看看看

ykfoffice 发表于 2017-4-27 12:45:16

我来测试一下,行不行”

a4587332 发表于 2017-5-4 18:15:14

看看研究成果

xinxirong 发表于 2017-5-4 23:23:47

这种东西lisp不好处理,arx很方便,c#也可以,不过碰到win10+

xinxirong 发表于 2017-5-4 23:25:43

搜狗输入法,奇形怪状的输入法就要另外处理

zman1985 发表于 2017-5-22 16:45:20

看看,学习一下
页: [1] 2 3 4
查看完整版本: 切换输入法的Ctrl+空格