VCMFC编程各种窗口句柄获取函数详解

合集下载

vcmfc编程各种窗口句柄获取函数详解

vcmfc编程各种窗口句柄获取函数详解

AfxGetMainWndAfxGetMainWnd获取自身窗口句柄HWND hWnd = AfxGetMainWnd()->m_hWnd;GetT opWindow函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。

函数原型:HWND GetT opWindow(HWND hWnd);参数:hWnd:被查序的父窗口的句柄。

如果该参数为NULL,函数返回Z序顶部的窗口句柄。

返回值:如果函数成功,返回值为在Z序顶部的子窗口句柄。

如果指定的窗口无子窗口,返回值为NULL。

GetForegroundWindow函数功能:该函数返回当前系统的前台窗口的窗口句柄。

函数原型:HWND GetForegroundWindow(VOID)返回值:函数返回前台窗回的句柄。

GetActiveWindow函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。

函数原型:HWND GetActiveWindow(VOID)返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。

否则,返回值为NULL。

GetSafeHwnd函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(H WND)时,最安全的方法是使用GetSafeHwnd()函数。

通过下面的例子来看其理由:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器HWND hwnd = pwnd->m_hwnd; //得到它的H WND这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULLIsWindowVisible函数功能:该函数获得给定窗口的可视状态。

mfc函数详解

mfc函数详解

mfc函数详解MFC(Microsoft Foundation Class)是一种面向对象的Windows应用程序框架,它是微软公司在Windows操作系统下的视窗类库,是Visual C++的一些类和函数的集合。

MFC的作用是提供一种高级的、面向对象的编程结构,让程序员更加容易地开发Windows应用程序。

下面是一些常用的MFC函数及其详解:1. AfxMessageBox函数原型:int AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0);函数作用:显示一个消息框,包含文本、标题和按钮。

参数解释:lpszText:要显示的消息文本。

nType:消息框类型,包括按钮以及图标等样式。

nIDHelp:帮助ID,用于消息框的帮助文件。

返回值:用户选择的按钮行为,如“取消”、“确定”等。

2. AfxGetMainWnd函数原型:CWnd* AfxGetMainWnd( );函数作用:获取当前线程的主窗口对象指针。

参数解释:无。

返回值:当前线程的主窗口对象指针。

3. CString.Format函数原型:int Format(LPCTSTR lpszFormat, ...);函数作用:根据格式控制符格式化字符串。

参数解释:lpszFormat:格式化字符串,格式控制符用“%”标识。

...:格式控制符中各个参数的值。

返回值:格式化后的字符串长度。

4. CListBox.SetCurSel函数原型:int SetCurSel(int nIndex);函数作用:设置列表框中当前选定项的索引。

参数解释:nIndex:要选定项的索引,从0开始。

返回值:如果设置成功,则返回新选定项的索引;否则,返回LB_ERR。

5. CEdit.SetWindowText函数原型:void SetWindowText(LPCTSTR lpszString); 函数作用:设置编辑框的文本内容。

如何获得窗口句柄(hwnd)和改变窗口属性

如何获得窗口句柄(hwnd)和改变窗口属性

1、对于一个窗口如何进行操作呢,首先要得到其使用句柄,我们可以用FindWindow()函数来获取当前窗口句柄,具体使用如下:HWND hFig = ::FindWindow(NULL,HWND);如果得到找到,则返回窗口的句柄,否则返回NULL。

当然我们可以使用SetWindowPos(HWND hWnd, HWND hWndIsertAfter, int X, int Y, int cx, int cy , UINT Uflags) 改变窗口的大小和位置,Uflags是标志窗口的显示属性,具体值可以是SWP_NOMOVE 、SWP_NOZORDER 、SWP_N OACTIVATE 、SWP_FRAMECHANGED等。

具体的调用实例如下:HWND hFig = ::FindWindow(NULL,"Fig No. 1"); //找到窗口,并返回窗口句柄if(hFig == NULL) {AfxMessageBox("未能产生Figure窗口,图形绘制失败!");return;} // 获取绘图区域的位置和大小RECT PlotRec;CWnd *PlotArea = GetDlgItem(IDC_PLOTAREA); // 获取绘图区域指针PlotArea->GetWindowRect(&PlotRec); // 将绘图区域矩形赋给定义矩形long Width = PlotRec.right - PlotRec.left; long Height = PlotRec.bottom - PlotRec.to p; // 获得绘图区域的宽和高// 设置Figure窗口为绘图区域窗口的子窗口并调整其位置::SetParent(hFig,PlotArea->GetSafeHwnd()); // 设置绘图区域窗口为Figure窗口的父窗口::SetWindowPos(hFig,NULL,1,1,Width,Height,SWP_NOZORDER | SWP_NOACTIVATE); // 设置绘图窗口的大小和位置// 设置窗口可见SetVisible(h_a,mwArray("ON"));// 进入窗口等待状态bWait = 1; mlfHGWaitForFiguresToDie();2、当然你想改变窗口属性的话,还可以增加以下函数来改变窗口的属性long lStyle. = ::GetWindowLong(hFig,GWL_STYLE);::SetWindowLong(hFig,GWL_STYLE,lStyle. & (~WS_CAPTION) & (~WS_THICKFRAM E));::SetWindowPos(hFig,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTI VATE | SWP_FRAMECHANGED);就写到这吧,其他的学会了再统一以一个实例的形式给出。

mfc 句柄的概念

mfc 句柄的概念

mfc 句柄的概念摘要:一、MFC 句柄的概念引入二、MFC 句柄的定义与作用1.定义2.作用三、MFC 句柄与Windows 句柄的关系四、MFC 句柄的常见类型1.窗口句柄2.菜单句柄3.控件句柄五、MFC 句柄的操作与应用1.获取句柄2.释放句柄3.使用句柄进行消息传递六、MFC 句柄在编程中的应用实例1.创建窗口2.处理用户输入3.更新界面显示正文:MFC(Microsoft Foundation Class)是微软提供的一套C++类库,用于简化Windows 应用程序的开发。

在MFC 中,句柄(Handle)是一个非常重要的概念,它贯穿于整个编程过程。

本篇文章将详细介绍MFC 句柄的概念、定义与作用,以及如何在编程中应用句柄。

首先,我们需要了解MFC 句柄的概念。

在MFC 中,句柄是一个指向对象或资源的非负整数。

它用于标识和操作Windows 中的各种资源,如窗口、菜单和控件等。

通过句柄,我们可以在程序中方便地访问和操作这些资源。

MFC 句柄的定义与作用可以从以下两点来理解:1.定义:MFC 句柄是一个非负整数,用于标识和操作Windows 中的资源。

2.作用:通过句柄,我们可以在程序中方便地访问和操作资源,实现消息传递、用户输入处理和界面更新等功能。

接下来,我们来看一下MFC 句柄与Windows 句柄的关系。

实际上,MFC 句柄是Windows 句柄的一种封装。

在MFC 中,我们通常使用MFC 类来创建和操作资源,而MFC 类会自动为我们生成对应的Windows 句柄。

这样,我们无需直接操作Windows API,就可以方便地使用句柄进行编程。

当然,在某些情况下,我们也可以直接使用Windows API 函数来操作句柄。

MFC 句柄的常见类型包括窗口句柄、菜单句柄和控件句柄。

这些句柄分别用于操作窗口、菜单和控件等资源。

在编程过程中,我们需要根据实际需求来选择合适的句柄类型,并进行相应的操作。

vc获取窗体句柄gethandle

vc获取窗体句柄gethandle

vc获得窗口句柄2008-01-1823:111.HWND FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName)HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpClassName,LPCTSTR lpWindowName)2.HWND WindowFromPoint(POINT&Point)3.4组语句BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)BOOL CALLBACK EnumChildWindows(HWND hWndParent,WNDENUMPROC lpEnumFunc,LPARAM lParam)BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam) BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)一般用途:对于第一种,大家都很熟悉,是捕捉句柄的常规武器,FindWindow这两兄弟,可以接受捕捉对象的类名或者窗口标题之一,作为参数,返回一个HWND。

可是对于一般群众,不一定知道所有的窗口(包括标题栏、按钮等等)的类名啊!——可以简单举例,请问你知道桌面图标的窗口的类名吗?而对于窗口标题,有可能会出现相同的标题,有两个窗口——指一个程序的两个进程,这又是个麻烦吧!好了,这个问题先放放,继续下一组。

第二组,通过win32定义的POINT结构(typedef struct tagPOINT{LONG x,LONG y;} POINT),来获得当前鼠标光标位置的窗口HWND,这是最直观的武器!常规操作如下:先得到Cursor的POINT(BOOL GetCursorPos(LPPOINT)函数),再用WindowFromPoint。

如何获得窗口句柄和改变窗口属性

如何获得窗口句柄和改变窗口属性

如何获得窗口句柄和改变窗口属性要获得窗口句柄(HWND),可以使用WinAPI中的FindWindow函数或FindWindowEx函数。

1. 使用FindWindow函数:```HWND hWnd = FindWindow(NULL, L"窗口标题");```这个函数会在当前活动的桌面窗口中查找指定标题的窗口,并返回窗口句柄。

2. 使用FindWindowEx函数:```HWND hParent = FindWindow(NULL, L"父窗口标题");HWND hWnd = FindWindowEx(hParent, NULL, NULL, L"子窗口标题");```这个函数会在指定父窗口中查找指定标题的子窗口,并返回子窗口句柄。

要改变窗口属性,可以使用WinAPI中的SetWindowLong函数或SetWindowPos函数。

1. 使用SetWindowLong函数:```LONG_PTR dwStyle = GetWindowLongPtr(hWnd, GWL_STYLE);dwStyle &= ~WS_CAPTION; // 移除标题栏SetWindowLongPtr(hWnd, GWL_STYLE, dwStyle);SetWindowPos(hWnd, NULL, x, y, width, height,SWP_FRAMECHANGED); // 重新绘制窗口```这个函数可以改变窗口的样式,如移除标题栏、调整窗口大小等。

2. 使用SetWindowPos函数:```SetWindowPos(hWnd, NULL, x, y, width, height,SWP_FRAMECHANGED);```这个函数可以重新设置窗口的位置、大小,并且可以实时更新窗口的样式。

需要注意的是,对于不属于当前进程创建的窗口,可能需要通过其他技术手段获取窗口句柄并改变属性,如使用钩子函数或其他进程间通信的方式。

MFC的窗口句柄

MFC的窗口句柄

MFC的窗⼝句柄1.窗⼝、控件的指针和句柄的相互转化1)指针转化为句柄在MFC应⽤程序中⾸先要获得窗⼝的指针,然后将其转化为句柄 CWnd* pWnd; HANDLE hWnd = pWnd->GetSafeHwnd();2)句柄转化为指针在MFC应⽤程序中⾸先获得对话框控件的句柄,然后获得其指针HANDLE hWnd;GetDlgItem(IDC_xxx,&hWnd);CWnd * pWnd = FromHandle(hWnd);获得程序窗⼝指针的办法:a.获得主框架窗⼝指针(任何时候都可以⽤,只要是MFC程序中):CWnd* pWnd = AfxGetMainWnd();b.获得对话框中控件指针:CWnd* pWnd = GetDlgItem(IDC_xxx);c.获得对话框中某控件的句柄:HANDLE GetDlgItem(m_hDLG,m_nID_DlgItem);d.获得GDI对象的句柄:HANDLE m_hGDIObj = m_pGDIObj->GetSafeHanle();2. 如何获取应⽤程序的实例句柄?AfxGetInstanceHandle()应⽤程序的实例句柄保存在CWinAppIm_hInstance 中,可以这么调⽤ AfxGetInstancdHandle获得句柄;Example: HANDLE hInstance=AfxGetInstanceHandle();3. 如何通过代码获得应⽤程序主窗⼝的指针?AfxGetMainWnd GetSafeHwnd() AfxGetAppName() AfxGetThread主窗⼝的指针保存在CWinThread::m_pMainWnd中,调⽤ AfxGetMainWnd实现。

【例】 AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最⼤化.【例】此例的主窗⼝是对话框,下⾯的代码是在另外⼀个CFileTreeCtrl 类(⼦窗)中相关函数实现在主对话框(主窗)中的⼏个静态⽂本框(⼦窗)中显⽰路径:CWnd* m_pCWnd= AfxGetMainWnd(); //得到主窗⼝指针,通过主窗指针访问其他⼦窗资源//⽅法⼀m_pCWnd->SetDlgItemText(IDC_STATIC_path,"CWnd* "+m_sCurPath); //在主窗中的⼦窗(ID:IDC_STATIC_path)中显⽰字符串m_pCWnd->SetDlgItemText(IDC_STATIC_who,"路径显⽰由FileTreeCtrl类完成:");//⽅法⼆m_pCWnd->SendMessage(STN_CLICKED); //向主窗⼝发送⼀个消息,显⽰任务由主窗完成。

如何通过句柄获取外部程序的窗口的内容

如何通过句柄获取外部程序的窗口的内容

如何通过句柄获取外部程序的窗口的内容要通过句柄获取外部程序的窗口内容,可以使用Windows API函数来实现。

具体步骤如下:
1. 使用Windows API函数`FindWindow`或`FindWindowEx`来查找目标窗口的句柄。

`FindWindow`可以根据窗口类名或窗口标题查找句柄,`FindWindowEx`可以根据父窗口句柄和窗口类名查找句柄。

如果获取到了目标窗口的句柄,继续下一步;否则,表示未找到目标窗口。

2. 使用Windows API函数`GetWindowTextLength`和
`GetWindowText`来获取目标窗口的文本内容。

`GetWindowTextLength`用于获取文本内容的长度,`GetWindowText`用于获取实际文本内容。

可以先使用`GetWindowTextLength`来获取文本长度,然后创建一个对应长度的缓冲区,再使用`GetWindowText`来获取文本内容。

3. 可以使用其他Windows API函数来获取窗口的其他信息,如
`GetClassName`获取窗口的类名,`GetWindowRect`获取窗口的位置和大小等。

需要注意的是,使用Windows API函数需要导入`user32.dll`库,并且可以使用C++、C#、Python等编程语言进行开发。

使用不同编程语言,具体API函数的调用方式会有所差异。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AfxGetMainWnd
AfxGetMainWnd获取自身窗口句柄
HWND hWnd = AfxGetMainWnd()->m_hWnd;
GetTopWindow
函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。

函数原型:HWND GetTopWindow(HWND hWnd);
参数:
hWnd:被查序的父窗口的句柄。

如果该参数为NULL,函数返回Z序顶部的窗口句柄。

返回值:
如果函数成功,返回值为在Z序顶部的子窗口句柄。

如果指定的窗口无子窗口,返回值为NULL。

GetForegroundWindow
函数功能:该函数返回当前系统的前台窗口的窗口句柄。

函数原型:HWND GetForegroundWindow(VOID)
返回值:函数返回前台窗回的句柄。

GetActiveWindow
函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。

函数原型:HWND GetActiveWindow(VOID)
返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。

否则,返回值为NULL。

GetSafeHwnd
函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数。

通过下面的例子来看其理由:
CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
HWND hwnd = pwnd->m_hwnd; //得到它的HWND
这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND
就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL
IsWindowVisible
函数功能:该函数获得给定窗口的可视状态。

函数原型:BOOL IsWindowVisible(HWND hWnd);
参数;
hWnd:被测试窗口的句柄。

返回值:
如果指定的窗口及其父窗口具有WS_VISIBLE风格,返回值为非零;如果指定的窗口及其父窗口不具有WS_VISIBLE风格,返回值为零。

由于返回值表明了窗口是否具有Ws_VISIBLE风格,因此,即使该窗口被其他窗口遮盖,函数返回值也为非零。

备注:
窗口的可视状态由WS_VISIBLE位指示。

当设置了WS_VISIBLE位,窗口就可显示,而且只要窗口具有WS_VISIBLE风格,任何画在窗口的信息都将被显示。

IsWindow
函数功能:该函数确定给定的窗口句柄是否标示一个已存在的窗口。

函数原型:BOOL IsWindow(HWND hWnd);
参数:
hWnd:被测试窗口的句柄。

返回值:
如果窗口句柄标识了一个已存在的窗口,返回值为TURE;如果窗口句柄未标识一个已存在窗口,返回值为FALSE。

FindWindow
HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName );
参数:
lpClassName
指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。

如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。

这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。

lpWindowName
指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。

如果此参数为NULL,则匹配所有窗口名。

返回值:
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。

如果函数执行失败,则返回值为 NULL 。

可以通过调用GetLastError函数获得更加详细的错误信息。

SetWindowText:
至于窗口标题的改变,我们可以通过SetWindowText来实现
注:如果窗口本身属性是不显示标题的,这个函数的调用不会影响窗口属性。

//Set title for applica tion’s main frame window .
AfxGetMainWnd ( ) —> SetWindowText (_T("Application title") )
//Set title for View’s MDI child frame window .
GetParentFrame ( ) —> SetWindowText ("_T ("MDI Child Frame new title") )
//Set title for dialog’s push button control.
GetDigitem (IDC_BUTTON) —> SetWindowText (_T ("Button new title ") )
其他:
1、直接得句柄
GetActiveWindow(); //得激活窗口句柄
GetForegroundWindows(); //的前台窗口句柄
AfxGetApp()->GetMainWnd()->GetSafeHwnd() //很常规的,涉及到很多方法
2、枚举型的
HWND GetWindow(HWND hWnd, UINT uCmd ); //要先有hWnd,然后指明uCmd 的关系
HWND FindWindowEx( HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass, L
PCTSTR zWindow);
//由类名和窗口标题得句柄,可能不只一个,所以不唯一确定
3、其他参数的句柄
进程ID:
MARK:由句柄得ID可以用GetWindowThreadProcessId()
而由ID的句柄只能枚举+比较了
历遍全部窗体,并取得他们对应的HWND进一步取得对应PID,符合已知PID的就是了,当然可能要判断一下窗体状态了,如果进程只有一个窗体那就不用了。

例:
如果要在列表框里显示所有的窗口
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
)
{
char lpWinTitle[256];
::GetWindowText(hwnd,lpWinTitle,256-1);
CString m_strTitle;
m_strTitle.Format("%s",lpWinTitle);
CListBox *p_l = (CListBox *)lParam;
if (!m_strTitle.IsEmpty())
{
p_l->AddString(lpWinTitle);
}
return TRUE;
}
调用EnumWindows(EnumWindowsProc, (LPARAM)GetDlgItem(IDC_LIST1));。

相关文档
最新文档