我用以下方法为什么不行,请各高手指导:
//获得桌面CListCtrl的句柄
HWND hWnd=::FindWindowEx(::FindWindowEx(::FindWindow"progman",NULL),NULL,"SHELLDLL_DefView",NULL),
NULL,
"SysListView32",
NULL);
char Buff[256]
LVITEM lvitem;
memset(&lvitem,0,sizeof(lvitem));
lvitem.mask=LVIF_TEXT;
lvitem.iItem=0;
lvitem.iSubItem=0;
lvitem.pszText=Buff;
lvitem.cchTextMax=128;
//以下这句出错
::SendMessage(hWnd,LVM_GETITEM,(WPARAM)(0),(LPARAM)&lvitem);    谢谢!!!

解决方案 »

  1.   

    据查:程序中的括号好像不匹配。
    还有就是类名应该是"Progman",注意大小写。
      

  2.   

    HWND hWnd=::FindWindowEx(::FindWindowEx(::FindWindow"progman",NULL),NULL,"SHELLDLL_DefView",NULL),
    NULL,
    "SysListView32",
    NULL);
    第二个findwindow没加括号呀
      

  3.   

    NowCan及cbc兄,我检查过以楼上二点后,还是不行。在W2K下提示lvitem地址(0x0128xxx)指令不能为write。我自已定义的都不能读吗?
    请您们帮帮我!!
        谢谢!!
      

  4.   

    是否应该判断一下hWnd是否为NULL,也就是你前面获取的柄为空。
    将第一名改为HWND hWnd=NULL;
    hWnd = ::FindWindowEx(::FindWindowEx(::FindWindow"progman",NULL),NULL,"SHELLDLL_DefView",NULL),
    NULL,
    "SysListView32",
    NULL);
    最后一句改为if ( hWnd )
    ::SendMessage(hWnd,LVM_GETITEM,(WPARAM)(0),(LPARAM)&lvitem);
      

  5.   

    这是跨进程的了...你得把这些放到Dll中...然后用远程钩子将dll注入到桌面的那个进程中