Forum | | | | Jac de Lad | Hm, ich weiß, Roland macht jetzt Urlaub. Aber vielleicht weiß es ja trotzdem jemand:
Steckt ein Control hinter Grid und List (mittels Create) oder ist das ne Profaninterne Sache? Falls es ein Control ist: Gibt es eine schnelle Funktion (ich nehme mal an mittels sendmessage), mit der ich ermitteln kann, ob ein String vorkommt und wenn ja, wo?
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 25.08.2006 ▲ |
| |
| | Michael Wodrich | Funktioniert SelectString nicht??!
Laut meinen Aufzeichnungen:
Arbeitet auch mit Stringlisten, die mit Create(List,...) erzeugt wurden. Arbeitet auch mit Stringgrids, die mit Create(Grid,...) erzeugt wurden.
Schöne Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 25.08.2006 ▲ |
| |
| | Frank Abbing |
Steckt ein Control hinter Grid und List (mittels Create) oder ist das ne Profaninterne Sache?
Hinter Grid steckt das SysListview32-Control, ist eben ein Listview.
Ich weiss, mit einem Hinweis auf meine Dll ist dir momentan nicht gedient. Aber die beinhaltet eine schnelle Suchfunktion für alle Zeilen und Spalten. |
| | | | |
| | Jac de Lad | Naja, SelectString benötigt ja eine Zeilennummer. Es gibt ne Message LVM_FindString, aber ich komme mit der Struktur nicht klar... |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 26.08.2006 ▲ |
| |
| | | Ich glaube, das hilft dir weiter: KompilierenMarkierenSeparierenDEF @LookupPrivilegeDisplayName(5) !ADVAPI32,LookupPrivilegeDisplayNameA
DEF @GetLastError(0) !kernel32,GetLastError Liefert letzten API Fehler.
DEF @ImageList_Create(5) !COMCTL32,ImageList_Create
DEF @ImageList_AddIcon(2) !COMCTL32,ImageList_AddIcon
DEF @ImageList_Destroy(1) !COMCTL32,ImageList_Destroy
DEF @LoadIcon(2) !USER32,LoadIconA
DEF @GetModuleHandle(1) !KERNEL32,GetModuleHandleA
DEF @CopyMemory(3) !kernel32,RtlMoveMemory
SetTrueColor 1
Declare Priv$[2,35],DispSize&,LangID&,DispName#,System$,PRIV1$,Fehler&,Hicon&,Imagelist&,ExecuteHandle&
Declare Iconname#,WINVER&,Anzahl&,Suchtext$
Declare LVC#,Zeile#,Priv_List_Text#
Struct LVCOLUMN=Mask&, FMT&, CX&, Text&, Textlänge&, Subitem&
Struct LVITEM=IMASK&, ITEM&, ISUBITEM&, State&, StateMask&, ITEXT&, ITEXTMAX&, IIMAGE&, ILPARAM&
DIM Iconname#,262
LET WINVER&=3
Let Imagelist&=ImageList_Create(16,16,$0001,3,3) Imagelist erzeugen
Let ExecuteHandle&=@GetModuleHandle(0) Handle des laufenden Programms
String Iconname#,0=Weg Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Windows Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Eimer
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Editor
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=A
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Stein
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Baum
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Computer Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Z1 Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Z2 Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Z3 Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Z4 Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Z6 Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
String Iconname#,0=Z7 Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Dispose Iconname#
LET PRIV$[1,1]=SeBackupPrivilege
LET PRIV$[2,1]=Ist nötig, um Backup Operationen durchzuführen (z.B. in der Registry mittels RegSaveKey).
LET PRIV$[1,2]=SeRestorePrivilege
LET PRIV$[2,2]=Ist nötig, um Restore Operationen durchzuführen.
LET PRIV$[1,3]=SeTakeOwnershipPrivilege
LET PRIV$[2,3]=Wird benötigt, um die Zugehörigkeit eines Objektes ändern zu können.
LET PRIV$[1,4]=SeSystemProfilePrivilege
LET PRIV$[2,4]=Wird benötigt um alle Inforamationen des Systems auslesen zu können.
LET PRIV$[1,5]=SeCreateTokenPrivilege
LET PRIV$[2,5]=Ist nötig, um einen Primary Token zu erzeugen.
LET PRIV$[1,6]=SeAssignPrimaryTokenPrivilege
LET PRIV$[2,6]=Ist nötig, um einen Primary Token zuzuweisen.
LET PRIV$[1,7]=SeLockMemoryPrivilege
LET PRIV$[2,7]=Wird benötigt, um Physische Speicherseiten einfrieren zu Können.
LET PRIV$[1,8]=SeIncreaseQuotaPrivilege
LET PRIV$[2,8]=Wird benötigt, um die Quote eines Prozesses erhöhen zu können.
LET PRIV$[1,9]=SeMachineAccountPrivilege
LET PRIV$[2,9]=Ist nötig, um einen neuen Benutzer zu erzeugen.
LET PRIV$[1,10]=SeTcbPrivilege
LET PRIV$[2,10]=Wird benötigt, um das Locale System als bestandteil des Netzwerkrechtners anmelden zu können.
LET PRIV$[1,11]=SeSecurityPrivilege
LET PRIV$[2,11]=Ist nötig, um einige Sicherheitsfunktionen durchzuführen.
LET PRIV$[1,12]=SeLoadDriverPrivilege
LET PRIV$[2,12]=Ist nötig, um Treiber zu laden oder zu entladen.
LET PRIV$[1,13]=SeSystemtimePrivilege
LET PRIV$[2,13]=Ist nötig, um die Systemzeit zu setzen.
LET PRIV$[1,14]=SeProfileSingleProcessPrivilege
LET PRIV$[2,14]=Wird benötigt, um Informationen eines einzelnen Prozesses ermitteln zu können.
LET PRIV$[1,15]=SeIncreaseBasePriorityPrivilege
LET PRIV$[2,15]=Ist nötig, um die Priorität einer Anwendung zu erhöhen.
LET PRIV$[1,16]=SeCreatePagefilePrivilege
LET PRIV$[2,16]=Wird benötigt, um eine Paging-Datei erstellen zu können.
LET PRIV$[1,17]=SeCreatePermanentPrivilege
LET PRIV$[2,17]=Wird benötigt, um Permanente Objekte erstellen zu können.
LET PRIV$[1,18]=SeShutdownPrivilege
LET PRIV$[2,18]=Ist nötig, um den Rechner herunterfahren zu können.
LET PRIV$[1,19]=SeDebugPrivilege
LET PRIV$[2,19]=Ist nötig, um Debug Operationen an einem Prozess auszuführen.
LET PRIV$[1,20]=SeAuditPrivilege
LET PRIV$[2,20]=Wird benutzt, um Audit-Log einträge generieren zu können.
LET PRIV$[1,21]=SeSystemEnvironmentPrivilege
LET PRIV$[2,21]=Wird benutzt, um auf nicht flüchtigen Speicher des Systems zugreifen zu können.
LET PRIV$[1,22]=SeChangeNotifyPrivilege
LET PRIV$[2,22]=Ist nötig, um Änderungen an Dateien oder Ordnern festzustellen.
LET PRIV$[1,23]=SeRemoteShutdownPrivilege
LET PRIV$[2,23]=Ist nötig, um einen Rechner ferngesteuert herunterzufahren.
LET PRIV$[1,24]=SeUndockPrivilege
LET PRIV$[2,24]=Wird benötigt, um ein Laptop Undocken zu können.
LET PRIV$[1,25]=SeSyncAgentPrivilege
LET PRIV$[2,25]=Wird benötigt, um alle Leserechte eines Dateisystem zu erlauben, die sonst nur der Administartor besitzt.
LET PRIV$[1,26]=SeEnableDelegationPrivilege
LET PRIV$[2,26]=Wird benötigt, um Netzwerkrechner als Vertrauenswürdig zu markieren.
LET PRIV$[1,27]=SeManageVolumePrivilege
LET PRIV$[2,27]=Wird verliehen, um Dateien verwalten zu können.
LET PRIV$[1,28]=SeInteractiveLogonRight
LET PRIV$[2,28]=Wird benötigt, um sich mit der Tastatur einloggen zu können.
LET PRIV$[1,29]=SeDenyInteractiveLogonRight
LET PRIV$[2,29]=Verhindert das einloggen übrer die Tastatur.
LET PRIV$[1,30]=SeServiceLogonRight
LET PRIV$[2,30]=Kann sich als Service anmelden.
LET PRIV$[1,31]=SeDenyServiceLogonRight
LET PRIV$[2,31]=Verhindert das Anmelden als Service.
LET PRIV$[1,32]=SeBatchLogonRight
LET PRIV$[2,32]=Kann sich mithilfe einer Batchwarteschlange anmelden.
LET PRIV$[1,33]=SeDenyBatchLogonRight
LET PRIV$[2,33]=Verhindert das Anmelden mithilfe einer Batchwarteschlange.
LET PRIV$[1,34]=SeNetworkLogonRight
LET PRIV$[2,34]=Kann über das Netzwerk eine Verbindung mit dem Computer herstellen.
LET PRIV$[1,35]=SeDenyNetworkLogonRight
LET PRIV$[2,35]=Verhindert das Herstellen einer Verbindung mit dem Computer über das Netzwerk.
Proc Get_Priv_List_Text
Parameters LV_HANDLE&,Priv_List_Index&
Declare ERG$
Dim Zeile#,LVITEM
DIM Priv_List_Text#,256
CLEAR Zeile#
Zeile#.IMASK&=$1
Zeile#.ITEM&=Priv_List_Index&
Zeile#.ITEXT&=Priv_List_Text#
Zeile#.ITEXTMAX&=256
@sendmessage(LV_HANDLE&,$1005,Priv_List_Index&,Zeile#)
Let ERG$=@String$(Priv_List_Text#,0)
Dispose Zeile#
Dispose Priv_List_Text#
Return ERG$
Endproc
Proc Get_Priv_List_Check
Parameters LV_HANDLE&,Priv_List_Index&
Declare ERG&,ERG2&
Dim Zeile#,LVITEM
CLEAR Zeile#
Zeile#.IMASK&=$8
Zeile#.StateMask&=$F000
Zeile#.ITEM&=Priv_List_Index&
@sendmessage(LV_HANDLE&,$1005,Priv_List_Index&,Zeile#)
LET ERG&=Zeile#.State&
IF ERG&=$1000
Let ERG2&=0
Elseif ERG&=$2000
Let ERG2&=1
Else
Let ERG2&=2
Endif
Dispose Zeile#
Return ERG2&
Endproc
Proc Set_Priv_List_Check
Parameters LV_HANDLE&,Priv_List_Index&,Check_State%
Dim Zeile#,LVITEM
CLEAR Zeile#
Zeile#.IMASK&=$8
IF Check_State%=1
Zeile#.State&=$2000
else
Zeile#.State&=$1000
endif
Zeile#.StateMask&=$F000
Zeile#.IIMAGE&=2
Zeile#.ITEM&=Priv_List_Index&
@sendmessage(LV_HANDLE&,$102B,Priv_List_Index&,Zeile#)
Dispose Zeile#
Endproc
Proc Addzeile_To_PrivList
Parameters Lvhndl&,Index&,spalte&,Text$,Image&
Dim Zeile#,LVITEM
Clear Zeile#
IF Image&=0
Zeile#.IMASK&=$0001
Zeile#.IIMAGE&=0
else
Zeile#.IMASK&=$000B
Zeile#.IIMAGE&=IMAGE&
endif
Zeile#.ITEM&=Index&
Zeile#.ITEXT&=Addr(Text$)
Zeile#.ITEXTMAX&=Len(Text$)
Zeile#.ISUBITEM&=spalte&
Zeile#.StateMask&=0
Zeile#.State&=0
Sendmessage(Lvhndl&,$1007,0,Zeile#)
Sendmessage(Lvhndl&,$102E,Index&,Zeile#)
Dispose Zeile#
Endproc
Proc CreatePrivListView
Parameters Fenster_Handle&,x1&,y1&,x2&,y2&,Zeilenbreite1&,Zeilenbreite2&,Priv_Anzahl%,Headertext$,H_Color&,T_Color&
Declare Listview_Handle&,Spaltentext$,PROC_PRIV_ZÄHLER%,State_Imagelist&,ICO_STRING$
Dim LVC#,LVCOLUMN
Listview_Handle&=Control(SysListView32,PrivListview,$54018001+$4,x1&,y1&,x2&,y2&,Fenster_Handle&,$0100,%Hinstance,$200)
@sendmessage(Listview_Handle&,$1036,0,$431+6)
@sendmessage(Listview_Handle&,$1003,1,Imagelist&)
@sendmessage(Listview_Handle&,$1001,0,H_COLOR&)
@sendmessage(Listview_Handle&,$1000+38,0,H_COLOR&)
@sendmessage(Listview_Handle&,$1000+36,0,T_COLOR&)
LET State_Imagelist&=@SEndmessage(Listview_Handle&,$1000+2,$2,0)
LET ICO_STRING$=Z5
Let Hicon&=loadicon(Executehandle&,@ADDR(ICO_STRING$)) Handle des Icons ok
ImageList_AddIcon(State_Imagelist&,HIcon&)
LET Spaltentext$=Headertext$
LVC#.TEXT&=@ADDR(Spaltentext$)
LVC#.MASK&=$0001+$0002+$0004+$0008
LVC#.FMT&=0
LVC#.CX&=Zeilenbreite1&
LVC#.Subitem&=0
LVC#.Textlänge&=@LEN(Spaltentext$)
@sendmessage(Listview_Handle&,$1000+27,1,LVC#)
LET Spaltentext$=Bedeutung
LVC#.TEXT&=@ADDR(Spaltentext$)
LVC#.Textlänge&=@LEN(Spaltentext$)
LVC#.CX&=Zeilenbreite2&
@sendmessage(Listview_Handle&,$1000+27,2,LVC#)
LET PROC_PRIV_ZÄHLER%=Priv_Anzahl%
While PROC_PRIV_ZÄHLER%>0
LET PRIV1$=PRIV$[1,PROC_PRIV_ZÄHLER%]
LET DispSize&=1
DIM DispName#,DispSize&
CLEAR DispName#
CLEAR System$,LangID&
LET Fehler&=@LookupPrivilegeDisplayName(@ADDR(System$),@ADDR(PRIV1$),DispName#,@ADDR(DispSize&),@ADDR(LangID&))
Dispose DispName#
LET DispSize&=DispSize&+4
DIM DispName#,DispSize&
CLEAR DispName#
CLEAR System$,LangID&
LET Fehler&=@LookupPrivilegeDisplayName(@ADDR(System$),@ADDR(PRIV1$),DispName#,@ADDR(DispSize&),@ADDR(LangID&))
IF Fehler&=1
IF @INSTR(Privilege,PRIV$[1,PROC_PRIV_ZÄHLER%])<>0
Addzeile_To_PrivList Listview_Handle&,0,0,PRIV$[1,PROC_PRIV_ZÄHLER%],12
else
Addzeile_To_PrivList Listview_Handle&,0,0,PRIV$[1,PROC_PRIV_ZÄHLER%],13
endif
Let PRIV$[2,PROC_PRIV_ZÄHLER%]=@String$(DispName#,0)
Addzeile_To_PrivList Listview_Handle&,0,1,PRIV$[2,PROC_PRIV_ZÄHLER%],13
else
IF @INSTR(Privilege,PRIV$[1,PROC_PRIV_ZÄHLER%])<>0
IF WINVER&<4
Addzeile_To_PrivList Listview_Handle&,0,0,PRIV$[1,PROC_PRIV_ZÄHLER%],12
Addzeile_To_PrivList Listview_Handle&,0,1,PRIV$[2,PROC_PRIV_ZÄHLER%],12
Elseif WINVER&>=4
IF @String$(DispName#,0)<>
Let PRIV$[2,PROC_PRIV_ZÄHLER%]=@String$(DispName#,0)
Addzeile_To_PrivList Listview_Handle&,0,0,PRIV$[1,PROC_PRIV_ZÄHLER%],12
Addzeile_To_PrivList Listview_Handle&,0,1,PRIV$[2,PROC_PRIV_ZÄHLER%],12
endif
endif
else
Addzeile_To_PrivList Listview_Handle&,0,0,PRIV$[1,PROC_PRIV_ZÄHLER%],13
Addzeile_To_PrivList Listview_Handle&,0,1,PRIV$[2,PROC_PRIV_ZÄHLER%],12
endif
endif
Let PROC_PRIV_ZÄHLER%=PROC_PRIV_ZÄHLER%-1
Dispose DispName#
wend
Dispose LVC#
Return Listview_Handle&
Endproc
CLS
Declare LV1_Handle&,LV_FINDINFO#,Gefunden&
CreatePrivListView %HWND,10,50,450,300,180,270,35,Privileg / Accountrecht,@RGB(250,250,220),@RGB(0,0,255)
Let LV1_Handle&=@&(0)
Set_Priv_List_Check LV1_Handle&,3,1
Get_Priv_List_Check LV1_Handle&,3
PRINT &(0)
Get_Priv_List_Check LV1_Handle&,4
PRINT &(0)
Get_Priv_List_Text LV1_Handle&,3
Print @$(0)
text in Listview suchen
DIM LV_FINDINFO#,20
long LV_FINDINFO#,0=$2
Let Suchtext$=SeSystemProfilePrivilege
long LV_FINDINFO#,4=@ADDR(Suchtext$)
LET Gefunden&=@Sendmessage(LV1_Handle&,$100D,-1,LV_FINDINFO#) LVM_FINDITEM Message
Dispose LV_FINDINFO#
Markieren
Print Gefunden&
IF Gefunden&<>-1
Dim Zeile#,LVITEM
CLEAR Zeile#
@Setfocus(LV1_Handle&)
Zeile#.IMASK&=$8
Zeile#.ITEM&=Gefunden&
Zeile#.State&=$2
Zeile#.StateMask&=$2
@Sendmessage(LV1_Handle&,$102B,Gefunden&,Zeile#) Zeile markieren
Dispose Zeile#
endif
While 0=0
Waitinput
Get_Priv_List_Check LV1_Handle&,3
Drawtext 0,0,@STR$(&(0))+
wend
|
| | | | |
| | Jörg Sellmeyer | Jacob Liebeck
Naja, SelectString benötigt ja eine Zeilennummer. Es gibt ne Message LVM_FindString, aber ich komme mit der Struktur nicht klar...
SelectString benötigt keine Zeilennr aber es werden nur die Zeilen gefunden, die mit dem Suchstring beginnen. Für sowas ist Franks Dll top.
Gruß Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 26.08.2006 ▲ |
| |
| | Jac de Lad | @Andreas: Oje, bis ich den Quelltext durchhabe ist Weihnachten...danke, ich schaus mir an.
@Jörg: Jaja, die DLL...ich suche eine Funktion, die mir GENAU den String ausgibt! Naja, ich schau mal, ob mir SelectString weiterhilft... |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 26.08.2006 ▲ |
| |
| | | | | | | |
| | Jac de Lad | Die Box ist bei mir leer... |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 26.08.2006 ▲ |
| |
| | | Sorry, da hat das Einfügen mal wieder nicht geklappt: KompilierenMarkierenSeparierentext in Listview suchen
Dim Lv_findinfo#,20
Long Lv_findinfo#,0=$2
Let Suchtext$=SeSystemProfilePrivilege
Long Lv_findinfo#,4=@Addr(Suchtext$)
Let Gefunden&=@Sendmessage(Lv1_handle&,$100D,-1,Lv_findinfo#)LVM_FINDITEM Message
Dispose Lv_findinfo#
Markieren
Print Gefunden&
If Gefunden&<>-1
Dim Zeile#,Lvitem
Clear Zeile#
@Setfocus(Lv1_handle&)
Zeile#.Imask&=$8
Zeile#.Item&=Gefunden&
Zeile#.State&=$2
Zeile#.Statemask&=$2
@Sendmessage(Lv1_handle&,$102B,Gefunden&,Zeile#)Zeile markieren
Dispose Zeile#
Endif
|
| | | | |
| | Jac de Lad | | | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 27.08.2006 ▲ |
| |
| | Michael Wodrich | | | | Programmieren, das spannendste Detektivspiel der Welt. | 27.08.2006 ▲ |
| |
|
AntwortenThemenoptionen | 5.916 Betrachtungen |
ThemeninformationenDieses Thema hat 7 Teilnehmer: |