Foro | | | | - Page 1 - |
| | Hallo Profaner...
Habe leider keinen blassen Schimmer von Treeviews und brauche mal dringend Aiuto: Es geht um ein Treeview mit einer variablen Anzahl von Einträgen (sehr viele Einträge evtl.). Ich muß nun wissen: - Den Text des Eintrags, der im Augenblick markiert ist. - Wie viele Einträge unter diesem Eintrag stehen. - Die Texte aller jeweils übergeordneten Einträge. - Ob die untergeordneten Einträge im Augenblick sichtbar (aufgeklappt) sind, oder nicht.
Kann mir da jemand weiterhelfen? |
| | | | |
| | | | | - Page 1 - |
| | | | | | |
| | Frank Abbing | Hi,
die Dll ist leider nur Freeware, wenn du die Listview.dll schon registriert hast. Ist aber komplett testbar, wenn dich das Hinweisfenster nicht stört. Ich schick dir die Dll. |
| | | | |
| | | BESTEN Dank...
Bin gespannt, wie weit ich damit komme. |
| | | | |
| | | Wenn man erst einmal die Messages kennt sieht auch das Selbsterstellen nicht mehr so schwierig aus. Nach TVM_GETITEM habe ich gesucht. |
| | | | |
| | Frank Abbing | Hi,
ja, es gibt einige nette Messages, die man gut gebrauchen kann. Man muss sich aber einarbeiten und einige Messages scheinen mir nicht hundert prozentig wie beschrieben zu funktionieren.
Willst du sowas machen wie den Registrierungs-Editor regedit? Wo finde ich die Registyeinträge noch mal im System? |
| | | | |
| | | [quote:16ab0c36a7=Frank Abbing] Willst du sowas machen wie den Registrierungs-Editor regedit? [/quote:16ab0c36a7] Ja, in der Art. Nur will ich keine Einträge, sondern Zugriffsrechte editieren.
[quote:16ab0c36a7=Frank Abbing] Wo finde ich die Registyeinträge noch mal im System? [/quote:16ab0c36a7] Wenn ich genau wissen würde was du damit meinst, würde ich dir das gerne verraten - vorausgesetzt ich wüßte die Antwort darauf... Vergiß nicht - ich bin absolut kein Experte.
|
| | | | |
| | Jörg Sellmeyer | Die Registry wird zumindest unter Win95 - 98 in System.dat und user.dat im Windowsverzeichnis gespeichert. Sinnvoll potrebbe aber eher das auslesen mittels Api sein und nicht der direkte Zugriff auf die File. Uwe Pascal Niemeyer hat glaube ich ein par schöne Vorlagen dazu, wie man ganze Registry-Zweige in einem Rutsch auslesen kann. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 03.06.2005 ▲ |
| |
| | | Wenns nur darum geht - ich denke mal darum gehts aber nicht... Um Jörg mal zu ergänzen: Die Registry besteht aus einzelnen Hives, die bei Bedarf hinzugeladen werden. Unter NT steht zum Beispiel der Registryabschnitt jedes einzelnen Users in den NTUSER.DAT File im Profilverzeichnis des betreffenden Users. Einen richtigen Pfad per die Registry gibt es also eigentlich gar nicht. Hier mal meine Anfänge zu dem Thema - ist, wie gesagt, mein erstes Treeview: KompilierenMarkierenSeparierenDEF @GetModuleHandle(1) !"KERNEL32","GetModuleHandleA"
DEF @LoadIcon(2) ! "USER32","LoadIconA"
DEF @LoadBitmap(2) ! "USER32","LoadBitmapA"
DEF @ImageList_Create(5) !"COMCTL32","ImageList_Create"
DEF @ImageList_AddIcon(2) !"COMCTL32","ImageList_AddIcon"
DEF @ImageList_Destroy(1) !"COMCTL32","ImageList_Destroy"
DEF @SetWindowLong(3) !"USER32","SetWindowLongA"
Def @InitCommonControls(0) !"COMCTL32","InitCommonControls"
Def RegOpenKeyEx(5) !"ADVAPI32","RegOpenKeyExA"
Def RegEnumKey(4) !"ADVAPI32","RegEnumKeyA"
Def RegCloseKey(1) !"ADVAPI32","RegCloseKey"
@InitCommonControls()
Declare hImageList&,hIcon&,Iconname#,Executehandle&,Root1&,ROOT&[2,3,10],ROOT11&
Declare Imagelist&,HIcon#,TV_INSERT#,TV_TEXT#,TV_ITEM#,REG_KEY$,REG_ROOT$,REG_ERGEBNIS$
Declare Unterlage6&,TV_ITEM_HANDLE&,TV_ITEM_HANDLE2&
Declare REG_ERGEBNIS#,REG_ERROR&,REG_HANDLE&
Declare REG_Zähler%,TV_ITEM_HANDLE1&
dim Iconname#,25
dim Hicon#,24
Dim TV_TEXT#,261
DIM REG_ERGEBNIS#,261
Declare TreeView&
DIM TV_INSERT#,48
DIM TV_ITEM#,40
Let Imagelist&=ImageList_Create(16,16,$0001,3,3) Imagelist erzeugen
Let ExecuteHandle&=GetModuleHandle(0) Handle des laufenden Programms
Icon 0
String Iconname#,0="Weg" Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Icon 1
String Iconname#,0="Windows" Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Icon 2
String Iconname#,0="Stein"
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Icon 3
String Iconname#,0="Drucker"
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Icon 4
String Iconname#,0="Wasser"
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Icon 5
String Iconname#,0="Weg"
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Icon 6
String Iconname#,0="Baum"
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Icon 7
String Iconname#,0="Editor"
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
PROC TVINSERT
TVINSERT und TVINSERT-Struktur-------------------------------
String TV_TEXT#,0=@$(4) Der Text im Label
long TV_INSERT#,0=@&(1) TVins-Parent
long TV_INSERT#,4=@&(2) TVins-Insert After
long TV_INSERT#,8=$0027 mask IF_TEXT,IF_IMAGE,If_SelectedImage
long TV_INSERT#,8=$0001+$0002+ $0020+ $0004 +$0008 +$0010
long TV_INSERT#,12=0 Htreeitem
long TV_INSERT#,16=@&(5) State
long TV_INSERT#,20=$0001+$0002+$0004+$0008+$0010+$0020+$0040+$0080+$0F00+$F000 StateMAsk
long TV_INSERT#,24=TV_TEXT# Adress of Label
long TV_INSERT#,28=len(@$(4)) len of Label(länge GeDimt in Tvitemtext#)
long TV_INSERT#,32=@&(2) Image z.B Ordner
long TV_INSERT#,36=@&(3) Selected Image z.B geöffneter Ordner
long TV_INSERT#,40=0 cChildren
long TV_INSERT#,44=@&(6) Lparam
-----------------------------------------------
ENDPROC
Windowstyle 31+512
Window 10,50-600,420
Windowtitle "TreeViewControl32"
settruecolor 1
cls rgb(192,192,192)
LET UNTERLAGE6&=@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,Unterlage6&,200,%Hinstance)
@sendmessage(TreeView&,$1109,0,Imagelist&) Associate the image list with the tree
@SETWINDOWLONG(TreeView&,-16,$40000000+$10000000+$800000+$200000+$0001+$0002+$0010+$0100)
TVINSERT 0,0,1,"HKEY_LOCAL_MACHINE",$0010
@sendmessage(Treeview&,$1100,0,TV_INSERT#)
TVINSERT 0,0,1,"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&
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&,0,1,REG_ERGEBNIS$,$0010
@sendmessage(Treeview&,$1100,0,TV_INSERT#)
endif
inc REG_Zähler%
wend
@RegCloseKey(REG_Handle&)
@Sendmessage(Treeview&,$1102,$2,TV_ITEM_HANDLE&)
endif
DRAWTEXT 0,0,"REG_ROOT$="+REG_ROOT$+@SPACE$(255)
DRAWTEXT 0,20,"REG_KEY$="+REG_KEY$+@SPACE$(255)
WEND
ImageList_Destroy(hImagelist&)
Dispose Iconname#
Dispose Hicon#
Dispose TV_ITEM#
DISPOSE TV_INSERT#
Dispose REG_ERGEBNIS#
Ideen und Verbesserungsvorschläge? |
| | | | |
| | | | - Page 2 - |
| | Frank Abbing | Hi,
ich meine, das die gesamte Registry irgendwo auf der Bootdisk gespeichert ist. Ist also ein Pfad. Kanns aber nicht mehr finden. |
| | | | |
| | | Hallo Frank...
Vielleicht beantwortet das hier deine Frage schon etwas besser: Hive Unter nicht NT-basierenden Windowssystemen kenne ich nur die von Jörg angesprochenen Hives User.dat und System.dat. |
| | | | |
| | Frank Abbing | Hi,
ja, das meinte ich wohl. Viel Spass im Urlaub! |
| | | | |
| | | | | | | |
|
AnswerThemeninformationenDieses Thema hat 3 subscriber: |