Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[VB6.0] ActiveX, maar dan dynamisch

Laurens
3 antwoorden
  • Hoi,

    Ik wil natuurlijk weer eens iets wat niet kan, maar toch vraag ik het maar even.

    Ik ben een programma aan het maken dat het volgende doet:
    - Controleer of MSN Messenger is geïnstalleerd en als ie dat niet is moet je "mmssetup.exe /Q" starten. Wacht tot de installatie klaar is (met een Do-Loop waarin een DoEvents staat en die controleert of msmsgs.exe bestaat).
    - Vervolgens in het register een paar instellingen doen, zodat ie automatisch is ingesteld de proxyserver te gebruiken.

    Nu moet ik er nog inbouwen dat ie hierna automatisch aanmeldt. Dat is wel te doen via een ActiveX (in references), maar als ik die aanvink krijg je problemen als MSN nog niet is geïnstalleerd. En als je het niet doet, dan kun je 'em niet aansturen.

    Hoe ik het nu doe: na de installatie (of geen installatie) wordt een tweede, onzichtbare programma gestart die het aanmelden doet en via DDE terugstuurt dat het aanmelden is voltooid. Maar dit is niet de meest processor-vriendelijke methode.

    Weet iemand hoe ik dynamisch een reference kan maken of zo?

    Groet,
    Phedny
  • Dat wachten op het einde van die installatie in een loop is niet zo netjes.
    Daar bestaan mooie api-funkties voor die je keurig vertellen of een process nog in de lucht is.

    Zoiets dus.
    [code:1:d324cc6410]
    'Declaraties van de api en bijbehorende constanten.
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

    Private Const PROCESS_INFINITE As Long = &HFFFF
    Private Const PROCESS_SYNCHRONIZE As Long = &H100000

    'Met deze knop start je het programma
    Private Sub cmdStart_Click

    dim lngId as long
    dim strCommandLine as string

    'Geef hier aan welk programma je wilt starten.
    strCommandLine = 'je uit te voeren commando

    'Start programma en pik Id op.
    lngID = Shell(strCommandLine, iWindowStyle)

    'Goed gestart? (lngID <> 0), dan wachten tot programma klaar is.
    If lngID <> 0 Then
    Call WachtOpProcessEinde (lngID)
    End if

    End Sub

    Private Function WachtOpProcessEinde(lngID As Long)
    Dim lngHandle As Long

    lngHandle = OpenProcess(PROCESS_SYNCHRONIZE, 0, lngID)

    If lngHandle <> 0 Then
    Call WaitForSingleObject(lngHandle, PROCESS_INFINITE)

    Call CloseHandle(lngHandle)
    End If

    End Function
    [/code:1:d324cc6410]

    Wat betreft dat dynamisch een reference maken moet je volgens mij met CreateObject een heel eind kunnen komen.
    In de MSDN kun je hier het een en ander over vinden.

    Voorbeeldje

    [code:1:d324cc6410]


    Private Sub Command1_Click()

    Dim MyApp As Object

    Set MyApp = CreateObject("Excel.Application";)
    Call Msgbox (cstr(MyApp.Version))
    Set MyApp = Nothing

    End Sub


    [/code:1:d324cc6410]




    _________________
    Met vriendelijke groeten,
    Laurens

    "Leven is meervoud van lef"

    [ Dit bericht is bewerkt door: Laurens op 2002-04-04 08:34 ]
  • Hoi,

    't Probleem is dat MSN Messenger niet te bereiken is via CreateObject (als dat wel zo is, moet iemand dat maar ff zeggen). Toch bedankt voor je reactie.

    Groet,
    Phedny

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.