📄 symlinks.asm
字号:
mov [esi].pszText, eax
ListView_SetItem g_hwndListView, esi
.endif
invoke lstrlen, ebx
mov cl, [ebx+eax+1]
.break .if cl == 0
lea ebx, [ebx+eax+1]
inc lvi.iItem
.endw
.endif
invoke free, edi
assume esi:nothing
.endif
invoke SendMessage, g_hwndListView, WM_SETREDRAW, TRUE, 0
ret
FillListView endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Dlg_OnNotify
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Dlg_OnNotify proc uses esi edi hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
option PROLOGUE:NONE
option EPILOGUE:NONE
mov eax, lParam
mov eax, (NMHDR ptr [eax]).hwndFrom
.if eax == g_hwndListView
; Notify message from Process List
mov edi, lParam
assume edi:ptr NMHDR
.if [edi].code == LVN_COLUMNCLICK
assume edi:ptr NM_LISTVIEW
mov eax, g_uPrevClickedColumn
.if [edi].iSubItem != eax
; Remove bitmap from prev header column
invoke ImageToHeaderItem, g_hwndHeader, g_uPrevClickedColumn, NULL
mov g_uSortOrder, SORT_NOT_YET
m2m g_uPrevClickedColumn, [edi].iSubItem
.endif
.if g_uSortOrder == SORT_NOT_YET || g_uSortOrder == SORT_DESCENDING
mov g_uSortOrder, SORT_ASCENDING
invoke ImageToHeaderItem, g_hwndHeader, [edi].iSubItem, g_hbmpHeaderArrowDown
.else
mov g_uSortOrder, SORT_DESCENDING
invoke ImageToHeaderItem, g_hwndHeader, [edi].iSubItem, g_hbmpHeaderArrowUp
.endif
invoke SendMessage, g_hwndListView, LVM_SORTITEMSEX, [edi].iSubItem, addr CompareFunc
invoke UpdatelParam
.endif
.endif
pop eax
jmp eax ; jmp LeaveDlgProc1
option PROLOGUE:PROLOGUEDEF
option EPILOGUE:EPILOGUEDEF
Dlg_OnNotify endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Dlg_OnCommand
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Dlg_OnCommand proc uses esi edi hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
option PROLOGUE:NONE
option EPILOGUE:NONE
mov eax, $LOWORD(wParam)
.if eax == IDCANCEL
invoke EndDialog, hDlg, 0
.endif
pop eax
jmp eax ; jmp LeaveDlgProc1
option PROLOGUE:PROLOGUEDEF
option EPILOGUE:EPILOGUEDEF
Dlg_OnCommand endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Dlg_OnSize
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Dlg_OnSize proc uses esi edi hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
option PROLOGUE:NONE
option EPILOGUE:NONE
; accommodate ListView size to main dialog
mov eax, lParam
and eax, 0FFFFh ; width of main dlg client area
mov ecx, lParam
shr ecx, 16 ; height of main dlg client area
invoke MoveWindow, g_hwndListView, 0, 0, eax, ecx, TRUE
pop eax
jmp eax ; jmp LeaveDlgProc1
option PROLOGUE:PROLOGUEDEF
option EPILOGUE:EPILOGUEDEF
Dlg_OnSize endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Dlg_OnDestroy
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Dlg_OnDestroy proc uses esi edi hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
option PROLOGUE:NONE
option EPILOGUE:NONE
invoke DeleteHeaderBitmap
pop eax
jmp eax ; jmp LeaveDlgProc1
option PROLOGUE:PROLOGUEDEF
option EPILOGUE:EPILOGUEDEF
Dlg_OnDestroy endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Dlg_OnInitDialog
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Dlg_OnInitDialog proc uses esi edi hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
option PROLOGUE:NONE
option EPILOGUE:NONE
m2m g_hDlg, hDlg
mov g_uPrevClickedColumn, -1
mov g_uSortOrder, SORT_NOT_YET
; Set Dialog Icon
mov g_hMainIcon, $invoke(LoadIcon, g_hInstance, IDI_MAIN_ICON)
invoke SendMessage, hDlg, WM_SETICON, ICON_BIG, g_hMainIcon
mov g_hwndListView, $invoke(GetDlgItem, hDlg, IDC_LISTVIEW)
ListView_SetExtendedListViewStyle g_hwndListView, LVS_EX_GRIDLINES + LVS_EX_FULLROWSELECT
mov g_hwndHeader, $invoke(SendMessage, g_hwndListView, LVM_GETHEADER, 0, 0)
; Change List View Header Stiles
invoke GetWindowLong, g_hwndHeader, GWL_STYLE
or eax, HDS_HOTTRACK
invoke SetWindowLong, g_hwndHeader, GWL_STYLE, eax
invoke LoadHeaderBitmap
; Add about menu
invoke GetSystemMenu, hDlg, FALSE
mov esi, eax
invoke InsertMenu, esi, -1, MF_BYPOSITION + MF_SEPARATOR, 0, 0
invoke InsertMenu, esi, -1, MF_BYPOSITION + MF_STRING, IDM_ABOUT, offset szAbout
invoke InsertListViewColumn
invoke FillListView
pop eax
jmp eax ; jmp LeaveDlgProc1
option PROLOGUE:PROLOGUEDEF
option EPILOGUE:EPILOGUEDEF
Dlg_OnInitDialog endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Dlg_OnClose
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Dlg_OnClose proc uses esi edi hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
option PROLOGUE:NONE
option EPILOGUE:NONE
invoke EndDialog, hDlg, 0
pop eax
jmp eax ; jmp LeaveDlgProc1
option PROLOGUE:PROLOGUEDEF
option EPILOGUE:EPILOGUEDEF
Dlg_OnClose endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Dlg_OnSysCommand
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Dlg_OnSysCommand proc uses esi edi hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
option PROLOGUE:NONE
option EPILOGUE:NONE
.if wParam == IDM_ABOUT
invoke MessageBox, hDlg, addr szWrittenBy, addr szAbout, MB_OK + MB_ICONINFORMATION
.endif
pop eax
jmp LeaveDlgProc0
option PROLOGUE:PROLOGUEDEF
option EPILOGUE:EPILOGUEDEF
Dlg_OnSysCommand endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Dlg_OnSysColorChange
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Dlg_OnSysColorChange proc uses esi edi hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
option PROLOGUE:NONE
option EPILOGUE:NONE
invoke DeleteHeaderBitmap
invoke LoadHeaderBitmap
pop eax
jmp LeaveDlgProc0
option PROLOGUE:PROLOGUEDEF
option EPILOGUE:EPILOGUEDEF
Dlg_OnSysColorChange endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Dlg_DlgProc
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DlgProc proc uses esi edi hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
DLG_PROC_LOCAL
push LeaveDlgProc1
mov eax, uMsg
IF_MSG WM_NOTIFY, Dlg_OnNotify
IF_MSG WM_COMMAND, Dlg_OnCommand
IF_MSG WM_SIZE, Dlg_OnSize
IF_MSG WM_CLOSE, Dlg_OnClose
IF_MSG WM_DESTROY, Dlg_OnDestroy
IF_MSG WM_INITDIALOG, Dlg_OnInitDialog
IF_MSG WM_SYSCOMMAND, Dlg_OnSysCommand
IF_MSG WM_SYSCOLORCHANGE, Dlg_OnSysColorChange
pop eax ; remove LeaveDlgProc1 from stack
; default
LeaveDlgProc0::
xor eax, eax
ret ; return FALSE
LeaveDlgProc1::
xor eax, eax
inc eax
ret ; return TRUE
DlgProc endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
start:
mov g_hInstance, $invoke(GetModuleHandle, NULL)
invoke DialogBoxParam, g_hInstance, IDD_MAIN_DIALOG, NULL, addr DlgProc, 0
invoke ExitProcess, eax
invoke InitCommonControls
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -