【WIN】windows自启动项查询整理

win10由%AppData%、path引申出来对环境变量的探究,与修改注册表的一些血的教训 通过修改注册表,对C盘下用户夹进行移动的操作,请谨慎为之! 阅读详情
AI摘要

本文详细介绍了Windows系统中自启动项的查询和管理,包括自启动文件夹、注册表启动项、系统服务、系统驱动、任务计划和动态链接库映像劫持。提供了查询和遍历注册表、服务、驱动等自启动项的方法,并给出了相应的代码示例。同时,提到了通过系统服务和驱动程序进行自启动的隐蔽性以及任务计划程序的使用。

整理一下 Windows 自启动项的存放位置

Windows 自启动项查询整理

目前有很多产品 都可以获取系统自启动项 如360安全卫士、autoRun、Dism++等等,在使用上各有不同,Windows的自启动项主要有以下几项:

  1. 自启动文件夹
  2. 注册表启动项
  3. 系统服务
  4. 系统驱动程序
  5. 任务计划
  6. 动态链接库
  7. 映像劫持

本文主要提供一下上述几项的信息和查询方式,另外需要补充的是,对于查询结果处理的准确性可结合多方面进行校验,这边罗列一下可以提供校验的工具:

  1. 【系统】。Windows提供了可以查看自启动软件(msconfig),服务(services.msc),定时任务的工具(管理工具)的工具,包括注册表也可以用来使用,以上这几个是系统提供的可供查询的路径。
  2. 【AutoRun】。这是一个软件,可以自行去找相关资源使用,这个软件很强大。可以参考这个去实现查询功能,里边很多设计的点都可以借鉴。

1. 自启动文件夹

自启动文件夹指的是Win系统上有专门的文件夹来存放自启动项,直接通过资源管理器查看即可:

1. %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
2. %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup

直接复制上述路径粘贴到资源管理器即可打开,如下所示两个路径下的应用程序也会是Win系统的启动项
在这里插入图片描述
如果是通过C++去查询,则需要使用函数去获取自启动项的绝对路径,使用 ExpandEnvironmentStrings可以获取环境变量所指向的绝对路径。

如果获取的是快捷方式,可以看看我的这篇文章:

【WIN】【C/C++】获取快捷方式指向的位置

【WIN】【C/C++】获取文件版本号

【WIN】【C++】遍历文件夹下所有文件

2. 通过注册表启动项

注册表作为Windows一个核心,自然也少不了保存相关项来存储自启动程序,注册表下的自启动项路径主要有以下 8 个部分,其中可能有重复项,需要自己去过滤重复项:

1. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
2. HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
3. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
4. HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
5. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
6. HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
7. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
8. HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
此外,64位操作系统中,还存在一个重定向到32位的映射路径,如下:
9. HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run	

注册表项相对较多,可以提供一个统一的接口,逐个调用获取每个注册表路径下的启动项就好。

接口的大致过程分为三个步骤:

  1. RegOpenKeyEx()进入目标路径
  2. 使用while循环和RegEnumValue遍历当前注册表路径
  3. 使用RegClose关闭句柄

百度【枚举注册表子项 | RegEnumValue】能查到较多相关demo,既然都写了,那就贡献一个我自己写的接口:

其中获取文件属性的代码我注释掉了,如有需要,请到这里👇获取源码

【WIN】查询文件信息(公司、版本、版权、描述、厂商等)_欧恩意的博客-优快云博客

typedef struct _AUTO_RUNS_ST
{
   
   
	WCHAR   szName[MAX_PATH];      //软件名称
	WCHAR   szPath[MAX_PATH];      //软件路径
	WCHAR   szVersion[MAX_PATH];   //软件版本
	WCHAR   szCompany[MAX_PATH];   //软件公司
	WCHAR   szDesp[MAX_PATH * 4];  //软件描述
	WCHAR   szCmdLine[MAX_PATH];   //启动命令行
}AUTO_RUNS_ST, *AUTO_RUNS_ST;

/*
*	[in]Htype: 注册表句柄 
*	[in]lpSubKey: 子路径 如:“SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run”
*	[in]bIs64KEY: 被查询机器是否是64bit
*	[out]vecAutoItems: 查询结果的输出结构体
*/
bool EnumAutoRun(   __in HKEY Htype, 
                    __in LPCTSTR lpSubKey, 
                    __in bool bIs64KEY, 
                    __out std::vector<AUTO_RUNS_ST> &vecAutoItems )
{
   
   
	bool bRet = FALSE;	
	DWORD dwSamDesire = 0;

	// 1、自启动项查询
	DWORD dwIndex = 0;
	HKEY hKey = HKEY_LOCAL_MACHINE;
	DWORD dwSizeValueName = MAX_PATH;
	DWORD dwSizeofKeyName = MAX_PATH;
	BYTE szValueName[MAX_PATH] = {
   
    0 };
	TCHAR szKeyName[MAX_PATH] = {
   
    0 };
	long nError = 0;
	size_t nEnd;

	if ( bIs64KEY )
	{
   
   
		dwSamDesire = bIs64KEY ? (KEY_READ | KEY_WOW64_64KEY) : (KEY_READ | KEY_WOW64_32KEY);
	}

    if (RegOpenKeyExW(Htype, lpSubKey, 0, dwSamDesire, &hKey))
    {
   
   
        printf(_T("EnumAutoRun RegOpenKeyExW Failed!Error code(%d)"), GetLastError());
        goto _EXIT_;
    }

	// 2、遍历:根据得到的软件路径查询相关信息
	do
	{
   
   
		dwSizeValueName = MAX_PATH;
		dwSizeofKeyName = MAX_PATH;

		AUTO_RUNS_ST stuAutoRun;
		memset(stuAutoRun, 0, sizeof(stuAutoRun));
		
		nError = RegEnumValueW(hKey, dwIndex++, szKeyName, &dwSizeofKeyName, NULL, &dwType, szValueName, &dwSizeValueName);
		if (nError == ERROR_SUCCESS)
		{
   
   
			// 转string->截取字符串 -> 得到程序路径
			std::wstring strFilePath = (wchar_t*)szValueName;

			// 先处理带‘"’的字符串
			int nReplace = strFilePath.find_first_of
windows操作系统开机自启(自动启动) 运行窗口 shell:startup 指令调出开机自启文件夹、delayed_startup.bat延时启动一个或多个程序bat脚本记录 阅读详情

相关推荐

Win11启动项文件夹路径及使用方法

Windows 11的开机启动文件夹是一个实用的功能,它允许用户将特定的程序设置为开机自动运行。通过简单的步骤和注意事项,你可以轻松地管理你的启动项并优化系统启动速度。如果你需要更精细的控制启动项的行为或实现更复杂的启动条件,可以考虑使用任务计划程序或其他第三方软件。无论你选择哪种方式,都请确保遵循正确的操作步骤并谨慎处理以避免潜在的问题。希望本文能对你有所帮助!

nntxthml的博客 1万+

Windows 10系统维护实战:从卡顿优化到故障修复全指南

操作系统性能优化是计算机系统管理中的核心实践,其原理在于通过资源调度、进程管理和存储优化等技术手段,提升系统响应速度与稳定性。在工程实践中,针对Windows 10这类广泛使用的桌面操作系统,掌握系统性的故障排查与维护方法具有重要价值。当面临系统卡顿、网络异常或更新失败等常见问题时,用户无需立即重装系统,而是可以遵循从资源占用分析、启动项管理到内置工具修复的标准化流程。例如,通过任务管理器进行进程诊断,利用SFC和DISM工具修复系统文件,能够有效解决大多数功能异常。这些方法适用于日常办公、开发环境维护及个

shirlly 415

Win11彻底卸载鲁大师:清除弹窗广告与残留的完整指南

在Windows系统日常维护中,软件卸载看似简单,实则涉及主程序、后台服务、驱动、计划任务、注册表等多个层面。很多用户卸载鲁大师后仍被弹窗广告困扰,本质是残留组件被计划任务定时唤醒,甚至联网后自动恢复。掌握系统清理与软件卸载的基本原理,能有效解决此类问题。本文从系统维护角度出发,介绍使用Geek Uninstaller、Autoruns等工具进行深度清理的方法,并给出安全模式下的补刀操作。适用于Win11 23H2/26H2等版本,也可扩展到其他顽固软件的卸载场景,帮助用户摆脱弹窗广告,恢复系统纯净与流畅。

weixin_34067102的博客 215

Windows注册表优化与修复实战:从备份清理到解决硬件报错

注册表作为Windows系统的核心配置数据库,存储着软件、硬件和用户偏好等关键信息。其运作机制复杂,一旦出现冗余、损坏或权限错位,便会导致软件卸载不净、开机缓慢、设备无法启动等高发故障。理解注册表的分层结构与配置原理,是安全开展系统优化和故障修复的前提。通过合理的注册表清理、自启动项目治理与权限调整,可有效恢复系统稳定、提升响应速度。无论是手工编辑、导出备份还是使用命令行批量操作,掌握正确的技术路径能显著降低排障成本。当遇到设备管理器报错或DCOM事件异常时,精准定位CLSID与过滤驱动项,往往能替代重装系

weixin_34209851的博客 304

Windows批处理脚本实战指南:从零基础到自动化工具开发

在Windows系统管理与自动化领域,批处理脚本(.bat文件)作为系统原生支持的脚本语言,以其零依赖、上手快、跨版本兼容的特性,成为解决日常重复性任务的利器。其核心原理是通过命令提示符(cmd.exe)顺序执行一系列系统命令,实现文件操作、系统配置等自动化流程。从技术价值看,批处理脚本无需安装额外运行时环境,特别适合系统管理、运维部署及个人效率提升等场景。通过掌握变量操作、流程控制、文件处理等核心语法,结合实战案例如系统垃圾清理、网络配置切换、批量文件重命名等,可以快速构建轻量级自动化工具。本文聚焦批处理

weixin_30800807的博客 320

雷电模拟器弹窗广告屏蔽方法:从来源分析到计划任务清理

在Windows系统中,弹窗广告常借助计划任务、自启动项等系统机制实现自启和定时触发,这类机制本是用于自动化运维与程序调度的基础功能,却被部分软件用于推送商业推广。了解其运行原理后,通过任务计划程序禁用可疑任务、管理自启动项,即可从源头阻断大多数弹窗干扰,提升系统资源利用效率与使用专注度。该思路适用于个人电脑、批量部署的运维场景,以及需要长时间稳定运行模拟器的挂机环境。雷电模拟器在使用过程中偶尔弹出的桌面推广窗口,同样遵循上述机制。本文围绕雷电模拟器场景,提供从来源定位、设置开关关闭,到计划任务与启动项清理

weixin_34293059的博客 374

Windows内核驱动开发实战:安装卸载、API分类与安全防御

操作系统通过内核驱动获得对硬件和系统资源的底层控制能力,驱动运行在CPU最高特权级,是系统稳定与安全的关键。理解驱动加载、通信与卸载机制,是进行系统级开发和安全防御的基础。从字符设备驱动到系统监控组件,驱动开发广泛应用于嵌入式调试、外设访问(如CH340、ST-Link)和内核安全防护。本文梳理Windows内核驱动安装与卸载的完整流程,解析内核API分类方法,并结合安全防御实战,分享驱动加固、蓝屏排查和双机调试经验,帮助开发者构建扎实的内核开发技能。

cuiji1279的博客 468

FastDDS之共享内存

transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP,TCP,SHM。

u010378559的博客 3085

别再用UE5默认材质:用Substance Painter一招提升写实感

今天,我就把这套从模型准备到引擎最终呈现的全流程技巧毫无保留地分享出来,这套方法不仅能让你的作品细节炸裂,更能让你理解次世代PBR(Physically Based Rendering)材质的底层逻辑。

海外旅居设计师,15年设计经验。 1325

黑客渗透测试后门隐藏技术揭秘

本文介绍了在授权渗透测试中隐藏后门文件(muma.exe)的多种技术手段。主要包括:通过WinRAR自解压脚本将后门与正常程序捆绑实现双开;利用系统自动运行目录和注册表实现开机自启;修改文件图标伪装成常用软件;将文件存放在冷门系统目录;设置系统+隐藏双重属性增强隐蔽性。此外还涉及对抗安全软件的加壳(UPX)、免杀(msfvenom编码)技术,以及进程注入、日志清除等运行隐藏方法。所有技术仅限合法授权测试使用,未经授权使用将面临法律责任。

m0_60781580的博客 1040

从梯度泄露到数据复原:DLG与iDLG算法实战解析

本文深入解析了DLG与iDLG算法在梯度泄露与数据复原中的实战应用,揭示了联邦学习中的隐私风险。通过详细代码示例和实验数据,展示了如何从梯度中复原原始训练数据,并探讨了梯度压缩、差分隐私等防御措施。文章特别强调了iDLG算法在标签破解中的高效性,为AI安全领域提供了重要参考。

weixin_30552811的博客 191

Modelsim10.5_se安装(Win11)

modelsim是Mentor公司开发的优秀的HDL语言仿真软件。它能提供友好的仿真环境,采用单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术,编译仿真速度快且编译的代码与平台无关。

m0_51186267的博客 9911

STM32cubemx配置驱动DHT11模块

本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。

m0_49476241的博客 5912

【python基础】一文掌握 Jupyter Notebook 的使用(超级详细!)

是一个非营利组织,致力于为多种编程语言的交互式计算开发开源软件、开放标准和服务。Jupyter 于 2014 年由 Fernando Pérez 从IPython衍生出来,支持几十种编程语言的执行环境。Jupyter 项目主要开发并支持(.ipynb 文件格式)、JupyterHub和JupyterLab等交互式计算产品。

数据知道的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 【WIN】svchost与共享进程服务
下一篇: 【Python】Python端口占用测试(检测Socket)
欧恩意
博客等级 码龄7年 677粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧恩意

如有帮助,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值