社区
进程/线程/DLL
帖子详情
怎样获得其他程序中控件的内容?
setsailgo
2004-01-17 02:07:58
怎样获得其他程序中控件的内容?
如列表框中的列表项。
...全文
76
6
打赏
收藏
怎样获得其他程序中控件的内容?
怎样获得其他程序中控件的内容? 如列表框中的列表项。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
stonesky
2004-01-20
打赏
举报
回复
void CGetPSWDlg::OnGetpsw()
{
::SetCursor(::LoadCursor(NULL, IDC_CROSS));
::SetCapture(this->m_hWnd);
}
void CGetPSWDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
if(GetCapture() == this)
{
CRect rc;
POINT pt;
pt = point;
this->ClientToScreen(&pt);
this->GetWindowRect(&rc);
if(rc.PtInRect(pt))
{
::ReleaseCapture();
}
else
{
HWND hWnd = PtInWindow(pt);
if(hWnd)
{
char psw[256];
if(::SendMessage(hWnd, WM_GETTEXT, 256, (long)psw))
this->m_strPsw = psw;
else
{
m_strPsw.Format("查看信息失败,错误代码:%d", GetLastError());
}
this->UpdateData(FALSE);
}
}
}
CDialog::OnLButtonDown(nFlags, point);
}
HWND hWnd = NULL;
BOOL CALLBACK EnumChildProc(
HWND hwnd, // handle to child window
LPARAM lParam // application-defined value
)
{
//if(::IsWindowEnabled(hwnd))
{
RECT rc;
::GetWindowRect(hwnd, &rc);
POINT pt = *(POINT *)lParam;
if(::PtInRect(&rc, pt))
{
hWnd = hwnd;
return FALSE;
}
}
return TRUE;
}
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
)
{
if(::IsWindowVisible(hwnd))
{
RECT rc;
::GetWindowRect(hwnd, &rc);
POINT pt = *(POINT *)lParam;
if(::PtInRect(&rc, pt))
{
::EnumChildWindows(hwnd, EnumChildProc, lParam);
if(hWnd)
return FALSE;
}
}
return TRUE;
}
HWND CGetPSWDlg::PtInWindow(POINT pt)
{
hWnd = NULL;
::EnumWindows(EnumWindowsProc, (long)&pt);
return hWnd;
}
stonesky
2004-01-19
打赏
举报
回复
FindWindow找到目标应用程序
EnumChildWindow找到子窗口
PostMessage向控件发送消息
如WM_GETTEXT获取控件的文本内容
halibut
2004-01-17
打赏
举报
回复
首先你要得到列表框的句柄,有了句柄,就好办了:
HWND hwnd;
...//得到句柄
CListBox lb;
lb.Attach(hwnd); //让lb与hwnd关联
//现在通过lb就可以访问它了!
lb.Detch(); //断开关联
binjuny
2004-01-17
打赏
举报
回复
关注中~~~~~~~~~~~~
afantict
2004-01-17
打赏
举报
回复
进程2
if CallNamedPipe(NamedPipeName, CmdMessage, Wr_size, @Rd_buf, Rd_size, RdLen, WaitOrder) = True then begin
Result := pbyte(@Rd_buf);
exit;
end
进程1
//管道通信结束有两个事件:服务停止和通信操作结束
HANDLE hEvents[2] = {NULL, NULL};
hEvents[0] = m_pDmnMain->m_hEvServerStop; //服务停止
hEvents[1] = CreateEvent( //通信操作结束
NULL, // no security attributes
TRUE, // manual reset event
FALSE, // not-signalled
NULL); // no name
if ( hEvents[1] == NULL)
return;
//创建管道
HANDLE hPipe = INVALID_HANDLE_VALUE;
hPipe = CreateNamedPipe(
PIPE_NAME, // 必须是\\.\pipe\pipename格式
FILE_FLAG_OVERLAPPED | //异步的原因:因为有两个信号,如果不是异步,在每次操作的时候都堵塞了,就不能判断服务停止这个信号了
PIPE_ACCESS_DUPLEX, //双方都可以读写
PIPE_TYPE_MESSAGE |
PIPE_READMODE_MESSAGE |
PIPE_WAIT, // pipe IO type
1, // 可以允许生成的最大管道的对象数目,我们只设定一个,否则就混乱了
0, // size of outbuf (0 == allocate as necessary)
0, // size of inbuf
1000, // default time-out value
&sa); // ACL安全属性
if (hPipe == INVALID_HANDLE_VALUE)
{
AddToMessageLog(TEXT("Unable to create named pipe"));
return;
}
//管道建立成功,开始工作
while (1)
{
//异步结构
OVERLAPPED os;
memset( &os, 0, sizeof(OVERLAPPED) );
os.hEvent = hEvents[1]; //把通信结束这个信号赋予异步结构
ResetEvent( hEvents[1] ); //使不发信号
//异步等待连接管道,马上返回,根据GetLastError判断是否PENDING,等待
ConnectNamedPipe(hPipe, &os);
if ( GetLastError() == ERROR_IO_PENDING )
{
dwWait = WaitForMultipleObjects( 2, hEvents, FALSE, INFINITE ); //等待任何两个事件
if ( dwWait != WAIT_OBJECT_0+1 ) //如果信号是服务停止,退出程序
break;
}
//使通信工作的信号不发信号赋予异步结构
memset( &os, 0, sizeof(OVERLAPPED) );
os.hEvent = hEvents[1];
ResetEvent( hEvents[1] );
//异步读取管道,马上返回,根据GetLastError判断是否PENDING,等待
if (!ReadFile(
hPipe,
pszIn,
INBUF_SIZE,
&cbRead,
&os)
&& ( GetLastError() == ERROR_IO_PENDING ) )
{
dwWait = WaitForMultipleObjects( 2, hEvents, FALSE, INFINITE );
if ( dwWait != WAIT_OBJECT_0+1 )
break;
GetOverlappedResult(hPipe,&os, &cbRead, TRUE); //把通信工作的信号不发信号
}
//读取完后追加\0
pszIn[cbRead] = '\0';
memset(szOut,0,sizeof(szOut));
//根据读取的第一位来进行操作
switch(pszIn[0])
{
strcpy(szOut, "1");
}
//使通信工作的信号不发信号赋予异步结构
memset( &os, 0, sizeof(OVERLAPPED) );
os.hEvent = hEvents[1];
ResetEvent( hEvents[1] );
//写入管道
if (!WriteFile(
hPipe,
szOut,
dwSize,
&cbWritten,
&os)
&& ( GetLastError() == ERROR_IO_PENDING ) )
{
dwWait = WaitForMultipleObjects( 2, hEvents, FALSE, INFINITE );
if ( dwWait != WAIT_OBJECT_0+1 )
break;
}
//断开连接
DisconnectNamedPipe(hPipe);
afantict
2004-01-17
打赏
举报
回复
进程之间的通信
管道
C#获取其他
程序
ListView
控件
中
的
内容
C#获取其他
程序
ListView
控件
中
的
内容
http://blog.csdn.net/liehuo123/article/details/22043945
C++
获得
其他
程序
窗体
控件
中
信息的方法
主要介绍了C++
获得
其他
程序
窗体
控件
中
信息的方法,涉及windows
控件
句柄的获取技巧,需要的朋友可以参考下
C#通过窗口名获取
程序
所有
控件
句柄
通过窗口名获取
程序
所有
控件
句柄,并绘制句柄结构树。
VC++通过
控件
ID
获得
控件
窗口指针
摘要:VC/C++源码,其它分类,
控件
ID,
控件
... VC++通过
控件
ID
获得
控件
窗口指针,点击窗口
中
的按钮,即可看到
控件
ID所获取到的
控件
指针,弹出窗口内显示的
内容
。VC++通过
控件
ID
获得
控件
窗口指针源
程序
代码分享给VC初学者。
控件
密码侦测
程序
VC
程序
代码,通过得到另一
程序
控件
的ID,从而得到
控件
的
内容
;
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章