在线等答案,VC 获取一个窗口句柄

来源:百度知道 编辑:UC知道 时间:2024/05/07 05:23:00
1 获取一个窗口的句柄除了FindWindow(NULL,"窗口标题")以外,可以通过哪些函数,是否可以通过窗口的标识ID来获取呢?请给出相关函数,谢谢。

2 另外同一程序中的不同窗口进行通信用什么方式比较好,特别是那种大量的数据通信,用什么方式比较安全,快捷,不占太大资源。请给出方法。

第一个问题:
方法1:
HWND hwnd=::FindWindow(0,"ddd"); //假设你要找的窗口标题为“ddd”,注意:此处为Caption的值
CWnd::FromHandle(hwnd)->SetForegroundWindow();
::PostMessage(hwnd,WM_KEYDOWN, VK_ESCAPE, 0L); //发送ESC按下的键盘消息

方法2:这里以向记事本程序发送Ctrl+s按键消息为例:
CWnd *pWnd = FindWindow("FSOnline Class", NULL);//注意:此处为Class的值
if (pWnd->GetSafeHwnd())
{
pWnd->ShowWindow(SW_NORMAL);
pWnd->SetForegroundWindow();
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event('S', 0, 0, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
keybd_event('S', 0, KEYEVENTF_KEYUP, 0);
}
第二个问题:
最好用全局变量,在接受的窗口设置一个定时器例如100ms将数据读出来显示到接收的窗口中,在另一个窗口中改变这个全局变量,这种方式最简单快捷

1.WindowFromPoint()之类。。。
什么叫标识ID?

2.SendMessage(),
或者直接在相应的窗口类中加个函数,在另一个里面调用。这样只要存接收窗口的this 指针。
或者FileMapping用内存文件。
或者NamePipe命名管道
等等等等。。方案很多。