还没解决?
你是拼写错误还是其它问题,一直说FromView,正确的应该是CFormView吧。
获取控件ID分两步,获取控件所在窗口指针(句柄),在窗口中获取控件。
你这个“复合”的概念还是再明确一下吧,如何“复合”的。
正常来讲,MFC下有标准的拆分窗口模式,这种模式下是在框架窗口的OnCreate中,通过CSplitterWnd实现的。如果你是这种模式,那么贴一下框架窗口OnCreate的完整代码上来。如果不是,详细说明“复合”的模式。
拆分窗口,获取另一个视图不难,如果是SDI单文档,那么直接这样:
CMainFrame pf = (CMainFrame )AfxGetMainWnd();//GetParent也可以CxxxView pView = (CxxxView )pf->m_wndSplitter1->GetPane(1,0);//第二个,也就是右侧的视图
第一个问题:
方法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将数据读出来显示到接收的窗口中,在另一个窗口中改变这个全局变量,这种方式最简单快捷
调用EnumWindows(EnumWindowsProc,0);
自己定义
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
){
DWORD PID;
BOOL Result=TRUE;
GetWindowThreadProcessId(hwnd,PID);
if (PID=GetCurrentProcessId())
{
g_hwin = hwnd;//这个g_hwin在你的DLL里定义为一个全局的HWND,也是你想要的句柄
Result = FALSE;
}
return Result;
}
lz可以试试当然如果知道被注入的进程的窗口名称就不用enumwindow了,直接用FindWindow(NULL, _T("XXXXXX"))的返回值得一个hwnd,然后得到进程id,再判断
有效。
获得进程主窗口的方法:
EnumWindows:>
以上就是关于VC 如何获得WM_CHILD风格窗口 控件ID全部的内容,包括:VC 如何获得WM_CHILD风格窗口 控件ID、在线等答案,VC 获取一个窗口句柄、求VC高手 获取当前进程的主窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)