VC 如何获得WM_CHILD风格窗口 控件ID

VC 如何获得WM_CHILD风格窗口 控件ID,第1张

还没解决?

你是拼写错误还是其它问题,一直说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高手 获取当前进程的主窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9529932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存