比如windows的进程管理器,双击程序里的某一栏 ,会把该程序的窗口显示到顶层窗口。
我想屏蔽该效果,然后hook了它的窗口过程里的一些消息  代码:
                           CWPSTRUCT* mm=(CWPSTRUCT*)lParam;  
                           if (mm->message == LVM_GETSELECTEDCOUNT)
{
//OutputDebugString("LVM_GETSELECTEDCOUNT");
//return -1;
}
else if (mm->message == LVM_GETNEXTITEM)
{
OutputDebugString("LVM_GETNEXTITEM");
mm->wParam = 0;
return -1;
}
else if (mm->message == LVM_GETITEM)
{
/*OutputDebugString("LVM_GETITEM");
return 0;*/
}
else if (mm->message == WM_NOTIFY)
{
LPNMHDR pnmhdr = (LPNMHDR)(mm->lParam);
if (pnmhdr->code == NM_DBLCLK)
{
OutputDebugString("NM_DBLCLK");
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)(mm->lParam);
if (lpnmitem->iItem == 0)
{
OutputDebugString("lpnmitem->iItem == 0");
lpnmitem->iItem = -1;
return 0;
}
}
else if (pnmhdr->code == NM_CLICK)
{
OutputDebugString("NM_CLICK");
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)(mm->lParam);
if (lpnmitem->iItem == 0)
{
OutputDebugString("CLICKlpnmitem->iItem == 0");
lpnmitem->iItem = -1;
return 0;
}
}

}
else if (mm->message == LVM_SUBITEMHITTEST)
{
//OutputDebugString("LVM_SUBITEMHITTEST");
return -1;
}
else if (mm->message == LVM_GETITEMSTATE)
{
//OutputDebugString("LVM_GETITEMSTATE");
if (mm->wParam == 0)
{
UINT mask = mm->lParam;
mask &= ~LVIS_SELECTED;
mm->lParam = mask;
}
//return -1;
}都没有一个实现效果的, 不知道正确的应该截获那个消息,大家帮忙看看哈

解决方案 »

  1.   

    截获 窗口过程返回中的LVM_GETNEXTITEM 将返回值改为-1,也是不行。 
      

  2.   


    else if (mm->message == WM_NOTIFY)
    {
    LPNMHDR pnmhdr = (LPNMHDR)(mm->lParam);
    if (pnmhdr->code == NM_DBLCLK)
    {
    OutputDebugString("NM_DBLCLK");
    LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)(mm->lParam);
    if (lpnmitem->iItem == 0)
    {
    OutputDebugString("lpnmitem->iItem == 0");
    lpnmitem->iItem = -1;
    return 0;
    }
    }
    这一段就是拦截 双击事件的,不管用哎
      

  3.   

    我的意思是说直接拦截WM_LBUTTONDBLCLK
      

  4.   


    没用,只能换别的方法了,3Q&……