当前位置: 首页 > news >正文

Python爬取wordpress绵阳优化网站排名

Python爬取wordpress,绵阳优化网站排名,广东大唐建设网站,成都住建局官网怎么查询楼盘剩余房在 macOS 下获取可屏幕共享的窗口和屏幕 在 macOS 下#xff0c;我们可以通过使用 Core Graphics 和 Cocoa 框架来获取当前系统中可屏幕共享的窗口和屏幕信息。本文将详细介绍如何获取窗口和屏幕的 ID、标题、坐标、进程图标和缩略图等信息。 前提条件 在开始之前#xff…在 macOS 下获取可屏幕共享的窗口和屏幕 在 macOS 下我们可以通过使用 Core Graphics 和 Cocoa 框架来获取当前系统中可屏幕共享的窗口和屏幕信息。本文将详细介绍如何获取窗口和屏幕的 ID、标题、坐标、进程图标和缩略图等信息。 前提条件 在开始之前请确保您的开发环境满足以下条件 macOS 系统安装了 Xcode 或其他支持 Objective-C 开发的编译器 步骤 1. 包含必要的头文件 首先包含必要的头文件 #include base/devices/screen/enumerator.h #include base/devices/screen/darwin/desktop_configuration.h #include base/devices/screen/desktop_geometry.h #include base/devices/screen/utils.h #include base/folder/folder.h #include base/log/logger.h#include vector #include functional #include stdlib.h #include string.h#import Cocoa/Cocoa.h #import Foundation/Foundation.h2. 获取窗口信息 我们可以使用 CGWindowListCopyWindowInfo 函数获取当前系统中的窗口信息。以下是获取窗口信息的函数 int enum_windows(const traa_size icon_size, const traa_size thumbnail_size,const unsigned int external_flags, std::vectortraa_screen_source_info infos) {CFArrayRef window_array CGWindowListCopyWindowInfo(kCGWindowListOptionAll | kCGWindowListExcludeDesktopElements, kCGNullWindowID);if (!window_array)return false;MacDesktopConfiguration desktop_config MacDesktopConfiguration::GetCurrent(MacDesktopConfiguration::TopLeftOrigin);CFIndex count CFArrayGetCount(window_array);for (CFIndex i 0; i count; i) {CFDictionaryRef window reinterpret_castCFDictionaryRef(CFArrayGetValueAtIndex(window_array, i));if (!window) {continue;}CFNumberRef window_id reinterpret_castCFNumberRef(CFDictionaryGetValue(window, kCGWindowNumber));if (!window_id) {continue;}traa_screen_source_info window_info;window_info.is_window true;if (!CFNumberGetValue(window_id, kCFNumberSInt64Type, window_info.id) || window_info.id 0) {continue;}CFNumberRef window_layer reinterpret_castCFNumberRef(CFDictionaryGetValue(window, kCGWindowLayer));if (!window_layer) {continue;}int layer;if (!CFNumberGetValue(window_layer, kCFNumberIntType, layer)|| layer kCGNormalWindowLevel || layer kCGDockWindowLevel) {continue;}window_info.is_minimized !is_window_on_screen(window);window_info.is_maximized is_window_full_screen(desktop_config, window);if ((external_flags TRAA_SCREEN_SOURCE_FLAG_IGNORE_MINIMIZED) window_info.is_minimized) {continue;}CFNumberRef window_alpha reinterpret_castCFNumberRef(CFDictionaryGetValue(window, kCGWindowAlpha));if (!window_alpha) {continue;} else {int alpha;if (!CFNumberGetValue(window_alpha, kCFNumberIntType, alpha) || alpha 0) {continue;}}CFNumberRef window_sharing_state reinterpret_castCFNumberRef(CFDictionaryGetValue(window, kCGWindowSharingState));if (!window_sharing_state) {continue;} else {int sharing_state;if (!CFNumberGetValue(window_sharing_state, kCFNumberIntType, sharing_state) ||sharing_state ! 1) {continue;}}CFNumberRef window_pid reinterpret_castCFNumberRef(CFDictionaryGetValue(window, kCGWindowOwnerPID));if (!window_pid) {continue;}std::string str_title get_window_title(window);std::string str_owner_name get_window_owner_name(window);if (str_title.empty() str_owner_name.empty() !(external_flags TRAA_SCREEN_SOURCE_FLAG_NOT_IGNORE_UNTITLED)) {continue;}if (str_title.empty()) {str_title std::move(str_owner_name);}if (!str_title.empty()) {strncpy(const_castchar *(window_info.title), str_title.c_str(),std::min(sizeof(window_info.title) - 1, str_title.size()));}CGRect window_bounds CGRectZero;if (CFDictionaryContainsKey(window, kCGWindowBounds)) {CFDictionaryRef rect (CFDictionaryRef)CFDictionaryGetValue(window, kCGWindowBounds);if (rect) {CGRectMakeWithDictionaryRepresentation(rect, window_bounds);}}if (window_bounds.size.width 96 || window_bounds.size.height 96) {continue;}window_info.rect desktop_rect::make_xywh(window_bounds.origin.x, window_bounds.origin.y,window_bounds.size.width, window_bounds.size.height).to_traa_rect();NSRunningApplication *running_app [NSRunningApplicationrunningApplicationWithProcessIdentifier:((__bridge NSNumber *)window_pid).intValue];if (running_app) {std::string process_path [[running_app bundleURL] fileSystemRepresentation];if (!process_path.empty()) {strncpy(const_castchar *(window_info.process_path), process_path.c_str(),std::min(sizeof(window_info.process_path) - 1, process_path.size()));} else if (external_flags TRAA_SCREEN_SOURCE_FLAG_IGNORE_NOPROCESS_PATH) {continue;}if (icon_size.width 0 icon_size.height 0 running_app.icon running_app.icon.representations.count 0) {NSImage *icon running_app.icon;NSBitmapImageRep *icon_rep [[NSBitmapImageRep alloc] initWithData:[icon TIFFRepresentation]];if (icon_rep) {desktop_size icon_scaled_size calc_scaled_size(desktop_size(icon_rep.size.width, icon_rep.size.height), icon_size);CGSize icon_scaled_ns_size CGSizeMake(icon_scaled_size.width(), icon_scaled_size.height());NSBitmapImageRep *icon_scaled_image_rep scale_image(icon_rep, icon_scaled_ns_size);if (icon_scaled_image_rep) {size_t icon_data_size [icon_scaled_image_rep pixelsWide] *[icon_scaled_image_rep pixelsHigh] *[icon_scaled_image_rep samplesPerPixel] * sizeof(unsigned char);window_info.icon_data new uint8_t[icon_data_size];window_info.icon_size icon_scaled_size.to_traa_size();if (!window_info.icon_data) {LOG_ERROR(alloc memory for icon data failed);continue;}memcpy(const_castuint8_t *(window_info.icon_data), [icon_scaled_image_rep bitmapData],icon_data_size);}}}}NSBitmapImageRep *origin_image_rep get_image_rep(true, static_castCGWindowID(window_info.id));if (!origin_image_rep) {continue;}if (thumbnail_size.width 0 thumbnail_size.height 0) {NSImage *origin_image [NSImage new];[origin_image addRepresentation:origin_image_rep];if (origin_image.size.width 1 || origin_image.size.height 1) {continue;}desktop_size scaled_size calc_scaled_size(desktop_size(origin_image.size.width, origin_image.size.height), thumbnail_size);CGSize scaled_ns_size CGSizeMake(scaled_size.width(), scaled_size.height());NSBitmapImageRep *scaled_image_rep scale_image(origin_image_rep, scaled_ns_size);if (!scaled_image_rep) {continue;}size_t thumbnail_data_size [scaled_image_rep pixelsWide] * [scaled_image_rep pixelsHigh] *[scaled_image_rep samplesPerPixel] * sizeof(unsigned char);window_info.thumbnail_data new uint8_t[thumbnail_data_size];window_info.thumbnail_size scaled_size.to_traa_size();if (!window_info.thumbnail_data) {LOG_ERROR(alloc memory for thumbnail data failed);continue;}memcpy(const_castuint8_t *(window_info.thumbnail_data), [scaled_image_rep bitmapData],thumbnail_data_size);}infos.push_back(window_info);}CFRelease(window_array);return TRAA_ERROR_NONE; }3. 获取屏幕信息 我们可以使用 NSScreen 类获取当前系统中的屏幕信息。以下是获取屏幕信息的函数 int enum_screens(const traa_size icon_size, const traa_size thumbnail_size,const unsigned int external_flags, std::vectortraa_screen_source_info infos) {NSArray *screen_array NSScreen.screens;if (!screen_array) {return TRAA_ERROR_NONE;}for (size_t i 0; i screen_array.count; i) {NSScreen *screen screen_array[i];if (!screen) {continue;}CGDirectDisplayID screen_id static_castCGDirectDisplayID([[screen.deviceDescription objectForKey:NSScreenNumber] unsignedIntValue]);CGRect screen_bounds CGDisplayBounds(screen_id);NSBitmapImageRep *screen_image_rep get_image_rep(false, screen_id);if (!screen_image_rep) {continue;}traa_screen_source_info screen_info;screen_info.is_window false;screen_info.is_primary CGDisplayIsMain(screen_id);screen_info.id static_castint64_t(screen_id);snprintf(const_castchar *(screen_info.title), sizeof(screen_info.title), Display %d,static_castint(i));screen_info.rect desktop_rect::make_xywh(screen_bounds.origin.x, screen_bounds.origin.y,screen_bounds.size.width, screen_bounds.size.height).to_traa_rect();if (thumbnail_size.width 0 thumbnail_size.height 0) {NSImage *screen_image [NSImage new];[screen_image addRepresentation:screen_image_rep];desktop_size scaled_size calc_scaled_size(desktop_size(screen_image.size.width, screen_image.size.height), thumbnail_size);CGSize scaled_ns_size CGSizeMake(scaled_size.width(), scaled_size.height());NSBitmapImageRep *scaled_image_rep scale_image(screen_image_rep, scaled_ns_size);if (!scaled_image_rep) {continue;}size_t thumbnail_data_size [scaled_image_rep pixelsWide] * [scaled_image_rep pixelsHigh] *[scaled_image_rep samplesPerPixel] * sizeof(unsigned char);screen_info.thumbnail_data new uint8_t[thumbnail_data_size];screen_info.thumbnail_size scaled_size.to_traa_size();if (!screen_info.thumbnail_data) {LOG_ERROR(alloc memory for thumbnail data failed);continue;}memcpy(const_castuint8_t *(screen_info.thumbnail_data), [scaled_image_rep bitmapData],thumbnail_data_size);}infos.push_back(screen_info);}return TRAA_ERROR_NONE; }4. 枚举屏幕和窗口信息 最后我们可以通过调用 enum_windows 和 enum_screens 函数来枚举当前系统中的窗口和屏幕信息 int screen_source_info_enumerator::enum_screen_source_info(const traa_size icon_size,const traa_size thumbnail_size,const unsigned int external_flags,traa_screen_source_info **infos,int *count) {if (__builtin_available(macOS 11, *)) {if (!CGPreflightScreenCaptureAccess()) {CGRequestScreenCaptureAccess();return TRAA_ERROR_PERMISSION_DENIED;}}std::vectortraa_screen_source_info sources;if (!(external_flags TRAA_SCREEN_SOURCE_FLAG_IGNORE_WINDOW)) {enum_windows(icon_size, thumbnail_size, external_flags, sources);}if (!(external_flags TRAA_SCREEN_SOURCE_FLAG_IGNORE_SCREEN)) {enum_screens(icon_size, thumbnail_size, external_flags, sources);}if (sources.size() 0) {return traa_error::TRAA_ERROR_NONE;}*count static_castint(sources.size());*infos reinterpret_casttraa_screen_source_info *(new traa_screen_source_info[sources.size()]);if (*infos nullptr) {LOG_ERROR(alloca memroy for infos failed);return traa_error::TRAA_ERROR_OUT_OF_MEMORY;}for (size_t i 0; i sources.size(); i) {auto source_info sources[i];auto dest_info (*infos)[i];memcpy(dest_info, source_info, sizeof(traa_screen_source_info));if (std::strlen(source_info.title) 0) {strncpy(const_castchar *(dest_info.title), source_info.title,std::min(sizeof(dest_info.title) - 1, std::strlen(source_info.title)));}if (std::strlen(source_info.process_path) 0) {strncpy(const_castchar *(dest_info.process_path), source_info.process_path,std::min(sizeof(dest_info.process_path) - 1, std::strlen(source_info.process_path)));}}return TRAA_ERROR_NONE; }总结 通过上述步骤我们可以在 macOS 下获取当前系统中可屏幕共享的窗口和屏幕信息包括窗口和屏幕的 ID、标题、坐标、进程图标和缩略图等信息。希望这篇文章对您有所帮助。 源码传送 traa
http://www.hkea.cn/news/14492927/

相关文章:

  • 学网站开发c江苏中南建设集团网站是多少
  • 无锡公司网站建设电话装潢设计培训中心
  • 怎样给建设的网站提意见wordpress服务器版
  • iis 建设网站做土特产的网站有哪些
  • dw做网站首页沈阳三好街附近做网站
  • 网站建设 开发网站代码html网页模板代码下载
  • 免费上外国网站的浏览器外包公司好吗
  • wordpress网站显示不全网络推广方案模板
  • 国外建设网站用的是什么软件做网站红色和什么搭配好
  • 建设网站龙华建站平台 iis
  • 阿里云建站和华为云建站哪个好吉安购物网站制作
  • 网站建设推广员工资wordpress文章里面的菜单怎么添加
  • 邵阳网站网站建设用什么l软件做网站了
  • 淘宝店铺做网站收录微信运营商电话
  • 做资源网站wordpress的导航代码
  • 网站如何做银联在线支付信息系统项目管理高级
  • 杭州专业网站设计策划wordpress 响应式图片
  • 专做专业课视频的网站湖南省建设厅领导分工
  • 个人网站设计图片档案馆建设网站
  • wix网站建设html样式模板
  • 哪里有免费的网站模板下载软件wordpress category order 失效
  • asp.net实用网站开发doc郴州网站建设设计制作
  • 网站开发人员考核指标规范网络直播平台的可行性建议
  • 做网站需要用什么技术网站建设项目描述
  • 北京手机网站建设外包小程序招商
  • 利用cms怎么做网站拉丝机东莞网站建设
  • 外贸网站的推广方法网站的备案信息域名不一样
  • 有域名了怎么做网站有没有免费的商城小程序
  • 网站建设都需要什么工具英语教学网站建设意见
  • 天津建设企业网站企业网站被转做非法用途