需要: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
非常感谢您的帮助 这似乎将特定的键盘布局设置为当前,可能用于指定语言(阿拉伯语?)。来自MSDN:
资料来源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646305%28v=vs.85%29.aspx
HTH公司 感谢RenderMan的提议,
但是我想在Visual Lisp代码中调用这个VB命令,但不知道应该调用哪个外部对象:cry: 最后,我找到了语法:
(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什么也不做。
谁知道为什么? Ahankhahah-访问外部对象时必须释放对象,以防止灾难性的、有时甚至致命的错误。也许这只是我的偏好,但我也选择使用vlax get或create object,以获取现有对象(如果存在),而不是总是创建所述对象的新实例。
“user32.dll”后面应该有空格吗。。。?
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")
)
不幸的是,还没有任何结果。 shell字符串为我运行(没有空格)。。。但它会在“多用户DLL…”中导致错误这不可能是好事。 伦德曼,
1-我编辑代码以涵盖您的更正。
2-我在AutoCAD中运行了它,得到的错误消息显示:
在窗口的运行编辑框(开始->运行…)中发出以下命令时这种方式:
没有错误消息,也没有任何预期结果。。。
页:
[1]