Ahankhah 发表于 2022-7-6 08:20:17

需要:vlisp migra的vb代码

大家好,
有人能帮我把vb代码转换成vlisp吗?

Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal Flags As Long) As Long
LoadKeyboardLayout "00000409", 1
End Function


 
非常感谢您的帮助

BlackBox 发表于 2022-7-6 08:35:33

这似乎将特定的键盘布局设置为当前,可能用于指定语言(阿拉伯语?)。来自MSDN:
 
 
资料来源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646305%28v=vs.85%29.aspx
 
HTH公司

Ahankhah 发表于 2022-7-6 08:40:48

感谢RenderMan的提议,
但是我想在Visual Lisp代码中调用这个VB命令,但不知道应该调用哪个外部对象:cry:

Ahankhah 发表于 2022-7-6 08:51:49

最后,我找到了语法:
(vl-load-com)
(defun C:English ()
(vlax-invoke
(vlax-create-object "WScript.Shell")
"run"
"rundll32.exe user32.dll,LoadKeyboardLayout 00000409 1"
)
)
(defun C:Persian ()
(vlax-invoke
(vlax-create-object "WScript.Shell")
"run"
"rundll32.exe user32.dll,LoadKeyboardLayout 00000429 1"
)
)
 
但是,尽管没有错误消息,windows什么也不做。
 
谁知道为什么?

BlackBox 发表于 2022-7-6 08:55:01

Ahankhahah-访问外部对象时必须释放对象,以防止灾难性的、有时甚至致命的错误。也许这只是我的偏好,但我也选择使用vlax get或create object,以获取现有对象(如果存在),而不是总是创建所述对象的新实例。
 
“user32.dll”后面应该有空格吗。。。?

Ahankhah 发表于 2022-7-6 09:05:00

 
RenderMan,你说得对,谢谢你的提示。
因此,代码应替换为以下代码:
(vl-load-com)
(defun ChangeLanguage (lang / shell)
(setq shell (vlax-get-or-create-object "WScript.Shell"))
(vlax-invoke
shell
"run"
(strcat "rundll32.exe user32.dll, LoadKeyboardLayout " lang " 1")
)
(vlax-release-object shell)
)
(defun C:Persian ()
(ChangeLanguage "00000429")
)
(defun C:English ()
(ChangeLanguage "00000409")
)
不幸的是,还没有任何结果。

BlackBox 发表于 2022-7-6 09:12:41

shell字符串为我运行(没有空格)。。。但它会在“多用户DLL…”中导致错误这不可能是好事。

Ahankhah 发表于 2022-7-6 09:25:28

伦德曼,
1-我编辑代码以涵盖您的更正。
2-我在AutoCAD中运行了它,得到的错误消息显示:
在窗口的运行编辑框(开始->运行…)中发出以下命令时这种方式:
没有错误消息,也没有任何预期结果。。。
页: [1]
查看完整版本: 需要:vlisp migra的vb代码