# In VB6 "Strg+Alt+Entf" sperren?



## AleX (2. November 2001)

hi,
ich hab da ein kleines prog für einen Freund geschrieben, 
das er sich in den Autostart kopiert und dann sein kleiner 
Bruder innerhalb von 15s ein Passwort eingeben muss, um zu verhindern, dass der PC bootet.
Allerdings hat der das jetzt mit dem Taskmanager rausbekommen
und darum wollte ich fragen, wie oder ob man diesen Tastaturbefehl
sperren oder umgehen kann.
   Hope you can help me


----------



## Interritor (3. November 2001)

Ja klar geht das und zwar so!

Option Explicit

Private Declare Function SystemParametersInfo Lib _
        "User32"Alias "SystemParametersInfoA" _
        (ByVal uAction As Long, ByVal uParam As _
        Long, ByVal lpvParam As Any, ByVal fuWinIni _
        As Long) As Long


Private Sub Command1_Click()
  Dim Ergebnis&
    Ergebnis = SystemParametersInfo(97, True, "1", 0)
    Label1.Caption = "[Strg] + [Alt] + [Entf] ausgeschaltet"
End Sub

Private Sub Command2_Click()
  Dim Ergebnis&
    Ergebnis = SystemParametersInfo(97, False, "1", 0)
    Label1.Caption = "[Strg] + [Alt] + [Entf] eingeschaltet"
End Sub

Private Sub Form_Load()
   Call Command2_Click
End Sub


----------



## AleX (3. November 2001)

hi,
thanks!!!  
-> jetzt funzt das Teil


----------



## Thomas Kuse (3. November 2001)

cool sag ich mal


----------



## AleX (3. November 2001)

@Interritor,
nochmal danke, aber ich hätte gleich noch ne frage:
Gib mir doch bitte mal den selfcopy oder so änlich Befehl, mit dem sich das Prog selber in den Autostart kopiert.


----------



## Interritor (3. November 2001)

Hi! Wenn es ein PW schutz ist würde ich ihn nicht in den Autostart kopieren das ist viel zu unsicher. Schreib es lieber in die Regestry von Windows ist etwas sicherer. Das kann man auch mit VB machen lohnt sich aber für diesen 1 "Eintrag" nicht weil weil es mit Vb sehr kompliziert ist. Mach lieber einen *.reg Datei die es dann in die Regestry einfügt. 

*Reg.Datei Beispiel: *
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Synchronization Manager"="mobsync.exe /logon" _<------ Pfad usw. anpassen_


----------



## Thomas Kuse (3. November 2001)

am sichersten wärs aber immer noch mit NT/2000 oder XP

da gibste deinem bruder dann nur gast-rechte ohne install-rechte oder halt auch gar keine, dann kann der sich die zähne dran ausbeißen!


----------



## AleX (3. November 2001)

*i`m happy*

Danke,
habs jetzt in der Reg drin und geht eiwandfrei.  

@.:jOki:.
schöne page hast du, aber das mit XP wird nichts, da das prog für nen Freund mit einem 450 ist.
Ich selber hab auch nur nen PC mit 600Mhz und 192MB Ram und werd mir deshalb vielleicht in naher zukunft einen AMD mit so ungefähr 2,2 und aufwärts zulegen. 
PS: Hast du XP schon?


----------



## Interritor (3. November 2001)

jut okay !


----------



## AleX (8. November 2001)

*noch ne frage...*

hi Interritor,
konntest du mir vielleicht noch nen code geben, wie ein eintrag in die Registrie automatisch erstellt wird? -Bitte
Weil bei mir hab ich das halt schnell mit Hand gemacht, aber in meinem Prog soll das per Knopfdruck geschehen.
Wenns der Anwender halt möchte.


----------



## Interritor (8. November 2001)

Wie gesagt das ist net so leicht!

*Hier der Code: *
Option Explicit

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _
        Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal _
        lpSubKey As String, ByVal ulOptions As Long, ByVal _
        samDesired As Long, phkResult As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" _
        (ByVal hKey As Long) As Long

Private Declare Function RegQueryValueEx Lib "advapi32.dll" _
        Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal _
        lpValueName As String, ByVal lpReserved As Long, _
        lpType As Long, lpData As Any, lpcbData As Any) As Long

Private Declare Function RegCreateKeyEx Lib "advapi32.dll" _
        Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal _
        lpSubKey As String, ByVal Reserved As Long, ByVal _
        lpClass As String, ByVal dwOptions As Long, ByVal _
        samDesired As Long, ByVal lpSecurityAttributes As Any, _
        phkResult As Long, lpdwDisposition As Long) As Long

Private Declare Function RegFlushKey Lib "advapi32.dll" (ByVal _
        hKey As Long) As Long

Private Declare Function RegSetValueEx Lib "advapi32.dll" _
        Alias "RegSetValueExA" (ByVal hKey As Long, ByVal _
        lpValueName As String, ByVal Reserved As Long, ByVal _
        dwType As Long, lpData As Long, ByVal cbData As Long) _
        As Long

Private Declare Function RegSetValueEx_Str Lib "advapi32.dll" _
        Alias "RegSetValueExA" (ByVal hKey As Long, ByVal _
        lpValueName As String, ByVal Reserved As Long, ByVal _
        dwType As Long, ByVal lpData As String, ByVal cbData As _
        Long) As Long

Private Declare Function RegDeleteKey Lib "advapi32.dll"Alias _
        "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As _
        String) As Long

Private Declare Function RegDeleteValue Lib "advapi32.dll"Alias _
        "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName _
        As String) As Long


Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_DYN_DATA = &H80000006

Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_READ = KEY_QUERY_VALUE Or _
                 KEY_ENUMERATE_SUB_KEYS _
                 Or KEY_NOTIFY
Const KEY_ALL_ACCESS = KEY_QUERY_VALUE Or _
                       KEY_SET_VALUE Or _
                       KEY_CREATE_SUB_KEY Or _
                       KEY_ENUMERATE_SUB_KEYS Or _
                       KEY_NOTIFY Or _
                       KEY_CREATE_LINK
Const ERROR_SUCCESS = 0&

Const REG_NONE = 0
Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_DWORD_LITTLE_ENDIAN = 4
Const REG_DWORD_BIG_ENDIAN = 5
Const REG_LINK = 6
Const REG_MULTI_SZ = 7

Const REG_OPTION_NON_VOLATILE = &H0

Private RegRoot&

Private Sub Command8_Click()
  Call Shell("regedit.exe", vbNormalFocus)
End Sub

Private Sub Form_Load()
  'Voreinstellungen eintragen
  Text1.Text = "Test-Ordner"
  Text2.Text = "Test-Ordner"

  Text3.Text = "Test-Ordner"
  Text4.Text = "Wert-Long"
  Text5.Text = "12345"

  Text6.Text = "Test-Ordner"
  Text7.Text = "Wert-String"
  Text8.Text = "Hallo"

  Text9.Text = "Test-Ordner"
  Text10.Text = "Wert-Long"
  Text11.Text = "Test-Ordner"
  Text12.Text = "Wert-String"

  Text13.Text = "Test-Ordner"
  Text14.Text = "Wert-Long"
  Text15.Text = "Test-Ordner"
  Text16.Text = "Wert-String"

  Text17.Text = "Test-Ordner"

  List1.AddItem "HKEY_CLASSES_ROOT"
  List1.ItemData(0) = HKEY_CLASSES_ROOT
  List1.AddItem "HKEY_CURRENT_USER"
  List1.ItemData(1) = HKEY_CURRENT_USER
  List1.AddItem "HKEY_LOCAL_MACHINE"
  List1.ItemData(2) = HKEY_LOCAL_MACHINE
  List1.AddItem "HKEY_USERS"
  List1.ItemData(3) = HKEY_USERS
  List1.AddItem "HKEY_PERFORMANCE_DATA"
  List1.ItemData(4) = HKEY_PERFORMANCE_DATA
  List1.AddItem "HKEY_CURRENT_CONFIG"
  List1.ItemData(5) = HKEY_CURRENT_CONFIG
  List1.AddItem "HKEY_DYN_DATA"
  List1.ItemData(6) = HKEY_DYN_DATA

  List1.ListIndex = 2
End Sub

Private Sub List1_Click()
  'Bei Klick Hauptverzeichnis wechseln
  Frame6.Caption = List1.List(List1.ListIndex)
  RegRoot = List1.ItemData(List1.ListIndex)
End Sub

Private Sub Command1_Click()
  Dim Result&
    'Schlüssel erstellen
    Result = RegKeyCreate(RegRoot, Text1.Text)

    Select Case Result
      Case 0: Label5.Caption = "Fehler beim Erstellen"
      Case 1: Label5.Caption = "Ok, Pfad neu erstellt"
      Case 2: Label5.Caption = "Ok, Pfad existierte schon"
    End Select
End Sub

Private Sub Command2_Click()
  Dim Result&
    'Testen ob Schlüssel existiert
    Result = RegKeyExist(RegRoot, Text2.Text)

    If Result = 0 Then
       Label6.Caption = "vorhanden"
     Else
       Label6.Caption = "nicht vorhanden"
    End If
End Sub

Private Sub Command3_Click()
  Dim Result&, LngInt&
    'Longwert ein ein Feld schreiben
    LngInt = CLng(Val(Text5.Text))
    Result = RegValueSet(RegRoot, Text3.Text, Text4.Text, LngInt)

    If Result = 0 Then
      Label7.Caption = "Ok"
    Else
      Label7.Caption = "Fehler"
    End If
End Sub


----------



## Interritor (8. November 2001)

Private Sub Command4_Click()
  Dim Result&, StrVar$
    'Stringwert in ein Feld schreiben
    StrVar = CStr(Text8.Text)
    Result = RegValueSet(RegRoot, Text6.Text, Text7.Text, StrVar)

    If Result = 0 Then
      Label8.Caption = "Ok"
    Else
      Label8.Caption = "Fehler"
    End If
End Sub

Private Sub Command5_Click()
  Dim Result&, Value As Variant
    'Longwert auslesen
    Result = RegValueGet(RegRoot, Text9.Text, Text10.Text, Value)
    If Result = 0 Then
      Label9.Caption = CStr(Value)
      Label10.Caption = "Ok"
    Else
      Label9.Caption = ""
      Label10.Caption = "Fehler"
    End If

    'Stringwert auslesen
    Result = RegValueGet(RegRoot, Text11.Text, Text12.Text, Value)
    If Result = 0 Then
      Label11.Caption = CStr(Value)
      Label12.Caption = "Ok"
    Else
      Label11.Caption = ""
      Label12.Caption = "Fehler"
    End If
End Sub

Private Sub Command6_Click()
  Dim Result&
    'Feld des Longwertes löschen
    Result = RegFieldDelete(RegRoot, Text13.Text, Text14.Text)
    If Result = 0 Then
      Label13.Caption = "Ok"
    Else
      Label13.Caption = "Fehler"
    End If

    'Feld des Srtingwertes löschen
    Result = RegFieldDelete(RegRoot, Text15.Text, Text16.Text)
    If Result = 0 Then
      Label14.Caption = "Ok"
    Else
      Label14.Caption = "Fehler"
    End If
End Sub

Private Sub Command7_Click()
  Dim Result&
    'Schlüssel löschen
    Result = RegKeyDelete(RegRoot, Text17.Text)
    If Result = 0 Then
      Label15.Caption = "Ok"
    Else
      Label15.Caption = "Fehler"
    End If
End Sub



Function RegKeyExist(Root&, Key$) As Long
  Dim Result&, hKey&
    'Prüfen ob ein Schlüssel existiert
    Result = RegOpenKeyEx(Root, Key, 0, KEY_READ, hKey)
    If Result = ERROR_SUCCESS Then Call RegCloseKey(hKey)
    RegKeyExist = Result
End Function

Function RegKeyCreate(Root&, Newkey$) As Long
  Dim Result&, hKey&, Back&
    'Neuen Schlüssel erstellen
    Result = RegCreateKeyEx(Root, Newkey, 0, vbNullString, _
                            REG_OPTION_NON_VOLATILE, _
                            KEY_ALL_ACCESS, 0&, hKey, Back)
    If Result = ERROR_SUCCESS Then
      Result = RegFlushKey(hKey)
      If Result = ERROR_SUCCESS Then Call RegCloseKey(hKey)
        RegKeyCreate = Back
    End If
End Function

Private Function RegKeyDelete(Root&, Key$) As Long
  'Schlüssel erstellen
  RegKeyDelete = RegDeleteKey(Root, Key)
End Function

Private Function RegFieldDelete(Root&, Key$, Field$) As Long
  Dim Result&, hKey&
    'Feld löschen
    Result = RegOpenKeyEx(Root, Key, 0, KEY_ALL_ACCESS, hKey)
    If Result = ERROR_SUCCESS Then
      Result = RegDeleteValue(hKey, Field)
      Result = RegCloseKey(hKey)
    End If
    RegFieldDelete = Result
End Function

Function RegValueSet(Root&, Key$, Field$, Value As Variant) As Long
  Dim Result&, hKey&, s$, l&
    'Wert in ein Feld der Registry schreiben
    Result = RegOpenKeyEx(Root, Key, 0, KEY_ALL_ACCESS, hKey)
    If Result = ERROR_SUCCESS Then
      Select Case VarType(Value)
        Case vbInteger, vbLong
          l = CLng(Value)
          Result = RegSetValueEx(hKey, Field, 0, REG_DWORD, l, 4)
        Case vbString
          s = CStr(Value)
          Result = RegSetValueEx_Str(hKey, Field, 0, REG_SZ, s, _
                                        Len(s) + 1)
      End Select
      Result = RegCloseKey(hKey)
    End If

    RegValueSet = Result
End Function

Function RegValueGet(Root&, Key$, Field$, Value As Variant) As Long
  Dim Result&, hKey&, dwType&, Lng&, Buffer$, l&
    'Wert aus einem Feld der Registry auslesen
    Result = RegOpenKeyEx(Root, Key, 0, KEY_READ, hKey)
    If Result = ERROR_SUCCESS Then
      Result = RegQueryValueEx(hKey, Field, 0&, dwType, ByVal 0&, l)
      If Result = ERROR_SUCCESS Then
        Select Case dwType
          Case REG_SZ
            Buffer = Space$(l + 1)
            Result = RegQueryValueEx(hKey, Field, 0&, _
                                     dwType, ByVal Buffer, l)
            If Result = ERROR_SUCCESS Then Value = Buffer
          Case REG_DWORD
            Result = RegQueryValueEx(hKey, Field, 0&, dwType, Lng, l)
            If Result = ERROR_SUCCESS Then Value = Lng
        End Select
      End If
    End If

    If Result = ERROR_SUCCESS Then Result = RegCloseKey(hKey)
    RegValueGet = Result
End Function


----------



## AleX (9. November 2001)

*ah, nur so wenig*

thanks, aber:

1. Hoff ich mal, dass du das nicht geschrieben, sonderen von 
wo anderst kopiert hast. (Ist ja echt ne Menge  )

2. Leider blick ich überhaupt nicht durch. Hab die Labels und 
Buttons erstellt und denn code eingefügt, aber ich blick irgendwie
auch nicht durch den code durch. 

Darum->
3. Könntest du mir vielleicht bitte so ein kleines Bsp. 
schicken, bei dem man einfach auf einen Button drückt, 
und sich dann das gerade laufende prog in die Reg unter 
RUN einträgt. Würde das gehen? 

PLEASE


----------



## Interritor (10. November 2001)

Hab im mom kein Vb drauf und programmier auch selber kaum noch mit. Aber ich hab mal son Regedit Programm geschrieben, mal sehen ob ich das finde.


----------



## AleX (10. November 2001)

ja, wär echt cool, wenn du das teil finden würdest.


----------



## Interritor (10. November 2001)

sorry also im mom finde ich es nicht, komisch! Naja ich sag dir bescheid wenn ich es doch finden...


----------



## AleX (10. November 2001)

OK.
Geht in Ordnung...


----------



## A5 Infoschlampe (19. Dezember 2001)

sorry wenn ich mich einmische  aber ich habe da ne idee. mein prog startet auch über die registry und trägt sich bei jedem start auch wieder von alleine rein, falls jemand den eintrag löschen sollte.

das script mit dem langen code da eben hab ich aber nicht benutzt, ich habs anders, aber für meine begriffe bisschen einfacher gemacht!

mein vb prog erstellt einfach mit OPEN ...for OUPUT as #1
eine datei namens tmp.reg wo dann der header + der reg-befehl zum eintragen drinsteht, also
---
REGEDIT4

<Reg-Schlüssel bla bla>
---
und dannach einfach mit 
---
SHELL Environ$("WINDIR") & "\regedit.exe " & chr(34) & app.path & "\tmp.reg" & chr(34), vbHide
---
ausführen und die datei wird über den registrierungseditor eingefügt.
das chr(34) muss sein, damit bei langen dateinamen anführungszeichen gesetzt werden.

dannach nurnoch mit Kill app.path & "\tmp.reg" die datei löschen und keiner hat was gemerkt!

funzt 100% 

ok schöne grüsse ciao


----------



## Tanerbaum (25. April 2005)

da wir ja nun ein paar jahre weiter sind und es window xp inzwischen gibt, funktioniert der obig genannte befehl(alt+strg+entf sperren) nicht mehr.
gibt es inzwischen einen neuen oder verbesserten?

bei meinem alten pc hat der gut funktioniert und mein bruder konnte keinen schei.. mehr bauen, nun habe ich aber einen neuen und mein bruder kann wieder drauf zugreifen.
und da meine eltern auch noch an meinen pc für fernseh gucken(tv-karte) wollen, darf ich nicht nur ein acc haben.

könnt ihr mir helfen?

danke im vorraus.

ps: sollte die auf grund von windows nicht mehr möglich sein, so bitte auch schreiben. danke.


----------

