hwnd对吗?跟spy++对照一下
或者用LVM_SCROLL测试一下能否拉动滚动条
http://msdn.microsoft.com/zh-cn/library/aa929191.aspx

解决方案 »

  1.   

    hwnd你不会给的窗口句柄吧?那个函数要的是list-view控件的句柄
      

  2.   

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public extern static int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
    这么定义的........应该怎么改
      

  3.   

    额,是用spy++获取的窗口句柄。 用spy++只能获取到一个窗口,不知道算不算窗口你可以理解成QQ的那个主界面的好友外边框
    ,是参数传的不对吗?
      

  4.   

    仔细看了下,确实是个ListView,我hwnd给的是这个listview的句柄
      

  5.   

    窗口句柄肯定是不对的,要的是list-view控件的句柄
    你需要在spy++里把窗口展开,在子级里面找类名SysListView32之类的句柄
    代码里面你可以用FindWindow或enumChildWindow找到它
    http://bbs.csdn.net/topics/310163856
    http://gunxue77.blog.163.com/blog/static/1196804220114753425303/你最好去看看windows内部原理方面的书
      

  6.   


    嗯,我刚接触API,这个已经获取到最底层了,我看了下是个LIstView,是我SendMessage定义的不对吗
      

  7.   

    他所有的行返回的都是0...
    如果你每次都傳 -1 進去那每次肯定都是一樣的結果。
    int iItem = SendMessage(hwndLV, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
    while (iItem != -1) {
        // 得到選中的 iItem 索引
        iItem = SendMessage(hwndLV, LVM_GETNEXTITEM, iItem, LVNI_SELECTED);
    }
    當然,首先保證 hwndLV 是一個 SysListView32 類名。
      

  8.   

    他所有的行返回的都是0...
    如果你每次都傳 -1 進去那每次肯定都是一樣的結果。
    int iItem = SendMessage(hwndLV, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
    while (iItem != -1) {
        // 得到選中的 iItem 索引
        iItem = SendMessage(hwndLV, LVM_GETNEXTITEM, iItem, LVNI_SELECTED);
    }
    當然,首先保證 hwndLV 是一個 SysListView32 類名。这个我当时用for循环给的值,结果还是0,不过谢了
      

  9.   

    他所有的行返回的都是0...
    如果你每次都傳 -1 進去那每次肯定都是一樣的結果。
    int iItem = SendMessage(hwndLV, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
    while (iItem != -1) {
        // 得到選中的 iItem 索引
        iItem = SendMessage(hwndLV, LVM_GETNEXTITEM, iItem, LVNI_SELECTED);
    }
    當然,首先保證 hwndLV 是一個 SysListView32 類名。这个我当时用for循环给的值,结果还是0,不过谢了
    還有一點,如果你是獲取其他程序的窗口,有可能兩種情況下是沒法獲取的:
    1. 其他進程空間有可能無權限訪問,有可能需要用到 VirtualAlloc 之類的。你這個看來不涉及到。
    2. 程序用戶權限級別不同。比如以非管理員運行的程序,獲取以管理員權限運行的程序的數據,Vista 及以上的系統中會有這個問題。