LOCAL finddata:WIN32_FIND_DATA
% f2 s3 v# n" f: O- g) G& F: P0 ~5 p LOCAL FHandle:DWORD
; M, a3 Q2 ]# k7 e invoke FindFirstFile,addr FileNamePattern,addr finddata
% a* t, R) q: z# }) s% Q .if eax!=INVALID_HANDLE_VALUE
% ~7 U4 ~" Q' y3 F2 P* ?, y mov FHandle,eax
& }5 P K, Q: q! a) F4 M9 _8 f xor edi,edi9 G7 f. H4 A1 Q0 @( r; {
.while eax!=0
- G2 L( {. t# R1 R9 x3 F$ a7 a test finddata.dwFileAttributes,FILE_ATTRIBUTE_DIRECTORY; h. C1 V+ }: [: z& {! k+ s
.if ZERO?
7 D7 t Y$ E3 w' ~. ~ invoke ShowFileInfo,edi, addr finddata
# ]" N8 x$ X D# g inc edi
$ O, G1 y- A; a: K- v7 x( E3 }8 M .endif- H8 u6 k9 ]5 E& U4 [
invoke FindNextFile,FHandle,addr finddata1 {. t4 Q1 H7 O+ {$ x+ p
.endw5 P0 o& v9 m; Y% A( B6 E
invoke FindClose,FHandle
1 F9 D$ t; H+ Z5 [' g0 V; }) @' ` .endif* a9 w2 D/ g- t( g1 C, ^* v
ret
- W% s- t, D L6 Q FillFileInfo endp: ]9 `- I* K7 V, Q; M
String2Dword proc uses ecx edi edx esi String:DWORD
6 P+ L5 f! l4 i8 Y9 [2 x8 j LOCAL Result:DWORD1 B/ L3 z$ Y: Q" s2 h
mov Result,0
2 r1 s4 E$ K# B& V- |( m: i6 F mov edi,String
# z$ t& B+ ^. g invoke lstrlen,String
; R/ I8 W/ }( Z8 Z4 `* e .while eax!=0
" ]% T X5 C- T5 I xor edx,edx
& f0 {3 q- X4 F0 i( o1 S6 w mov dl,byte ptr [edi]
6 ^* ^( B6 `* Q) a! D: J y sub dl,"0"
' l/ v0 M0 I! I0 i5 y. T mov esi,eax/ O1 B! m9 Y- i. V& B5 u& Q
dec esi5 |8 V. w/ Z0 V( v
push eax. w' m3 l2 o; @: c
mov eax,edx7 d% N* Q% _1 z+ |/ o4 Y3 l
push ebx
: u) P: M" j: j$ N, B6 M% p4 g7 w mov ebx,10- m$ E$ x) s# u3 [- ?8 M' x
.while esi > 0
$ C4 T A1 C; {# e7 l mul ebx$ K4 J1 B- A" z! J
dec esi
9 p1 o# P8 G3 j+ [3 Q5 q6 \ .endw
5 t6 H% }" k5 A2 k7 ]% w pop ebx
t8 v8 W2 V/ J X* g2 i% l add Result,eax
5 t# y: K% X" [. ?7 {$ b pop eax
% h7 p' B: [9 W, ~; e+ b8 g inc edi
+ ~$ Z% V W8 g- V2 @ dec eax5 W5 L* w8 k5 L: a; a( w+ K$ \+ P
.endw& J5 E' }2 M( m# H) D% y
mov eax,Result
2 n5 _' x( y9 Y5 k/ K6 A ret" v; ? Q' G/ L
String2Dword endp @4 A- i& ]/ h0 c( h! }' K6 k9 g
CompareFunc proc uses edi lParam1:DWORD, lParam2:DWORD, SortType:DWORD0 a l* r& U5 M! Z* u
LOCAL buffer[256]:BYTE
$ L, J5 p0 e1 b LOCAL buffer1[256]:BYTE
% h+ `* H$ c, A8 A: z0 y4 C2 v LOCAL lvi:LV_ITEM
5 ?! w N( O+ k" u! S mov lvi.imask,LVIF_TEXT</p>0 Y+ t/ [1 i, T2 ^
lea eax,buffer
1 Y8 d, ~# k' ~: a" {0 L# J1 e% G mov lvi.pszText,eax8 I4 M% B6 a2 E9 e- N: c! A1 k
mov lvi.cchTextMax,256
$ c& {+ \" p2 p! u. n2 Z* N .if SortType==1
4 j; A3 c0 `( |$ _ mov lvi.iSubItem,1& k8 _, m$ c$ Q, d4 O
invoke SendMessage,hList,LVM_GETITEMTEXT,lParam1,addr lvi! [' D! l, t. y4 u
invoke String2Dword,addr buffer' z u* m+ q! q: h2 R' x) l
mov edi,eax
# Y" c: B' A* P4 [3 w invoke SendMessage,hList,LVM_GETITEMTEXT,lParam2,addr lvi. {6 C! X2 [+ l6 U
invoke String2Dword,addr buffer0 o0 n) g7 I% @. E4 S
sub edi,eax
6 p9 X0 V u+ J; @ mov eax,edi4 Z+ h# Q/ x0 e- }/ H7 k
.elseif SortType==2
6 z9 y9 d T q; m% u' r mov lvi.iSubItem,1
* o; C; |2 a& P invoke SendMessage,hList,LVM_GETITEMTEXT,lParam1,addr lvi
& U/ X6 I! p" w. m' l% H, |8 @" j invoke String2Dword,addr buffer
( }2 ~2 l* e% V mov edi,eax
" X7 d+ a2 b3 r3 q$ M- L) W invoke SendMessage,hList,LVM_GETITEMTEXT,lParam2,addr lvi9 p" c9 V7 Q" j7 Z
invoke String2Dword,addr buffer$ t9 b. f, ^5 k0 q
sub eax,edi
. D9 P. n! a' ?' a" B .elseif SortType==3
+ m1 H' b6 ~+ C! t mov lvi.iSubItem,0
# o" D, W) R8 j; m/ H invoke SendMessage,hList,LVM_GETITEMTEXT,lParam1,addr lvi7 V) J& M- b* C9 J) ^( G5 V
invoke lstrcpy,addr buffer1,addr buffer
" R" e6 U# k4 K' n$ i invoke SendMessage,hList,LVM_GETITEMTEXT,lParam2,addr lvi
. I1 m) p' ?, `$ R invoke lstrcmpi,addr buffer1,addr buffer
l$ J3 X U" e .else% R" U9 J4 ]. J8 C( h& S# ]
mov lvi.iSubItem,03 x2 i, d! V1 i+ O* K% n/ F
invoke SendMessage,hList,LVM_GETITEMTEXT,lParam1,addr lvi! C) Q# c, I2 u. F1 d
invoke lstrcpy,addr buffer1,addr buffer
$ U2 C0 F! {9 Z" M invoke SendMessage,hList,LVM_GETITEMTEXT,lParam2,addr lvi: L8 J% A: S2 j1 Z' P
invoke lstrcmpi,addr buffer,addr buffer1
% A. R; n7 _9 {. V% ~0 S4 z .endif7 S, _9 j% {& Z' `( ]
ret/ r, k6 h3 v0 E, c" r. i
CompareFunc endp
& Z5 h* H7 d$ c n% W1 b( } UpdatelParam proc uses edi
, W7 E; H) i2 n' b( h @ P LOCAL lvi:LV_ITEM
o6 Y y8 M) S) J8 Z* F* v5 ^ invoke SendMessage,hList, LVM_GETITEMCOUNT,0,0
% f1 A- ~+ s$ M! B( { E. T mov edi,eax
, m1 J! h1 d2 b) x/ l, @1 p) o+ j mov lvi.imask,LVIF_PARAM
9 \5 E( e4 j9 {( a8 m mov lvi.iSubItem,0
% K d! U% R1 v, i0 e mov lvi.iItem,0, Y7 P- q' d( }. I3 I
.while edi>0
# R# N1 A/ e" V$ G+ y push lvi.iItem* [1 ~+ V3 k; e2 w5 [
pop lvi.lParam; q- a, E8 F! A
invoke SendMessage,hList, LVM_SETITEM,0,addr lvi
$ Q, I* a8 h" f" E+ [ y inc lvi.iItem
8 T% W" Y- n( {1 U# _ dec edi" A5 S& h( e! o6 k3 n% ^
.endw
+ P! q6 f' h& L$ J; v4 W ret
8 h" W9 }: I' i3 f. V3 _) U UpdatelParam endp
+ J8 G% d: K6 ~7 }! f ShowCurrentFocus proc2 ?% n/ j5 G/ y7 a9 J" q
LOCAL lvi:LV_ITEM
" |5 \. w0 I# q5 t5 a5 i! G LOCAL buffer[256]:BYTE
; E+ H# n7 a7 @' z invoke SendMessage,hList,LVM_GETNEXTITEM,-1, LVNI_FOCUSED
3 V. t# g* V* l7 y4 p6 _+ d mov lvi.iItem,eax) t* u( o, S& u% \& p
mov lvi.iSubItem,06 u) G8 |, E0 y% |( V
mov lvi.imask,LVIF_TEXT
; R+ D" J, w0 W1 D1 v/ l lea eax,buffer }1 f* { i/ q. h+ @$ }9 y
mov lvi.pszText,eax
. `8 Z; X3 w7 c mov lvi.cchTextMax,256
6 x$ g- r; U1 Y2 ^, Z2 [* ` invoke SendMessage,hList,LVM_GETITEM,0,addr lvi6 L L' U4 } N1 r! j) k$ ?" U% d
invoke MessageBox,0, addr buffer,addr AppName,MB_OK
% F4 K( Q$ C6 Y% ]& @. ^& \6 ?/ B4 K ret
8 m! N" C5 m& {+ r& g7 q ShowCurrentFocus endp. } ~2 a( B7 @" V5 d: w
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
6 B* S3 O! m" L! ?* ] .if uMsg==WM_CREATE$ d: d+ k6 v9 \
invoke CreateWindowEx, NULL, addr ListViewClassName, NULL, LVS_REPORT+WS_CHILD+WS_VISIBLE, 0,0,0,0,hWnd, NULL, hInstance, NULL
8 Q* D- L3 B% B8 h mov hList, eax6 X' \; Z3 R% V! j5 [7 {1 d* _
invoke InsertColumn
9 l' y) H! [5 v invoke FillFileInfo
( A$ X% ]0 _; X b F+ z RGB 255,255,2559 j/ l h3 I( I* M
invoke SendMessage,hList,LVM_SETTEXTCOLOR,0,eax
, e+ |& ^! B& u# f RGB 0,0,01 l3 s1 G8 d1 d
invoke SendMessage,hList,LVM_SETBKCOLOR,0,eax
9 b& B" O8 |- D# Y/ k# [ RGB 0,0,08 J. D; W) N; V7 Z( V
invoke SendMessage,hList,LVM_SETTEXTBKCOLOR,0,eax
7 w9 X) i: h9 n! v invoke GetMenu,hWnd. @9 |% K8 p" Y7 I: o6 G
mov hMenu,eax1 f8 a' n! Z1 H9 V
invoke CheckMenuRadioItem,hMenu,IDM_ICON,IDM_LIST, IDM_REPORT,MF_CHECKED
$ ]1 x: p5 `: ?! |' W4 E/ r .elseif uMsg==WM_COMMAND
3 t5 y/ r, B; Y .if lParam==0: n( X3 O" F0 J2 d- j
invoke GetWindowLong,hList,GWL_STYLE3 v* W |/ Z d5 h* u6 U/ p9 `
and eax,not LVS_TYPEMASK
8 n* \" \% o8 `& n2 W# O' \; S# ] mov edx,wParam) w7 }7 E' P; k. @! |6 f5 N
and edx,0FFFFh, ~6 d$ h! A) ]" H% w
push edx! `7 i9 p6 C4 a% v' d0 `; |/ n
or eax,edx, `* w6 H" U0 w C7 V( a P* _
invoke SetWindowLong,hList,GWL_STYLE,eax# x1 _( ]) E3 \6 x7 d: V
pop edx
2 k! ^6 S8 k0 |& S invoke CheckMenuRadioItem,hMenu,IDM_ICON,IDM_LIST, edx,MF_CHECKED9 X7 k- z0 l# y7 {" Z% p' r5 C; P0 L
.endif. Q7 J) i8 Y- b- o: W# M
.elseif uMsg==WM_NOTIFY
7 w" B; W* {, Q push edi/ {9 J2 f1 }* t, G9 Y* F: `- w
mov edi,lParam" F3 ?9 a/ P! E* u9 Y# G( A! r
assume edi:ptr NMHDR
, y! @ |2 F" W7 J0 Q, z; Z mov eax,[edi].hwndFrom |