50分,如何获取桌面所有窗口的句柄

50分,如何获取桌面所有窗口的句柄,第1张

#include <Windowsh>

#include <vector>

using namespace std;

//用于EnumWindows的回调函数

BOOL CALLBACK EnumProc(HWND hwnd,LPARAM lparam)

{

vector<HWND> pvec = (vector<HWND>)lparam;

pvec->push_back(hwnd);

return TRUE;

}

void main()

{

vector<HWND> vec;

EnumWindows(EnumProc,(LPARAM)&vec);

}

这个是win32控制台程序项目里写的,如果要在MFC下的话,只需包含

#include <vector>并using namespace std;

EnumProc定义在前面,按钮响应函数里添加main函数里的那两句就可以了。

我这里测试获取到了407个句柄

用GetWindow

HWND GetWindow(

HWND hWnd, // handle to original window

UINT uCmd // relationship flag

);

第二个参数设为GW_CHILD

CWnd是MFC中的一个类,其中封装了HWND,而HWND是一个句柄,代表一个windows下的窗口,CWnd实例化就可以生成一个窗口,CWnd有个成员变量m_hWnd保存了这个窗口的句柄

GetWindow第一个参数就是父窗口句柄,可以从CWnd得到,如HWND hwnd=p->m_hWnd

GetDC()的返回值是CDC 也就是说是一个指向CDC类的指针 CDC类的对象它是MFC内部为我们动态构建的, 储存的地方也就是指针指向的地方, 但是具体是在代码的哪个部分生成的, 这点我们不得而知 不过需要注意的一件事情是, 用GetDC()获取的CDC对象, 必须用ReleaseDC()将其释放 如:ReleaseDC(GetDC());

至于获得CDC指针的用处有什么, 那么在这里是不可能一言而尽了 所以GUI函数都在它里面 因此只能是用到哪里, 学到哪里, 不可能全部学会

什么叫做“打开窗口”?

当你获取到一个有效的HWND,说明该窗口以存在,你可以通过SendMessage给窗口发送消息,也可以通过FromHandle获取窗口指针得到一个CWnd。

先在对应的源文件中包含Resourceh头文件,然后在按钮的点击事件处理程序中添加以下代码: CWnd pButton = GetDlgItem(IDC_BUTTON1); HWND hButton = pButton->m_hWnd;hButton就是按钮控件的句柄。将GetDlgItem的参数换成控件的ID,就可以获取不同控件的句柄。

下面是我自己整理的:

23如何访问MFC的指针,句柄

CWND都有指针和句柄

1利用FromHandle将句柄转换为指针返回

CBrush pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//获得特定画刷画笔字体和画板的句柄

2获取指针GetParent(),GetDesktopWindow

//app中存有其他3类的指针

3利用GetActiveView()等获得当前活动的指针

CMenu2View pView=(CMenu2View)GetActiveView();

// 包含View头文件

4平台SDK GetWindow(hwnd,uCmd)找窗口与之有关系的各个窗口句柄

5获得实例CWINAPP中有

theAppm_hInstance

AfxGetApp()->m_hInstance//全局函数获得实例

AfxGetInstanceHandle();//全局函数获得实例

6CWND::GetDescendantWindow(ID,false)

获取子孙窗口的指针

1、GetWindowLong是获得有关指定窗口的信息,这个信息包括窗口扩展风格、标识、父句柄、风格等;通过第二个参数在控制的

2、GWL_EXSTYLE

获得扩展窗口风格。

GWL_HINSTANCE

获得应用事例的句柄。

GWL_HWNDPARENT

如果父窗口存在,获得父窗口句柄。

GWL_ID

获得窗口标识。

GWL_STYLE

获得窗口风格。

GWL_USERDATA

获得与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序使用的32位值。

GWL_WNDPROC

获得窗口过程的地址,或代表窗口过程的地址的句柄。

同样SetWindowLong也需要通过参数设定不同的信息;

以上就是关于50分,如何获取桌面所有窗口的句柄全部的内容,包括:50分,如何获取桌面所有窗口的句柄、如何获得子窗口、C++:CWnd下GetDC()函数,获取了什么存在哪里等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/9376556.html

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

发表评论

登录后才能评论

评论列表(0条)

保存