Automatisch registreren van een .ocx file

Alles over programmeren en development binnen de IT-wereld
Plaats reactie
Gebruikersavatar
SIR
Pro Member
Pro Member
Berichten: 321
Lid geworden op: 27 nov 2003, 14:47
Locatie: Borsbeek, A'pen
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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: 434 keer
Bedankt: 1972 keer
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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: 434 keer
Bedankt: 1972 keer
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
Elite Poster
Elite Poster
Berichten: 4143
Lid geworden op: 15 sep 2002, 09:08
Locatie: Belgium, Haacht
Contacteer:
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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: 16757
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 581 keer
Bedankt: 780 keer
Provider
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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
  • Citeer
  • Citeer
  • Topic 20 laatste posts samenvatting

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”