wraithdu Posted April 30, 2008 Share Posted April 30, 2008 (edited) Update 2/2/12:v2.0.7Fix _RegRead returns string data for _RegExport.Update 1/30/12:v2.0.6 - SCRIPT BREAKINGChange _RegRead treatment of REG_MULTI_SZ data. Data is returned in a comparable format to AutoIt's native RegRead function: CRLF delimited substrings. (AutoIt's RegRead actually returns LF delimited substrings.)Update 1/29/12:v2.0.5Added more supported formats to the Export function and fixed infinite loop errors. REG_LINK remains unsupported.v2.0.4Fixed some REG_MULTI_SZ issues in Write/Copy/Move functions. Re-read the _RegWrite header notes for the pertinent information. Thanks again step887 for reporting.Update 1/28/12:v2.0.3Do not use RegDeleteKeyEx on 32-bit OS's, it is not needed (and does not exist on XP 32-bit and lower, or lower than Server 2003 SP1). Thanks step887 for reporting the error!Update 12/2/10:v2.0.2Fixed wrong @error return from _RegRead which would cause _RegValueExists to incorrectly return Success.Update 5/25/10:Ok, huge overhaul.Added:- Function documentation!- Improved _RegRead and _RegWrite to better handle data. Specifically, REG_MULTI_SZ data types are correctly read / exported if the data was incorrectly written to the registry by another application. And the data is correctly written even if it was supplied to the function with incorrect termination. Because of the unusual format of this data type, it is returned from _RegRead as binary data.- _RegRead / _RegWrite support all known registry value data types (in at a least a limited way). For uncommon types, the values are read / written as binary data.- Better error checking and reporting, especially before any delete operations.- x64 Platform: Support for directly reading the 32-bit and 64-bit registry views from both 32-bit and 64-bit scripts.- All operations are now done via custom registry functions. I didn't want to go all the way, but AutoIt doesn't support a root key like HKLM32 to force reading the 32-bit registry on the x64 platform from a native 64-bit script. Once I decided to introduce that capability in some of the higher level functions, I had to rewrite all the low level functions as well.- _RegExport function to recursively export a key or a single value to a MS compatible REG file.- Other undocumented helper functions that could be pilfered for nefarious usage.There might be some more minor things that I've forgotten. I've tested this pretty well, but please report any bugs or problems.Update 4/16/2010:Added the latest version of this UDF. It includes some custom _RegWrite / _RegRead functions as well. The _RegWrite function allows you to set the REG_OPTION_VOLATILE flag on a registry key. Example at the bottom.I needed this for a script, and didn't necessarily like big_daddy's solution. Here's a recursive registry copy/move function. I tested it and it seems to work perfectly (knock on wood). It could probably use some more error catching, so suggestions are welcome._RegFunc.au3 Edited February 2, 2012 by wraithdu friendfox and Mat 2 Link to comment Share on other sites More sharing options...
wraithdu Posted April 30, 2008 Author Share Posted April 30, 2008 (edited) Threw in _RegCopyValue / _RegMoveValue for good measure._RegCopyValue / _RegMoveValue** above Edited April 16, 2010 by wraithdu Link to comment Share on other sites More sharing options...
wraithdu Posted April 30, 2008 Author Share Posted April 30, 2008 (edited) Seems I needed more -_RegKeyExists / _RegValueExists / _RegKeyEmpty** above Edited April 16, 2010 by wraithdu Link to comment Share on other sites More sharing options...
WeMartiansAreFriendly Posted April 30, 2008 Share Posted April 30, 2008 Thanks for sharing. I wrote similar functions, but not quite as elegant. Don't bother, It's inside your monitor!------GUISetOnEvent should behave more like HotKeySet() Link to comment Share on other sites More sharing options...
wraithdu Posted May 5, 2008 Author Share Posted May 5, 2008 (edited) Update, properly declare variables in functions. Caught myself in recursion hell cause of this... ** above search terms: regmovekey regcopykey moveregkey copyregkey movekey copykey reg registry move copy key Edited April 16, 2010 by wraithdu Link to comment Share on other sites More sharing options...
wraithdu Posted July 1, 2008 Author Share Posted July 1, 2008 (edited) Small update, added _RegSubkeySearch() which searches keys for the searchterm and returns the key index, or 0 if not found. Mode: 0 = substring search 1 = search from beginning of key name Case sense: 0 = case insensitive 1 = case sensitive So defaults would be a case insensitive substring search. Edited July 1, 2008 by wraithdu Link to comment Share on other sites More sharing options...
dmoniac Posted July 4, 2008 Share Posted July 4, 2008 I take it, so good. Link to comment Share on other sites More sharing options...
mplsmark Posted April 30, 2009 Share Posted April 30, 2009 Just put this to use, thanks for posting. Link to comment Share on other sites More sharing options...
wraithdu Posted April 16, 2010 Author Share Posted April 16, 2010 Updated. Link to comment Share on other sites More sharing options...
wraithdu Posted May 26, 2010 Author Share Posted May 26, 2010 Major update. Please report any problems. Link to comment Share on other sites More sharing options...
asdf8 Posted May 26, 2010 Share Posted May 26, 2010 wraithdusome keys are incorrectly exported:_RegExport('example.reg', 'HKEY_CLASSES_ROOT\.doc')Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.doc] @="Word.document.8" "Content Type"="application/msword" [HKEY_CLASSES_ROOT\.doc\OpenWithList] [HKEY_CLASSES_ROOT\.doc\OpenWithList\WordPad.exe] @=""regeditWindows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.doc] @="Word.document.8" "Content Type"="application/msword" [HKEY_CLASSES_ROOT\.doc\OpenWithList] [HKEY_CLASSES_ROOT\.doc\OpenWithList\WordPad.exe] @="" [HKEY_CLASSES_ROOT\.doc\PersistentHandler] @="{98de59a0-d175-11cd-a7bd-00006b827d94}" [HKEY_CLASSES_ROOT\.doc\ShellNew] [HKEY_CLASSES_ROOT\.doc\Word.document.6] [HKEY_CLASSES_ROOT\.doc\Word.document.6\ShellNew] "FileName"="winword.doc" [HKEY_CLASSES_ROOT\.doc\Word.document.8] [HKEY_CLASSES_ROOT\.doc\Word.document.8\ShellNew] "FileName"="winword8.doc" [HKEY_CLASSES_ROOT\.doc\WordDocument] [HKEY_CLASSES_ROOT\.doc\WordDocument\ShellNew] "FileName"="winword2.doc" [HKEY_CLASSES_ROOT\.doc\WordPad.document.1] [HKEY_CLASSES_ROOT\.doc\WordPad.document.1\ShellNew] "NullFile"="" Link to comment Share on other sites More sharing options...
wraithdu Posted May 26, 2010 Author Share Posted May 26, 2010 Thanks, looking into it. Link to comment Share on other sites More sharing options...
wraithdu Posted May 26, 2010 Author Share Posted May 26, 2010 Ok, it's fixed. It was an Access Denied error when enumerating the keys... which makes no sense to me. As a general rule, I try open files / keys / whatever with the minimum required access rights. Apparently MSDN wasn't entirely truthful. I've updated everything to use either KEY_READ or KEY_WRITE, which should be minimal enough not to cause issues, yet provide all the normally required access rights. Link to comment Share on other sites More sharing options...
MasterChief Posted May 26, 2010 Share Posted May 26, 2010 Could you possibly add some way to edit permissions within a script. This would help me so much seeing as I need to write to the registry, but I need that value to be read only access to all users. Thanks Link to comment Share on other sites More sharing options...
wraithdu Posted May 26, 2010 Author Share Posted May 26, 2010 Look into the app SetACL, and script that. I have no idea what is required to set / change registry key / value permissions at this moment. Link to comment Share on other sites More sharing options...
KaFu Posted May 26, 2010 Share Posted May 26, 2010 This looks really nice m8 , thanks a lot, I'll take a deeper look ... Â OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2024-Oct-13)Â BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Oct-13) HMW - Hide my Windows (2024-Oct-19) HRC - HotKey Resolution Changer (2012-May-16)Â ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2024-Oct-20) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
JFX Posted November 1, 2010 Share Posted November 1, 2010 Thanks a lot, very good How about adding support for creation of symbolic links like Regln have? Link to comment Share on other sites More sharing options...
Fire Posted November 5, 2010 Share Posted November 5, 2010 Thx so much wraithdu for this GREAT UDF!It solved my problem when reading REG_QWORD(11) types values from regedit!+5 stars from me!Thank you! [size="5"] [/size] Link to comment Share on other sites More sharing options...
wraithdu Posted December 2, 2010 Author Share Posted December 2, 2010 Dang, found a small bug today. See first post. Link to comment Share on other sites More sharing options...
step887 Posted January 26, 2012 Share Posted January 26, 2012 This is great work, however, I think I may have found an error, I started off trying to use move key and it was failing The copy works,, found out the delete was not it works fine on my win 7 64 bit (not compiled) when i copy to VM of xp sp3 32 bit, it does not work $err = _RegWrite("HKEY_LOCAL_MACHINE\Software\test") MsgBox(0,@extended, @error & @CRLF & $err) $err = _RegKeyExists("HKEY_LOCAL_MACHINE\Software\test") MsgBox(0,@extended, @error & @CRLF & $err) $err = _RegDelete("HKEY_LOCAL_MACHINE\Software\test") MsgBox(0,@extended, @error & @CRLF & $err) return = 0 -- Failure - 0 and sets @error @error = 3 --- Failed to delete key / value (@extended contains RegDelete* return value) @extended = 0 ---Returns 0 if the key/value does not exist everything else seems to work. (ie regwrite, regkeyexist) I am not smart enough to figure out the dllcall Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now