#2
g520776432014-08-27 14:14
贴上全部代码··希望好心人能帮忙修改····
.386 .model flat,stdcall option casemap:none include windows.inc include user32.inc include kernel32.inc include comctl32.inc includelib comctl32.lib includelib user32.lib includelib kernel32.lib .data? hInstance dd ? hWinMain dd ? hList dd ? .data szClassName db 'ListViewWinClass',0 szAppName db '视图列表程序',0 LVMClassName db 'SysListView32',0 szLVCaption1 db '句柄',0 szLVCaption2 db '文件名称',0 szLVCaption3 db '文件名称aaaa',0 szTemplate db '%08x',0 .code _ShowProcessInfo proc uses edi _dwRow,_lpProcess LOCAL @stLVI:LV_ITEM LOCAL @szBuffer[10]:byte mov edi,_lpProcess assume edi:ptr PROCESSENTRY32 mov @stLVI.imask,LVIF_TEXT or LVIF_PARAM push _dwRow pop @stLVI.iItem mov @stLVI.iSubItem,0 push _dwRow pop @stLVI.lParam invoke wsprintf,addr @szBuffer,offset szTemplate,[edi].th32ProcessID lea eax,@szBuffer mov @stLVI.pszText,eax invoke SendMessage,hList,LVM_INSERTITEM,0,addr @stLVI inc @stLVI.iSubItem mov @stLVI.pszText,eax lea eax,[edi].szExeFile mov @stLVI.pszText,eax invoke SendMessage,hList,LVM_SETITEM,0,addr @stLVI assume edi:nothing ret _ShowProcessInfo endp _FillFileInfo proc uses edi LOCAL @hSnapshot LOCAL @stProcess:PROCESSENTRY32 invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0 mov @hSnapshot,eax mov @stProcess.dwSize,sizeof @stProcess invoke Process32First,@hSnapshot,addr @stProcess xor edi,edi .while eax invoke _ShowProcessInfo,edx,addr @stProcess inc edi invoke Process32Next,@hSnapshot,addr @stProcess .endw invoke CloseHandle,@hSnapshot ret _FillFileInfo endp _InsertColumn proc LOCAL @stLVC:LV_COLUMN mov @stLVC.imask,LVCF_TEXT OR LVCF_WIDTH mov @stLVC.pszText,offset szLVCaption1 mov @stLVC.lx,100 invoke SendMessage,hList,LVM_INSERTCOLUMN,0,addr @stLVC OR @stLVC.imask,LVCF_FMT mov @stLVC.pszText,offset szLVCaption2 mov @stLVC.lx,200 mov @stLVC.fmt,LVCFMT_LEFT invoke SendMessage,hList,LVM_INSERTCOLUMN,1,addr @stLVC mov @stLVC.pszText,offset szLVCaption3 mov @stLVC.lx,200 mov @stLVC.fmt,LVCFMT_LEFT invoke SendMessage,hList,LVM_INSERTCOLUMN,2,addr @stLVC ret _InsertColumn endp _WndProc proc uses esi edi ebx,hWnd,uMsg,wParam,lParam mov eax,uMsg .if eax==WM_CLOSE invoke DestroyWindow,hWnd invoke PostQuitMessage,0 .elseif eax==WM_CREATE invoke CreateWindowEx, NULL, addr LVMClassName, NULL, LVS_REPORT+WS_CHILD+WS_VISIBLE, \ 0,0,800,700,hWnd, NULL, hInstance, NULL mov hList, eax invoke _InsertColumn invoke _FillFileInfo ; .else invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .endif xor eax,eax ret _WndProc endp _WinMain proc LOCAL @stWC:WNDCLASSEX LOCAL @stMsg:MSG invoke GetModuleHandle,0 mov hInstance,eax invoke RtlZeroMemory,addr @stWC,sizeof @stWC mov @stWC.cbSize,sizeof WNDCLASSEX mov @stWC.style,0 mov @stWC.lpfnWndProc,offset _WndProc mov @stWC.cbClsExtra,0 mov @stWC.cbWndExtra,0 push hInstance pop @stWC.hInstance mov @stWC.hIcon,0 invoke LoadCursor,hInstance,IDC_ARROW mov @stWC.hCursor,eax mov @stWC.hbrBackground,COLOR_WINDOW+1 mov @stWC.lpszMenuName,0 mov @stWC.lpszClassName,offset szClassName mov @stWC.hIconSm,0 invoke RegisterClassEx,addr @stWC invoke CreateWindowEx,NULL,addr szClassName,addr szAppName,WS_OVERLAPPEDWINDOW,\ 400,400,800,800,0,0,hInstance,0 mov hWinMain,eax invoke ShowWindow,hWinMain,SW_SHOWNORMAL invoke UpdateWindow,hWinMain .while TRUE invoke GetMessage,addr @stMsg,0,0,0 .break .if eax==0 invoke TranslateMessage,addr @stMsg invoke DispatchMessage,addr @stMsg .endw ret _WinMain endp start: invoke InitCommonControls invoke _WinMain invoke ExitProcess,0 end start |
_ShowProcessInfo proc uses edi _dwRow,_lpProcess
LOCAL @stLVI:LV_ITEM
LOCAL @szBuffer[10]:byte
mov edi,_lpProcess
assume edi:ptr PROCESSENTRY32
mov @stLVI.imask,LVIF_TEXT or LVIF_PARAM
push _dwRow
pop @stLVI.iItem
mov @stLVI.iSubItem,0
push _dwRow
pop @stLVI.lParam
invoke wsprintf,addr @szBuffer,offset szTemplate,[edi].th32ProcessID
lea eax,@szBuffer
mov @stLVI.pszText,eax
invoke SendMessage,hList,LVM_INSERTITEM,0,addr @stLVI
inc @stLVI.iSubItem
mov @stLVI.pszText,eax
lea eax,[edi].szExeFile
mov @stLVI.pszText,eax
invoke SendMessage,hList,LVM_SETITEM,0,addr @stLVI
assume edi:nothing
ret
_ShowProcessInfo endp
为什么子项目显示不了进程名··如果我把PROCESSENTRY32改成查找文件的WIN32_FIND_DATA 又能正常加入子项目了··或者我把进程名加到首项目也能正常显示···