Bryco 发表于 2007-5-17 13:40:16

图纸模板文件路径在API中的位置?

我一直在创建一个VBA模块,它将简单地设置我们所有的搜索路径、文件名和文件位置(支持路径)
我需要的几乎都在Preferences集合中,但是我找不到设置图纸模板文件路径位置的方法。有人知道吗
[代码谢谢你,马克

ronjonp 发表于 2007-5-17 14:49:07

调试。打印该路径,您将找到yadayada;yadayada 即一根长字符串由分隔
如果你再加上它,效果很好
设置首选项=ThisDrawing.Application。偏好 SupportPath=Preferences.Files.SupportPath调试。打印支持路径

Bryco 发表于 2007-5-17 15:00:33

我想他'在这种情况下,你发布的内容并不't显示特定路径
从我'我看到了,有#039;无法(通过straigh VBA)设置该路径 本人'我确信它是#039;它埋在注册表的某个地方,您可以修改它以指向您的SS模板文件 只是大声思考。

Bryco 发表于 2007-5-17 15:20:28


你好,马特,
是的,谢谢,这正是我所说的,我在任何地方都找不到它
AutoCAD最近似乎在添加新功能方面做得很好,但未能在VBA中提供这些功能。关于如何以编程方式添加该路径,您还有其他建议吗
谢谢你,马克

ronjonp 发表于 2007-5-17 15:31:47

如果您知道如何通过LSP或VBA更改注册表,则可以通过这种方式进行修改
我在HKCU\Software\Autodesk\AutoCAD\R17.0\ACAD-5106:409\Profiles\[您的配置文件名]\Preferences\AecProject50\Sheet Set Template中找到了该设置;s代表ABS 2007.1。

ronjonp 发表于 2007-5-17 15:45:19


不,我知道怎么做,马特
我可以发布一个新帖子,请求帮助吗
标记

ronjonp 发表于 2007-5-17 15:47:45

FWIW,
这是我如何通过lisp实现的:
(vla-put-pagesetupoverridestemplatefile
(vla-get-files
    (vla-get-preferences
      (vlax-get-acad-object)
    )
)
"c:\\"
) 或者这个:
(setenv "AlternativePageSetUpsTemplate" "C:\\") Ron

Bryco 发表于 2007-5-17 15:57:12


罗恩,你是说页面设置在上面吗
这是指图纸模板文件位置吗
如果是这样,我确实在VBA中看到了这一点

ronjonp 发表于 2007-5-17 16:03:08


这是VBA中的Ron,但用于创建图纸和页面设置覆盖的默认模板,我需要用于其上方的方法图纸集模板文件位置再次感谢Mark

ronjonp 发表于 2007-5-17 18:05:46

把这个放在一个模块中(我认为它来自Randall Rath)
Option Explicit
'@~~~~~~~~ API Constants for Win32 Reg. ~~~~~~~~~~~@
Public Const REG_SZ = 1
Public Const REG_EXPAND_SZ = 2
Public Const REG_BINARY = 3
Public Const REG_DWORD = 4
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006
Public Const REG_OPTION_NON_VOLATILE = 0
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_OPENED_EXISTING_KEY = &H2
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
Public Const READ_CONTROL = &H20000
Public Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Public Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000
Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Public Const KEY_SET_VALUE = &H2
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_CREATE_LINK = &H20
Public Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Public Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
Public Const ERROR_SUCCESS = 0&
Public Const ERROR_ACCESS_DENIED = 5&
Public Const ERROR_NO_MORE_ITEMS = 259&
Public Const ERROR_BADKEY = 1010&
Public Const ERROR_CANTOPEN = 1011&
Public Const ERROR_CANTREAD = 1012&
Public Const ERROR_REGISTRY_CORRUPT = 1015&
'@~~~~~~~~~~~~~~~~~ API Types ~~~~~~~~~~~~~~~~@
Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
'@~~~~~~~~~~~~~~~~~~ The Declares ~~~~~~~~~~~~~~~~~~~~~@
Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
"RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
String, ByVal lpReserved As Long, lpType As Long, lpData As Any, _
dwSize As Long) As Long
Public Declare Function RegCreateKeyEx Lib "advapi32" _
Alias "RegCreateKeyExA" (ByVal hKey As Long, _
ByVal lpSubKey As String, ByVal Reserved As Long, _
ByVal lpClass As String, ByVal dwOptions As Long, _
ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, _
phkResult As Long, lpdwDisposition As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" _
Alias "RegSetValueExA" (ByVal hKey As Long, _
ByVal lpValueName As String, ByVal dwReserved As Long, _
ByVal dwType As Long, lpValue As Any, ByVal dwSize As Long) As Long
Public Declare Function RegDeleteKey Lib "advapi32.dll" _
Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Public Declare Function RegDeleteValue Lib "advapi32.dll" _
Alias "RegDeleteValueA" (ByVal hKey As Long, _
ByVal lpValueName As String) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Public Declare Function RegConnectRegistry Lib "advapi32.dll" _
Alias "RegConnectRegistryA" (ByVal lpMachineName As String, ByVal _
hKey As Long, phkResult As Long) As Long
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias _
"RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _
phkResult As Long) As Long
Public Declare Function RegEnumKey Lib "advapi32.dll" Alias _
"RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal _
lpName As String, ByVal cbName As Long) As Long
Public Declare Function RegEnumValue Lib "advapi32.dll" Alias _
"RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal _
lpValueName As String, lpcbValueName As Long, lpReserved As Long, _
lpType As Long, lpData As Byte, lpcbData As Long) As Long
Public Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias _
"RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal _
lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal _
lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Public Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
Public Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" _
(ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter _
As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long
Public Declare Function RegOpenKey Lib "advapi32.dll" _
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function OSRegQueryValue Lib "advapi32.dll" _
Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As _
String, ByVal lpValue As String, lpcbValue As Long) As Long
Public Declare Function RegReplaceKey Lib "advapi32.dll" Alias _
"RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal lpNewFile As String, ByVal lpOldFile As String) As Long
Public Declare Function RegRestoreKey Lib "advapi32.dll" Alias _
"RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, _
ByVal dwFlags As Long) As Long
Public Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias _
"RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, _
lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, _
lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, _
lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor _
As Long, lpftLastWriteTime As FILETIME) As Long
'@~~~~~~~~~~~~~~ DeleteRegKey ~~~~~~~~~~~~~~~~~~~~@
' BEWARE! WE CAN'T HELP YOU IF YOU DELETE THE WRONG KEY!
' Always back up your registry before you use any of these
' Methods. In fact, if you don't know EXACTLY what you are
' Doing, stay safe and use the built in VB Registry methods.
'@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
Public Function DeleteRegKey(lngKey As Long, SubKey As String) As Long
    Dim lngRet As Long
    lngRet = RegDeleteKey(lngKey, SubKey)
    DeleteRegKey = lngRet
End Function
'@~~~~~~~~~~~~~~ DeleteRegValue ~~~~~~~~~~~~~~~~~~@
' Delete the value of a key, please use caution.
'@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
Public Function DeleteRegValue(lngKey As Long, SubKey As String, valueName As String) As Long
    Dim lngRet As Long
    Dim lngKeyRet As Long
    lngRet = RegOpenKeyEx(lngKey, SubKey, 0, KEY_WRITE, lngKeyRet)
    If lngRetERROR_SUCCESS Then Exit Function
      lngRet = RegDeleteValue(lngKeyRet, valueName)
      DeleteRegValue = lngRet
      RegCloseKey lngKeyRet
    End Function
    '@~~~~~~~~~~~~~~~~ WriteRegLong ~~~~~~~~~~~~~~~~~~@
    ' Write a long Data type to a key
    '@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
    Public Function WriteRegLong(lngKey As Long, SubKey As String, _
      DataName As String, dataValue As Long) As Long
      Dim SEC As SECURITY_ATTRIBUTES
      Dim lngKeyRet As Long
      Dim lngDis As Long
      Dim lngRet As Long
      lngRet = RegCreateKeyEx(lngKey, SubKey, 0, "", REG_OPTION_NON_VOLATILE, _
      KEY_ALL_ACCESS, SEC, lngKeyRet, lngDis)
      If (lngRet = ERROR_SUCCESS) Or (lngRet = REG_CREATED_NEW_KEY) Or _
            (lngRet = REG_OPENED_EXISTING_KEY) Then
            lngRet = RegSetValueEx(lngKeyRet, DataName, 0&, REG_DWORD, dataValue, 4)
            RegCloseKey lngKeyRet
      End If
      WriteRegLong = lngRet
    End Function
    Public Function WriteStringValue(lngKey As Long, SubKey As String, _
      DataName As String, dataValue As String) As Long
      Dim SEC As SECURITY_ATTRIBUTES
      Dim lngKeyRet As Long
      Dim lngDis As Long
      Dim lngRet As Long
      lngRet = RegCreateKeyEx(lngKey, _
      SubKey, 0, vbNullString, _
      REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, _
      SEC, lngKeyRet, lngDis)
      'Trust me on this next line...
      If dataValueERROR_SUCCESS Then Exit Function
                'If you declare a lpData as a string (that's DataName in this function) you
                'must pass it ByVal as shown here
                lngRet = RegQueryValueEx(lngKeyRet, DataName, 0&, DataType, ByVal 0, DataSize)
                If lngRetERROR_SUCCESS Then
                  RegCloseKey lngKeyRet
                  Exit Function
                End If
                Select Case DataType
                  Case REG_SZ
                  strData = Space(DataSize + 1)
                  lngRet = RegQueryValueEx(lngKeyRet, DataName, 0&, DataType, ByVal strData, DataSize)
                  If lngRet = ERROR_SUCCESS Then
                        ReadRegVal = CVar(StripNulls(RTrim$(strData)))
                  End If
                  Case REG_DWORD
                  lngRet = RegQueryValueEx(lngKeyRet, DataName, 0&, DataType, lngData, 4)
                  If lngRet = ERROR_SUCCESS Then
                        ReadRegVal = CVar(lngData)
                  End If
                End Select
                RegCloseKey lngKeyRet
            End Function
            '@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
            ' Reads all of the subkeys under strKey. NOTE VB
            ' users, you can change this function to return
            ' a string array!
            '@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
            Public Function GetSubKeys(strKey As String, SubKey As String, ByRef SubKeyCnt As Long) As String
                Dim strValues() As String
                Dim strTemp As String
                Dim lngSub As Long
                Dim intCnt As Integer
                Dim lngRet As Long
                Dim intKeyCnt As Integer
                Dim Ft As FILETIME
                lngRet = RegOpenKeyEx(strKey, SubKey, 0, KEY_ENUMERATE_SUB_KEYS, lngSub)
                If lngRetERROR_SUCCESS Then
                  SubKeyCnt = 0
                  Exit Function
                End If
                lngRet = RegQueryInfoKey(lngSub, vbNullString, 0, 0, SubKeyCnt, _
                65, 0, 0, 0, 0, 0, Ft)
                If (lngRetERROR_SUCCESS) Or (SubKeyCnt0 Then
            StripNulls = Left$(s, i - 1)
            Else
            StripNulls = s
      End If
    End Function
    '@~~~~~~~~~~~~~~ParseString~~~~~~~~~~~~~~~~~~@
    ' Use is simple: provide the delimited string, the
    ' integer that represents the location in the string
    ' you want to return, and the character that delimits
    ' the string. Used in this module for VBA Users who
    ' Need to read the string elements returned by
    ' "GetSubKeys"
    '@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
    Public Function ParseString(strIn As String, intLoc As Integer, strDelimiter As String) As String
      Dim intPos As Integer
      Dim intStrt As Integer
      Dim intStop As Integer
      Dim intCnt As Integer
      intCnt = intLoc
      Do While intCnt > 0
      intStop = intPos
      intStrt = InStr(intPos + 1, strIn, Left$(strDelimiter, 1))
      If intStrt > 0 Then
            intPos = intStrt
            intCnt = intCnt - 1
            Else
            intPos = Len(strIn) + 1
            Exit Do
      End If
      Loop
      ParseString = Mid$(strIn, intStop + 1, intPos - intStop - 1)
    End Function
    '@~~~~~~~~~~~~ Sample of ReadRegVal ~~~~~~~~~~~~@
    Public Sub AppInfo()
      Dim strVal As String
      MsgBox ReadRegVal(HKEY_LOCAL_MACHINE, "SOFTWARE\Autodesk\AutoCAD\R15.0\ACAD-1:409", "ProductName", strVal)
      
    End Sub 这改变了我的钥匙,但我不知道;t使用图纸集进行测试
Sub SetSheetSet()
    Dim CadStart As String
    Dim KeyName As String
    Dim valueName As String
    Dim DefaultData As String
    Dim dataValue As String
   'This is my key    "HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5005:409\Profiles\Lex2007\General"
   KeyName = "Software\Autodesk\AutoCAD\R17.0\ACAD-5005:409\Profiles\Lex2007\General"
   
    valueName = "SheetSetTemplatePath"
    dataValue = "YourTemplatePath"
   
    WriteStringValue HKEY_CURRENT_USER, KeyName, valueName, dataValue
   
   
    Debug.Print ReadRegVal(HKEY_CURRENT_USER, KeyName, valueName, DefaultData)
   
End Sub
页: [1] 2
查看完整版本: 图纸模板文件路径在API中的位置?