Pagina 1 van 1
Automatisch registreren van een .ocx file
Geplaatst: 09 maa 2005, 11:51
door SIR
Voor een bepaald VBA programmatje maak ik gebruik van een "common dialog box"-file (comdlg32.ocx).
Nu heb ik gemerkt dat op sommige PC's deze OCX niet aanwezig is.
Is het mogelijk van deze OCX file via het VBA programma te kopieren van een vaste plaats op het netwerk naar de harde schijf van de PC en deze automatisch the registeren via regsvr32???
Alvast bedankt.
SIR
Edit: by Weetgraag
titel aangepast registeren moet registreren zijn
Geplaatst: 09 maa 2005, 12:30
door Snakehit
Volgens mij spreek je over VB6
je hebt Add Reference en Components
Je neemt component en zoekt tot aan Microsoft Common dialog en add je dan.
Je krijgt dan in uw toolbar dat icoontje erbij. Als je dan Make setup.exe doet
dan werkt dat op iedere computer. Let op dit is wel voor VB6 in VB5 moet je gaan volgens een ander principe.
Als ik uw post lees heb je dit al allemaal wrs gedaan. Dan ga ik ervan uit dat je probeert op een computer win 95.
Ik zal het straks eens uitproberen op 2 comp's.
Mvg,
Snakehit
Geplaatst: 09 maa 2005, 12:32
door khsw
Via de ShellExecute() API moet dit wel lukken...
Ik heb ff Access geopend en je een voorbeeldje gemaakt:
Code: Selecteer alles
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Const OCXPath As String = "c:\windows\system32\comdlg32.ocx"
Public Sub CopyAndRegisterComdlg32()
FileCopy "z:\networkdrive\blablabla\comdlg32.ocx", OCXPath
ShellExecute GetDesktopWindow, "open", "regsvr32", "/s " & Chr(34) & OCXPath & Chr(34), vbNullString, 0
End Sub
Geplaatst: 09 maa 2005, 12:57
door SIR
Moet er ni ergens een end function instaan???
Geplaatst: 09 maa 2005, 13:04
door ubremoved_539
SIR schreef:Moet er ni ergens een end function instaan???
Waarom... er staat toch ook geen "begin" function in
De "Private Declare Function" is gewoon een prototype voor de functie in de DLL.
Geplaatst: 09 maa 2005, 13:04
door Snakehit
Code: Selecteer alles
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Neen, alles staat achter elkaar ge maakt geen functie hé
Geplaatst: 09 maa 2005, 14:24
door SIR
Omdat ik een error krijg wanneer ik dit debug.
De error is i.v.m. "end function"
Geplaatst: 09 maa 2005, 14:30
door ubremoved_539
SIR schreef:Omdat ik een error krijg wanneer ik dit debug.
De error is i.v.m. "end function"
Je bent de "declare" toch niet vergeten ?
Kijk eens goed je code na... en zet ook je prototype bovenaan in je source. (dus niet tussen andere subs, al weet ik niet of dit in VB echt noodzakelijk was).
Geplaatst: 10 maa 2005, 16:16
door SIR
Mag "private declare function" ook "public declare function" worden???
Geplaatst: 11 maa 2005, 08:10
door khsw
SIR schreef:Mag "private declare function" ook "public declare function" worden???
Yup

Geplaatst: 14 maa 2005, 09:30
door SIR
Wanneer ik het stukje programma in de VBA van mijn Excel invoeg, dan krijg ik problemen op andere plaatsen in mijn programma.
Nadat ik het stuk programma heb bijgevoegd begint Excel lastig te doen over deze lijn van code : "Dim MyDB As DataBase"
Hij geeft error : "can't find projet or library". Als ik het stukje programma terug delet werk alle OK.
Weet iemand raad?????
Bedankt,
SIR
Geplaatst: 15 maa 2005, 12:26
door Erik
hallo,
om activex controls of COM (component object model) te registereren hebt ge een functie call naar "DllRegisterServer()" (registereren) en "DllUnregisterServer()" (registeratie opheffen) nodig.Mijn beperkte ervaring met visual basic zegt dat deze taal dat niet kan ? zeker ben ik hier niet van.
aaah nee ik heb even de "apiguide" geraadpleegt
Code: Selecteer alles
Declare Function DllRegisterServer Lib "ComCtl32.OCX" () As Long
Declare Function DllUnregisterServer Lib "ComCtl32.OCX" () As Long
Const ERROR_SUCCESS = &H0
' To register your OCX use this function:
If DllRegisterServer = ERROR_SUCCESS Then
MsgBox "Registration Successful"
Else
MsgBox "Registration Unsuccessful"
End If
' To unregister your OCX use this function:
If DllUnregisterServer = ERROR_SUCCESS Then
MsgBox "UnRegistration Successful"
Else
MsgBox "UnRegistration Unsuccessful"
End If
altijd een goed idee om de "foutenafhandeling" in de code in te bouwen
indien interesse
hier kan je de apiguide downloaden het biedt een overzicht van gebruik van de windows api functies in visual basic inclusief voorbeelden
Geplaatst: 15 maa 2005, 13:36
door SIR
Alvast bedankt aan alle mensen die mij hier helpen.
Toch een klein vraagje Erik.
Is deze code om de dll effectief te registreren of om na te gaan of de dll geregistreerd is????
Ik veronderstel dat ik deze code moet uitvoeren nadat ik de dll naar de system32 folder van het desbetreffende toestel heb gekopiëerd???
Met veel dank,
SIR
Geplaatst: 15 maa 2005, 14:27
door SIR
Laat de bovenstaande vraag maar, ik heb het geprogrammeerd met de oplossing die Erik heeft geboden en alles werkt (kwa registreren toch) perfect zoals het moet.
Nu heb ik nog een klein ander probleempje.
Daar de system32 folder voor verschillende versies van Windows (2000, xp,...) op verschillende plaatsen staat(windows, WINNT,...), ben ik genoodzaakt de systemroot te gebruiken in mijn paths. Deze paths gebruik ik oa om te bepalen ofdat de .ocx file reeds aanwezig is in de system32 folder voordat ik kopiëer en registreer.
Is er een andere manier dan Environ() om deze systemroot te gebruiken???
Want kennelijk is de comdlg.ocx file reeds nodig om Environ() foutloos uit te voeren.
Mvg,
SIR
Geplaatst: 15 maa 2005, 14:40
door Sensei Zeon
Ik ken niets van VBA, dus dit is mss een heel dom antwoord, maar toch ga ik het riskeren

.
Kan je niet gewoon het file copieren naar %systemroot%\system32 ? Aangezien dit een standard windows variabele is, heb je er (volgens mij) geen .osx files ofzo voor nodig.
Geplaatst: 15 maa 2005, 14:44
door SIR
SeNsEi Ze0n schreef:Ik ken niets van VBA, dus dit is mss een heel dom antwoord, maar toch ga ik het riskeren

.
Kan je niet gewoon het file copieren naar %systemroot%\system32 ? Aangezien dit een standard windows variabele is, heb je er (volgens mij) geen .osx files ofzo voor nodig.
Heb dit geprobeerd, maar krijg "path not found" error
Ik geraak met Environ () aan de systemroot-path, maar doordat de Comdlg.ocx op dat moment nog niet aanwezig en geregistreed is maakt het programma daar problemen over.
M.a.w moet ik op een of andere manier aan de systemroot geraken zonder gebruik te maken van Environ().
Geplaatst: 15 maa 2005, 14:56
door meon
De path-variabele voor system(32) is trouwens ... %system%

Geplaatst: 15 maa 2005, 15:06
door Lukse
Het System32 path moet ook uit het register te halen zijn.
Weet wel nie meer juist waar, zult ge ff moeten zoeken

Geplaatst: 15 maa 2005, 15:07
door Erik
hallo,
zou dat niet mogelijk zijn zijn met "ShGetSpecialFolderLocation()" of "GetWindowsDirectory()" ? ik denk dat ge beter eerst uitzoekt op welke windows de desbetreffende machine loopt want die directorys zijn anders op sommige windows versies (zoals je zelf al aangaf)
Geplaatst: 15 maa 2005, 19:17
door SIR
Wiiiiiiiiiiiiiiiiii, het is gelukt!!!!
GetWindowsDirectory() did the job.
Met het voorbeeld uit de Apiguide (goede tool by the way) is de oplossing gevonden.
Bedankt.
Geplaatst: 15 maa 2005, 20:10
door Erik
aaah blij dat ik kon helpen die apiguide is idd een erg helpvol programma maar nie veel mensen kennen het ik wel toevallig

en de apiguide ismade in Belgium by the way
Geplaatst: 18 apr 2005, 16:17
door Gast
voor .NET gebruikers:
www.pinvoke.net
Er is ook een add-in voor VS.NET (staat ergens op gotdotnet, moet er maar is achter zoeken

)