none
怎么用SendMessage模拟双击ListView RRS feed

  • 问题

  • 如题

    网上找了好久,没找到可用的……

    最好给个完整的实例,本人刚学c++,太菜了

    不一定要c++写的,其它语言写的也可以

    2011年4月9日 19:54

答案

  • SendInput Function

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月9日 20:17
    版主
  •  int nId = ::GetDlgCtrlID(HWND_LISTVIEW); // HWND_LISTVIEW为ListView的窗口句柄
     NMITEMACTIVATE nmitem = {0};

     nmitem.hdr.code = NM_DBLCLK;
     nmitem.hdr.hwndFrom = HWND_LISTVIEW;
     nmitem.hdr.idFrom = nId;
     nmitem.iItem = 3;
     nmitem.iSubItem = 1; // 这里模拟点击ListView的第4行第2列
     
     
     ::SendMessage(::GetParent(HWND_LISTVIEW), WM_NOTIFY, (WPARAM)nId, (LPARAM)&nmitem);


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年4月10日 10:30
    版主
  • 你是要跨进程吗?如果不跨进程,上面的代码没有问题,如果是给其它进程窗口中的ListView控件发送NM_DBLCLK通知是不行的,MSDN上有明确说明

    MSDN:

    For Microsoft Windows 2000 and later systems, the WM_NOTIFY message cannot be sent between processes.

    跨进程的话,你可以使用HOOK,SetWindowsHookEx()应该是可以的


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年4月11日 1:21
    版主
  • 模拟最好用mouse_event

    2011年4月11日 1:24

全部回复

  • SendInput Function

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月9日 20:17
    版主
  • 有另外的办法吗?我要后台执行
    2011年4月10日 7:46
  •  int nId = ::GetDlgCtrlID(HWND_LISTVIEW); // HWND_LISTVIEW为ListView的窗口句柄
     NMITEMACTIVATE nmitem = {0};

     nmitem.hdr.code = NM_DBLCLK;
     nmitem.hdr.hwndFrom = HWND_LISTVIEW;
     nmitem.hdr.idFrom = nId;
     nmitem.iItem = 3;
     nmitem.iSubItem = 1; // 这里模拟点击ListView的第4行第2列
     
     
     ::SendMessage(::GetParent(HWND_LISTVIEW), WM_NOTIFY, (WPARAM)nId, (LPARAM)&nmitem);


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年4月10日 10:30
    版主
  • 试了一下,不行!
    2011年4月10日 12:31
  • 你是要跨进程吗?如果不跨进程,上面的代码没有问题,如果是给其它进程窗口中的ListView控件发送NM_DBLCLK通知是不行的,MSDN上有明确说明

    MSDN:

    For Microsoft Windows 2000 and later systems, the WM_NOTIFY message cannot be sent between processes.

    跨进程的话,你可以使用HOOK,SetWindowsHookEx()应该是可以的


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年4月11日 1:21
    版主
  • 模拟最好用mouse_event

    2011年4月11日 1:24
  • 谢谢,试下
    2011年4月11日 8:26