Newsgroup: it.comp.lang.visual-basic
Titolo: proprieta server stampa

ciao ragazzi
come state?
rileggendo vecchi post di Lupo ho visto che in win xp esistono i server di
stampa, ( stampanti e fax\proprieta server) devo inserire diversi nuovi
moduli personalizzati come posso fare?
ciao e grazie
Ilario

[*ilario* : 
ilariosa...@stiscali.it
] ha scritto:

http://makeashorterlink.com/?W2D312545
Io, seguendo le istruzioni di David, c'ero riuscito.
Ehm, ... anche tu, mi pare :-P

 Ehm, ... anche tu, mi pare :-P
si a mano ma via codice?
ciao Ilairo

 si a mano ma via codice?
Ahhh, non ne ho idea...
però mi interesserebbe non poco.
'azz, non s'è mai finito di pistolare...! :-(

 [*ilario* : 
ilariosa...@stiscali.it
] ha scritto:
dopo diverse ricerce sono riuscito grazie ad un consiglio
capire dove xp va ad inserire i nuovi moduli
Le informazioni vengono inserite nel registro a questa locazione:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Forms
Il tipo di chiave č REG_BINARY.
ora come faccio ad inserirne di nuovi?
ciao e grazie
ilario

[*ilario* : 
ilariosa...@stiscali.it
] ha scritto:

Prese da API-Guide e "italianizzate/parametrizzate"
Da usarsi con le pinze, il registro č tutto!
'ESB0REGI.BAS - Varie funzioni relative al Registro e alle Chiavi di Windows
'===========================================================================
Private 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
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long)
As Long
Private 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, lpcbData As Long) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias
"RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal
Reserved As Long, ByVal lpClass As Long, ByVal dwOptions As Long, ByVal
samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long,
lpdwDisposition As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias
"RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long)
As Long
Private 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
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias
"RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias
"RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal
lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long,
lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As
Any, Source As Any, ByVal numBytes As Long)
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As
Any, ByVal Source As Long, ByVal length As Long)
Const SYNCHRONIZE = &H100000
Const READ_CONTROL = &H20000
Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Const STANDARD_RIGHTS_ALL = &H1F0000
Const KEY_QUERY_VALUE = &H1
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_READ = ((READ_CONTROL Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS
Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or
KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Const ERROR_SUCCESS = 0&
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_SZ = 1
Public Const REG_BINARY = 3
Public Const REG_DWORD = 4
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_OPENED_EXISTING_KEY = &H2
Function REG_VERIFICA_ESISTENZA_CHIAVE(lSezione As Long, sNomeChiave As
String) As Boolean
'       Verifica se una chiave esiste - Resituisce False se non esiste, True
se esiste
    Dim handle As Long
    REG_VERIFICA_ESISTENZA_CHIAVE = False
    If RegOpenKeyEx(lSezione, sNomeChiave, 0, KEY_READ, handle) = 0 Then
        REG_VERIFICA_ESISTENZA_CHIAVE = True
        RegCloseKey handle
    End If
End Function
Function REG_CREA_NUOVA_CHIAVE(lSezione As Long, sNomeChiave As String) As
Integer
'       Crea una nuova chiave, poi la chiude
'       Restituisce     0   Per chiave regolarmente creata
'                       1   Se la chiave esiste gia'
'                       -1  Per impossibilitą di creare la chiave
    Dim handle As Long, disposition As Long
    If RegCreateKeyEx(lSezione, sNomeChiave, 0, 0, 0, 0, 0, handle,
disposition) Then
        REG_CREA_NUOVA_CHIAVE = -1
    Else
        REG_CREA_NUOVA_CHIAVE = IIf(disposition = REG_OPENED_EXISTING_KEY,
1, 0)
'           Chiude la chiave
        RegCloseKey handle
    End If
End Function
Sub REG_ASSEGNA_VALORE(lSezione As Long, sNomeChiave As String, sNomeValore
As String, iTipoValore As Integer, vValore As Variant)
'       Assegna un valore di una chiave
'       Passare sNomeValore = "" per il valore di default (Predefinito)
'       Per iTipoValore accetta solo REG_DWORD, REG_SZ, e REG_BINARY
    Dim handle As Long, lngValue As Long
    Dim strValue As String
    Dim binValue() As Byte, length As Long
'       Apre la chiave, esce se non trovata
    If RegOpenKeyEx(lSezione, sNomeChiave, 0, KEY_WRITE, handle) Then Exit
Sub
    Select Case iTipoValore
        Case REG_DWORD
            lngValue = vValore
            RegSetValueEx handle, sNomeValore, 0, iTipoValore, lngValue, 4
        Case REG_SZ
            strValue = vValore
            RegSetValueEx handle, sNomeValore, 0, iTipoValore, ByVal
strValue, Len(strValue)
        Case REG_BINARY
            binValue = vValore
            length = UBound(binValue) - LBound(binValue) + 1
            RegSetValueEx handle, sNomeValore, 0, iTipoValore,
binValue(LBound(binValue)), length
    End Select
    RegCloseKey handle
End Sub
Function REG_LEGGE_VALORE(lSezione As Long, sNomeChiave As String,
sNomeValore As String, iTipoValore As Integer, Optional ValoreDefault As
Variant = Empty) As Variant
'       Restituisce un valore di una chiave
'       Passare sNomeValore = "" per il valore di default (Predefinito)
'       Per iTipoValore accetta solo REG_DWORD, REG_SZ, e REG_BINARY
    Dim handle As Long, resLong As Long
    Dim resString As String, length As Long
    Dim resBinary() As Byte
'       Assegna il risultato di default
    REG_LEGGE_VALORE = ValoreDefault
'       Apre la chiave, esce se non trovata
    If RegOpenKeyEx(lSezione, sNomeChiave, 0, KEY_READ, handle) Then Exit
Function
    Select Case iTipoValore
        Case REG_DWORD
'               Legge il valore, usa il default se non trovato
            If RegQueryValueEx(handle, sNomeValore, 0, REG_DWORD, resLong,
4) = 0 Then
                REG_LEGGE_VALORE = resLong
            End If
        Case REG_SZ
            length = 1024: resString = Space$(length)
            If RegQueryValueEx(handle, sNomeValore, 0, REG_SZ, ByVal
resString, length) = 0 Then
'                   Se il valore e' stato trovato, toglie i caratteri in
eccesso
                REG_LEGGE_VALORE = Left$(resString, length - 1)
            End If
        Case REG_BINARY
            length = 4096
            ReDim resBinary(length - 1) As Byte
            If RegQueryValueEx(handle, sNomeValore, 0, REG_BINARY,
resBinary(0), length) = 0 Then
                ReDim Preserve resBinary(length - 1) As Byte
                REG_LEGGE_VALORE = resBinary()
            End If
    End Select
    RegCloseKey handle
End Function
Sub REG_ELIMINA_VALORE(lSezione As Long, sNomeChiave As String, sNomeValore
As String)
'       Elimina un valore di una chiave
    Dim handle As Long
'       Apre la chiave, esce se non trovata
    If RegOpenKeyEx(lSezione, sNomeChiave, 0, KEY_WRITE, handle) Then Exit
Sub
    RegDeleteValue handle, sNomeValore
    RegCloseKey handle
End Sub
Sub REG_ELIMINA_CHIAVE(lSezione As Long, sNomeChiave As String)
'       Cancella una chiave
'       Con sistemi NT> non funziona se la chiave contiene delle sottochiavi
    Call RegDeleteKey(lSezione, sNomeChiave)
End Sub
Function REG_ELENCO_CHIAVI(lSezione As Long, sNomeChiave As String) As
String()
'       Restituisce in un vettore di stringhe l'elenco delle chiavi in una
chiave (se passata <>"")
    Dim handle As Long, index As Long, length As Long
    ReDim result(0 To 100) As String
    Dim FileTimeBuffer(100) As Byte
    Dim lSezioneInterna As Long
    lSezioneInterna = lSezione
'       Verifica se chiave passata - Esce se non trovata
    If Len(sNomeChiave) Then
        If RegOpenKeyEx(lSezioneInterna, sNomeChiave, 0, KEY_READ, handle)
Then Exit Function
        lSezioneInterna = handle
    End If
    For index = 0 To 999999
        If index > UBound(result) Then
            ReDim Preserve result(index + 99) As String
        End If
        length = 260                   ' Max length for a key name.
        result(index) = Space$(length)
        If RegEnumKey(lSezioneInterna, index, result(index), length) Then
Exit For
        result(index) = Left$(result(index), InStr(result(index),
vbNullChar) - 1)
    Next
    If handle Then RegCloseKey handle
    ReDim Preserve result(index - 1) As String
    REG_ELENCO_CHIAVI = result()
End Function
Function REG_ELENCO_VALORI(lSezione As Long, sNomeChiave As String) As
Variant()
'       Restituisce in una matrice bidimensionale (Variant) i valori di una
chiave (se passata <>"")
'       Elemento 0=Nome Valore, Elemento 1=Valore
    Dim handle As Long, index As Long, valueType As Long
    Dim name As String, nameLen As Long
    Dim lngValue As Long, strValue As String, dataLen As Long
    Dim lSezioneInterna As Long
    ReDim result(0 To 1, 0 To 100) As Variant
    lSezioneInterna = lSezione
'       Verifica se chiave passata - Esce se non trovata
    If Len(sNomeChiave) Then
        If RegOpenKeyEx(lSezioneInterna, sNomeChiave, 0, KEY_READ, handle)
Then Exit Function
        lSezioneInterna = handle
    End If
    For index = 0 To 999999
        If index > UBound(result, 2) Then
            ReDim Preserve result(0 To 1, index + 99) As Variant
        End If
        nameLen = 260                   ' Max length for a key name.
        name = Space$(nameLen)
        dataLen = 4096
        ReDim binValue(0 To dataLen - 1) As Byte
        If RegEnumValue(lSezioneInterna, index, name, nameLen, ByVal 0&,
valueType, binValue(0), dataLen) Then Exit For
        result(0, index) = Left$(name, nameLen)
        Select Case valueType
            Case REG_DWORD
                ' Copia i primi 4 bytes in una variabile Long
                CopyMemory lngValue, binValue(0), 4
                result(1, index) = lngValue
            Case REG_SZ
                ' Converte il risultato in stringa
                result(1, index) = Left$(StrConv(binValue(), vbUnicode),
dataLen - 1)
            Case Else
                ' Copia l'array di bytes.
                ReDim Preserve binValue(0 To dataLen - 1) As Byte
                result(1, index) = binValue()
        End Select
    Next
    If handle Then RegCloseKey handle
    ReDim Preserve result(0 To 1, index - 1) As Variant
    REG_ELENCO_VALORI = result()
End Function