vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 2.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: Windows/System22.03.05
CreateThread-Funktion

Diese Funktion erstellt einen Thread, der mittels einer Funktionsadresse eine Funktion im aktuellen Prozess aufruft.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  7.890 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Deklaration:

    Declare Function CreateThread Lib "kernel32" ( _
      lpThreadAttributes As Any, _
       ByVal dwStackSize As Long, _
      ByVal lpStartAddress As Long, _
      ByVal lParameter  As Long, _
      ByVal dwCreationFlags As Long, _
      lpThreadID As Long) As Long

    Beschreibung:
    Diese Funktion erstellt einen Thread, der mittels einer Funktionsadresse eine Funktion im aktuellen Prozess aufruft.

    Parameter:
    lpThreadAttributesErwartet eine SCURITY_ATTRIBUTES-Struktur die beschreibt, ob Kindprozesse diesen Thread erben können. Alternativ kann hier auch derWert "0" übergeben werden wenn die Standard-Sicherheitseinstellungen verwendet werden sollen.
    dwStackSizeErwartet die Größe des Stackspeichers, der zur Initialisierung verwendet werden soll. Alternativ kann hier derWert "0" übergeben werden, um den Standardwert zu nutzen.
    lpStartAddressErwartet die Funktionsadresse eines imProzess befindlichen Speicherbereiches, die der Thread aufrufen soll.
    lParameterErwartet einen Parameter, der der aufzurufenden Funktion übergeben werden kann, falls benötigt.
    dwCreationFlagsHier kann die folgende Konstante übergeben werden, um das Starten des Threads zu steuern, andernfalls muss hier derWert "0" übergeben werden.
    lpThreadIDErwartet eineLong-Variable, die mit dem ID des Threads gefüllt wird. Unter Windows NT, 2000 und XP kann auch derWert "0" zurückgegeben werden.

    dwCreationFlags Konstanten:

    Const CREATE_SUSPENDED = &H4
    ' Der Thread wird erst gestartet, wenn die ResumeThread-Funktion aufgerufen wird.

    Rückgabewert:
    Ist die Funktion erfolgreich, so wird das Handle des erstellten Threads zurückgegeben, andernfalls derWert "0". Für erweiterte Fehlerinformationen rufen Sie die GetLastError-Funktion auf.

    Beispiel:

    Private Declare Function LoadLibrary Lib "kernel32" _
      Alias "LoadLibraryA"  ( _
      ByVal lpLibFileName As String) As Long
    Private Declare Function FreeLibrary Lib "kernel32" ( _
      ByVal hLibModule As Long) As Long
    Private Declare Function GetProcAddress Lib "kernel32" ( _
      ByVal hModule As Long, _
      ByVal lpProcName As String) As Long
    Private Declare Function CreateThread Lib "kernel32" ( _
      lpThreadAttributes As Any, _
      ByVal dwStackSize As Long, _
      ByVal lpStartAddress As Long, _
      ByVal lParameter As Long, _
      ByVal dwCreationFlags As Long, _
      lpThreadID 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
     
    ' CreateThread dwCreationFlags-Konstante
    Private Const CREATE_SUSPENDED = &H4 ' Der Thread wird erst gestartet, wenn  
    ' die ResumeThread-Funktion aufgerufen wird
     
    ' eine der RegisterServer Rückgabe-Konstanten
    Private Const S_OK = &H0
     
    ' eine der WaitForSingleObject dwMilliseconds-Konstanten
    Private Const INFINITE = &HFFFF
     
    ' Eigene Konstanten Sammlung
    Private Enum TLoc
      LocalThread = 0
      ExternThread = 1
    End Enum
    ' Wählt eine Datei zum Registrieren aus
    Private Sub Command1_Click()
      On Error GoTo CancelErr
     
      With CommonDialog1
        .CancelError = True
        .DialogTitle = "Datei zum Registrieren Öffnen"
        .Filter = "Alle Dateien|*.*|Alle  _
        Bibliotheken|*.exe;*.ocx;*.dll;*.drv;*.vxd;*.tlb|*.EXE -  _
        Anwendungen|*.exe|*.OCX - ActiveX Datei|*.ocx|" & _
        "*.DLL - DLL Libary|*.dll|*.DRV - Geräte Treiber|*.drv|*.VXD -  _
        Virtueller Treiber|*.vxd"
        .Flags = cdlOFNFileMustExist
        .InitDir = App.Path
        .ShowOpen
     
        Label2.Caption = .FileTitle
        Label2.Tag = .FileName
      End With
      Exit Sub
     
      Label2.Caption = ""
      Label2.Tag = ""
    End Sub
    ' De- / Registriert eine Datei intern oder extern (RegSvr32.exe)
    Private Function RegFile(ByVal ThreadLocation As TLoc, ByVal ExParams As String) 
      Dim hProc As Long, hModule As Long, hThread As Long, ThreadID As Long
      Dim hExitCode As Long, Retval As Long
     
      Select Case ThreadLocation
      Case LocalThread ' Selbst registrieren
     
        ' Datei laden
        hModule = LoadLibrary(Label2.Tag)
     
        If hModule << 0 Then
     
          ' Funktionsadresse zum Registrieren ermitteln
          hProc = GetProcAddress(hModule, ExParams)
     
          If hProc << 0 Then
            ' Neuen Thread mit der ermittelten Funktionsadresse starten
            hThread = CreateThread(ByVal 0&, 0&, hProc, 0&, 0&, ThreadID) 
     
            ' Warten, dass die Funktion abgeschlossen wurde
            Retval = WaitForSingleObject(hThread, INFINITE)
            If Retval << S_OK Then
              MsgBox "Die Datei konnte nicht De- / Registriert werden" 
            Else
              MsgBox "Die Datei wurde erfolgreich De- / Registriert" 
            End If
          Else
            MsgBox "Es konnte kein Eintrag zum De / Registrieren  _
            der Datei gefunden werden"
          End If
     
          ' Thread Handle freigeben
          Retval = CloseHandle(hThread)
     
          ' Datei wieder entladen
          Retval = FreeLibrary(hModule)
        Else
          MsgBox "Die Datei konnte nicht geladen werden."
        End If
     
      Case ExternThread ' per RegSVR32 Registrieren
     
        Shell "regsvr32.exe " & ExParams, vbNormalFocus
      End Select
    End Function
    ' Ruft ein Popupmenü zum Auswählen der Registrierungsmethode auf
    Private Sub Command2_Click()
      If Label2.Tag << "" Then
        Me.PopupMenu Mnu_FileReg
      End If
    End Sub
    ' Datei manuell registrieren
    Private Sub Mnu_RegIn_Click()
      Call RegFile(LocalThread, "DllRegisterServer")
    End Sub
    ' Datei registrieren über Regsvr32.exe
    Private Sub Mnu_RegEx_Click()
      Call RegFile(ExternThread, Label2.Tag)
    End Sub
    ' Datei manuell deregistrieren
    Private Sub Mnu_UnRegIn_Click()
      Call RegFile(LocalThread, "DllUnregisterServer")
    End Sub
    ' Datei deregistrieren über Regsvr32.exe
    Private Sub Mnu_UnRegEx_Click()
      Call RegFile(ExternThread, Label2.Tag & " /u")
    End Sub

    Diese Seite wurde bereits 7.890 mal aufgerufen.

    nach obenzurück
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.
    Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel