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

基于windows系统使用Python对于pc当前的所有窗口的相关操作接口

对于windows系统的电脑使用Python可以对其当前的窗口进行宏观的查询等操作

派生博客1:python对pc的窗口进行操作(windows)

派生博客2python获取当前pc的分辨率(windows)

派生博客3使用uiautomation模块来对基于windows系统的pc中的前端界面进行自动化测试(查找控件,点击控件等)

相关接口说明

根据当前传进函数的窗口句柄获取此句柄对应的窗口信息(标题,class等)

# 直接获取当前pc最上面窗口的句柄
page_hwnd = win32gui.GetForegroundWindow()
# 根据窗口句柄获取此句柄对应的窗口的标题
title = win32gui.GetWindowText(hWnd)
# 根据窗口句柄获取此句柄对应的窗口的class名
title = win32gui.GetWindowText(hWnd)
# 根据窗口句柄获取窗口的坐标数值 得到的返回值为元组类型如(12,15,214,166),左上右下
left, top, right, down = win32gui.GetWindowRect(page_hwnd)# 获取子窗口的父窗口句柄
parent_handle = win32gui.GetParent(child_handle)

根据窗口的句柄值判断当前窗口是否是实体窗口(是的话返回1)
非显性窗口指的不是最小化隐藏的窗口,只要需要知道我们需要操作的窗口一般都是显性窗口就行了

import win32gui
# 根据窗口的句柄值判断当前窗口是否是实体窗口(个人认为显示窗口指的是实打实用户可见的窗口,一个窗口如果是显式窗口的话就算当前窗口在任务栏最小化也不会改变其窗口的显式特性)
# 非显性窗口指的不是最小化隐藏的窗口
print(win32gui.IsWindowVisible(page_hwnd))
print(win32gui.IsWindowVisible(66594))
# 返回值0/1

确定是否为鼠标和键盘输入启用了指定的窗口。窗口可用。

# 确定是否为鼠标和键盘输入启用了指定的窗口。窗口可用。
# 返回值:如果启用该窗口,则返回值不为零。如果窗口未启用,返回值为零。
# 备注:子窗口只有在启用和可见时才接收输入。
win32gui.IsWindowEnabled(hwnd)

根据进程id判断进程对应的名字

# python -m pip install psutil
import psutil
# 根据进程id判断进程对应的名字
psutil.Process(pid).name()# python -m pip install psutil
import psutil
import win32gui
import win32process
def activeWindowName():# 获取最上层窗口的句柄hwnd = win32gui.GetForegroundWindow()# 根据窗口句柄获取窗口对应的线程id和进程idtid, pid = win32process.GetWindowThreadProcessId(hwnd)# 根据进程id判断进程对应的名字return psutil.Process(pid).name()print(activeWindowName())
# pycharm64.exe

根据应用的窗口句柄获取对应应用的进程id

import win32process
# 根据应用的窗口句柄获取对应应用的线程id(我一般用这个用的很少)和进程id
# thread_id , process_id = win32process.GetWindowThreadProcessId(hwnd)

枚举当前windows电脑的所有窗口
win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWndList)
样例如下

import win32gui# 提前定义一个列表以便传递到win32gui.EnumWindows中保存数据
save_all_window_hwnd_list = []# win32gui.EnumWindows()第一个参数是一个函数地址,第二个参数一般是个列表或者字典这种科比那容器,以便每次往里面添加数据并保存
win32gui.EnumWindows(lambda hWnd, save_all_window_hwnd_list: save_all_window_hwnd_list.append(hWnd), save_all_window_hwnd_list)
# 枚举当前所有窗口的句柄,此接口的第一个参数传递一个有两个参数的函数的地址,第二个参数一般可以传递一个列表字典等容器
# 在每次枚举的时候会调用第一个参数的函数,然后将每次枚举出来的窗口的句柄传递给调用win32gui.EnumWindows函数时传递的第一个参数也就是那个函数,将调用win32gui.EnumWindows函数时传递的第二个参数也传递给那个函数# 电脑此前所有窗口的窗口句柄的列表
print(save_all_window_hwnd_list)# 便利窗口句柄列表,并且打印每个窗口句柄所对应的窗口标题
for one_hwnd in save_all_window_hwnd_list:print(win32gui.GetWindowText(one_hwnd))

通过应用的窗口句柄获取窗口从属的进程名有时候是当前窗口所在应用有时候是窗口从属应用的父应用

# python -m pip install wmi
import wmi
def get_app_name(hwnd):"""通过应用的窗口句柄获取窗口从属的进程名有时候是当前窗口所在应用有时候是窗口从属应用的父应用Get application filename given hwnd."""c = wmi.WMI()name = None_, pid = win32process.GetWindowThreadProcessId(hwnd)for p in c.query('SELECT Name FROM Win32_Process WHERE ProcessId = %s' % str(pid)):name = p.Namebreakreturn name

通过给定的应用窗口句柄获取此应用的启动文件路径

# python -m pip install wmi
import wmi
def get_app_path(app_page_hwnd):"""通过给定的应用窗口句柄获取此应用的启动文件路径Get application path given hwnd."""c = wmi.WMI()path = None_, pid = win32process.GetWindowThreadProcessId(app_page_hwnd)for p in c.query('SELECT ExecutablePath FROM Win32_Process WHERE ProcessId = %s' % str(pid)):path = p.ExecutablePathbreakreturn pathprint(get_app_path("本机电脑当前打开的pycharm页面hwnd"))# D:\Program Files\JetBrains\PyCharm Community Edition 2020.2.1\bin\pycharm64.exe

wmi模块拓展接口

查询当前运行的程序信息(可以指定具体进程名)

# 查询当前运行的程序信息(可以指定具体进程名)
# python -m pip install wmi
import wmi
c = wmi.WMI()
for process in c.Win32_Process():print(str(process))print("========================")for process in c.Win32_Process(name="calc.exe"):print(str(process))

用于获取CPU处理器信息对象,并存以列表形式

import wmiw = wmi.WMI()
cpu_list = w.Win32_Processor()for cpu in cpu_list:print(cpu)'''
instance of Win32_Processor
{AddressWidth = 64;Architecture = 9;Availability = 3;Caption = "Intel64 Family 6 Model 69 Stepping 1";CpuStatus = 1;CreationClassName = "Win32_Processor";CurrentClockSpeed = 1587;CurrentVoltage = 7;DataWidth = 64;Description = "Intel64 Family 6 Model 69 Stepping 1";DeviceID = "CPU0";ExtClock = 100;Family = 205;L2CacheSize = 256;L3CacheSize = 3072;L3CacheSpeed = 0;Level = 6;LoadPercentage = 32;Manufacturer = "GenuineIntel";MaxClockSpeed = 2301;Name = "Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz";NumberOfCores = 2;NumberOfLogicalProcessors = 4;PowerManagementSupported = FALSE;ProcessorId = "BFEBFBFF00040651";ProcessorType = 3;Revision = 17665;Role = "CPU";SocketDesignation = "CPU Socket - U3E1";Status = "OK";StatusInfo = 3;SystemCreationClassName = "Win32_ComputerSystem";SystemName = "QH-20181120YSCF";UpgradeMethod = 33;Version = "";
};
'''

获取当前pc的cpu的型号和cpu的核心数

# 获取当前pc的cpu的型号和cpu的核心数
# cpu.Name 是cpu的型号
# cpu.NumberOfCores  是cpu的核心数# python -m pip install wmi
import wmi
w = wmi.WMI()
cpu_list = w.Win32_Processor()
for cpu in cpu_list:print("cpu核心数",cpu.NumberOfCores)print("cpu型号",cpu.Name)# cpu核心数 4
# cpu型号 Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz

统计cpu个数

# 统计cpu个数
# python -m pip install wmi
import wmi
w = wmi.WMI()
cpu_list = w.Win32_Processor()
print(len(cpu_list))# 1

获取一些电脑信息1

import wmiw = wmi.WMI()
obj = w.Win32_ComputerSystem()[0]print(obj)'''
instance of Win32_ComputerSystem
{AdminPasswordStatus = 3;AutomaticManagedPagefile = TRUE;AutomaticResetBootOption = TRUE;AutomaticResetCapability = TRUE;BootOptionOnLimit = 3;BootOptionOnWatchDog = 3;BootROMSupported = TRUE;BootupState = "Normal boot";Caption = "QH-20181120YSCF";ChassisBootupState = 3;CreationClassName = "Win32_ComputerSystem";CurrentTimeZone = 480;Description = "AT/AT COMPATIBLE";DNSHostName = "QH-20181120YSCF";Domain = "WORKGROUP";DomainRole = 0;EnableDaylightSavingsTime = TRUE;FrontPanelResetStatus = 3;InfraredSupported = FALSE;KeyboardPasswordStatus = 3;Manufacturer = "Dell Inc.";Model = "Inspiron 5439";Name = "QH-20181120YSCF";NetworkServerModeEnabled = TRUE;NumberOfLogicalProcessors = 4;NumberOfProcessors = 1;OEMStringArray = {"Dell System", "1[0638]", "3[1.3]", "4[0001]", "6[D0, D4, D8, DA, DE]", "10[A04]", "8[]", "9[]", "10[XXX]", "13[PP36S]", "14[3]", "15[9]", "16[]"};PartOfDomain = FALSE;PauseAfterReset = "3932100000";PCSystemType = 2;PowerOnPasswordStatus = 3;PowerState = 0;PowerSupplyState = 3;PrimaryOwnerName = "PC";ResetCapability = 1;ResetCount = -1;ResetLimit = -1;Roles = {"LM_Workstation", "LM_Server", "NT", "Potential_Browser"};Status = "OK";SystemType = "x64-based PC";ThermalState = 3;TotalPhysicalMemory = "4198264832";UserName = "QH-20181120YSCF\\Administrator";WakeUpType = 6;Workgroup = "WORKGROUP";
};
'''

查询当前机器型号和制造商

# 查询机器型号和制造商
# python -m pip install wmi
import wmi
w = wmi.WMI()
obj = w.Win32_ComputerSystem()[0]print("机器型号",obj.model)
print("制造商",obj.Manufacturer)# 机器型号 Inspiron 7559
# 制造商 Dell Inc.

获取一些电脑信息2

import wmiw = wmi.WMI()
obj = w.Win32_ComputerSystem()[0]
print(obj)'''
instance of Win32_OperatingSystem
{BootDevice = "\\Device\\HarddiskVolume1";BuildNumber = "7601";BuildType = "Multiprocessor Free";Caption = "Microsoft Windows 7 旗舰版 ";CodeSet = "936";CountryCode = "86";CreationClassName = "Win32_OperatingSystem";CSCreationClassName = "Win32_ComputerSystem";CSDVersion = "Service Pack 1";CSName = "QH-20181120YSCF";CurrentTimeZone = 480;DataExecutionPrevention_32BitApplications = TRUE;DataExecutionPrevention_Available = TRUE;DataExecutionPrevention_Drivers = TRUE;DataExecutionPrevention_SupportPolicy = 2;Debug = FALSE;Description = "";Distributed = FALSE;EncryptionLevel = 256;ForegroundApplicationBoost = 2;FreePhysicalMemory = "431452";FreeSpaceInPagingFiles = "2710880";FreeVirtualMemory = "2671984";InstallDate = "20181120154345.000000+480";LastBootUpTime = "20190221005145.164410+480";LocalDateTime = "20190309002538.760000+480";Locale = "0804";Manufacturer = "Microsoft Corporation";MaxNumberOfProcesses = 4294967295;MaxProcessMemorySize = "8589934464";MUILanguages = {"zh-CN"};Name = "Microsoft Windows 7 旗舰版 |C:\\Windows|\\Device\\Harddisk0\\Partition1";NumberOfLicensedUsers = 0;NumberOfProcesses = 115;NumberOfUsers = 1;OperatingSystemSKU = 1;Organization = "Microsoft";OSArchitecture = "64-bit";OSLanguage = 2052;OSProductSuite = 256;OSType = 18;Primary = TRUE;ProductType = 1;RegisteredUser = "PC";SerialNumber = "00426-OEM-8992662-00006";ServicePackMajorVersion = 1;ServicePackMinorVersion = 0;SizeStoredInPagingFiles = "6119656";Status = "OK";SuiteMask = 272;SystemDevice = "\\Device\\HarddiskVolume1";SystemDirectory = "C:\\Windows\\system32";SystemDrive = "C:";TotalVirtualMemorySize = "10217684";TotalVisibleMemorySize = "4099868";Version = "6.1.7601";WindowsDirectory = "C:\\Windows";
};
'''

获取pc的sn号

import wmiw = wmi.WMI()
obj = w.Win32_OperatingSystem()[0]
print("sn",obj.SerialNumber)
# sn 00426-OEM-8992662-00006

获取物理磁盘信息

import wmi
w = wmi.WMI()
disk = w.Win32_DiskDrive()[0]
print(disk)'''
instance of Win32_DiskDrive
{BytesPerSector = 512;Capabilities = {3, 4, 10};CapabilityDescriptions = {"Random Access", "Supports Writing", "SMART Notification"};Caption = "ST500LT0 12-1DG142 SCSI Disk Device";ConfigManagerErrorCode = 0;ConfigManagerUserConfig = FALSE;CreationClassName = "Win32_DiskDrive";Description = "磁盘驱动器";DeviceID = "\\\\.\\PHYSICALDRIVE0";FirmwareRevision = "0001";Index = 0;InterfaceType = "IDE";Manufacturer = "(标准磁盘驱动器)";MediaLoaded = TRUE;MediaType = "Fixed hard disk media";Model = "ST500LT0 12-1DG142 SCSI Disk Device";Name = "\\\\.\\PHYSICALDRIVE0";Partitions = 4;PNPDeviceID = "SCSI\\DISK&VEN_ST500LT0&PROD_12-1DG142\\4&30B6A92E&0&010000";SCSIBus = 1;SCSILogicalUnit = 0;SCSIPort = 0;SCSITargetId = 0;SectorsPerTrack = 63;SerialNumber = "            W3P2DXE1";Signature = 2837888961;Size = "500105249280";Status = "OK";SystemCreationClassName = "Win32_ComputerSystem";SystemName = "QH-20181120YSCF";TotalCylinders = "60801";TotalHeads = 255;TotalSectors = "976768065";TotalTracks = "15504255";TracksPerCylinder = 255;
};
'''

获取硬盘sn 、硬盘大小 、型号制造商 、硬盘型号

import wmi
w = wmi.WMI()
disk = w.Win32_DiskDrive()[0]print("硬盘制造商Manufacturer",disk.Manufacturer)
print("硬盘型号", disk.Model)
print("硬盘sn", disk.SerialNumber)
print("硬盘大小", int(disk.Size) / (1024 * 1024 * 1024))'''
硬盘制造商Manufacturer (标准磁盘驱动器)
硬盘型号 ST500LT0 12-1DG142 SCSI Disk Device
硬盘sn             W3P2DXE1
硬盘大小 465.7593083381653
'''

用于获取网络接口信息对象,并存以列表形式

Win32_NetworkAdapterConfiguration() 方法

获取所有网卡信息

w = wmi.WMI()
data = {}
count = 0
for nic in w.Win32_NetworkAdapterConfiguration():if nic.MACAddress is not None:count+=1item_data = {}item_data['macaddress'] = nic.MACAddressitem_data['model'] = nic.Captionitem_data['name'] = nic.Indexif nic.IPAddress is not None:item_data['ipaddress'] = nic.IPAddress[0]item_data['netmask'] = nic.IPSubnetelse:item_data['ipaddress'] = ""item_data['netmask'] = ""data["nic%s" %count] = item_dataprint(data)'''
{'nic1': {'macaddress': 'FE:F8:AE:B0:93:4D', 'model': '[00000012] Microsoft Virtual WiFi Miniport Adapter', 'name': 12, 'ipaddress': '', 'netmask': ''}, 'nic2': {'macaddress': 'E0:DB:55:EC:EF:DC', 'model': '[00000013] Realtek PCIe GBE Family Controller', 'name': 13, 'ipaddress': '', 'netmask': ''}, 'nic3': {'macaddress': 'FC:F8:AE:B0:93:51', 'model': '[00000016] Bluetooth 设备(个人区域网)', 'name': 16, 'ipaddress': '', 'netmask': ''}, 'nic4': {'macaddress': '00:50:56:C0:00:01', 'model': '[00000018] VMware Virtual Ethernet Adapter for VMnet1', 'name': 18, 'ipaddress': '192.168.234.1', 'netmask': ('255.255.255.0', '64')}, 'nic5': {'macaddress': 'FC:F8:AE:B0:93:4D', 'model': '[00000019] Intel(R) Wireless-N 7260', 'name': 19, 'ipaddress': 'x.x.x.x', 'netmask': ('255.255.255.0', '64')}, 'nic6': {'macaddress': '00:50:56:C0:00:08', 'model': '[00000020] VMware Virtual Ethernet Adapter for VMnet8','name': 20,'ipaddress': 'x.x.x.x', 'netmask': ('255.255.0.0', '64')}, 'nic7': {'macaddress': 'FE:F8:AE:B0:93:4E', 'model': '[00000023] Microsoft Virtual WiFi Miniport Adapter', 'name': 23, 'ipaddress': '', 'netmask': ''}}
'''

相关文章:

基于windows系统使用Python对于pc当前的所有窗口的相关操作接口

对于windows系统的电脑使用Python可以对其当前的窗口进行宏观的查询等操作 派生博客1:python对pc的窗口进行操作(windows) 派生博客2python获取当前pc的分辨率(windows) 派生博客3使用uiautomation模块来对基于windows系统的pc中的前端界面进行自动化测试(查找控件&#xff…...

30秒搞定一个属于你的问答机器人,快速抓取网站内容

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 文章目录 简介运行效果GitHub地址 简介 爬取一个网站的内容,然后让这个内容变成你自己的私有知识库,并且还可以搭建一个基于私有知识库的问…...

JPA数据源Oracle异常记录

代码执行异常 ObjectOptimisticLockingFailureException org.springframework.orm.ObjectOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleSta…...

抽奖送平板是骗局!!!

在街上被派传单,然后扫了码抽奖中了平板,被领到卖电器门店兑奖。他们给我在宜嘉商城上充值4980,我现场给他们付了4980元,签了他们的业务办理单,上面有违约者赔款30%违约金字样。我领走了荣耀畅玩40plus手机一台。第二天…...

json.decoder.JSONDecodeError: Extra data: line 1 column 332 (char 331)

项目场景: 提示:扩充数据集时,同步修改json标签中的"imagePath"字段的值,出现json文件读写不一致问题。 采用open函数读写模式修改json文件字段。open(jsonF.json, r)。 问题描述 运行修改json文件报错:j…...

rust持续学习 COW

COW我第一次看见还以为是奶牛 很奇怪是个啥 后来了解到是clone on write 缩写的,大乌龙啊 这个有两种enum,一种是borrow,一种是own rust中,数据读写经常涉及到所有权 这个borrow,很显然,就是不可变借用了 own就是可以写…...

【计算机网络】14、DHCP

文章目录 一、概述1.1 好处 二、概念2.1 分配 IP2.2 控制租赁时间2.3 DHCP 的其他网络功能2.4 IP地址范围和用户类别2.5 安全 三、DHCP 消息3.1 DHCP discover message3.2 DHCP offers a message 如果没有 DHCP,IT管理者必须手动选出可用的 ip,这太耗时了…...

【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现

目录 Ⅰ. 实践说明 0x00 计数器(Counter) 0x01 异步计数器(Asynchronous Counter)...

IDEA常用快捷键

快捷键功能tab接受选择–选择的名称将覆盖带插入符号右侧的其它名称–而如果按shift或者enter,光标右边的内容会保留Ctrlshift空格智能匹配–查找当前上下文的方法和变量Ctrld对比文件–选中需要对比的文件shift滚动水平滚动Ctrlaltl格式化Ctrlk提交Ctrlaltz回滚类C…...

【2024秋招】2023-10-17 金山云文档服务端二面

1 实习 1.1 讲解一下curd启动器 1.2 数据同步的过程是怎么实现的,同步过程中的数据一致性怎么保证的 答:同步过程中会记录断点,表示每一批同步成功时的位置,如果对端出现问题,则下一次同步会继续从这个断点后开始同…...

一种excel多线程并发写sheet的方案

一、背景 有一次项目的需求要求导出excel,并且将不同的数据分别写到不同的sheet中。 二、 方案概述 首先一开始使用easyexcel去导出excel,结果发现导出时间需要3秒左右。于是想着能不能缩短excel导出时间,于是第一次尝试使用异步线程去查询数…...

深入了解接口测试:揭秘网络分层和数据处理!

网络分层和数据 上一小节中介绍了接口测试中一些必要重要的定义,这一节我们来讨论一下在学习接口测试过程中我们要关注的最重要的东西:网络分层和数据。 首先,我们来尝试理解一下,为什么网络是要分层的呢? 我们可以…...

Java并发编程

进程和线程 进程即程序的一次执行过程,各个进程之间是独立的。线程是更小的单位,一次进程中,可能会有多个线程,可能会相互影响,各个线程有自己的程序计数器,虚拟机栈和本地方法栈,同时共同使用…...

vue+echarts实现依赖关系无向网络拓扑结图节点折叠展开策略

目录 引言 一、设计 1. 树状图(不方便呈现节点之间的关系,次要考虑) 2. 力引导依赖关系图 二、力引导关系图 三、如何实现节点的Open Or Fold 1. 设计逻辑 节点展开细节 节点收缩细节 代码实现 四、结果呈现 五、完整代码 引言 我…...

Unity3d 灯光阴影开启,法线贴图出现BUG

URP项目打开灯光的阴影后,法线贴图出现BUG 解决方案:按照下图所示调整材质的选项即可...

c语言:模拟实现atoi函数

atoi函数的功能和用法&#xff1a; 主要功能&#xff1a;将字符串转换为整数。例如&#xff0c;将字符类型的“123”转换为整数123. #include <stdio.h> #include <stdlib.h>int main() {char str[] "123";int num atoi(str);printf("Converted …...

Docker 使用心得

创建一个docker 镜像&#xff0c;相关运行代码&#xff0c;放在docker镜像文件同级&#xff0c; pm2 不能与 docker一起使用&#xff08;&#xff09; # node 服务docker FROM node:10.16.3LABEL author"sj"RUN mkdir -p /var/nodeCOPY ./node /var/nodeWORKDIR /va…...

Nacos 架构原理

基本架构及概念​ 服务 (Service)​ 服务是指一个或一组软件功能&#xff08;例如特定信息的检索或一组操作的执行&#xff09;&#xff0c;其目的是不同的客户端可以为不同的目的重用&#xff08;例如通过跨进程的网络调用&#xff09;。Nacos 支持主流的服务生态&#xff0c…...

尝试修改vim光标的思路

尝试修改vim光标&#xff0c;失败 想让vim的光标在不同模式下显示不同样式 尝试了很多方法&#xff0c;但是没有作用 " Set cursor shape and color if &term ~ "xterm"" INSERT modelet &t_SI "\<Esc>[6 q" . "\<Esc&…...

SpringBoot整合Activiti7——消息事件(十)

文章目录 消息事件开始事件中间事件边界事件代码实现xml文件测试流程流程执行步骤 消息事件 消息事件只有一个接收者&#xff0c;消息具有名字与载荷。 信息会储存在 act_ru_event_subscr 表中。 <!-- 定义消息 --> <message id"msgId1" name"msgName…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...