win32汇编环境下,双击窗口程序内生成的listview列表控件的某行,并提取其内容的示例程序
;运行效果

;双击后

;上源码,仔细研究里面的几条备注就理解原理了
;提取窗口程序内生成的listview列表控件的内容示例程序
;抄下面源码,可以在radasm里面直接编译运行。主要的部分加了备注。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc ;加入这个
includelib gdi32.lib ;加入这个
include comctl32.inc ;加入这个
includelib comctl32.lib ;加入这个
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
h_List dd ?
.const
szClassName db 'MyClass',0
szCaptionMain db 'win32汇编环境窗口程序listview列表控件点击排序示例',0
sz_Colon_Signal db ':',0 ;冒号
sz_Enter_Signal db 0dh,0ah,0 ;回车换行符
szDblickName_List db "当前双击的是",0
szlistViewClassName db "SysListView32",0 ;加这个
Heading1 db "序号",0 ;第1列名称
Heading2 db "姓名",0 ;第1列名称
Heading3 db "性别",0
Heading2_1 db "刘备",0 ;第2列第1行字符串
Heading2_2 db "绍婵",0 ;第2列第2行字符串
Heading2_3 db "关羽",0
Heading2_4 db "西施",0
Heading3_1 db "男",0
Heading3_2 db "女",0
Heading3_3 db "男",0
Heading3_4 db "女",0
.data
sztemplate db "%d",0 ;格式化序号用
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
RGB macro red,green,blue ;颜色宏,让listview列表控件好看点
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ShowCurrentFocus proc ;提取被双击到的某项内容
LOCAL lvi:LV_ITEM
LOCAL szbuffer[256]:BYTE
LOCAL szAllShowbuffer[256]:BYTE
invoke RtlZeroMemory,addr szbuffer,sizeof szbuffer
invoke RtlZeroMemory,addr szAllShowbuffer,sizeof szAllShowbuffer ;缓冲区清空,防止此片内存有残留内容。
invoke SendMessage,h_List,LVM_GETNEXTITEM,-1, LVNI_FOCUSED ;LVM_GETNEXTITEM消息搜索有指定属性的行,比如指定LVNI_FOCUSED属性,而LVNI_FOCUSED就是具有焦点,即被选中的行
mov lvi.iItem,eax
mov lvi.iSubItem,0
mov lvi.imask,LVIF_TEXT
lea eax,szbuffer
mov lvi.pszText,eax
mov lvi.cchTextMax,256
invoke SendMessage,h_List,LVM_GETITEM,0,addr lvi
invoke lstrcat,addr szAllShowbuffer,addr Heading1
invoke lstrcat,addr szAllShowbuffer,addr sz_Colon_Signal ;加冒号
invoke lstrcat,addr szAllShowbuffer,addr szbuffer ;加提取到的数据
invoke lstrcat,addr szAllShowbuffer,addr sz_Enter_Signal ;加回车换行
mov lvi.iSubItem,1
mov lvi.imask,LVIF_TEXT
lea eax,szbuffer
mov lvi.pszText,eax
mov lvi.cchTextMax,256
invoke SendMessage,h_List,LVM_GETITEM,0,addr lvi
invoke lstrcat,addr szAllShowbuffer,addr Heading2
invoke lstrcat,addr szAllShowbuffer,addr sz_Colon_Signal
invoke lstrcat,addr szAllShowbuffer,addr szbuffer
invoke lstrcat,addr szAllShowbuffer,addr sz_Enter_Signal ;加回车换行
mov lvi.iSubItem,2
mov lvi.imask,LVIF_TEXT
lea eax,szbuffer
mov lvi.pszText,eax
mov lvi.cchTextMax,256
invoke SendMessage,h_List,LVM_GETITEM,0,addr lvi
invoke lstrcat,addr szAllShowbuffer,addr Heading3
invoke lstrcat,addr szAllShowbuffer,addr sz_Colon_Signal
invoke lstrcat,addr szAllShowbuffer,addr szbuffer
invoke MessageBox,0, addr szAllShowbuffer,addr szDblickName_List,MB_OK or MB_ICONINFORMATION
ret
_ShowCurrentFocus endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ShowListViewInfo proc ;显示列表视图里的每项信息
LOCAL lvItem:LV_ITEM
LOCAL @buffer[10]:byte
;以下填充第1行的内容
mov lvItem.imask,LVIF_TEXT
mov lvItem.iItem, 0 ;0为第1列,从0开始计算
mov lvItem.iSubItem, 0 ;0为第1行
invoke wsprintf,addr @buffer, addr sztemplate,1 ;格式化第1列第1行要显示的字符串
lea eax, @buffer
mov lvItem.pszText, eax
mov lvItem.cchTextMax, sizeof Heading1
invoke SendMessage, h_List, LVM_INSERTITEM, 0, addr lvItem
mov lvItem.imask,LVIF_TEXT
mov lvItem.iSubItem,1
lea eax,offset Heading2_1
mov lvItem.pszText,eax
invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
mov lvItem.imask,LVIF_TEXT
mov lvItem.iSubItem,2
lea eax,offset Heading3_1
mov lvItem.pszText,eax
invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
;以下填充第2行的内容
mov lvItem.iItem, 1
mov lvItem.iSubItem, 0
invoke wsprintf,addr @buffer, addr sztemplate,2 ;第1列第2行字符串
lea eax, @buffer
mov lvItem.pszText, eax
invoke SendMessage, h_List, LVM_INSERTITEM, 0, addr lvItem
mov lvItem.imask,LVIF_TEXT
mov lvItem.iSubItem,1
lea eax,offset Heading2_2
mov lvItem.pszText,eax
invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
mov lvItem.imask,LVIF_TEXT
mov lvItem.iSubItem,2
lea eax,offset Heading3_2
mov lvItem.pszText,eax
invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
;以下填充第3行的内容
mov lvItem.iItem, 2
mov lvItem.iSubItem, 0
invoke wsprintf,addr @buffer, addr sztemplate,3 ;第1列第3行字符串
lea eax, @buffer
mov lvItem.pszText, eax
invoke SendMessage, h_List, LVM_INSERTITEM, 0, addr lvItem
mov lvItem.imask,LVIF_TEXT
mov lvItem.iSubItem,1
lea eax,offset Heading2_3
mov lvItem.pszText,eax
invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
mov lvItem.imask,LVIF_TEXT
mov lvItem.iSubItem,2
lea eax,offset Heading3_3
mov lvItem.pszText,eax
invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
;以下填充第4行的内容
mov lvItem.iItem, 3
mov lvItem.iSubItem, 0
invoke wsprintf,addr @buffer, addr sztemplate,4 ;第1列第4行字符串
lea eax, @buffer
mov lvItem.pszText, eax
invoke SendMessage, h_List, LVM_INSERTITEM, 0, addr lvItem
mov lvItem.imask,LVIF_TEXT
mov lvItem.iSubItem,1
lea eax,offset Heading2_4
mov lvItem.pszText,eax
invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
mov lvItem.imask,LVIF_TEXT
mov lvItem.iSubItem,2
lea eax,offset Heading3_4
mov lvItem.pszText,eax
invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
ret
_ShowListViewInfo endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_List_InsertColumn proc ;插入列数及名称的函数
LOCAL lvc:LV_COLUMN
mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset Heading1 ;第1列的标题栏名称
mov lvc.lx,100 ;宽度
invoke SendMessage,h_List, LVM_INSERTCOLUMN, 0, addr lvc
or lvc.imask,LVCF_FMT
mov lvc.fmt,LVCFMT_LEFT
mov lvc.pszText,offset Heading2 ;第2列的标题栏名称
mov lvc.lx,150
invoke SendMessage,h_List, LVM_INSERTCOLUMN, 1 ,addr lvc
mov lvc.pszText,offset Heading3
mov lvc.lx,125
invoke SendMessage,h_List, LVM_INSERTCOLUMN, 2 ,addr lvc
ret
_List_InsertColumn endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
local @stPs:PAINTSTRUCT
local @stRect:RECT
local @hDc
LOCAL @DEFAULT_GUI_FONT,@OLD_DEFAULT_GUI_FONT ;加入这个,字体使用
mov eax,uMsg
;********************************************************************
.if eax == WM_PAINT
invoke BeginPaint,hWnd,addr @stPs
invoke EndPaint,hWnd,addr @stPs
.elseif eax == WM_CREATE
mov eax,hWnd
mov hWinMain,eax
invoke GetStockObject,DEFAULT_GUI_FONT
mov @DEFAULT_GUI_FONT,eax
invoke CreateWindowEx, NULL, addr szlistViewClassName, NULL, LVS_REPORT or WS_CHILD or WS_VISIBLE, \ ;名单列表视图
0,0,0,0,hWnd, NULL, hInstance, NULL
mov h_List, eax
mov eax,LVS_EX_FULLROWSELECT or LVS_EX_GRIDLINES or LVS_EX_SUBITEMIMAGES ;设置ListView全行选择,网格等样式.
invoke SendMessage,h_List,LVM_SETEXTENDEDLISTVIEWSTYLE,0,eax
invoke ImageList_Create,0,35,ILC_COLORDDB or ILC_MASK,0,0 ;调整ImageList高,就可调整listView行高,就是把它撑大点
invoke SendMessage,h_List,LVM_SETIMAGELIST,LVSIL_SMALL,eax
invoke SendMessage,h_List,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
RGB 0,0,0
invoke SendMessage,h_List,LVM_SETTEXTCOLOR,0,eax ;设置文本颜色
RGB 131,175,155
invoke SendMessage,h_List,LVM_SETBKCOLOR,0,eax ;设置背景颜色
RGB 131,175,155
invoke SendMessage,h_List,LVM_SETTEXTBKCOLOR,0,eax ;设置文本背景颜色
invoke MoveWindow,h_List,0,0,375,520,TRUE ;调整列表视图的位置才能显示出来
invoke _List_InsertColumn ;调用初始化ListView控件的函数
invoke _ShowListViewInfo ;调用初始化显示列表视图内容的函数
.elseif eax== WM_NOTIFY ;当事件发生或控件需要一些信息时,由公共控件发送到其父窗口。
push edi
mov edi,lParam ;接收到了 WM_NOTIFY 消息后,lParam 包含了指向 NMHDR 型结构体变量的指针。我们通过把列表视图控件的值和 NMHDR 型
assume edi:ptr NMHDR ;结构体变量中的 hwndFrom 成员变量的值比较来判断,如果相等的话就可以确定消息是列表视图控件发送的
mov eax,[edi].hwndFrom
.if eax==h_List
.if [edi].code==NM_DBLCLK ;双击项目显示第一条信息
invoke _ShowCurrentFocus ;调用提取listview控件内容并弹出信息的函数
.endif
.endif
pop edi
;********************************************************************
.elseif eax == WM_CLOSE
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
;********************************************************************
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
;********************************************************************
xor eax,eax
ret
_ProcWinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
invoke InitCommonControls ;加上这句
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
; 注册窗口类
;********************************************************************
invoke LoadCursor,0,IDC_ARROW
mov @stWndClass.hCursor,eax
push hInstance
pop @stWndClass.hInstance
mov @stWndClass.cbSize,sizeof WNDCLASSEX
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
mov @stWndClass.lpfnWndProc,offset _ProcWinMain
mov @stWndClass.hbrBackground,COLOR_WINDOW + 1
mov @stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW,\
100,100,395,420,\
NULL,NULL,hInstance,NULL
mov hWinMain,eax
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endw
ret_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _WinMain
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
相关文章:
win32汇编环境下,双击窗口程序内生成的listview列表控件的某行,并提取其内容的示例程序
;运行效果 ;双击后 ;上源码,仔细研究里面的几条备注就理解原理了 ;提取窗口程序内生成的listview列表控件的内容示例程序 ;抄下面源码,可以在radasm里面直接编译运行。主要的部分加了备注。 ;>>>>>>>>>>>>>>…...
mysql主从断开后问题排查及修复
服务器mysql主从同步断开后,进行主从恢复 问题:mysql的主从断开了,在从服务器上通过以下命令查看状态,发现Slave_SQL_Running为No SHOW SLAVE STATUS\G;Slave_IO_Running:表示从服务器读取主服务器日志的线程 Slave_…...
[2025] 如何在 Windows 计算机上轻松越狱 IOS 设备
笔记 1. 首次启动越狱工具时,会提示您安装驱动程序。单击“是”确认安装,然后再次运行越狱工具。 2. 对于Apple 6s-7P和iPad系列(iOS14.4及以上),您应该点击“Optinos”并勾选“允许未经测试的iOS/iPadOS/tvOS版本”&…...
计算机网络—————考研复试
第一章、计算机网络体系结构 1. OSI参考模型和TCP/IP模型: OSI与TCP/IP的记忆方法:只需把OSI的七层记住,将应用层、表示层、会话层一起记,到TCP/IP变成应用层。物理层和数据链路层换成网络接口层。把网络层换个字变成网际层。 而…...
[pdf、epub]260道《软件方法》强化自测题业务建模需求分析共216页(202412更新)
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 260道《软件方法》强化自测题业务建模需求分析共216页(202412更新) 已上传到本CSDN账号的资源 如果下载不到,也可以访问以下链接: ht…...
LeetCode - 初级算法 数组(只出现一次的数字)
只出现一次的数字 这篇文章讨论如何找到一个数组中只出现一次的数字,确保算法的时间复杂度为线性,且只使用常量额外空间。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两…...
Android性能优化概述
应用启动速度慢页面加载慢交互卡顿CrashANR 针对这些问题,可以逐一进行优化 1.启动优化 Android应用启动分为冷启动和热启动以及初次安装启动,此处只分析冷启动及热启动 冷启动:当设备无该应用进程时,用户操作拉起应用ÿ…...
C++ 实现map容器从大到小排序
map容器默认从小到大排序 利用仿函数可以修改map容器的排序规则为从大到小 示例: #include<iostream> #include<string> #include<map> using namespace std; class MyCompare { public: bool operator()(const int v1, const int v2) co…...
java中的文件操作
基础知识 1.File类对象的常用方法 一、 创建文件和目录 1.createNewFile() 用于创建一个新的文件,如果文件已经存在,则返回 false File file new File("C:\\Users\\P51\\Desktop\\file.txt"); file.createNewFile(); 2.mkdir() 用于创建一个…...
修复OpenHarmony系统相机应用横屏拍照按钮点不到的问题
适配OpenHarmony系统相机应用横屏UI, 相关pr: https://gitee.com/openharmony/applications_camera/pulls/233/files 适配效果 如何安装 编译好的hap提供在附件中 1.预置在源码,随固件安装 2.安装hap hdc shell "mount -o remount,rw /"…...
2024165读书笔记|《飞花令·合》——人生飘忽百年内,且须酣畅万古情
2024165读书笔记|《飞花令合》—— 人生飘忽百年内,且须酣畅万古情 屈原班婕妤曹植刘绘卢思道卢照邻苏味道刘希夷李白高适杜甫司空曙白居易温庭筠韦庄窦叔向张泌林逋柳永晏殊欧阳修李觏舒亶秦观陈瓘李清照陆游辛弃疾姜夔蒋捷吴伟业纳兰性德张惠言邓廷桢 《飞花令合》…...
哈夫曼编码(Huffman Coding)与哈夫曼树(Huffman Tree)
已知字符集{a,b,c,d,e,f},若各字符出现的次数分别为6,3,8,2,10,4,则对应字符集中各字符的哈夫曼编码可能是( )。 A.00,1011,01࿰…...
Django项目中高效管理和使用选择常量
引言 在开发Django项目时,我们经常需要处理各种选择字段,比如用户类型、订单状态或产品分类等。如何有效地管理这些选择常量,使其在整个项目中保持一致性,同时又易于维护和更新呢?本文将介绍一种在Django项目中集中管理和使用选择常量的方法。 正文 © ivwdcwso (I…...
拦截器(Interceptor)的使用
在Java Web开发中,拦截器(Interceptor)是一种动态拦截请求和响应的对象,它可以在请求被控制器处理之前和之后执行一些预处理和后处理逻辑。要定义一个拦截器并使其生效,通常需要以下几个步骤: 1. 定义拦截…...
线段树例题题解
卫星覆盖(NOI1997) 题面: SERCOI(Space-Earth Resource Cover-Observe lnstitute) 是一个致力于利用卫星技术对空间和地球资源进行覆盖观测的组织。现在他们研制成功一种新型资源观测卫星 -SERCOI-308。这种卫星可以…...
AI提示词工程的“优化背后”:如何通过精准提示提升模型性能?
提示词工程(Prompt Engineering)已经成为推动AI模型如GPT等发挥其强大能力的核心。AI模型的输出质量与输入的提示词密切相关。因为之前已经大致用过一段时间提示词,所以这篇文章集中在有一定基础,起码对提示词不陌生,想要去设计和优化提示词+处理复杂问题的时候不知道如何…...
c# Record关键字
在 C# 9.0 中引入了 record 关键字,用于定义记录类型(Record Types)。记录类型是一种轻量级的数据载体,专注于表示数据,它提供了内置的相等性比较、生成属性和方法等功能,使得编写数据类更加简洁和高效。 …...
高效管理 Nginx 的利器:nginxWebUI 指南和 Docker 部署安装过程
前言 Nginx WebUI 是一个为 Nginx 提供图形化管理界面的工具。通过 WebUI,用户可以轻松管理 Nginx 配置,而无需直接编辑配置文件,尤其适合新手用户和频繁修改配置的场景。 官网文档:nginxWebUI - 文档 本文将分享为什么选择 ngin…...
家政预约小程序04活动管理表结构设计
目录 1 创建活动表2 创建活动规则表3 创建活动参与记录表总结 为了满足我们日常的营销,我们通常需要搞一些活动,比如满减、折扣、团购等。启动活动后,会在首页进行显示,当用户访问小程序的时候,就可以参与活动…...
谷歌浏览器的在线存储功能使用方法
谷歌浏览器不仅是目前全球使用最广泛的网络浏览器之一,它还集成了许多实用的功能来提升用户体验。其中,谷歌浏览器的在线存储功能允许用户将数据保存在云端,实现跨设备的无缝同步和共享。本文将详细介绍如何在谷歌浏览器中使用这一功能。 一、…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...
