zurückschreiben kann. Als Beispiele ist hier eine Outlooksicherung der Konten,
wobei zwar die Passwörter mit gespeichert werden, aber wohl durch MS verhindert werden
erneut in die Registry zu kopiert zu werden. Diese müsste man dann von Hand manuell eingeben.
Bei diesem Beispiel ist es wichtig, das man in Compileroptionen auf Administrator-Modus ...
einstellt. Sonst wird nichts gespeichert.
Warnung! Mit diesen Funktionen sollte derjenige arbeiten, der weißl, was man
in die Registry ändert. Ansonsten würde bei Unwissenheit Windows nicht mehr starten.
Also bitte mit Vorsicht diese Funktionen (besonders das speichern) benutzen.
Code: Alles auswählen
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;VBA-Beispiel aus: http://www.ex-designz.net/apidetail.asp?api_id=552
;Umgewandelt aus dem VBA-Beispiel und hinzunahme zweier Proceduren
; GetLastError und EnablePrivilege aus dem englischen Forum von Falko Lünsmann
; Sichern und zurückschreiben der Outlookkonten (Einstellungen und Passwörter)
;
;- Window Constants
;
#SE_BACKUP_NAME = "SeBackupPrivilege"
File$=GetCurrentDirectory()+"OutlookKonten.bac"
key$="Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676"
#SE_RESTORE_NAME = "SeRestorePrivilege"; Important for what we're trying to accomplish
#REG_FORCE_RESTORE = 8 ; Almost as import, will allow you to restore over a key while it's open!
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Button_0
#Button_1
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 220, 0, 383, 104, "Outlook Backup ", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
ButtonGadget(#Button_0, 30, 30, 140, 50, "Outlook-Konten sichern")
ButtonGadget(#Button_1, 190, 30, 180, 50, "Outlook-Konten zurück schreiben")
EndIf
EndProcedure
Procedure.s GetLastError(Err.l)
Protected buffer.l=0,ferr.l,errormsg$=""
ferr=FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,Err,GetUserDefaultLangID_(),@buffer,0,0)
If buffer<>0
errormsg$=PeekS(buffer)
LocalFree_(buffer)
errormsg$=RemoveString(errormsg$,Chr(13)+Chr(10))
EndIf
ProcedureReturn errormsg$
EndProcedure
Procedure.l EnablePrivilege(Privilege.s,Enable.l=1)
Protected Res.l
Protected hToken.l, hProcess.l
Protected tTP.TOKEN_PRIVILEGES, tTPOld.TOKEN_PRIVILEGES, lTpOld.l
Protected Success.l
Res = LookupPrivilegeValue_(0, Privilege, @tLUID.LUID)
If Res
hProcess = GetCurrentProcess_()
If hProcess
Res = OpenProcessToken_(hProcess, #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hToken)
If Res
With tTP
\PrivilegeCount = 1
If Enable
\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
Else
\Privileges[0]\Attributes = 0
EndIf
\Privileges[0]\Luid\LowPart = tLUID\LowPart
\Privileges[0]\Luid\HighPart = tLUID\HighPart
EndWith
Res = AdjustTokenPrivileges_(hToken, 0, @tTP, SizeOf(tTP), @tTPOld, @lTpOld)
If Res
Success=1
EndIf
CloseHandle_(hToken)
EndIf
EndIf
EndIf
If Success
If Enable
Debug Privilege+" enabled"
Else
Debug Privilege+" disabled"
EndIf
Else
Err=GetLastError_()
If Enable
Debug Privilege+" not enabled ("+GetLastError(Err)+")"
Else
Debug Privilege+" not disabled ("+GetLastError(Err)+")"
EndIf
EndIf
ProcedureReturn Success
EndProcedure
Procedure.l RestoreKey(sKeyName.s,sFileName.s,lPedifinedKey.l)
Protected Result.l
If EnablePrivilege(#SE_RESTORE_NAME) = #False
Goto raus2
EndIf
Protected hKey.l,lRetVal.l
RegOpenKeyEx_(lPredefinedKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey) ; Must open key to save it
;The file it's restoring from was created using the RegSaveKey function
RegRestoreKey_(hKey,sFileName,#REG_FORCE_RESTORE)
RegCloseKey_(hKey)
raus2:
ProcedureReturn
EndProcedure
Procedure.l SaveKey(sKeyName.s, sFileName.s, lPredefinedKey.l)
Protected Result.l
If EnablePrivilege(#SE_BACKUP_NAME) = #False
Goto raus
EndIf
Protected hKey.l,lRetVal.l
Error.l=RegOpenKeyEx_(lPredefinedKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey) ; Must open key to save it
Debug GetLastError(Error)
;Don't forget To "KILL" any existing files before trying To save the registry key!
If GetFilePart(sFileName)<>""
Debug GetFilePart(sFileName)
DeleteFile("OutlookKonten.reg")
RegSaveKey_(hKey, sFileName, #Null)
EndIf
RegSaveKey_(hKey, sFileName,#Null)
RegCloseKey_(hKey); Don't want To keep the key ope. It causes problems.
raus:
ProcedureReturn
EndProcedure
Open_Window_0()
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
;You can place code here, and use the result as parameters for the procedures
If Event = #PB_Event_Gadget
If GadgetID = #Button_0
Error=SaveKey(key$,File$,#HKEY_CURRENT_USER)
GetLastError(Error)
MessageRequester("ErrorLevel",GetLastError(Error))
ElseIf GadgetID = #Button_1
Error=RestoreKey(key$,File$,#HKEY_CURRENT_USER)
MessageRequester("ErrorLevel",GetLastError(Error))
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
;