DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hListView:HWND
LOCAL hListInst:HINSTANCE
LOCAL lvc:LVCOLUMN
invoke RtlZeroMemory, addr lvc, sizeof lvc
.IF uMsg==WM_INITDIALOG
invoke CreateWindowEx,NULL,ADDR ListViewClass,NULL,WS_CHILD+WS_VISIBLE,22,\
65,350,285,hWnd,LIST1,hListInst,NULL
mov hListView, eax
invoke SendMessage,hListView,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT or LVS_EX_HEADERDRAGDROP
mov lvc.mask, LVCF_TEXT or LVCF_SUBITEM or LVCF_WIDTH or LVCF_FMT
mov lvc.fmt, LVCFMT_LEFT
mov lvc.iSubItem, 0
mov lvc.cx, 105
mov lvc.pszText, addr Column1
invoke SendMessage, hListView, LVM_INSERTCOLUMN, 0, addr lvc
.ELSEIF uMsg==WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
LOCAL hListView:HWND
LOCAL hListInst:HINSTANCE
LOCAL lvc:LVCOLUMN
invoke RtlZeroMemory, addr lvc, sizeof lvc
.IF uMsg==WM_INITDIALOG
invoke CreateWindowEx,NULL,ADDR ListViewClass,NULL,WS_CHILD+WS_VISIBLE,22,\
65,350,285,hWnd,LIST1,hListInst,NULL
mov hListView, eax
invoke SendMessage,hListView,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT or LVS_EX_HEADERDRAGDROP
mov lvc.mask, LVCF_TEXT or LVCF_SUBITEM or LVCF_WIDTH or LVCF_FMT
mov lvc.fmt, LVCFMT_LEFT
mov lvc.iSubItem, 0
mov lvc.cx, 105
mov lvc.pszText, addr Column1
invoke SendMessage, hListView, LVM_INSERTCOLUMN, 0, addr lvc
.ELSEIF uMsg==WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
Im getting these errors:
error A2081: missing operand after unary operator
syntax error : addr
error A2166: structure field expected
error A2166: structure field expected
On the red lines respectively...
Sounds pretty weird that you're getting an error on the first line...
as for addr, isn't it usable only in invoke statements?
as for addr, isn't it usable only in invoke statements?
I believe
mov lvc.cx, 105
should be
mov lvc.lx, 105
Not sure on the problems you mentioned
Regards,
Darrel
mov lvc.cx, 105
should be
mov lvc.lx, 105
Not sure on the problems you mentioned
Regards,
Darrel
Oh I didnt know about that addr thing... Changed it to offset, but the other 2 errors are still there.
LV_COLUMN STRUCT
imask DWORD ?
fmt DWORD ?
lx DWORD ?
pszText DWORD ?
cchTextMax DWORD ?
iSubItem DWORD ?
iImage DWORD ?
iOrder DWORD ?
LV_COLUMN ENDS
LVCOLUMN equ <LV_COLUMN>
imask DWORD ?
fmt DWORD ?
lx DWORD ?
pszText DWORD ?
cchTextMax DWORD ?
iSubItem DWORD ?
iImage DWORD ?
iOrder DWORD ?
LV_COLUMN ENDS
LVCOLUMN equ <LV_COLUMN>
mov lvc.mask, LVCF_TEXT or LVCF_SUBITEM or LVCF_WIDTH or LVCF_FMT
===>
mov lvc.imask, LVCF_TEXT or LVCF_SUBITEM or LVCF_WIDTH or LVCF_FMT
Darrel is correct. ;)
comrade, stop it mmkay?
Hum... This is pretty weird... I'm actually converting some C code to assembly and all those struct names were right in C...
It compiles now, but no column is added to the list... I'm posting my full code now:
It compiles now, but no column is added to the list... I'm posting my full code now:
.386
.model flat,stdcall
option casemap:none
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
DlgName db "IDD_MAIN",0
ListViewClass db "SysListView32",0
Column1 db "Process Name",0
.data?
hInstance HINSTANCE ?
icc INITCOMMONCONTROLSEX <>
.const
LIST1 equ 1
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke RtlZeroMemory, addr icc, sizeof icc
mov icc.dwSize, sizeof icc
mov icc.dwICC, ICC_LISTVIEW_CLASSES
invoke InitCommonControlsEx, addr icc
invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hListView:HWND
LOCAL hListInst:HINSTANCE
LOCAL lvc:LVCOLUMN
invoke RtlZeroMemory, addr lvc, sizeof lvc
.IF uMsg==WM_INITDIALOG
invoke CreateWindowEx,NULL,ADDR ListViewClass,NULL,WS_CHILD+WS_VISIBLE,22,\
65,350,285,hWnd,LIST1,hListInst,NULL
mov hListView, eax
invoke SendMessage,hListView,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT or LVS_EX_HEADERDRAGDROP
mov lvc.imask, LVCF_TEXT or LVCF_SUBITEM or LVCF_WIDTH or LVCF_FMT
mov lvc.fmt, LVCFMT_LEFT
mov lvc.iSubItem, 0
mov lvc.lx, 105
mov lvc.pszText, offset Column1
invoke SendMessage, hListView, LVM_INSERTCOLUMN, 0, addr lvc
.ELSEIF uMsg==WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
end start
Hum... This is pretty weird... I'm actually converting some C code to assembly and all those struct names were right in C...
MASM doesn't allow reserved words to be used as structure field names, so things like "cx" had to be changed...
asm
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
DlgName db "IDD_MAIN",0
ListViewClass db "SysListView32",0
Column1 db "Process Name",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance HINSTANCE ?
icc INITCOMMONCONTROLSEX <>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.const
D_MAIN equ 1000
LIST1 equ 1
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke RtlZeroMemory, addr icc, sizeof icc
mov icc.dwSize, sizeof icc
mov icc.dwICC, ICC_LISTVIEW_CLASSES
invoke InitCommonControlsEx, addr icc
invoke DialogBoxParam, hInstance, D_MAIN,NULL, offset DlgProc, NULL
invoke ExitProcess,eax
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hListView:HWND
LOCAL hListInst:HINSTANCE
LOCAL lvc:LV_COLUMN
invoke RtlZeroMemory, addr lvc, sizeof lvc
.IF uMsg==WM_INITDIALOG
;invoke CreateWindowEx,NULL,ADDR ListViewClass,NULL,WS_CHILD+WS_VISIBLE,15,\
; 15,200,100,hWnd,LIST1,hInstance,NULL
invoke GetDlgItem, hWnd, LIST1
mov hListView, eax
invoke SendMessage,hListView,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT or LVS_EX_HEADERDRAGDROP
mov lvc.imask, LVCF_TEXT or LVCF_SUBITEM or LVCF_WIDTH or LVCF_FMT
mov lvc.fmt, LVCFMT_LEFT
mov lvc.iSubItem, 0
mov lvc.lx, 105
mov lvc.pszText, offset Column1
invoke SendMessage, hListView, LVM_INSERTCOLUMN, 0, addr lvc
.ELSEIF uMsg==WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
rc
#include "\masm32\include\resource.h"
#define D_MAIN 1000
D_MAIN DIALOGEX 0,0,155,80
CAPTION "listView"
FONT 8,"MS Sans Serif"
STYLE 0x10c80800
EXSTYLE 0x00000000
BEGIN
CONTROL "List1",1,"SysListView32",LVS_REPORT | WS_BORDER | WS_TABSTOP,8,8,140,65
END
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
DlgName db "IDD_MAIN",0
ListViewClass db "SysListView32",0
Column1 db "Process Name",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance HINSTANCE ?
icc INITCOMMONCONTROLSEX <>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.const
D_MAIN equ 1000
LIST1 equ 1
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke RtlZeroMemory, addr icc, sizeof icc
mov icc.dwSize, sizeof icc
mov icc.dwICC, ICC_LISTVIEW_CLASSES
invoke InitCommonControlsEx, addr icc
invoke DialogBoxParam, hInstance, D_MAIN,NULL, offset DlgProc, NULL
invoke ExitProcess,eax
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hListView:HWND
LOCAL hListInst:HINSTANCE
LOCAL lvc:LV_COLUMN
invoke RtlZeroMemory, addr lvc, sizeof lvc
.IF uMsg==WM_INITDIALOG
;invoke CreateWindowEx,NULL,ADDR ListViewClass,NULL,WS_CHILD+WS_VISIBLE,15,\
; 15,200,100,hWnd,LIST1,hInstance,NULL
invoke GetDlgItem, hWnd, LIST1
mov hListView, eax
invoke SendMessage,hListView,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT or LVS_EX_HEADERDRAGDROP
mov lvc.imask, LVCF_TEXT or LVCF_SUBITEM or LVCF_WIDTH or LVCF_FMT
mov lvc.fmt, LVCFMT_LEFT
mov lvc.iSubItem, 0
mov lvc.lx, 105
mov lvc.pszText, offset Column1
invoke SendMessage, hListView, LVM_INSERTCOLUMN, 0, addr lvc
.ELSEIF uMsg==WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
rc
#include "\masm32\include\resource.h"
#define D_MAIN 1000
D_MAIN DIALOGEX 0,0,155,80
CAPTION "listView"
FONT 8,"MS Sans Serif"
STYLE 0x10c80800
EXSTYLE 0x00000000
BEGIN
CONTROL "List1",1,"SysListView32",LVS_REPORT | WS_BORDER | WS_TABSTOP,8,8,140,65
END
Oh thanks a lot :) Worked fine.
More problems... First let me tell you what Im trying to do... Im recreating my taskmanager, made in C, to assembly. Everything was fine until I had to recreate a while loop that inserted all the lists fields... See it for yourself:
C version:
ASM version:
Im really sorry for not being able to be more helpfull, but I really dont know where the error is...
C version:
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
HWND hListView = GetDlgItem(hwnd, 500);
LVITEM lv = { 0 };
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
KillTimer(hwnd, TIMER1);
MessageBox(hwnd, TEXT("Dam CreateToolhelp32Snapshot!"), TEXT("Error"),
MB_OK | MB_ICONEXCLAMATION);
}
pe32.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hProcessSnap, &pe32))
{
KillTimer(hwnd, TIMER1);
CloseHandle(hProcessSnap);
MessageBox(hwnd, TEXT("Dam Process32First!"), TEXT("Error"),
MB_OK | MB_ICONEXCLAMATION);
}
int mark = ListView_GetSelectionMark(hListView);
ListView_DeleteAllItems(hListView);
unsigned int i = 0;
TCHAR pid[100];
while(Process32Next(hProcessSnap, &pe32))
{
wsprintf(pid, TEXT("%lu"), pe32.th32ProcessID);
lv.iItem = i;
ListView_InsertItem(hListView, &lv);
ListView_SetItemText(hListView, i, 0, pe32.szExeFile);
ListView_SetItemText(hListView, i, 1, TEXT("Test"));
ListView_SetItemText(hListView, i, 2, pid);
ListView_SetItemText(hListView, i, 3, TEXT("Test"));
i++;
}
CloseHandle(hProcessSnap);
ASM version:
invoke GetDlgItem, hWnd, LIST1
mov hListView, eax
invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
mov hProcessSnap, eax
cmp hProcessSnap, INVALID_HANDLE_VALUE
jz HandleError
mov pe32.dwSize, sizeof PROCESSENTRY32
invoke Process32First, hProcessSnap, addr pe32
cmp eax, FALSE
jz Process32FirstError
invoke RtlZeroMemory, addr lv, sizeof lv
invoke SendMessage, hListView, LVM_DELETEALLITEMS, 0, 0
xor ecx, ecx
StartOfLoop:
invoke Process32Next, hProcessSnap, addr pe32
cmp eax, FALSE
jz outofloop
mov lv.iItem, ecx
invoke SendMessage, hListView, LVM_INSERTITEM, 0, addr lv
mov lv.iSubItem, 0
invoke SendMessage, hListView, LVM_SETITEMTEXT, ecx, addr pe32.szExeFile
mov lv.iSubItem, 1
invoke SendMessage, hListView, LVM_SETITEMTEXT, ecx, NULL
mov lv.iSubItem, 2
invoke SendMessage, hListView, LVM_SETITEMTEXT, ecx, NULL
mov lv.iSubItem, 3
invoke SendMessage, hListView, LVM_SETITEMTEXT, ecx, NULL
inc ecx
jmp StartOfLoop
outofloop:
invoke CloseHandle, hProcessSnap
jmp finish
Process32FirstError:
invoke MessageBox, hWnd, addr err2, 0, MB_OK or MB_ICONEXCLAMATION
invoke CloseHandle, hProcessSnap
jmp finish
HandleError:
invoke MessageBox, hWnd, addr err1, 0, MB_OK or MB_ICONEXCLAMATION
finish:
Im really sorry for not being able to be more helpfull, but I really dont know where the error is...
Use edi/ebx/esi and preserve their values before using them.
Your code is not working well because the values in ecx is probably destroyed when you call SendMessage.
Your code is not working well because the values in ecx is probably destroyed when you call SendMessage.
Tried this:
But still no results...
push edi
xor edi, edi
StartOfLoop:
invoke Process32Next, hProcessSnap, addr pe32
cmp eax, FALSE
jz outofloop
mov lv.iItem, edi
invoke SendMessage, hListView, LVM_INSERTITEM, 0, addr lv
mov lv.iSubItem, 0
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, addr pe32.szExeFile
mov lv.iSubItem, 1
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, NULL
mov lv.iSubItem, 2
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, NULL
mov lv.iSubItem, 3
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, NULL
inc edi
jmp StartOfLoop
outofloop:
pop edi
But still no results...
Try this:
push edi
xor edi, edi
mov lv.iSubItem, edi
mov lv.iItem, edi
StartOfLoop:
invoke Process32Next, hProcessSnap, addr pe32
cmp eax, FALSE
jz outofloop
invoke SendMessage, hListView, LVM_INSERTITEM, 0, addr lv
mov lv.iItem, edi
mov lv.iSubItem, 0
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, addr pe32.szExeFile
mov lv.iSubItem, 1
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, NULL
mov lv.iSubItem, 2
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, NULL
mov lv.iSubItem, 3
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, NULL
inc edi
jmp StartOfLoop
outofloop:
pop edi
Its still not working.... Really *ucking weird... I made a few changes to make my code look more like Iczelion's but still no results.
.386
.model flat,stdcall
option casemap:none
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
Column1 db "Process Name",0
Column2 db "User name",0
Column3 db "PID",0
Column4 db "Memory use",0
err1 db "Dam CreateToolhelp32Snapshot!",0
err2 db "Dam Process32First!",0
.data?
hInstance HINSTANCE ?
icc INITCOMMONCONTROLSEX <>
hListView dd ?
.const
D_MAIN equ 1000
LIST1 equ 1
WM_UPDATE equ WM_USER+100h
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke RtlZeroMemory, addr icc, sizeof icc
mov icc.dwSize, sizeof icc
mov icc.dwICC, ICC_LISTVIEW_CLASSES
invoke InitCommonControlsEx, addr icc
invoke DialogBoxParam, hInstance, D_MAIN, NULL, offset DlgProc, NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL lvc:LVCOLUMN
LOCAL hProcessSnap:HANDLE
LOCAL pe32:PROCESSENTRY32
LOCAL lv:LVITEM
.IF uMsg==WM_INITDIALOG
invoke GetDlgItem, hWnd, LIST1
mov hListView, eax
invoke SendMessage,hListView,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT or LVS_EX_HEADERDRAGDROP
invoke RtlZeroMemory, addr lvc, sizeof lvc
mov lvc.imask, LVCF_TEXT or LVCF_SUBITEM or LVCF_WIDTH or LVCF_FMT
mov lvc.fmt, LVCFMT_LEFT
mov lvc.iSubItem, 0
mov lvc.lx, 105
mov lvc.pszText, offset Column1
invoke SendMessage, hListView, LVM_INSERTCOLUMN, 0, addr lvc
mov lvc.iSubItem, 1
mov lvc.lx, 90
mov lvc.pszText, offset Column2
invoke SendMessage, hListView, LVM_INSERTCOLUMN, 1, addr lvc
mov lvc.iSubItem, 2
mov lvc.lx, 65
mov lvc.pszText, offset Column3
invoke SendMessage, hListView, LVM_INSERTCOLUMN, 2, addr lvc
mov lvc.iSubItem, 3
mov lvc.lx, 87
mov lvc.pszText, offset Column4
invoke SendMessage, hListView, LVM_INSERTCOLUMN, 3, addr lvc
invoke SendMessage, hWnd, WM_UPDATE, 0, 0
.ELSEIF uMsg==WM_UPDATE
invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
mov hProcessSnap, eax
cmp hProcessSnap, INVALID_HANDLE_VALUE
jz HandleError
mov pe32.dwSize, sizeof PROCESSENTRY32
invoke Process32First, hProcessSnap, addr pe32
cmp eax, FALSE
jz Process32FirstError
invoke RtlZeroMemory, addr lv, sizeof lv
invoke SendMessage, hListView, LVM_DELETEALLITEMS, 0, 0
push edi
xor edi, edi
mov lv.iSubItem, edi
mov lv.iItem, edi
StartOfLoop:
invoke Process32Next, hProcessSnap, addr pe32
cmp eax, FALSE
jz outofloop
invoke SendMessage, hListView, LVM_INSERTITEM, 0, addr lv
mov lv.iItem, edi
mov lv.iSubItem, 0
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, addr pe32.szExeFile
mov lv.iSubItem, 1
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, NULL
mov lv.iSubItem, 2
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, NULL
mov lv.iSubItem, 3
invoke SendMessage, hListView, LVM_SETITEMTEXT, edi, NULL
inc edi
jmp StartOfLoop
outofloop:
pop edi
invoke CloseHandle, hProcessSnap
jmp finish
Process32FirstError:
invoke MessageBox, hWnd, addr err2, 0, MB_OK or MB_ICONEXCLAMATION
invoke CloseHandle, hProcessSnap
jmp finish
HandleError:
invoke MessageBox, hWnd, addr err1, 0, MB_OK or MB_ICONEXCLAMATION
finish:
.ELSEIF uMsg==WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
xor eax, eax
ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
end start