Automatisch registreren van een .ocx file

Plaats reactie
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen

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
Gebruikersavatar
Snakehit
Elite Poster
Elite Poster
Berichten: 806
Lid geworden op: 05 mei 2004, 15:37
Locatie: Izegem, Belgie
Contacteer:

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
khsw
Elite Poster
Elite Poster
Berichten: 1158
Lid geworden op: 03 maa 2004, 09:04
Uitgedeelde bedankjes: 18 keer
Bedankt: 16 keer

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
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen

Moet er ni ergens een end function instaan???
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 446 keer
Bedankt: 1985 keer

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.
Gebruikersavatar
Snakehit
Elite Poster
Elite Poster
Berichten: 806
Lid geworden op: 05 mei 2004, 15:37
Locatie: Izegem, Belgie
Contacteer:

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é
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen

Omdat ik een error krijg wanneer ik dit debug.
De error is i.v.m. "end function"
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 446 keer
Bedankt: 1985 keer

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).
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen

Mag "private declare function" ook "public declare function" worden???
khsw
Elite Poster
Elite Poster
Berichten: 1158
Lid geworden op: 03 maa 2004, 09:04
Uitgedeelde bedankjes: 18 keer
Bedankt: 16 keer

SIR schreef:Mag "private declare function" ook "public declare function" worden???
Yup :!:
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen

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
Gebruikersavatar
Erik
Elite Poster
Elite Poster
Berichten: 1321
Lid geworden op: 15 sep 2002, 02:46
Uitgedeelde bedankjes: 2 keer
Bedankt: 18 keer

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

Code: Selecteer alles

on Error Resume Next
on Error GoTo myerrorhandler
indien interesse hier kan je de apiguide downloaden het biedt een overzicht van gebruik van de windows api functies in visual basic inclusief voorbeelden
Registered Linux user #286313
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen

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
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen

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
Sensei Zeon
Administrator
Administrator
Berichten: 4143
Lid geworden op: 15 sep 2002, 09:08
Locatie: Belgium, Haacht
Contacteer:

Ik ken niets van VBA, dus dit is mss een heel dom antwoord, maar toch ga ik het riskeren :p .


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.
Your Sensei sends his greetz, SeNsEi Ze0n

Afbeelding
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen

SeNsEi Ze0n schreef:Ik ken niets van VBA, dus dit is mss een heel dom antwoord, maar toch ga ik het riskeren :p .


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().
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

De path-variabele voor system(32) is trouwens ... %system% ;)
Lukse
Premium Member
Premium Member
Berichten: 662
Lid geworden op: 28 okt 2003, 20:51

Het System32 path moet ook uit het register te halen zijn.
Weet wel nie meer juist waar, zult ge ff moeten zoeken :wink:
Gebruikersavatar
Erik
Elite Poster
Elite Poster
Berichten: 1321
Lid geworden op: 15 sep 2002, 02:46
Uitgedeelde bedankjes: 2 keer
Bedankt: 18 keer

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)
Registered Linux user #286313
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen

Wiiiiiiiiiiiiiiiiii, het is gelukt!!!!

GetWindowsDirectory() did the job.

Met het voorbeeld uit de Apiguide (goede tool by the way) is de oplossing gevonden.

Bedankt.
Gebruikersavatar
Erik
Elite Poster
Elite Poster
Berichten: 1321
Lid geworden op: 15 sep 2002, 02:46
Uitgedeelde bedankjes: 2 keer
Bedankt: 18 keer

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
Registered Linux user #286313
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 ;))
Plaats reactie

Terug naar “Development”