如何实现双击其他程序的listview?

haorenyige 2008-04-28 04:23:40
如何
双击其他程序的listview?
其他程序可能被激活,也可能没有被激活。所以模拟鼠标和键盘的方法好像没有用。

SendMessage(hwnd, WM_KEYDOWN, 0, 0);
SendMessage(hwnd, WM_KEYUP, 0, 0);这样的方式可以实现么?

但是其他程序的listview的item的handle如何得到呢?

...全文
148 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
haorenyige 2008-04-29
  • 打赏
  • 举报
回复
up
Eleven 2008-04-29
  • 打赏
  • 举报
回复
up
haorenyige 2008-04-29
  • 打赏
  • 举报
回复
有人可以帮帮忙么?
有没有其他的方式?
haorenyige 2008-04-29
  • 打赏
  • 举报
回复
自己解决了。怎么给分。赫赫
谢谢
jimoguilai和VisualEleven
haorenyige 2008-04-28
  • 打赏
  • 举报
回复
在网上找到一段代码,不知道能行不?正在尝试ing.
void CMyTreeCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CWnd* pParent = GetParent();

// Check if valid parent
ASSERT(pParent);

// Send notification to parent
NMHDR nmhdr;

nmhdr.code = NM_DBLCLK;
nmhdr.hwndFrom = m_hWnd;
nmhdr.idFrom = GetDlgCtrlID();

GetParent();
PostMessage(WM_NOTIFY, (LPARAM)GetDlgCtrlID(), (WPARAM)&nmhdr);

// Don't call the default implementation
//CTreeCtrl::OnLButtonDblClk(nFlags, point);
}
haorenyige 2008-04-28
  • 打赏
  • 举报
回复
我还发现有NM_DBLCLK这个消息。
我的代码
SendMessage(hwnd, LVM_SETITEMSTATE, index, plvitem.ToInt32());
可以执行,可以设置第index个item的状态,


但是通过
SendMessage(hwnd, NM_DBLCLK, index, plvitem.ToInt32());
却不能实现双击的功能。
haorenyige 2008-04-28
  • 打赏
  • 举报
回复
我查到 LVM_SETITEMSTATE相关信息,LVM_SETITEMSTATE可以设置一个item的文字以及状态等等,但是点击的话,NM_CLICK这个东西还是不太会用。
Chivalry 2008-04-28
  • 打赏
  • 举报
回复
NM_,LVN_LVM打头的消息都看一下,看看有没有你需要的,我手头没有csdn
haorenyige 2008-04-28
  • 打赏
  • 举报
回复
你的意思是
SendMessage(hwnd,WM_NM_CLICK,0,0); 这样么?

我现在来尝试一下
Chivalry 2008-04-28
  • 打赏
  • 举报
回复
查msdn,那就发送设置item的消息阿。。。
haorenyige 2008-04-28
  • 打赏
  • 举报
回复
如果是一个button,一个textbox,或者listview,他们是一个控件,他们有他们的handle,我现在可以得到。

但是我本身的意思是点击listview上的一个项目item,通过FindWindowEx应该是得不到一个listview的item的。

Chivalry 2008-04-28
  • 打赏
  • 举报
回复
这是一个类似的代码

让应用程序从IE中获取键入的网址

转自:www.csdn.net

文章正文
前些时候,朋友想做一个小共享软件,软件的主要作用是阻止用户进入某些网站,他的设想是从IE的地址栏中获取键入的网址,如果这个网址非法的话,则不可以进入,代码如下:

HWND hwnd=::FindWindow(_T("IEFrame"),NULL);
 if(hwnd)
 {
   HWND hwnd2=::FindWindowEx(hwnd,NULL,_T("Edit"),NULL);


char sz[255];
::SendMessage(hwnd2,WM_GETTEXT,255,(LPARAM)sz);
AfxMessageBox(sz);
 }

结果发现不能得到正确的结果,从SPY上看,类名也全部是正确的,为什么不能得到正确的结果呢?看了他的代码后,我进行了如下改动,就可以得到正确的结果了:

HWND hwnd=::FindWindow(_T("IEFrame"),NULL);
if(hwnd)
{
HWND hwnd2=::FindWindowEx(hwnd,NULL,_T("WorkerW"),NULL);
HWND hwnd3=::FindWindowEx(hwnd2,NULL,_T("ReBarWindow32"),NULL);
HWND hwnd4=::FindWindowEx(hwnd3,NULL,_T("ComboBoxEx32"),NULL);
HWND hwnd5=::FindWindowEx(hwnd4,NULL,_T("ComboBox"),NULL);
HWND hwnd6=::FindWindowEx(hwnd5,NULL,_T("Edit"),NULL);

char sz[255];
::SendMessage(hwnd6,WM_GETTEXT,255,(LPARAM)sz);
AfxMessageBox(sz);
}
}
Chivalry 2008-04-28
  • 打赏
  • 举报
回复
先使用FindWindow获取其它应用程序窗口的句柄
在使用FindWindowEx获取其ListView的句柄
在SendMessage发送NM_CLICK消息

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧