Passwort VBS - falsche Eingabe = "falsch"-Fenster in LOOP-Funktion

so solls aussehen. und wär klasse wenn im fensterkopf ganz oben was drinsteht - (Computer, PC, programmieren)

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wenn das Meldefenster geloopt wird, hat der Benutzer aber keine Möglichkeit mehr, es zu korrigieren, soviel ist klar, oder?

Option Explicit

Dim Tst
Tst = InputBox( "Bitte Passwort eingeben:", "Passworteingabe" )
if Tst <> "p" Then 
    do
        MsgBox "Passwort war falsch. Terminiere mich."
    Loop
end if
MsgBox "Passwort war richtig.", , WScript.ScriptName

Du hast am genauesten getroffen, was ich gesucht hatte.

Es ist perfekt geworden, es sieht grandios aus und hat mich vor Freude laut auflachen lassen, als ich mir das Gesicht eines Unbefugten vorgestellt habe, wenn der diese Endlos-Fehlerfenster-Schleife sieht.

Wenn der Kerl allerdings auf die Idee kommt, sich den Quellcode zu gemüte zu führen, kriegt er trotzdem Access.

Deshalb muss ich mir noch zusammenklamüsern wie der Code in hexadez bzw binärer Form in der Datei stehen könnte und ich trotzdem das normale Passwort eingeben kann und er das automatisch in hexadez/bin umrechnet und als richtig erkennt.

Dann ist das Ding ziemlich sicher, es sei denn es sitzt ein IT-System-Fachgymnasiums-Superhochschul-Knacker dran.

Gegen solche Profis hilft nur ein so unordentlicher und unübersichtlicher Schmiercode, dass der Unbefugte die Beine in die Hand nimmt.

Auf jeden Fall ist Dein Code der genaueste.

Vielen vielen vielen Dank Dir. :)

Amazing.

0
@Wahrhaftigkeit

Wer den Quellcode hat, hat bei symmetrischen Verschlüsselungsalgorithmen immer die Macht. Auch ist das Programm nicht taskmanager-sicher ;)

Aber wenn ich dir helfen konnte, dann freut mich das.

0
@Suboptimierer

Kann man den Code auch so konfigurieren, dass zum Beispiel zwei oder drei Personal Keys im selben Feld anwendbar sind und je nach Key ein bestimmter USER identifiziert und persönlich begrüßt wird? :)

Wenn du den Key so entschlüsseln kannst, dass dort Informationen über den Namen zurückgewonnen werden, ist es einfach.

Du schreibst eine Prozedur UserFromPiK. In der dechiffrierst du die Kennung und gibst den Usernamen zurück. So ungefähr:

Tst = InputBox( "Bitte Passwort eingeben:", "Passworteingabe" )
sUser = UserFromPiK(Tst) 
if  sUser = "" Then 
    while 1=1
        MsgBox "Passwort war falsch. Terminiere mich."
    wend
end if
MsgBox "Hallo " & sUser & ", dein Passwort war richtig.", , WScript.ScriptName

UserFromPiK müsste dann in etwas so aussehen:

Function UserFromPiK(sPiK)
 if sPiK = "kjdsikfj9" then _ 
  UserFromPiK = "Max" _
 else if sPiK = "oisgh9" then _
  UserFromPiK = "Moritz"
...
End Function

Du kannst auch die User in ein Textfile speichern und diese dann auslesen.

Die Datei könnte so aussehen:

[PiK];User;Vorname;Nachname
[kjdsikfj9];Max;Max;Munter
[oisgh9]Moritz;Moritz;Morning

Nochmal: Besonders sicher ist das wohl nicht.

Wie man Dateien auslesen kann habe ich zufällig heute angerissen: Dateinamen und erste Zeile einer Word Datei per Batch auslesen

Beim zeilenweise Einlesen Prüfst du, ob Left( sZeile, Len(sPiK)+2) = "[" & sPiK & "]" ist. Wenn ja, dann splittest mit Split, um die Restdaten abzugreifen.

0
@Suboptimierer

Ich hab das jetzt untereinander in eine vbsdatei geschrieben, gespeichert und angeclickt aber da kam ein fehler ... in welcher sortierung oder welchem aufbau genau müsste ich dies in die vbsdatei reinschreiben?

0
@Wahrhaftigkeit

🔮 Welcher Fehler trat den auf? Was genau hast du untereinander geschrieben. Auch den verlinkten Quellcode? Hinter dem Link ist natürlich nur der letzte Kommentar von mir für dich von Interesse.

Man kann theoretisch alles in eine Datei schreiben. Das würde ich auch für den Anfang empfehlen.

Über die Funktion

Sub Include(sFile)
    Dim fsObj : Set fsObj = CreateObject("Scripting.FileSystemObject") : Dim vbsFile : Set vbsFile = fsObj.OpenTextFile(sFile, 1, False) : Dim myFunctionsStr : myFunctionsStr = vbsFile.ReadAll : vbsFile.Close : ExecuteGlobal myFunctionsStr 
End Sub

ist es möglich, Bibliotheken zu erstellen und diese einzubinden. Das Programm wird aber leicht umständlicher debugbar. Das hebe dir besser für ganz zum Schluss auf.

0
@Suboptimierer

In einer Datei ist es am Besten, denn immer wieder gehen Dateien verloren, die zu einem Programm gehörten und dann ist alles nicht mehr lauffähig. Da ist alles in einer Datei wirklich besser. :)

Ich gestehe, dass ich ein totaler Newbie bin in VBS, aber ich möcht trotzdem versuchen, es zu schaffen. Aber ich weiß nicht in welcher Abfolge oder welchem Aufbau ich das programmieren soll/kann und die obigen Codes zusammenbringen soll. :(

0
@Wahrhaftigkeit

Ich würde den Quellcode funktional ablaufen lassen.

Ein paar Konstanten und Standardobjekte wie das FileSystemObject machst du dir global. In deinem VBScript rufst du gleich als erstes nach dem Einbinden der anderen Bibliotheken, die du dir nach und nach erstellst, die Funktion Main() auf.

In der Funktion Main schreibst du den Code mit der Eingabebox und der Endlosschleife, die hart terminiert werden muss.
Innerhalb von Main werden weitere Funktionen benötigt. Eine davon ist zum Beispiel UserFromPiK(). Diese Funktion definierst du direkt unter Main, zunächst in der gleichen Skriptdatei. Wenn du weitere Funktionen / Subs benötigst, dann kannst du diese in beliebiger Reihenfolge unter Main schreiben.

0
@Suboptimierer

Meinst Du so? Ich hab den Code nicht braun eingefärbt weil ich befürchte, er ist falsch. und wenn in ein paar monaten oder jahren oder 10 jemand dasselbe programmieren will, möchte ich nicht, dass der sich mit einem furchtbar verdrüdelten code rumärgert. :(

-

Sub Include(sFile) Dim fsObj : Set fsObj = CreateObject("Scripting.FileSystemObject") : Dim vbsFile : Set vbsFile = fsObj.OpenTextFile(sFile, 1, False) : Dim myFunctionsStr : myFunctionsStr = vbsFile.ReadAll : vbsFile.Close : ExecuteGlobal myFunctionsStr End Sub

Main (Option Explicit

Dim Tst Tst = InputBox( "Bitte Passwort eingeben:", "Passworteingabe" ) if Tst <> "p" Then do MsgBox "Passwort war falsch. Terminiere mich." Loop end if MsgBox "Passwort war richtig.", , WScript.ScriptName

Function UserFromPiK(sPiK) if sPiK = "kjdsikfj9" then _ UserFromPiK = "Max" _ else if sPiK = "oisgh9" then _ UserFromPiK = "Moritz" ... End Function)

-

Ich gestehe, dass ich wirklich keine große Leuchte bin auf diesem Gebiete. :( Könntest Du mir da ein wenig weiterhelfen?

Ich fühl mich an einen Abend erinnert, wo ich wen bat, mir stricken beizubringen aber nur einen riesen Knotenknäuel hinbekam. :((

0
@Wahrhaftigkeit

Ich habe es für dich erstmal so umgeschrieben, dass es funktioniert und du einen Start hast. Anmerkungen hänge ich hinten an.

Option Explicit

'Sub Include(sFile) Dim fsObj : Set fsObj = CreateObject("Scripting.FileSystemObject") : Dim vbsFile : Set vbsFile = fsObj.OpenTextFile(sFile, 1, False) : Dim myFunctionsStr : myFunctionsStr = vbsFile.ReadAll : vbsFile.Close : ExecuteGlobal myFunctionsStr End Sub

Call Main()

Sub Main 
    Dim sUser
    sUser = UserFromPik(InputBox( "Bitte Passwort eingeben:", "Passworteingabe" )) 
    if sUser = "" then
        do 
            MsgBox "Passwort war falsch. Terminiere mich." 
        Loop 
    end if 
    MsgBox "Hallo " & sUser & ", das Passwort war richtig.", , WScript.ScriptName 
end sub

Function UserFromPiK(sPiK) 
    if sPiK = "kjdsikfj9" then 
        UserFromPiK = "Max" 
    else if sPiK = "oisgh9" then  
        UserFromPiK = "Moritz" 
    else 
        UserFromPiK = ""
    end if
    end if
End Function

  • Option Explicit immer nach ganz oben
  • Die Include-Prozedur habe ich erstmal auskommentiert. Wenn du später Bibliotheken hast, dann kopierst du diese Zeile in jede Datei und kannst die Bibliotheken damit einbinden.
  • Es fehlte ein Aufruf von Main. Include-Aufrufe und ein Main-Aufruf sollten die einzigen Funktionsaufrufe in deinem Programm außerhalb von Funktionen sein.
  • Die Variable Tst habe ich mal sUser genannt, weil sprechender.
  • In UserFromPiK fehlten noch ein paar End ifs
  • Du solltest auch nicht vergessen, sinnvoll zusammenhängende Codeeinheiten zu kommentieren. Das habe ich mir erspart, solltest du aber nachholen.
0

Nachdem mein VBS keine Do-Loop-Schleifen kannte, oder ich zu blöd dazu war, hab ich mal eine Alternative aus Sub-Programmen entwickelt:

Dim Tst
Call Pro1

Sub Pro 1
Tst = InputBox( "Bitte Passwort eingeben:", "Passworteingabe" )
If Tst <> "p" then Call Pro2
End Sub

Sub Pro2
If MsgBox("Passwort war falsch. Nochmal eingeben?", vbYesNo, WScript.ScriptName) = vbYes Then Call Pro1
End Sub

Hab das Program jetzt nicht getestet und es wird nicht exakt so aussehen, wie deins. Aber es sollte das Prinzip erläutert haben.

Es erscheint eine Fehlermeldung:

***Windows Script Host***

Skript: C:\Pfad\Passwort.vbs
Zeile:4
Zeichen: 9
Fehler: '(' erwartet
Code: 800A03ED
Quelle: Kompilierungsfehler in Microsoft VBScript

Ich hab lang rumgewuselt und den Fehler gefunden: in Zeile 4 bei Sub Pro 1 muss die Lücke zwischen Pro und 1 weggenommen werden, dann läufts.

Hier der korrigierte Code, ebenfalls USERfreundlich, ohne Fehlerfenster-Loop, aber sonst siehts großartig aus. Danke, ist echt megacool geworden. :-)

Dim Tst
Call Pro1

Sub Pro1
Tst = InputBox( "Bitte Passwort eingeben:", "Passworteingabe" )
If Tst <> "p" then Call Pro2
End Sub

Sub Pro2
If MsgBox("Passwort war falsch. Nochmal eingeben?", vbYesNo, WScript.ScriptName) = vbYes Then Call Pro1
End Sub
0

Option Explicit

Dim Tst

do

Tst = InputBox( "Bitte Passwort eingeben:", "Passworteingabe" )

if Tst = "p" Then

Exit Do

else

MsgBox "Passwort war falsch.", , WScript.ScriptName

end if

Loop

MsgBox "Passwort war richtig.", , WScript.ScriptName

Leider weiß ich nicht wie man das besser formatiert

An dergutekoenig:

Ich hatte schon mit else ein wenig ausprobiert, aber irgendwie hat es bisher nicht geklappt. Trotzdem vielen Dank Dir.


An Suboptimierer:

Danke für den Hinweis :) Das habe ich bei der Planung mit einkalkuliert.

Das Passwort wird zu späterer Zeit in ein relativ einfaches Personal-Identifikations-Key (PiK) umgewandelt, wo einige Daten miteinander verbunden werden.

Der NICHT-Zugangsberechtigte USER soll gezwungen sein, den "Task-Manager" (taskmgr.exe) zu starten und die Anwendung "Microsoft ® Windows Based Script Host" (wscript.exe) manuell zu beenden.

Das soll ihm zu einer so ärgerlichen Erfahrung gereichen, dass er es nicht wagt, diese PiK-geschützte Anwendung erneut zu öffnen.

Ihn soll sozusagen das Schnüffeln in fremdem virtuellem Eigentum vergällt werden, weil die USER, die den Schlüssel haben, ihn richtig eingeben angesichts der tatsache, wie lächerlich einfach der Key wird.

So bekommt nur der Zugriff, der auch den entsprechenden "Personal Key" hat. :)

Eine kleine Frage noch:

Kann man den Code auch so konfigurieren, dass zum Beispiel zwei oder drei Personal Keys im selben Feld anwendbar sind und je nach Key ein bestimmter USER identifiziert und persönlich begrüßt wird? :)


An gejaf:

Das Formatieren ist nicht das Problem, viel wichtiger wäre erstmal nur der Code, hauptsache, es läuft. :D

Ich werd alle von Euch bisher geposteten Codes gleich mal testfahren, bin gespannt wie ein Kind zu Weihnachten.

Abgesehen davon, dass mir programmieren mehr Spaß macht als Weihnachten, weil mal als halber Newbie nie weiß, was am Ende herauskommt und 365 Tage programmieren kann, Weihnachten aber nur ne Viertelwoche lang ist.

Alle meine Programme sind, wenn ich hinbekomme, was ich wollte, Zufallsprogramme. Darum macht mir das Programmieren so Spaß, es ist wie ein Überraschungsei: klappt es oder nicht? ;)

Abgesehen davon hab ich niemanden, mit dem ich feiern kann, mein PC aber ist immer da und bietet, willens, mir zu dienen, immer, wann ich zu basteln begehre, seine Tastatur für neue Tests und Projekte dar. ;-D


Ich möchte mich bei Euch dreien wirklich megamäßig bedanken, dass die Antworten so dermaßen schnell kamen. In Anbetracht der Fülle von Fragen und ratsuchenden Leuten auf gutefrage hatte ich ein leicht flaues Gefühl, meine Frage fände erst in ein paar Monaten oder Jahren wissende Leser, aber dass es so schnell geht, erfreut mich aufs Größte. :) Danke euch dreien :)

0

Dein Code ist benutzerfreundlich, er springt nach der Passwort ist falsch-Meldung zurück zum Eingabe-Feld. Das war zwar nicht das, wie ich mir das vorgestellt hatte, weil das Fehlerfenster selbst geloopt werden sollte und ein Nicht-Zugriffsberechtigter sich ärgern sollte, aber ansonsten ist das eine Superleistung, die ich unter Garantie nicht besser hinbekommen hätte. Ich denke, dass ich den Code bei einem anderen Projekt benötigen werde. Ich möchte Dir herzlich danken für Deine Mühe, Deine Antwort und Hilfe. Es sieht großartig aus, hakt nicht und übersichtlich ist es auch. Sehr gut. :)

0

Virsual Basic Script (VBS) Befehle

Hi ich hab vor ein wenig Computersprache zu verstehen (lernen) ich mach das jetzt schon seit einem jahr aber ich hab mich in dem jahr mehr mit cmd und html und so befasst jetzt möchte ich allerdings auch mit VBScript Dateien ausernander setzten und vielleicht auch das ein oder andere KLEINE Programm damit schreiben ich bin schon sehr eifrig im internet am suchen nach einer seite mit (allen) VBS Befehlen leider hab ich bis jetzt noch nix richtig gutes gefunden ich hab mich gestern auch schon mal mit der seite hier befasst (PDF) http://www.microsoft-press.de/chapter.asp?cnt=getchapter&id=ms-847.pdf und kenn bis jetzt gerade mal diese befehle hier

  • MsgBox
  • Inputbox
  • = 2 & + - * /
  • time
  • do
  • loop

alles was mir grad einfällt

es währe super wenn ihr villeich einen Link oder so da lassen könnt

Danke schon mal im vorraus und

Viele Grüße Claus

...zur Frage

VBS-Script cmd Befehle ausführen - Loop - zeitlich getrennt?

Hallo Liebe Community,

Kann mir jemand weiterhelfen - ich würde ein vbs-Script benötigen das zwei cmd-Befehle zeitlich aufruft - Befehl 1 ausführen <-- 5s --> Befehl 2 ausführen <-- 5s --> Befehl 1 ... UNEDLICH LOOP

wie kann ich das am besten machen hat jemand Tipps oder irgendwo Beispiele?

...zur Frage

Ich möchte in Excel, dass man einen Druckauftrag nur per VBA geben kann, und NICHT über Datei -> Drucken oder STRG+P. Geht das?

Meine Idee war, zunächst das Drucken mittels InputBox per Passwort zu schützen.

Option Explicit

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim pw As String, chk As String
pw = "Passwort"
chk = InputBox("Bitte Passwort eingeben", "Druckauftrag", "xxx")
If pw <> chk Then
    MsgBox "Falsches Passwort. Druckauftrag abgebrochen"
    Cancel = True
    Exit Sub
End If
End Sub

Dann einen zweiten VBA-Code der tatsächlich das Drucken ermöglicht.

Option Explicit                                     

Sub Drucken()

    Dim LoI As Long                                 
    Dim LoLetzte As Long                           
    LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 45)), _
        Cells(Rows.Count, 45).End(xlUp).Row, Rows.Count)
    For LoI = LoLetzte To 2 Step -1
        If Cells(LoI, 45) <> Empty Then Exit For
    Next LoI
    ActiveSheet.PageSetup.PrintArea = "$A$1:$AU$" & LoI
    ActiveSheet.PrintOut
    
End Sub

Inklusive der Eingabe des Passworts für die InputBox.

Aber ich habe mich belesen, dass das Eintragen des PW per VBA in einer InputBox sehr aufwendig sein soll.

Habt Ihr andere Ideen?

...zur Frage

troll skript?

hallo 

da ich kein Forum gefunden habe, frag ich halt hier....ich habe selbst ein troll Skript erstellt nur ist das Problem, das ich dass nicht herausfinde wo der Fehler ist :c

hat jemand Kenntnis in diesem Gebiet?

hier das skript


x =MsgBox("Faggot ich hab dich fett getrollt! hahhahahahaha",2,"But don't change anything elese!") 

x =MsgBox("nice Try Muhahahahaha Try again noob",4,"you cant change anything!Muhaha!") 

 If x = vbYes Then 

 Do 

 x = MsgBox ("try again",4,"hahahahahaha") 

 x = MsgBox ("noob try again ahaha",4,"hahahahahaha") 

 x = MsgBox ("try again you fgt XD!!",4,"hahahahahaha") 

 loop 

 If x = vbNo 

Then set shellobj = CreateObject("WScript.Shell") shellobj.run "cmd" wscript.sleep 100 shellobj.sendkeys "shutdown" wscript.sleep 20 Shellobj.sendkeys " /s" wscript.sleep 20 shellobj.sendkeys 

 End If<

...zur Frage

VBScript: Zeichen zählen?

Wenn ich Wörter zählen möchte mache ich das in Kopf was ein bisschen doof wird wenn man so um die 300 - 400 Wörter zählen muss. Dann kam mir die Idee: Wenn ich ein Wort gezählt habe haue ich einmal auf die Leertaste/eine Taste. Am Schluss drücke ich Enter und mein Programm soll zählen wie viele Zeichen ich eingegeben hab. Wie würde das gehen?

Worte = InputBox("Gib einfach Buchstaben und leerstellen ein und diese Werden dann gezählt!","Wörter zählen")

'Hier Wörter zählen

'_____________________________________________


'_____________________________________________

msgbox ""&Anzahl&" Wörter",0+64,"Wörter gezählt"
'Ende

î hier eine kleine Vorgabe ;)

...zur Frage

Was möchtest Du wissen?