Automatisch registreren van een .ocx file

Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 Nov 2003
Locatie: Borsbeek, A'pen

Automatisch registreren van een .ocx file

Berichtdoor SIR » 09 Mar 2005, 11:51

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
Locatie: Izegem, Belgie
Contact:

Berichtdoor Snakehit » 09 Mar 2005, 12:30

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: 1153
Lid geworden op: 03 Mar 2004
Bedankt: 15 keer
Uitgedeelde bedankjes: 15 keer

Berichtdoor khsw » 09 Mar 2005, 12:32

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
Locatie: Borsbeek, A'pen

Berichtdoor SIR » 09 Mar 2005, 12:57

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
Bedankt: 1995 keer
Uitgedeelde bedankjes: 446 keer

Berichtdoor ubremoved_539 » 09 Mar 2005, 13:04

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
Locatie: Izegem, Belgie
Contact:

Berichtdoor Snakehit » 09 Mar 2005, 13:04

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
Locatie: Borsbeek, A'pen

Berichtdoor SIR » 09 Mar 2005, 14:24

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
Bedankt: 1995 keer
Uitgedeelde bedankjes: 446 keer

Berichtdoor ubremoved_539 » 09 Mar 2005, 14:30

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
Locatie: Borsbeek, A'pen

Berichtdoor SIR » 10 Mar 2005, 16:16

Mag "private declare function" ook "public declare function" worden???

khsw
Elite Poster
Elite Poster
Berichten: 1153
Lid geworden op: 03 Mar 2004
Bedankt: 15 keer
Uitgedeelde bedankjes: 15 keer

Berichtdoor khsw » 11 Mar 2005, 08:10

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
Locatie: Borsbeek, A'pen

Berichtdoor SIR » 14 Mar 2005, 09:30

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
Bedankt: 18 keer
Uitgedeelde bedankjes: 2 keer

Berichtdoor Erik » 15 Mar 2005, 12:26

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
Locatie: Borsbeek, A'pen

Berichtdoor SIR » 15 Mar 2005, 13:36

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
Locatie: Borsbeek, A'pen

Berichtdoor SIR » 15 Mar 2005, 14:27

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

Gebruikersavatar
Sensei Zeon
Administrator
Administrator
Berichten: 4137
Lid geworden op: 15 Sep 2002
Locatie: Belgium, Haacht
Contact:

Berichtdoor Sensei Zeon » 15 Mar 2005, 14:40

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
Locatie: Borsbeek, A'pen

Berichtdoor SIR » 15 Mar 2005, 14:44

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: 16004
Lid geworden op: 18 Feb 2003
Twitter: meon
Locatie: Bree
Bedankt: 592 keer
Recent bedankt: 8 keer
Uitgedeelde bedankjes: 506 keer
Contact:

Berichtdoor meon » 15 Mar 2005, 14:56

De path-variabele voor system(32) is trouwens ... %system% ;)

Lukse
Premium Member
Premium Member
Berichten: 662
Lid geworden op: 28 Okt 2003

Berichtdoor Lukse » 15 Mar 2005, 15:06

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
Bedankt: 18 keer
Uitgedeelde bedankjes: 2 keer

Berichtdoor Erik » 15 Mar 2005, 15:07

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
Locatie: Borsbeek, A'pen

Berichtdoor SIR » 15 Mar 2005, 19:17

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
Bedankt: 18 keer
Uitgedeelde bedankjes: 2 keer

Berichtdoor Erik » 15 Mar 2005, 20:10

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

Berichtdoor Gast » 18 Apr 2005, 16:17

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 ;))


Terug naar “Web-en applicatie-ontwikkeling”

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 1 gast