首页 > 系统相关 >获取Windows窗口

获取Windows窗口

时间:2023-08-16 10:13:54浏览次数:42  
标签:pchar 窗口 Windows 获取 window return wchar NULL TRUE

抄自:  https://blog.csdn.net/freedom2211/article/details/131288406

windowIterator.h

class CWindowIterator
{

private:
static char* wchar2char(const wchar_t* wchar);
static BOOL CALLBACK EnumWindowsProc(HWND window, LPARAM lParam);

public:
using EnumCallback = std::function<void(std::string &str)>;

void EnumWindow(EnumCallback callback);

};
+================================

windowIterator.cpp


char* CWindowIterator::wchar2char(const wchar_t* wchar)
{
char* pchar;
int len = WideCharToMultiByte(CP_ACP, 0, wchar, wcslen(wchar), NULL, 0, NULL, NULL);
pchar = new char[len + 1];
WideCharToMultiByte(CP_ACP, 0, wchar, wcslen(wchar), pchar, len, NULL, NULL);
pchar[len] = '\0';
return pchar;
}

BOOL CALLBACK CWindowIterator::EnumWindowsProc(HWND window, LPARAM lParam)
{
if (!IsWindow(window))
return TRUE;

if (!IsWindowVisible(window))
return TRUE;

DWORD flag = 0;
DwmGetWindowAttribute(window, DWMWA_CLOAKED, &flag, sizeof(flag));
if (flag)
return TRUE;

UINT wnd_style_ex = GetWindowLong(window, GWL_EXSTYLE);
if ((WS_EX_TOOLWINDOW & wnd_style_ex) == WS_EX_TOOLWINDOW)
return TRUE;

TCHAR szTitle[MAX_PATH] = { 0 };
::GetWindowText(window, szTitle, MAX_PATH); // 获取标题
if (wcslen(szTitle) == 0)
return TRUE;

std::string str = wchar2char(szTitle);
if (lParam) {
EnumCallback* cb = reinterpret_cast<EnumCallback*>(lParam);
(*cb)(str);
}

return TRUE;
}

void CWindowIterator::EnumWindow(EnumCallback callback)
{
::EnumWindows(EnumWindowsProc, (LPARAM)&callback);
}

 

==========================

windowIteratorTest.cpp

#include <iostream>
#include "windowIterator.h"

int main()
{
CWindowIterator wi;
wi.EnumWindow([](std::string &str) {
std::cout << str << std::endl;
});
return 0;
}

 

标签:pchar,窗口,Windows,获取,window,return,wchar,NULL,TRUE
From: https://www.cnblogs.com/yyybill/p/17633225.html

相关文章

  • 代码随想录算法训练营第十三天|单调数列:滑动窗口最大值(力扣239.)、优先级队列:前k个高
    单调数列:滑动窗口最大值(力扣239.)给定滑动窗口的范围,求每个滑动窗口范围内的最大值使用单调队列实现对于最大值数字前面的数字不存入数列,对于最大值数字后面的数字存入数列中单调队列中数字的大小呈递减顺序pop(value):如果窗口移除的元素等于单调队列的队口元素,则pop;否则什......
  • Learn Git in 30 days——第 02 天:在 Windows 平台必装的三套 Git 工具
    写的非常好的一个Git系列文章,强烈推荐原文链接:https://github.com/doggy8088/Learn-Git-in-30-days/tree/master/zh-cn要开始使用Git版本控制,首先要安装适当的Git工具,这个系列的文章主要还是以Windows平台为主,这篇文章将会介绍三套我们最常用的Git版控工具,并介绍这几......
  • nvm及nodejs安装和使用(Windows下切换多版本nodejs)
    一、安装nvmnvm是一个简单的bash脚本,它是用来管理系统中多个已存的Node.js版本注:如果在安装nvm前已经安装了node,建议先将原来的node进行卸载或删除,可通过wherenode查看node安装路径:1、下载并安装nvm,下载地址:https://github.com/coreybutler/nvm-windows/releases,下载.zip后缀......
  • uniapp,微信小程序获取用户手机号
    1.获取手机号的按钮<buttonv-if="!mobile"class="btns"style="margin-top:-100rpx;"open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">授权手机号码</button>2.获取手机号的函数getPhoneNumber()getPhoneNu......
  • vue 获取设备指纹
    import Fingerprint2 from 'fingerprintjs2'//async异步请求asyncgetFingerprint(){returnnewPromise((resolve,reject)=>{Fingerprint2.getV18({},(result,components)=>{resolve(result)})})}......
  • 8-15| _ctypes.COMError: (-2147352567, '发生意外。', ('无法获取 Document 对象', '
    此错误是一个COM错误,它与试图从Python通过`pyautocad`与AutoCAD通信时出现的问题有关。错误信息"无法获取Document对象"指示了问题的本质,即Python无法访问AutoCAD的当前文档。这里有一些建议来解决这个问题:1.**确保AutoCAD已经运行**:在尝试从Python访问Aut......
  • 在Windows Server 2008上启用自动文件夹备份
    要在WindowsServer2008上启用自动文件夹备份,您可以使用内置的Windows备份功能。下面是如何设置它的方法:1.点击“开始”按钮并选择“服务器管理器”,打开“服务器管理器”。2.在“服务器管理器”窗口中,单击左侧窗格中的“功能”。3.在右侧的功能面板中点击[添加功能]。4......
  • ServiceLocatorFactoryBean获取Bean方法
    对于不同输入需要调用不同实现类,可以考虑使用ServiceLocatorFactoryBean定义一个interface代理接口(根据类型来判断选择哪一个实现)publicinterfaceBeanFactory{//type是具体Bean类型TestBeanFactoryget(Stringtype);}定义ServiceLocatorFactoryBean定位配置类@Con......
  • iOS 根据utsname获取的Identifier获取设备名称
    在线jsonhttps://api.ipsw.me/v4/devices获取设备名称+(NSString*)getDeviceName{staticNSString*_deviceName;if(_deviceName){return_deviceName;}structutsnamesystemInfo;uname(&systemInfo);//获取设备标识Identifier......
  • 使用 OpenSSL 解密 DBeaver 保存的数据库连接信息获取数据库连接密码
    你是不是使用任何软件时都喜欢记住密码?是的,我也喜欢。但如果有一天你想把密码分享给其他人,而你又不记得密码是什么了,没错你可以去查看已保存的密码,但是当你使用的是DBeaver时,不好意思,没有查看已保存的密码功能,这个时候不就尴尬了嘛。那么现在你也许不再需要因此而烦恼了,因为......