
Sowas ähnliches gibt es bereits: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Nur nicht als Modul. Deinen Code kann ich aber trotzdem hinzufügen.
Code: Alles auswählen
EnableExplicit
#REG_NOTIFY_ALL = #REG_NOTIFY_CHANGE_LAST_SET|#REG_NOTIFY_CHANGE_ATTRIBUTES|#REG_NOTIFY_CHANGE_NAME|#REG_NOTIFY_CHANGE_SECURITY
Define Key, hEvent, Error
Procedure.s LastError(Error)
Protected *MemoryID = AllocateMemory(#MAX_PATH), Message$
If *MemoryID
If FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, #Null, Error, #Null, *MemoryID, #MAX_PATH, #Null)
Message$ = PeekS(*MemoryID)
EndIf
FreeMemory(*MemoryID)
EndIf
ProcedureReturn Message$
EndProcedure
MessageRequester("", "Eine Änderung unter HKEY_CURRENT_USER / AppEvents vornehmen!")
Repeat
If RegOpenKeyEx_(#HKEY_CURRENT_USER, "AppEvents", #Null, #KEY_NOTIFY, @Key) = #ERROR_SUCCESS
hEvent = CreateEvent_(#Null, #True, #False, #Null)
If hEvent
Error = RegNotifyChangeKeyValue_(Key, #True, #REG_NOTIFY_ALL, hEvent, #True)
If Error = #ERROR_SUCCESS
If WaitForSingleObject_(hEvent, #INFINITE) <> #WAIT_FAILED
Debug "Registry wurde unter HKEY_CURRENT_USER / AppEvents verändert!"
EndIf
Else
LastError(Error)
EndIf
CloseHandle_(hEvent)
Else
LastError(GetLastError_())
EndIf
RegCloseKey_(Key)
Else
LastError(GetLastError_())
EndIf
Delay(1000)
ForEver
Code: Alles auswählen
;Autor: nco2k, WeePe
EnableExplicit
Procedure.s sGetXPCDKey()
Protected *bDigitalProductID
Protected *bProductKey.byte
Protected ilByte.l
Protected lDataLen.l
Protected hKey.l
Protected Byte.l
Protected nCur.l
Protected sCDKey.s
Protected ilKeyByte.l
*bDigitalProductID = AllocateMemory(164)
*bProductKey.byte = AllocateMemory(15)
ilByte.l
lDataLen.l
hKey.l
If RegOpenKey_(#HKEY_LOCAL_MACHINE, "SOFTWARE\MICROSOFT\Windows NT\CurrentVersion", @hKey) = #ERROR_SUCCESS
lDataLen = 164
If RegQueryValueEx_(hKey, "DigitalProductId", 0, "REG_BINARY", *bDigitalProductID, @lDataLen) = #ERROR_SUCCESS
For ilByte = 52 To 66
Byte = PeekB(*bDigitalProductID + ilByte) & 255
PokeB(*bProductKey + ilByte - 52, Byte)
Next ilByte
RegCloseKey_(hKey)
Else
Debug("Data nicht gefunden")
RegCloseKey_(hKey)
ProcedureReturn ""
EndIf
Else
Debug("Schlüssel nicht gefunden")
ProcedureReturn ""
EndIf
Debug("Erzeuge String")
Dim bKeyChars.l(23)
bKeyChars(0) = Asc("B")
bKeyChars(1) = Asc("C")
bKeyChars(2) = Asc("D")
bKeyChars(3) = Asc("F")
bKeyChars(4) = Asc("G")
bKeyChars(5) = Asc("H")
bKeyChars(6) = Asc("J")
bKeyChars(7) = Asc("K")
bKeyChars(8) = Asc("M")
bKeyChars(9) = Asc("P")
bKeyChars(10) = Asc("Q")
bKeyChars(11) = Asc("R")
bKeyChars(12) = Asc("T")
bKeyChars(13) = Asc("V")
bKeyChars(14) = Asc("W")
bKeyChars(15) = Asc("X")
bKeyChars(16) = Asc("Y")
bKeyChars(17) = Asc("2")
bKeyChars(18) = Asc("3")
bKeyChars(19) = Asc("4")
bKeyChars(20) = Asc("6")
bKeyChars(21) = Asc("7")
bKeyChars(22) = Asc("8")
bKeyChars(23) = Asc("9")
nCur.l
sCDKey.s
ilKeyByte.l
ilByte.l
Byte.b
For ilByte = 24 To 0 Step -1
nCur = 0
For ilKeyByte = 14 To 0 Step -1
Byte = PeekB(*bProductKey + ilKeyByte) & 255
nCur = ((nCur & 255) * 256) ! Byte
PokeB(*bProductKey + ilKeyByte, (Int(nCur / 24)))
nCur = nCur % 24
Next ilKeyByte
sCDKey = Chr(bKeyChars(nCur)) + sCDKey
If ilByte % 5 = 0 And ilByte <> 0
sCDKey = "-" + sCDKey
EndIf
Next ilByte
ProcedureReturn sCDKey
EndProcedure
MessageRequester("","Windows-Seriennummer: "+sGetXPCDKey(),0)
Bezüglich dieser Zeile:Zeile 76: Variable bereits mit einem anderen Typ deklariert: Byte.
Code: Alles auswählen
Byte.b
Code: Alles auswählen
Byte.l
Code: Alles auswählen
If RegQueryValueEx_(hKey, "DigitalProductId", 0, "REG_BINARY", *bDigitalProductID, @lDataLen) = #ERROR_SUCCESS