Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung VB for Applications

GELÖST

Mit VB Script einen hexadezimalen DWORD-Wert eintragen

Mitglied: scanco

scanco (Level 1) - Jetzt verbinden

26.08.2010 um 13:58 Uhr, 7257 Aufrufe, 17 Kommentare

Nach langem Googlen immer noch keine Lösung

Hallo,

nachdem ich nun stundenlang das Internet durchsucht und so manchen Tipp probiert habe, fand ich leider bisher immer noch keine Lösung

Ich möchte mit VBScript einen Eintrag in die Registry schreiben. Schwierigkeit: Es ist ein langer hexadezimaler DWORD-Eintrag.
Normale Zeichenfolgen eintragen ist ja mit "WSHShell.RegWrite" kein Problem. Allerdings scheitert es hier an dem Hex-Wert

Mein Befehl sieht so aus:
01.
WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000002\New Signature" , "53 00 49 00 47 00 4e 00 41 00 54 00 55 00 52 00 00 00" , "REG_DWORD"
Leider erhalte ich dann immer den Hinweis:
Laufzeitfehler in Microsoft VBScript
Code: 800A000D
Fehler: Typen unverträglich

Kann mir da jemand helfen?

Vielen Dank
Mitglied: DerWoWusste
26.08.2010 um 14:18 Uhr
Moin.
Keine Lösung für Dich, aber: warum nicht per regedit /s regfile.reg lösen?
Bitte warten ..
Mitglied: scanco
26.08.2010 um 14:19 Uhr
Das wär dann die Notlösung...
Am besten wärs allerdings wenn alles in einem VB Script abläuft und keine zusätzlichen Dateien notwendig wären...
Bitte warten ..
Mitglied: 76109
26.08.2010 um 15:00 Uhr
Hallo scanco!

Kommentar erstmal wieder entfernt

Gruß Dieter
Bitte warten ..
Mitglied: scanco
26.08.2010 um 15:17 Uhr
Zitat von 76109:
Hallo scanco!

Kommentar erstmal wieder entfernt

Gruß Dieter

Kapier ich jetzt ned...
Bitte warten ..
Mitglied: 76109
26.08.2010 um 15:23 Uhr
Hallo scanco!

Tja, dachte ich hätte was gesehen, was nicht sein sollte, war aber ein Irrtum.

Also, hier nochmal das Ganze:

DWord ist nur ein 32Bit-Zahlenwert (4Byte).

Du benötigst ein REG_BINARY-Array, dass nicht in Stringform übergeben werden kann, sondern als Byte-Array.

Eventuell könnte das funktionieren:
01.
Dim Binary, Text, i 
02.
 
03.
Text = Split("53 00 49 00 47 00 4e 00 41 00 54 00 55 00 52 00 00 00") 'Einzelne Werte in Text-Array schreiben 
04.
 
05.
ReDim Binary(UBound(Text)) 'Byte-Array definieren 
06.
 
07.
For i = 0 To UBound(Text)  
08.
    Binary(i) = CByte("&H" & Text(i)) 'Byte-Array mit Zahlenwerte füllen 
09.
Next 
10.
 
11.
WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000002\New Signature" , Binary , "REG_BINARY"
aber ohne Garantie, dass es auch funktioniert

Gruß Dieter
Bitte warten ..
Mitglied: scanco
26.08.2010 um 15:50 Uhr
Hat sich gut gelesen - und hat sich logisch angehört...
Leider kommt auch hier der Mist mit der Typenunverträglichkeit
Bitte warten ..
Mitglied: 76109
26.08.2010 um 15:58 Uhr
Hallo scanco!

Das hatte ich fast befürchtet. Das Problem hierbei ist, das in VBS keine Byte-Arrays (Dim Binary() As Byte) definiert werden können und somit wohl vom Typ Variant/Byte mit Byte-Werten sind, denn die Bytewerte stimmen. Ich habe da noch eine Idee, wie ich in VBS ein echtes Byte-Array zu erzeugen kann, aber das kann jetzt ein bisschen dauern

Gruß Dieter
Bitte warten ..
Mitglied: scanco
26.08.2010 um 16:54 Uhr
Hallo Dieter,

Mensch, das wär klasse!

Würd mich freuen von dir zu lesen' Merci!
Bitte warten ..
Mitglied: 76109
26.08.2010 um 18:15 Uhr
Hallo scanco!

Mit echten Byte-Arrays funktioniert es mit WshShell auch nicht. Offensichtlich können mit WshShell keine Byte-Arrays übergeben werden. Eine direkte Angabe mit &H12345678 funktioniert gerade noch, aber dann ist aber auch Schluss

Gruß Dieter
Bitte warten ..
Mitglied: 76109
26.08.2010 um 20:21 Uhr
Hallo nochmal!

Also dieses Beispiel funktioniert tadellos
01.
Const HKEY_CURRENT_USER = &H80000001 
02.
 
03.
Dim RegText, ByteArray, i, objReg, strComputer, strKeyPath, strValueName 
04.
 
05.
RegText = Split("53 00 49 00 47 00 4e 00 41 00 54 00 55 00 52 00 00 00") 
06.
 
07.
ReDim ByteArray(UBound(RegText)) 
08.
 
09.
For i = 0 To UBound(RegText) 
10.
    ByteArray(i) = CByte("&H" & RegText(i)) 
11.
Next 
12.
 
13.
strComputer = "." 
14.
 
15.
strKeyPath = "Software\Aerofox\Foxmail\" 
16.
 
17.
strValueName = "Test" 
18.
 
19.
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
20.
 
21.
objReg.SetBinaryValue HKEY_CURRENT_USER, strKeyPath, strValueName, ByteArray 
22.
 
23.
Set objReg = Nothing
Gruß Dieter
Bitte warten ..
Mitglied: Biber
26.08.2010 um 22:14 Uhr
Moin didi1954,

ist meiner Meinung nach zum Scheitern verurteilt.
Nich' wegen dir jezz'... wegen der PraktikantInnen.

Die schreiben doch in ihren Wochenberichten z.b hier so was wie
The RegWrite method automatically converts the parameter anyValue to either a string or an integer.
- oder auch-
Tip:
RegWrite will write at most one DWORD to a REG_BINARY value. Larger values are not supported with this method.
Frag jetzt nicht, wieso die das "Tip" nennen... so gut ist mein outlandish nun auch nicht.

Anyway, egal jetzt ob die nun zu blöd sind oder doch... auf Oldenburger Platt runtergebrochen heisst das doch wohl:
"Okay, klar kannst du auch einen REG_BINARY schreiben. Aber pass ein bisschen auf, dass er möglichst 0 oder 1 oder so ist.
Zumindest nicht größer als diese Zahlen beim Bingo oder Lotto."


Damit fällt doch wohl der REG_BINARY in der Aufgabe hier raus.

Ich als alter Bätchschroter würde es so machen (wenn ich es müsste)
[Skizze zur Demo, keine Fettich-Lösung!]
01.
Const HKEY_CURRENT_USER = &H80000001 
02.
' Const NewSIGNATUR ="MfG Biber" 
03.
Const NewSIGNATUR ="SIGNATUR" 
04.
Dim aHValues() 
05.
 
06.
strRegPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000002" 
07.
strRegKey =chr(34)& "New Signature" & chr(34) 
08.
 
09.
strNewValueSz =NewSIGNATUR & Chr(0) ' null terminated string - C-like 
10.
 
11.
WScript.echo "#1 Len(StrNewValueSz) " & Len(StrNewValueSz) 
12.
WScript.echo "#2 LenB(StrNewValueSz)" & LenB(StrNewValueSz) 
13.
 
14.
ReDim aHValues( lenB(StrNewValueSz ) ) '  weil jedes Zeichen auch noch mal null-terminiert wird 
15.
 
16.
For i = 1 to Len(StrNewValueSz) step 1 
17.
    wscript.echo i &": " & Mid( strNewvalueSz, i, 1) & " Asc(" & Mid( strNewvalueSz, i, 1)&"): " _  
18.
     & Asc( Mid( strNewvalueSz, i, 1)) & " Hex: " & Hex( Asc( Mid( strNewvalueSz, i, 1))) 
19.
    aHValues(i*2-2)   = Hex( Asc( Mid( strNewvalueSz, i, 1))) 
20.
    aHValues(i*2-1) = &H0 
21.
Next 
22.
 
23.
' Set oReg = GetObject("winMgmts:\\.\root\default:StdRegProv") 
24.
' strValueSet = oReg.SetBinaryValue(HKEY_CURRENT_USER, strRegPath, strRegKey, aHValues)
Anmerkung: die letzten beiden Zeilen sind a) zu testen und b) sollen die Schreiberei machen
Der Rest, also der reine Demo-Schnipsel bringt:
+>z:\austausch\temp\RegBinaryRegWriteWork.vbs 
#1 Len(StrNewValueSz) 9 
#2 LenB(StrNewValueSz)18 
1: S Asc(S): 83 Hex: 53 
2: I Asc(I): 73 Hex: 49 
3: G Asc(G): 71 Hex: 47 
4: N Asc(N): 78 Hex: 4E 
5: A Asc(A): 65 Hex: 41 
6: T Asc(T): 84 Hex: 54 
7: U Asc(U): 85 Hex: 55 
8: R Asc(R): 82 Hex: 52 
9:
In den Demo-Ausgaben lässt sich der (später geschriebene) REG_BINARY-Wert ja erkennen.
Das wäre mein Plan.

Grüße
Biber
Bitte warten ..
Mitglied: 76109
26.08.2010 um 23:02 Uhr
Hallo Biber!

Bin ich jetzt irgendwie im falschen Film?

Das mit WShell auch bei REG_BINARY maximal nur 32Bit-Werte(sprich &H12345678) möglich sind, habe inzwischen auch herausgefunden und weiter oben bereits kommentiert. Hab ich halt net gwisst, weil ich's noch net gmacht hab

In meinem letzten kommentar, habe ich doch ein Skript reingeballert, dass ich getestet habe und auch funktioniert. Swa jetz mit moim Beispiel, aber vom Prinzip her verwertbar und die ByteArray-Übergabe funktioniert auch einwandfrei exakt mit den Hexwerten, wie sie im Textstring stehen

Gruß Dieter
Bitte warten ..
Mitglied: Biber
26.08.2010 um 23:11 Uhr
Upps, didi1954,

sorry, nicht du warst im falschen Film... da hatte ich wohl noch eine ältere Folge gesehen. Sorry.
Ich war noch bei dem Schnipsel-Stand von "didi1954 schreibt am 26.08.2010, 15:23:30 Uhr"
... deine spätere Lösung habe ich eben erst bemerkt.
Ähmm ... vergiss es einfach.

Manchmal finde ich mich in Situationen wieder, die auch in 70er-Jahre-Sketchen sehr beliebt waren...
Kommt ein Mann zum Patentamt und sagt: 'Ich werde meine Erfindung "Fernsehen" nennen'.... kennst du bestimmt.

Peinlich, peinlich...

Grüße
Biber
Bitte warten ..
Mitglied: 76109
26.08.2010 um 23:21 Uhr
Hallo Biber!

Zitat von Biber:
Manchmal finde ich mich in Situationen wieder, die auch in 70er-Jahre-Sketchen sehr beliebt waren...
Kommt ein Mann zum Patentamt und sagt: 'Ich werde meine Erfindung "Fernsehen" nennen'....
kennst du bestimmt.
War das nicht KlimBim mit meiner damaligen Traumfrau Ingrid Steegert? Achnee, des war doch glab ich die Wochenshow mit dem Dingsda? Ne, auch net. Des war ja der, der immer gesagt hat "komm ich jetzt ins Fernsehen". Komm nicht drauf (peinlich, peinlich)

Peinlich, peinlich...
Iwo, auch Vollprofis unterlaufen mal Fehler und ist zum Glück menschlisch

Gruß Dieter.
Bitte warten ..
Mitglied: 76109
27.08.2010 um 08:38 Uhr
Hallo scanco, Hallo Biber!

Aufgrund Bibers Lösung und Ausführungen, habe ich auch noch eine 2. Version gebastelt, bei der die Signatur auch direkt in ein Byte-Array übersetzt wird
01.
Const HKEY_CURRENT_USER = &H80000001 
02.
Const NewSignatur = "SIGNATUR" 
03.
 
04.
    Dim RegText, NewRegText, ByteArray, i, objReg, strComputer, strKeyPath, strValueName 
05.
     
06.
    RegText = NewSignatur & Chr(0) 
07.
     
08.
    For i = 1 To Len(RegText) 
09.
        NewRegText = NewRegText & Mid(RegText, i, 1) & Chr(0) 
10.
    Next 
11.
     
12.
    ReDim ByteArray(Len(NewRegText) - 1) 
13.
     
14.
    For i = 0 To UBound(ByteArray) Step 2 
15.
        ByteArray(i) = CByte(Asc(Mid(NewRegText, i + 1, 1))) 
16.
        ByteArray(i + 1) = CByte(0) 
17.
    Next 
18.
     
19.
    strComputer = "." 
20.
     
21.
    strKeyPath = "Software\Aerofox\Foxmail\" 
22.
     
23.
    strValueName = "Test" 
24.
     
25.
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
26.
     
27.
    objReg.SetBinaryValue HKEY_CURRENT_USER, strKeyPath, strValueName, ByteArray 
28.
     
29.
    Set objReg = Nothing
Ist aber nur oberflächlich getestet

Gruß Dieter
Bitte warten ..
Mitglied: scanco
20.09.2010 um 08:12 Uhr
Vielen Dank für Eure Unterstützung - hat wunderbar geklappt.
Kunde zufrieden - Chef zufrieden - wunderbar.

HERZLICHEN DANK NOCHMAL!!!
Bitte warten ..
Mitglied: 76109
20.09.2010 um 09:56 Uhr
Hallo scanco!

Zitat von scanco:
Vielen Dank für Eure Unterstützung - hat wunderbar geklappt.
Kunde zufrieden - Chef zufrieden - wunderbar.
Na, wenn die alle zufrieden sind, dann bin ich es natürlich auch

HERZLICHEN DANK NOCHMAL!!!
Gern geschehen

Gruß Dieter
Bitte warten ..
Ähnliche Inhalte
VB for Applications
VB-Script in VB-Script starten und Parameter übergeben
gelöst Frage von denkisVB for Applications7 Kommentare

Hallo liebe Scriptgemeinde, ich muss mehrere Rechner für den Übergang in eine neue Domäne vorbereiten. Dafür sind drei wesentliche ...

Batch & Shell
Probleme bei der Ausführung eines VB-Scriptes
Frage von AuricGoldfingerBatch & Shell1 Kommentar

Hallo zusammen, ich habe folgendes Script geschrieben: Leider bekomme ich bei der Ausführung den Fehler Was mache ich falsch?? ...

Windows Server
Drucker entfernen in VB-Script
gelöst Frage von NilsvLehnWindows Server2 Kommentare

Hallo ich habe eine kleine Frage bzgl. unseres Anmeldeskriptes. Ich habe ein IT-netzwerk an einer Uni übernommen. Ich arbeite ...

Entwicklung
VB Script Drucker hinzufügen
Frage von Marcel1989Entwicklung3 Kommentare

Funktionsweise sollte definitiv sein das mit einem Script sich 2 verschiedene Betriebssysteme ein und denselben Drucker holen. Mein Script ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...