Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Registry: Infos über Registryschlüssel auslesen
Def @Regopenkeyex(5) !ADVAPI32,RegOpenKeyExA
Def @Regenumkey(4) !ADVAPI32,RegEnumKeyA
Def @Regclosekey(1) !ADVAPI32,RegCloseKey
Def @Initcommoncontrols(0) !COMCTL32,InitCommonControls
Def @Regqueryinfokey(12) !ADVAPI32,RegQueryInfoKeyA
Def @Getsyscolor(1) !USER32,GetSysColor
@Initcommoncontrols()
Declare Class#,Classsize&,Subkeys&,Greatest&,Maxclasslen&
Declare Values&,Maxvaluenamelen&,Maxvaluelen&,Secdesclänge&,Filetime#
Declare Fehler&,Cl_name&
Declare Himagelist&,Hicon&,Executehandle&,Root1&,Root&[2,3,10],Root11&
Declare Imagelist&,Tv_insert#,Tv_text#,Tv_item#,Reg_key$,Reg_root$,Reg_ergebnis$
Declare Unterlage7&,Tv_item_handle&,Tv_item_handle2&
Declare Reg_ergebnis#,Reg_error&,Reg_handle&
Declare Reg_zähler%,Tv_item_handle1&
Declare Cl_länge&,Sk_anzahl&,Sk_länge&,Cl_längemax&,W_anzahl&
Declare Wn_länge&,W_länge&,Secdesc_länge&
Dim Tv_text#,261
Dim Reg_ergebnis#,261
Declare Treeview&
Dim Tv_insert#,48
Dim Tv_item#,40
Proc Tvinsert
String Tv_text#,0=@$(2)Der Text im Label
Long Tv_insert#,0=@&(1)TVins-Parent
Long Tv_insert#,8=$0001
Long Tv_insert#,24=Tv_text#Adress of Label
Endproc
Windowstyle 31+512
Window 10,50-600,420
Windowtitle Infos über Registrykeys auslesen
Settruecolor 1
Cls @Getsyscolor(15)
Let Unterlage7&=@Control(Dialog,,$40000000+$10000000,10,50,600,320,%Hwnd,3,%Hinstance)
Let Treeview&=@Control(SysTreeView32,,$40000000+$10000000+$800000+$200000+$0002+$0010+$0020,40,20,250,300,Unterlage7&,200,%Hinstance)
@Sendmessage(Treeview&,$1109,0,Imagelist&)Associate the image list with the tree
Let Cl_name&=@Createtext(%Hwnd,Klassenname=,310,50,400,30)
Let Cl_länge&=@Createtext(%Hwnd,Länge des Klassennamens=,310,85,400,30)
Let Sk_anzahl&=@Createtext(%Hwnd,Anzahl der Unterschlüssel=,310,190,400,30)
Let Sk_lÄnge&=@Createtext(%Hwnd,Läng des größten Unterschlüssels=,310,155,400,30)
Let Cl_längemax&=@Createtext(%Hwnd,Länge des längsten Klassennamens=,310,120,400,30)
Let W_anzahl&=@Createtext(%Hwnd,Anzahl der Werte im Schlüssel=,310,225,400,30)
Let Wn_länge&=@Createtext(%Hwnd,Länge des größten Wertenamens=,310,260,400,30)
Let W_länge&=@Createtext(%Hwnd,Länge des größten Wertes=,310,295,400,30)
Let Secdesc_länge&=@Createtext(%Hwnd,Länge des Security Descriptors=,310,330,400,30)
@Sendmessage(Treeview&,$111D,0,@Rgb(255,255,220))
@Sendmessage(Treeview&,$111E,0,@Rgb(255,70,100))
Tvinsert 0,HKEY_LOCAL_MACHINE,$0010
@Sendmessage(Treeview&,$1100,0,Tv_insert#)
Tvinsert 0,HKEY_USERS,$0010
@Sendmessage(Treeview&,$1100,0,Tv_insert#)
Clear Tv_item#,Tv_text#
While %Menuitem<>-2
Sleep 100
Let Tv_item_handle1&=@Sendmessage(Treeview&,$110A,$0009,0)
If Tv_item_handle1&<>Tv_item_handle&
Enablewindow Treeview&,0
Usecursor 2
Let Reg_key$=
Let Reg_root$=
Let Tv_item_handle&=Tv_item_handle1&
Clear Tv_item#,Tv_text#
Long Tv_item#,0=$11
Long Tv_item#,20=261
Long Tv_item#,16=Tv_text#
Long Tv_item#,4=Tv_item_handle&
@Sendmessage(Treeview&,$110C,0,Tv_item#)
Let Reg_key$=@String$(Tv_text#,0)
Let Tv_item_handle2&=Tv_item_handle&
While Tv_item_handle2&<>0
Let Tv_item_handle2&=@Sendmessage(Treeview&,$110A,$3,Tv_item_handle2&)
If Tv_item_handle2&<>0
Clear Tv_item#,Tv_text#
Long Tv_item#,0=$11
Long Tv_item#,20=261
Long Tv_item#,16=Tv_text#
Long Tv_item#,4=Tv_item_handle2&
@Sendmessage(Treeview&,$110C,0,Tv_item#)
Let Reg_key$=+Reg_key$
Let Reg_key$=@String$(Tv_text#,0)+Reg_key$
Endif
Wend
Let Reg_root$=@Substr$(Reg_key$,1,)
If Reg_root$<>
Let Reg_key$=@Translate$(Reg_key$,Reg_root$,)
Case Left$(Reg_key$,1)= : Let Reg_key$=@Right$(Reg_key$,@Len(Reg_key$)-1)
Else
Let Reg_root$=Reg_key$
Let Reg_key$=
Endif
While @Sendmessage(Treeview&,$110A,$4,Tv_item_handle&)<>0
Let Tv_item_handle2&=@Sendmessage(Treeview&,$110A,$4,Tv_item_handle&)
@Sendmessage(Treeview&,$1101,0,Tv_item_handle2&)
Wend
If Reg_root$=HKEY_USERS
Let Reg_error&=@Regopenkeyex($80000003,@Addr(Reg_key$),0,$20019,@Addr(Reg_handle&))
Elseif Reg_root$=HKEY_LOCAL_MACHINE
Let Reg_error&=@Regopenkeyex($80000002,@Addr(Reg_key$),0,$20019,@Addr(Reg_handle&))
Else
Let Reg_error&=2
Endif
Let Reg_zÄhler%=0
Whilenot Reg_error&
Let Reg_error&=@Regenumkey(Reg_handle&,Reg_zähler%,Reg_ergebnis#,261)
If Reg_error&=0
Let Reg_ergebnis$=@String$(Reg_ergebnis#,0)
Tvinsert Tv_item_handle&,Reg_ergebnis$,$0010
@Sendmessage(Treeview&,$1100,0,Tv_insert#)
Endif
Inc Reg_zähler%
Wend
Dim Class#,261
Dim Filetime#,8
Let Classsize&=261
Let Fehler&=@Regqueryinfokey(Reg_handle&,Class#,@Addr(Classsize&),0,@Addr(Subkeys&),@Addr(Greatest&),@Addr(Maxclasslen&),@Addr(Values&),@Addr(Maxvaluenamelen&),@Addr(Maxvaluelen&),@Addr(Secdesclänge&),Filetime#)
Settext Cl_name&,Klassenname=+@String$(Class#,0)
Settext Cl_länge&,Länge des Klassennamens=+@Str$(Classsize&)
Settext Sk_anzahl&,Anzahl der Unterschlüssel=+@Str$(Subkeys&)
Settext Sk_länge&,Länge des größten Unterschlüssels=+@Str$(Greatest&)
Settext Cl_längemax&,Länge des größten Klassennamens=+@Str$(Maxclasslen&)
Settext W_anzahl&,Anzahl der Werte im Schlüssel=+@Str$(Values&)
Settext Wn_länge&,Länge des größten Wertenamens=+@Str$(Maxvaluenamelen&)
Settext W_länge&,Länge des größten Wertes=+@Str$(Maxvaluelen&)
Settext Secdesc_länge&,Länge des Security Descriptors=+@Str$(Secdesclänge&)
Dispose Filetime#
Dispose Class#
@Regclosekey(Reg_handle&)
@Sendmessage(Treeview&,$1113,0,Tv_item_handle&)
Usecursor 0
Enablewindow Treeview&,1
Endif
Drawtext 0,0,REG_ROOT$=+Reg_root$+@Space$(255)
Drawtext 0,20,REG_KEY$=+Reg_key$+@Space$(255)
Wend
Dispose Tv_item#
Dispose Tv_text#
Dispose Tv_insert#
Dispose Reg_ergebnis#