关于全局钩子的几个要注意的问题.

易语言全局钩子实战:监控鼠标和键盘状态 钩子(Hook)是Windows操作系统中一种特殊的消息处理机制,它允许开发者在系统消息传递过程中截获并处理这些消息。钩子机制是Windows API中的核心功能之一,广泛应用于程序调试、辅助功能软件开发和安全软件中。在Windows平台上,钩子机制可以拦截各种类型的消息,如键盘输入、鼠标移动等。开发者可以通过设置钩子来监控或修改这些消息,从而达到控制或监控程序行为的目的。通过低级鼠标钩子,我们可以实现各种自定义的鼠标行为。例如,我们可以通过监听鼠标移动事件,来实现在屏幕上绘制线条的功能。 阅读详情

      前几天用线程钩子修改程序界面,发现会有一个问题:就是当程序再新开线程里有窗口出现的时候了,线程钩子就修改不了界面,或者至少修改起来不是太方便。所以就考虑使用全局钩子,但和线程钩子不同的是,全局钩子需要有几个问题主要:

1. 钩子函数必须放在dll文件中,放在exe文件是不起作用的。

2. 在dll里使用SetWindowsHookEx函数的时候,第三个参数应该用theApp.m_hInstance(DLL的实例句柄,即dll的载入首地址),而不应该用AfxGetInstanceHandle(),该函数获取的是调用dll的exe的实例句柄,即exe的载入首地址。

编程心得,在此记录。

C#实现键盘全局钩子屏蔽按键功能案例 C#(发音为“看#”或“西#”)是一种现代、面向对象的编程语言,由微软公司于2000年随.NET平台一同发布。它是由Anders Hejlsberg主导设计,他之前也是Turbo Pascal、Delphi和VisiCalc的首席架构师。C#语言的设计融合了C++的强大能力和Visual Basic的简单易用性,旨在为开发Windows应用程序提供一种高效、安全且类型安全的编程手段。在Windows操作系统中,钩子(Hook)是一种特殊的程序,它允许开发者介入系统消息的传递过程中。 阅读详情

相关推荐

全局鼠标键盘钩子

全局底层键盘鼠标钩子,导出接口已添加,直接使用。win10 + VS2013 编译。有需要可下载。

forms组件(钩子函数(局部钩子、全局钩子)、三种页面的渲染方式、数据校验的使用)、form组件的参数以及单选多选形式

forms组件(钩子函数(局部钩子、全局钩子)、三种页面的渲染方式、数据校验的使用)

linjun的博客 1112

mumu模拟器+frida安装使用[可运行源码]

本文详细介绍了在Windows系统下安装Python和Frida的步骤,以及如何通过adb连接mumu模拟器并解决常见连接问题。内容包括查看模拟器处理器架构、下载对应版本的Frida安卓版本、上传并运行Frida-server到模拟器,最后在IDEA中执行hook.js文件进行调试。整个过程涵盖了从环境配置到实际操作的完整流程,适合需要利用Frida进行动态分析的开发者参考。

RenderDoc链接mumu模拟器12

7、打开RenderDoc File=>Attach to Running Instance, 选择Headless然后点击Connect to App。3、打开RenderDoc Launch Application选项卡 设置Executable Path,把第一步的路径复制到这里。2、打开RenderDoc=>Tools=>Setting 打开allow global process hooking如图。1、打开mumu模拟器12 然后打开任务管理器找到mumu的运行程序位置。

qq_32767737的博客 6768

地震数据可视化必备:5分钟读懂SEGY道头字段全解析(含坐标定位指南)

本文深入解析了SEGY文件格式中道头坐标字段的提取与可视化方法。针对地震数据处理中的常见痛点,详细介绍了sx/sy、gx/gy等关键坐标字段的二进制解析、比例因子应用、单位转换及常见问题解决方案,并提供了实用的Python代码示例,帮助开发者实现从SEGY文件到三维空间可视化的完整流程。

echo99的专栏 1010

当AI学会自我验证:Chain-of-Verification如何杜绝错误决策?

2025年,大模型"幻觉"问题已成为企业落地AI的最大障碍之一——金融风控中1.2%的误判率可能导致千万级损失,医疗诊断中3%的错误可能危及生命,法律文书中5%的事实偏差可能引发合规风险。MetaAI与Google联合提出的**Chain-of-Verification(CoVe,验证链)**技术,让AI具备"自我审视"能力,通过结构化验证流程将幻觉率降低68%+,在复杂决策场景准确率提升至95%+。本文系统拆解CoVe的技术原理、实施路径与行业实战,为企业提供AI决策可靠性保障的完整方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1080

对GlobalHooks的进一步分析

前一段时间mvm写了一个记录键盘敲击情况的程序,Post里面提到有两个特殊的全局钩子可以在.NET里面钩上。今天终于有幸把mvm的程序下载下来,然后偷偷的用Reflector去翻看了一下。哦,原来说的是SetWindowsHookEx这个东西,之前没有认真看Post……然后我就查了一下这个函数,不查不要紧,查了之后发现这里面有一张表: Hook Scope WH_CALLWN...

weixin_34241036的博客 289

DeepSeek-V3本地Docker容器化部署

通过以上步骤,你可以在本地上成功通过容器化部署DeepSeek-V3。安装完成后,启动Docker Desktop。如果需要后台运行,可以加上。

u013302168的博客 2123

使用RenderDoc 遇到的问题记录

/////////////////////////////////////////////////////////////////// 在点击Launch启动时,容易出现如下的报错。 排查步骤: 先根据提示打开diagnostic log窗口查看一下报错的原因;点击【window】——【Diagnostic Log】 在log窗口中,我们看到了有红色的报错, 这时可以尝试重新连接或者重启renderdoc看看。我这边重启renderdoc并重新连接就可以了。 ///////...

蛰伏--当你不够强大时,就不要放弃努力 1万+

保姆级教程:手把手教你用Python+Zemax仿真一个简易的Nd:YAG固体激光器谐振腔

本文提供了一份详细的Python与Zemax结合的Nd:YAG固体激光器谐振腔仿真教程。从基础理论到实战操作,涵盖晶体参数化、谐振腔设计、泵浦建模、动态仿真及热效应补偿等关键步骤,适合光学专业学生和工程师快速掌握激光器仿真技术。

weixin_30500473的博客 742

Valeo近场数据集:多模态行人意图检测技术解析

行人意图检测是智能驾驶系统的关键技术,通过分析行人运动轨迹预测其行为意图。传统方法受限于单传感器数据,难以应对复杂场景。多模态融合技术结合视觉、LiDAR和惯性测量数据,显著提升检测精度。Valeo近场数据集(VNF)创新性地采用鱼眼相机、多LiDAR和动作捕捉系统,实现3D姿态与意图标签的精准对齐。该数据集支持开发距离自适应的行人感知算法,在ADAS防碰撞、智能迎宾等场景具有重要应用价值。关键技术包括传感器同步、3D姿态重建和时空图卷积网络,为行业提供了标准化评估基准。

weixin_30566111的博客 659

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)

环境 unity : 2018.2.11f1 pipeline : BRP 使用工具 Intel GPA + 模拟器 理论上,只要能在模拟器运行的所有程序的 graphics event / API 都可以抓取 jave.lin : 个人经验:如果有 GPA 抓取无数据的情况,可以尝试更改:graphics api 为:dx / ogl 之间切换,再尝试 GPA 步骤: Graphics Monitor Settings->Auto-detect launch application 设置好.

Jave.Lin 的学习笔记 1万+

千兆网口电路设计中的EMC防护与TVS选型实战

本文深入探讨了千兆网口电路设计中面临的EMC挑战,并提供了TVS二极管选型的实战指南。文章分析了ESD、浪涌和EFT等主要威胁,重点阐述了如何根据工作电压、钳位电压和关键的低结电容等参数为PHY芯片选择匹配的TVS器件,以确保在严苛电磁环境下实现可靠的信号完整性与防护。

m3n5b7v8c9x的博客 531

全局钩子DLL注入

全局钩子注入介绍背景 Windows下的应用程序大部分都是基于消息机制的,它们都会有一个消息过程函数,根据不同的消息完成不同的功能。Windows操作系统提供的钩子机制就是用来截获和监视这些系统中的消息。 按照钩子作用的范围不同,又可以分为局部钩子和全局钩子。局部钩子是针对某个线程的;而全局钩子则是作用于整个系统中基于消息的应用。全局钩子需要使用DLL文件,在DLL中实现相应的钩子函数。 接下来,本文将介绍利用全局钩子来进行DLL注入。 主要步骤 1.在DLL中设置钩子回调函数、设置全局钩子和卸载

苞米地里捉小鸡的博客 2269

利用插件扩展 Qt 应用程序

不仅 Qt 本身可以通过插件进行扩展,而且 Qt 应用程序也可以通过插件来扩展,这需要应用程序使用 `QPluginLoader` 检测和加载插件。

青春不老,奋斗不止! 1万+

三维空间刚体运动4-3:四元数线性插值方法:Squad

摘要:四元数插值三个方法Slerp、Squad和Spring既复杂又很重要,为了详细阐述,故每个方法独立成一篇博文讲解,没有插值的四元数是没有灵魂的,插值的重要性不言而喻。Slerp是经典的两点间一阶连续可导插值方法,Squad方法在Slerp的基础上实现多点间的一阶连续可导,而Spring则可以实现多点间的二阶连续可导,更适合复杂的曲线,此系列博文也是国内首篇介绍Spring的中文资料。

shao918516的博客 9217

全局钩子实例分析

1.关于全局钩子 如果要屏蔽其他进程的鼠标和键盘消息的话,那么局部钩子是不能实现的,我们需要使用远程钩子。而远程钩子的实现是需要借助DLL的,安装的钩子过程需要必须在动态链接库中去实现。远程钩子的设置过程与局部钩子的安装过程所用函数都是SetWindowsHookEx,只是参数不同而已,远程钩子的第4个参数应该设置为0,并把第三个参数指定为安装钩子过程的代码所在的DLL的句柄。 2.全局钩子的

bobopeng 2712

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

全局钩子原理以及操作流程

一、原理部分 1钩子的作用 监控其他程序,劫持其他程序。是黑客技术在本地的基础。 2什么是钩子 钩子是Windows的消息处理机制中的一个监视点,应用程序可以在这里安装一个监视子程序,这样就可以在系统的消息流到达目的窗口的过程前监控它们。 3钩子程序组成部分 1主程序——用来实现界面或其他功能 2钩子回调函数——用来接收系统发过来的消息 3钩子的安装和卸载模块 这是一个...

子曰小玖的博客 6075

深度学习工具包 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")

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

DLL注入——使用全局钩子

因为进程的地址空间是独立的,发生对应事件的进程不能调用其他进程地址空间的钩子函数。如果钩子函数的实现代码在DLL中,则在对应事件发生时,系统会把这个DLL加载到发生事件的进程地址空间中,使它可以调用钩子函数进行处理。所以只要在系统中安装了全局钩子,那么只要进程接收到可以发出钩子的消息,全局钩子的DLL就会被系统自动或者强行加载到进程空间中,这就可以实现DLL注入。);参数1:表示要安装的挂钩类型。参数2:表示的是钩子的回调函数。参数3:包含由lpfn参数执行的钩子过程的DLL句柄。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 3131

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

阻止全局钩子的加载

网上有一篇关于这个问题的文章,题目叫《防止全局钩子的侵入》,作者不祥。文中简单分析了一下钩子的原理,然后使用了微软的Detours库进行 API拦截。如果只是为了拦截一个函数,使用Detours好像有点儿浪费。本文不使用Detours库,直接对LoadLibraryExW函数进行拦截。 先说一下全局钩子是怎么进入到我们的程序里来的。假如有个程序A安装了WH_GETMESSAGE的全局钩子,钩子函...

weixin_34290352的博客 1568

阻止全局钩子

阻止全局钩子2007-06-06 10:59  先说一下全局钩子是怎么进入到我们的程序里来的。假如有个程序A安装了WH_GETMESSAGE的全局钩子,钩子函数在B.dll中,那么当其它程序在调用GetMessage函数从自己的消息队列中取消息的时候,系统发现程序A安装了WH_GETMESSAGE的全局钩子,就会检查调用GetMessage的进程是否加载了B.dll,如果没有

i53nd的专栏 736

钩子编程(HOOK) 安装系统全局钩子 (3)

[钩子编程(HOOK) 安装系统全局钩子]全局钩子,钩子一词多用于计算机编程中,英文叫hook,指利用api来提前拦截并处理windows消息的一种技术。如键盘钩子,许多木马都有这东西,监视你的键盘操作。全局钩子是系统钩子的一种,当指定的一些消息被系统中任何应用程序所处理时,这个钩子就被调用。

机器学习 1万+

vc编写全局钩子需要注意的一个地方

写全局钩子的dll时要在不同进程间共享数据通常用到共享数据段#pragma data_seg("XYdata")HHOOK glhHook=NULL;#pragma data_seg()光这样还是不够的,还要加上#pragma comment(linker,"/section:XYdata,rws")关键就在这个s上,Shared。既然是“共享”数据段,当然要Shared了 ;)还有指定linke

farproc's blog 2570

C/C++全局钩子实现,手把手

C/C++全局钩子实现,手把手 下面是一个在任何界面按下数字1就会自动放WE1Q技能的脚本制作 注意看截图的注释!!! 注意看截图的注释!!! 注意看截图的注释!!! 工具VS2013 第一步,制作这个dll 勾选dll,空项目,关闭安全开发生命周期 写完以后运行,生成dll和lib 弹出这个窗口,不用怕,看下方,是成功的。只是因为dll无法独自运行而已。 右键打开文件所在位置,在debug文件夹中找到lib,dll文件 下面开始写exe程序 选择控制台应用程序,空项目,关闭安全开发生命周期

lingyux的博客 2174

C 全局钩子库 - 键盘与鼠标事件捕获

C# 全局钩子库 - 键盘与鼠标事件捕获 【下载地址】C全局钩子库-键盘与鼠标事件捕获 本仓库提供了完整的C#源码实现,用于全局捕获和处理键盘及鼠标的所有基本事件。通过高效的Hook技术,开发者能够实现在任何应用程序前端下的键盘输入和鼠标操作监听,这对于开发屏幕录制软件、游戏助手、辅助工具等场景极具价值 ...

gitblog_09711的博客 917
上一篇: 通过对WH_CBT进行hook对系统对话框和自建对话框进行自定义绘制
下一篇: 职业与生活规划是否必要?回答因人而异。但规划至少会给人带来以下好处。  
Mi_Bo
博客等级 码龄26年 25粉丝 44原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值