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


Im getting these errors:

error A2081: missing operand after unary operator


syntax error : addr
error A2166: structure field expected


On the red lines respectively...
Posted on 2005-09-02 18:56:31 by Lenin
Sounds pretty weird that you're getting an error on the first line...

as for addr, isn't it usable only in invoke statements?
Posted on 2005-09-02 19:36:10 by f0dder
I believe

mov lvc.cx, 105

should be

mov lvc.lx, 105

Not sure on the problems you mentioned

Regards,

Darrel
Posted on 2005-09-02 19:47:30 by Darrel
Oh I didnt know about that addr thing... Changed it to offset, but the other 2 errors are still there.
Posted on 2005-09-02 20:13:48 by Lenin
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>


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

Posted on 2005-09-02 22:32:51 by dcskm4200
Darrel is correct.  ;)
Posted on 2005-09-02 23:19:06 by roticv
comrade, stop it mmkay?
Posted on 2005-09-02 23:37:44 by f0dder
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:

.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
Posted on 2005-09-03 12:25:01 by Lenin

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...
Posted on 2005-09-03 12:38:03 by f0dder
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
Posted on 2005-09-04 00:59:34 by dcskm4200
Oh thanks a lot :) Worked fine.
Posted on 2005-09-04 12:13:47 by Lenin
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:

            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...
Posted on 2005-09-04 14:23:36 by Lenin
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.
Posted on 2005-09-04 20:21:09 by roticv
Tried this:

        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...
Posted on 2005-09-04 22:24:18 by Lenin
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

Posted on 2005-09-05 18:27:12 by QvasiModo
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
Posted on 2005-09-07 14:17:57 by Lenin