获取窗口句柄,并向窗口发送自定义消息

转载自:http://www.cnblogs.com/pen-ink/articles/1815306.html#commentform

//①自定义消息
//两个进程中定义相同的消息
#define WM_COMM (WM_USER + 100)

//发送窗口发送按钮处理,自定义消息为WM_COMM,接收窗口为DataRecv
void CDataSendDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CWnd *pWnd = CWnd::FindWindow(NULL, _T("DataRecv"));
if(pWnd == NULL)
{
MessageBox(_T("Unable to find DataRecv."));
return;
}
pWnd->PostMessage(WM_COMM, NULL, NULL);
}
//接收窗口处理WM_COMM自定义消息
BEGIN_MESSAGE_MAP(CDataRecvDlg, CDialog)
ON_MESSAGE(WM_COMM, OnRecvMsg)
END_MESSAGE_MAP()

LRESULT CDataRecvDlg::OnRecvMsg(WPARAM, LPARAM)
{
MessageBox(_T("I Received Message!"));
return (LRESULT)0;
}
//②WM_COPYDATA消息,主要目的是允许在进程间传递只读数据(COPYDATASTRUCT结构封装),用SendMessage()发送
//发送窗口发送只读数据
void CDataSendDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItemText(IDC_EDIT2,str);
CWnd *pWnd = CWnd::FindWindow(NULL, _T("DataRecv"));
if(pWnd == NULL)
{
MessageBox(_T("Unable to find DataRecv."));
return;
}
CString data;
GetDlgItemText(IDC_EDIT2, data);
COPYDATASTRUCT cpd = {0};
cpd.cbData = (data.GetLength() + 1) * 2;
cpd.lpData = (PVOID)data.GetString();
pWnd->SendMessage(WM_COPYDATA, 0, (LPARAM)&cpd);
}
//接收窗口接收只读数据
BOOL CDataRecvDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString str;
str = (LPCWSTR)pCopyDataStruct->lpData;
str = str.Left(pCopyDataStruct->cbData);
SetDlgItemText(IDC_EDIT1, str);
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}

// 发送WM_CLOSE 消息

void CSendMessageToWindowDlg::OnBnClickedButtonSendmessage()
{
// TODO: 在此添加控件通知处理程序代码
CWnd *pWnd = CWnd::FindWindow(NULL, _T("spyXX"));
if (pWnd == NULL)
{
MessageBox(_T("接收程序没有运行!"));
return;
}

pWnd->SendMessage(WM_CLOSE, NULL, 0);
}

时间: 2024-10-23 08:48:43

获取窗口句柄,并向窗口发送自定义消息的相关文章

MFC注册窗口类以及FindWindow按窗口类名查询(避免用#32770获取窗口句柄)

呵呵,最近在研究SendMessage函数,其中需要用到m_hWnd,之后延伸着又尝试获得窗口的句柄,于是遇到了FindWindow函数,原型如下: HWND FindWindow ( LPCSTR lpClassName,    //输入窗口的类名,其实需要是注册过的类名才行,否则是要报错或者查找失败的. LPCSTR lpWindowName, //输入窗口的名称,就是窗口上面蓝色的那行玩意儿写的字. ); 对于这个函数,如果按照窗口的名称查找,相信大家都非常简单,因为名称在rc文件里,是已

利用消息机制实现VC与Delphi之间的通讯(发送自定义消息)

摘要: 本文介绍了使用Windows消息机制实现由不同语言编制的程序之间的相互通讯.联系,并以当前较为流行的两种语言Microsoft Visual C++ 6.0和Borland delphi 5.0为对象,用这两种语言各编制一应用程序,并能很好的通过消息进行交互. 关键字:vc++.delphi.消息 一. 引言 编制较大型的程序往往需要将一个项目分割成若干个模块,由若干个开发小组共同完成.笔者曾参加过几个大型项目的研发工作,根据需要往往要将项目分为解为几大部分,分到三.四家科研单位共同完成

【转】vc中使用SendMessage正确发送自定义消息的方法--不错

原文网址:http://zhoumf1214.blog.163.com/blog/static/5241940200910265532959/ 最近在用VC2008做开发,后来由于要用到消息的发送,而且需要自定义消息,在网上查找了很多例子,根据他们所说的,虽然大致都差不多,但是基本上没有一个能完全做出来的.要知道VC编程有一个小地方出错,都可能是个让你头晕脑胀的事情.经过我后来不但探索,经过改进之后,一点错误都没有,现在贴出来供大家参考. 1. 先来个基本知识介绍 SendMessage的基本结

MFC发送自定义消息-PostMessage和SendMessage

PostMessage:把消息投放到线程的消息队列,不能消息被处理就立即返回SendMessage:消息被处理完后才返回 几种发送消息的写法:   ::PostMessage(GetSafeHwnd(), WM_USER_THREADEND, 0, 0); //GetSafeHwnd()表示得到当前窗口句柄,所以这条语句是发送给当前窗口   GetParent()->PostMessage(WM_USER_THREADEND, 0, 0);//发送给父窗口    this->PostMessa

窗口发送消息参数详解

//    窗口.发送消息    函数功能: 将指定的消息发送到一个窗口,同win32 api 里面的SendMessage等同的效果 中文函数原型: 发送消息(hwnd,msg,wparam,iparam)      英文函数原型: sendmessage(hwnd,msg,wparam,iparam) 参数: hwnd: 窗口句柄 值,可以通过,找到窗口.顶层窗口句柄,等获取句柄的函数得到msg:指定被发送的消息wparam:指定附加的消息特定信息. iparam:指定附加的消息特定信息.举

SendMessage发送自定义消息及消息响应(VC版)

控件向父窗体发送自定义消息,父窗体定义处理此消息的函数  程序源代码(整个工程)下载:http://download.csdn.net/detail/qq2399431200/6274793 效果描述: 指定哪个类添加自定义消息:(当然这个类必须是CmdTarget的子类,不然不能处理消息) 添加消息 实现消息函数:(wParam和lParam程序员可以自行设计传什么值) SendMessage参数解析(SendMessageA是单字节类型函数,SendMessageW是双字节) 1:接受此消息

Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转)

Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转) 用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是 回调函数.我的理解是这样的: 回 调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等等之类的.但是什么时候被调用却不知道 了.回调函数一般是按照调用者的要求定义好参数和返回值的类型,你向调用者提供你的回调函数的入口地址,然后调用者有什么事件发生的时候就可以随时按照你 提供的地址调用这个函数通知你,并按照预先规定好的形式传

获取窗口句柄

1.使用FindWindow函数获取窗口句柄 示例:使用FindWindow函数获取窗口句柄,然后获得窗口大小和标题,并且移动窗口到指定位置. [html] view plaincopy #include <Windows.h> #include <stdio.h> #include <string.h> #include <iostream.h> int main(int argc, char* argv[]) { //根据窗口名获取QQ游戏登录窗口句柄

窗口句柄浅析和获取窗口句柄的方法

句柄(HANDLE)是Windows程序中一个重要的概念,使用也非常频繁.在Windows程序中,有各种各样的资源(窗口.图标.光标等),系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄. 窗口句柄是windows句柄的一种,且是重要的一种句柄.在Windows应用程序中,窗口是通过窗口句柄(HWND)来标识的.我们要对某个窗口进行操作,首先就要得到这个窗口的句柄. 窗口句柄的概念比较抽象,简单说窗口句柄就是一个窗口(window)的代表.我们通过几个例子来认识它. 1.