西区代码小仓库
type: channel
link: https://lisper517.top/
description: lisper517的个人博客
items: 《富爸爸穷爸爸》-[美]罗伯特·清琦，[美]莎伦·莱希特
items: 《李大霄投资战略（第三版）》-李大霄
items: 《功能合学 从颞下颌关节到微笑设计》-[美]Peter E. Dawson
items: 《根管治疗图谱（第2版）》-彭彬
items: 《全局诊断-牙科诊断和治疗计划的新视角》-J. William Robbins，Jeffrey S. Rouse[美]
items: 投资策略-定投
items: 《深度学习入门 基于Python的理论与实现》-斋藤康毅（笔记）
items: 按键精灵（python加强版）
items: 如何正确用Python截取屏幕
items: JavaScript入门（源自runnoob）

《富爸爸穷爸爸》-[美]罗伯特·清琦，[美]莎伦·莱希特
type: item
date: 2026-02-15T09:50:00+00:00
description: 序言 第一章 富爸爸，穷爸爸 第二章 富人不为钱工作 第三章 为什么要教授财务知识 第四章 事业与职业 第五章 税收的历史与公司的力量 第六章 富人的投资 第七章 不为钱工作 第八章 克服困难 第九章 开始行动 第十章 更多的事情本文总结自2013年，[美]罗伯特·清琦、[美]莎伦·莱希特的书籍-《富爸爸穷爸爸》（四川文艺出版社），请支持正版图书。本文首发于个人博客https://lisper517.top/archives/4404/，转载请注明出处。投资有风险，入市需谨慎。笔者是感觉书中的内容有些过时，作者偏好高风险资产、房地产，但是举例集中在95年左右，没有经历08年验证（小周期与大周期）。根据网络搜索，作者在08年危机之前撤出、持有现金，并抄底优质资产，不知道真假。不论如何，书中的内容还是有一些借鉴意义的。序言“好好学习，找份好工作”是大多数人的固有认知，但理财训练也很重要，并且难以获得。第一章 富爸爸，穷爸爸穷爸爸（亲生爸爸）受过良好的教育，但财商不高，一生清贫；富爸爸（好友迈克的爸爸）教育程度不高，但有富人的思考方式。第二章 富人不为钱工作富爸爸（当时还不富有）提供给我和迈克一份工作，到他的小超市工作，每周六工作3小时、每小时10美分。工作3周后我决定退出，迈克却说，富爸爸说如果我要退出时就带我去见富爸爸。穷人、中产阶级为钱工作，因为这些人寻求稳定，害怕付不起账单、害怕被解雇。之后富爸爸再次让我继续之前的工作，但这次连薪水也没有了。又工作了几周，富爸爸再次与我和迈克谈话。大多数人的生活是上班、获取薪水，然后消费、付账，如此重复。收入提高，支出也提高，循环往复。一些富有的人也没能逃脱这个循环，而且往往比之前贫穷时更加恐惧了。贪婪、恐惧，大多数人被感情而非思考驱动。实际上，钱并非真正的财富。之后我和迈克继续免费在小超市工作。后来我们发现了商机，小超市会把过旧的绘本扔掉处理，而我们把这些绘本收集起来向周围的孩子们收费开放。但后来因为流氓骚扰，阅览室关闭了。不过这就是我们上的第一堂课。第三章 为什么要教授财务知识最大的财富并非钱，而是所受的教育，灵活的头脑，因为知识方可创造财富。想要致富的第一步，是学习财务知识（打下稳固的地基）。首先要明白的是资产和负债的区别，并购买资产，这是唯一的规则。大多数人搞错了资产和负债的概念，穷人得到负债却以为是资产。资产就是能产生现金流的东西，负债则会持续让你花钱。由于穷人的观念根深蒂固，因此他们有钱之后总是购买负债，导致收入增加的同时负债也增加。比如说，一对新婚夫妇，一开始住在拥挤的公寓，但二人都有工作。随着薪水的增加，二人换更大的房子、买车、家具，孩子出生后又需要更加努力工作……这是一场无法终结的“仓鼠赛跑”。房子是负债而非资产，花30年偿还现金流是非常愚蠢的。房子并非总是升值，而且还要考虑机会成本（现金流贴现）。机会成本，比如100元拿来买年化2%的货币基金而非买房，一年后拥有102元——因为金钱是随时间增值的，现在的100元等于一年后的102元，现在的102元等于过去的100元；如果购买房子，除了损失2%的无风险年化收益，还要支出购买家具、维修、水电费。不要过早买房，而应该早早开始证券投资。买房是可以的，但在买房之前要先买入资产，让资产创造的现金流能覆盖房子的支出。房子也可以替换成其他负债，像跑车、潮流单品……收入和负债等比例增大，而却没有资产，结果就是为老板、政府（纳税）、银行（贷款）工作一辈子。财富，是支持一个人生存多长时间的能力。换言之，如果今天开始停止工作，你能存活的时间长短，可以衡量你目前的财富。第四章 事业与职业职业和事业的区别，职业的重点在于收入项，你可能作为老师、医生、律师等来获得收入，这些是职业；你的事业则由你的资产决定，你可能投资房地产、股票、开公司等等。你需要照常工作，但同时也要选择自己感兴趣的事业（资产）。真正的资产可以分为：（1）不需要本人到场也可以赚钱的业务。如果必须自己到场工作，那就是职业而非事业。 （2）股票，债券，基金。 （3）可产生收入的房地产（租金？）。 （4）票据（放贷？）。 （5）版权，如音乐、书、专利。 （6）其它可产生收入，或有增值潜力的东西。当你的现金流增加时，可以购买一些负债（奢侈品）。穷人与富人的区别之一，就是富人只会在最后才买负债，而穷人过早购买负债、只是为了让自己看上去很富有。第五章 税收的历史与公司的力量劫富济贫是美好的童话，实际上税收是将中产阶级的财富转移给穷人，富人税负很少。英国和美国早期是不纳税的，只有一些因战争而临时征收的钱。在1900年左右，慢慢培养起了公众缴纳所得税的意识。大众赞成收税，是由于误以为税收有劫富济贫的意味，但实际上中产和穷人受到税负更多，富人总有办法从税负中脱身。成立公司（无实体公司）是富人避税的常用手…

《李大霄投资战略（第三版）》-李大霄
type: item
date: 2026-02-13T01:41:00+00:00
description: 前言 第一部分 有的人冲动，有的人沉稳 第二部分 判断大势的风向标 第三部分 有时需淡泊，有时需勇气 第四部分 股市杂谈 第五部分 我眼中的大势（2007-2024） 问题本文总结自2025年，李大霄的书籍-《李大霄投资战略（第三版）》，请支持正版图书，做好人买好股得好报。本文首发于个人博客https://lisper517.top/archives/4388/，转载请注明出处。投资是一场修行，投资观念反映了人生观、价值观。建议特别关注 b站-李大霄 。前言股票投资是反人性的，在低位买入、高位卖出，人生哲理。一般来说投资需要按风险从低到高，依次从货币基金、债券基金、混合基金、指数基金、股票基金、蓝筹股历练。投资市场看似没有门槛，但其实准入要求极高。不可辞职炒股，不可上杠杆，坚持价值投资、余钱投资，坚定立场、眼光长远。第一部分 有的人冲动，有的人沉稳一、投资品种的选择与风险投资品种按风险、收益从低到高排序：（1）银行存款，货币基金（2）国债，保险产品，债券基金，企业债券（3）混合基金，指数基金，股票基金，蓝筹股（4）三板，创业板，三线股，二线股（5）期货，外汇，权证（高杠杆）杠杆率越高、风险也越高，比如外汇最高杠杆率可达400倍，股指期货一般6-12倍。普通人不要上杠杆，能管理好自己的财富已属不易。二、投资首先应“不差钱”（一）确定目标投资前应先想好目标，可能的风险、能否承受，投入资金规模，后续有无补充资金。（二）流程控制1.财力用作投资的钱一定是扣除必要生活支出，且保留一些应对突发情况的救急钱，剩下的钱才可投资。2.投资时间年轻人与老年人的投资风格，前者时间充裕、可接受稍高风险，老年人则需要降低波动和风险。3.性格冲动、沉稳，果断、犹豫，是否喜欢风险，不同的性格会造就不同投资风格。三、投资而非投机投资需要符合投资条件，具备投资水平。投机需要市场有投机氛围，并且掌握投机技巧。初级阶段投资者往往缺乏耐心，有投机倾向。四、“坐轿”与“抬轿”“坐轿”者买入好股票后不动即可获取可观收益，“抬轿”者常做短线、快进快出。建议还是“坐轿”，省心省力却事半功倍。五、财富的转移1.投机时，财富从小机构流向大机构，从新股民流向老股民，从散户流向庄家，低技巧者流向高技巧者，心态差、无耐心者流向心态好、有耐心者，但有时也可能相反。2.投资时，价值投资，上市公司将公司做好、利润做多，投资者与公司共同富裕。一些公司从上市就开始毁灭，因为从来不分红、不创造回报。另外一点是要与国家利益一致（为国接盘，为国高位站岗）。六、少交易与频繁交易资金少、无耐心者往往频繁交易，但交易的最高境界应是少交易，低位买入、高位卖出。七、体力与智力的比拼平时锻炼、养好身体，关键时刻才能思维敏捷。多了解股市知识，不要在一知半解的情况下投资。拓展投资眼光，从A股到港股，进一步到美、日、欧、澳。八、股市赚钱概率股市通常是1赚2平7亏，1成人赚、7成人亏，2成人不赚不亏、白花精力。做医生、工程师等其它职业都需要长时间的学习与时间打磨，投资也是一样，成为合格的投资人需要长时间学习实践，隐性准入门槛很高。九、市场的周期1.做股票的长期持有者巴菲特的长期投资、价值投资并非持有不动，而是对上市公司的情况有非常清晰的了解，才能在较低的价格买入，做好等待10年的准备。2.做错要认及时止损。如果买入好股票，你的损失能更小。3.企业的生命现在社会较浮躁，很多上市企业只追求六七年而非百年老店，不应跟风炒作。十、巴菲特与价值投资其投资理念总结就是：在最低价格买入，然后耐心等待。1973、1982、2008年，每次股灾恐慌时巴菲特就会大举购入股票，如果没有好标的则更多持有现金。精华有三：一是不贪婪，卖在人声喧哗处。二是不跟风，勿追涨。三是不投机。十一、李嘉诚略。第二部分 判断大势的风向标一、股市的4大风向标1.上市公司的买卖时机上市公司大量减持或大量增持时。2.中石油中石油是否购入股票。3.汇金公司中央汇金投资有限责任公司，俗称国家队、汪汪队。4.社保基金社保基金是否入市。二、其它市场除了A股，也要关注货币、资源、重要商品市场。1.货币市场港币对A股影响较大，因此主要看港币。汇率制度的波动范围窄，上方（卖方）、下方（买方）通过卖出或买进美元来维持汇率稳定。从美元对港币的波动，可以看出香港政府对港币还是对美元的需求更强。从2010年态势看，港币量已经非常大，到了强下方兑换的区域，说明香港资金量非常充裕。2.资源市场在2008年之前澳元非常便宜，因为澳洲的资源便宜。澳股资源股价格便宜，而A股有色金属较贵。但由于资源的稀缺性，外汇储备可能会增加一些实物、股权。3.重要商品价格主要是原油、粮食。美元与原油一般是反向关系，原油的特点是上涨时间长、高位下跌快。粮食在居民消费物价指数中的权重较大。三、政策动向1.重大政策出台…

《功能合学 从颞下颌关节到微笑设计》-[美]Peter E. Dawson
type: item
date: 2026-01-22T09:25:00+00:00
description: 第一部分 功能协调 第一章 整体牙科学的理念 第二部分 功能紊乱 第三部分 治疗 问题本文总结自2015年，[美]Peter E. Dawson的书籍-《功能合学 从颞下颌关节到微笑设计》，请支持正版图书。本文首发于个人博客https://lisper517.top/index.php/archives/4326/，转载请注明出处。第一部分 功能协调第一章 整体牙科学的理念第二部分 功能紊乱第三部分 治疗问题1.全文搜索为什么

《根管治疗图谱（第2版）》-彭彬
type: item
date: 2026-01-22T09:15:00+00:00
description: 第一章 病例选择 第二章 髓腔解剖 第三章 橡皮障隔离术 第四章 开髓 第五章 根管预备 第六章 根管冲洗和根管封药 第七章 根管充填 第八章 根管再治疗 第九章 显微根尖手术 第十章 根管治疗后的牙体修复 第十一章 C形根管系统的诊疗 第十二章 牙内陷的诊疗 第十三章 牙髓再生术 第十四章 镍钛根管器械分离的预防及处理 第十五章 锥形束CT的应用 问题本文总结自2022年，彭彬的书籍-《根管治疗图谱（第2版）》，请支持正版图书。本文首发于个人博客https://lisper517.top/index.php/archives/4322/，转载请注明出处。第一章 病例选择第二章 髓腔解剖第三章 橡皮障隔离术第四章 开髓第五章 根管预备第六章 根管冲洗和根管封药第七章 根管充填第八章 根管再治疗第九章 显微根尖手术第十章 根管治疗后的牙体修复第十一章 C形根管系统的诊疗第十二章 牙内陷的诊疗第十三章 牙髓再生术第十四章 镍钛根管器械分离的预防及处理第十五章 锥形束CT的应用问题1.全文搜索为什么

《全局诊断-牙科诊断和治疗计划的新视角》-J. William Robbins，Jeffrey S. Rouse[美]
type: item
date: 2026-01-20T14:51:00+00:00
description: 第一章 全局诊断：跨学科治疗计划制订的艺术与科学 第二章 全局分析诊断表 第三章 5个CORE问题 第四章 美学牙冠延长术 第五章 组织移植 第六章 成人牙列的牙槽骨压低治疗 第七章 牵引助萌术 第八章 正颌手术 第九章 牙颌面整形 第十章 牙槽骨发育过度：全局诊断中最难处理的部分 第十一章 序列治疗 第十二章 CORE模板 第十三章 病例研究 问题本文总结自2017年，[美]J. William Robbins，Jeffrey S. Rouse的书籍-《全局诊断-牙科诊断和治疗计划的新视角》，请支持正版图书。本文首发于个人博客https://lisper517.top/index.php/archives/4320/，转载请注明出处。第一章 全局诊断：跨学科治疗计划制订的艺术与科学第二章 全局分析诊断表第三章 5个CORE问题第四章 美学牙冠延长术第五章 组织移植第六章 成人牙列的牙槽骨压低治疗第七章 牵引助萌术第八章 正颌手术第九章 牙颌面整形第十章 牙槽骨发育过度：全局诊断中最难处理的部分第十一章 序列治疗第十二章 CORE模板第十三章 病例研究问题1.全文搜索为什么

投资策略-定投
type: item
date: 2025-12-20T13:34:00+00:00
description: 第一章 定投的理论基础 第二章 定投实践 第三章 辅助工具本文的目的是描述定投的投资策略。本文首发于个人博客https://lisper517.top/archives/4264/，转载请注明出处。本文内容来自各种网络资料以及 b站视频 ，个人总结。任何投资都有风险，本文不构成任何投资建议。理财产品收益率超过6%就要打问号，超过8%很危险，超过10%就要做好损失全部本金的准备（郭树清，陆家嘴金融论坛，2018-06-14）。一定用闲钱投资，不要拿马上急用的钱、贷款借来的钱投资。投资书单：《富爸爸穷爸爸》、《小狗钱钱》、《穷查理宝典》、《大道：段永平投资问答录》、《积极性资产配置指南》、《滚雪球》、《资产配置的艺术》等。第一章 定投的理论基础一、定投的概念定投即“定期定额投资”，指在固定的时间（如每月1日，每周一，或者每天），以固定的金额（如每月1000元），投资到指定的同一投资标的（如某支指数基金）中。定投像一种“理财储蓄计划”，让你忽略市场短期波动，通过长期、持续的投入来平滑成本、积累资产。一、定投的特点1.淡化择时定投假设市场总是在波动，不去预测市场的高点或低点，而只需严格按照定投计划操作，避免了“追涨杀跌”。2.平均投资成本在价格高时，定投能买到较少的份额，但已持有的部分在上涨；在价格低时，虽然持有的部分下跌，但定投能买到更多的份额。综合下来看，定投降低了平均购入成本。另外，对于资金不充裕的人来说，无法一次性拿出大量本金，定投也使资金投入更平滑。3.复利效应利滚利，非常恐怖。4.强制储蓄对于年轻人来说，定投也可以避免乱花钱。当然，也不能排除定投亏钱的可能。5.减少波动相比于一次性投入，在下跌时，定投可以减少回撤；但相应地，上涨时定投的收益更少。6.微笑曲线与哭泣曲线当走势先下跌后上涨时（画出一条微笑形的曲线），定投收益高于一次性投入（最适合定投）；当走势先上涨后下跌时（哭泣曲线），定投收益最差。因此定投相对来说应该追跌杀涨（越跌越买），但最重要的还是选择标的。第二章 定投实践一、选择投资标的定投最适合的是长期上涨、但短期有波动的资产。1.首选宽基指数基金，如纳斯达克100、标普500这些指数的基金（难度稍微大一点的有沪深300、中证500、上证50、科创50等）。2.次选行业、主题指数基金，如消费、医药、科技、新能源、AI等。3.再次选其它主动管理型基金，根据基金经理风格不同而有变化，可能重仓某支个股、板块，也可能一些经理喜欢分散投资。4.其它国债，收益稳定但较低；个股期货，风险太高。笔者的建议是尽量分散投资，既有稳健的国债，也可以适当加一些激进的投资。目前（2025-12-20）关注的有：（1）宽基指数，纳斯达克100、标普500、沪深300、上证50等。前两者关注更多，算风险中等。 （2）贵金属，黄金白银等。黄金近几年涨疯了，目前可能处于高位，应该算风险较大。 （3）现金流ETF，一些现金流充沛的公司，算风险较大。 （4）红利ETF，稳定高分红的公司，也称低波红利（低波动性），算风险较低。但是投资此类ETF需要做好长期打算，五年十年。 （5）短融ETF，短期债券（消费债等等），和国债的风险差不多。 （6）国债，风险最低。风险可以自己评估，最简单的道理：收益越高、风险越大。不要把鸡蛋放在一个篮子里，比如所有资金只拿1/3投资，其它2/3留作它用；在这1/3里，又作如下划分：（1）宽基指数投50%。（2）红利低波，20%（3）现金流，10%。（4）贵金属，10%。（5）短融，5%。（6）国债，5%。上面只是随便举例，不构成投资建议。总之，通过合适搭配，最终目标是跑赢通胀，使所有加和、总的年化收益达到5%，或者8%，甚至10%。二、选择投资平台在支付宝、银行等平台交易称为场外交易（还有京东、且慢、天天基金等），各种券商平台交易则称为场内交易。一般普通人投资在支付宝即可，购入手续费打一折（0.1%左右）。场外交易的优点是方便快捷，可设置自动扣款，省心。缺点有：①整体费率更贵。包括申购费（1.2%左右。支付宝打一折就是0.1%），管理费、托管费（加起来0.2-1%左右不等，看具体基金）等。②交易不自由，比如可能有单日买入限额，T+N（发起买入操作后需要再过N天才能实际入仓，一般是1-2天）等。但是可以设置每日定投规避限额，并且定投本来也是需要长期持有的，笔者感觉影响不大。如果选择场外交易，买的一般都是带“联接”的，长期持有的话选后缀为A的，短期操作选C类。A类的管理费、托管费更低，但买入费更高，而且如果持有时间短就想卖的话还要收费（一般需要持有1周到2年，卖出时才不会收手续费，这也是为了鼓励长期持有）。场内交易的特点有：①整体费率更便宜，但前提是能申请到万分之0.5手续费、5块以下免收的券商账户，否则算下来可能不如支付宝的性价…

《深度学习入门 基于Python的理论与实现》-斋藤康毅（笔记）
type: item
date: 2025-12-17T14:48:00+00:00
description: 步骤/目录： 无本文首发于个人博客https://lisper517.top/index.php/archives/4260/，转载请注明出处。本文的原文写作日期为2020年11月17日，主要目的是总结《深度学习入门 基于Python的理论与实现》。笔者的毕业论文有很多东西来自这本书。下面的内容有些缩进或者图片缺失，可以参考 原word文档 。本书主要用numpy来处理运算，用matplotlib将结果可视化。对于没有基础的人十分友好，只需要高中的线代知识就可以看懂。 1.x=x.flatten() 将矩阵及张量转换为一维数组。x>15，结果得到一个由True和False组成的一维列表，x[x>15]即可输出所有大于15的成员。 矩阵与一维数组的*乘，（数组长度与矩阵列数相同）将一维数组扩张为矩阵形状后简单相乘，符合交换率，符号为*； 矩阵与数组dot乘，（数组长度与矩阵列数相同）将一维数组与每行对应索引相乘求和，得到一维数组，长度为矩阵的行数：如[[1, 2], [3, 4], [7, 8]] dot [5,6]，则得[1*5+2*6, 3*5+4*6,7*5+8*6]，不符合交换律，用np.dot计算。 一次绘图流程：p42 2.感知机：接受一个或多个输入，输出一个信号。有多个输入时，可以给各个输入配置权重。机器学习就是人给机器一些数据，机器根据这些数据选出权重的过程。 P56从图像上，感知机是一条直线，有局限性。叠加多个感知机可以构造类似曲线。 3.对于单层感知机，实际上有两个函数，比如首先有y=b+x1*w1+x2*w2，其中b为偏置，w1、w2为权重；然后通过激活函数，比如h(x)=1或0（当y<=0时为0，否则为1。这种函数的输出是跳跃的，可称为阶跃函数）。若把激活函数换成其他形式，就接近神经网络的概念了。常用的一个激活函数（sigmoid函数）：1/(1+exp(-x))，其中exp(-x)为e的-x次方。 接受numpy数组为参数的阶跃函数见p69。 激活函数也可以使用ReLU函数，其在x<=0时输出0，在x>0时则为线性关系。P74 对于输出层的激活函数，如果是分类问题（类似阶跃函数）用softmax函数，回归问题（连续输出数值）用恒等函数。P89 softmax函数的输出是连续的，总和为1，可以看作概率。为了节省算力，对未知模型进行预测时通常也可以省略输出层的softmax激活函数（接受数据进行学习时可以不省略）。 在分类问题中，输出层的神经元数量通常等于类别的数量。哪个神经元的输出最大，就会归类为该类别。 4.正规化：将数据进行处理，使其限制在某个范围内。正规化是一种预处理。 批处理：相同的神经网络，多个输出，多个结果。批处理可以大大加快运算速度。P101 5.损失函数：描述当前神经网络与测试数据（即监督数据）在多大程度上不拟合。一般可用均方误差函数和交叉熵。均方考虑了非正确解、越接近0（越小）越好，交叉熵只包含正确解、越接近0（越小）越好。 机器学习就是要使得损失函数值最小。如果训练数据太多，可以从中随机选择部分数据来学习，称为mini batch。 不用精确度作为评价标准，因为要设定参数的导数（变化梯度），如果用精确度为指标，容易导致导数为0，参数无法更新（精确度常常是跳跃的，微调无法产生影响，而损失函数是连续变化的）。这也是sigmoid函数优于阶跃函数的地方（激活函数）。 对于矩阵，y[0,2]的写法等同于y[0][2] 梯度指示的方向是损失函数减少量最多的地方，不一定指向损失函数值最小的地方。所以，机器学习可能会陷入局部最小值、鞍点或者学习平原。 鞍点处的梯度也为0，比如一个马鞍形曲面，(0,0,0)处的形状就很像马鞍。 梯度，就是一个一维数组。一个函数有多个输入，那么梯度就是这个多维函数（在某一点处）的导数。梯度数组的大小和输入多少相等，意义是对每一个输入，在保持其他输入不变时求该输入的导数，最终组成一个导数数组。为了使损失函数减小，需要沿负梯度方向下降。 6.反向传播法算梯度的速度比微积分法快许多，主要应用了复合函数的求导（相乘）。 7.有时SGD（随机梯度下降），即沿着梯度最大的地方下山的方法，不一定能最快下山。还有其他一些方法。 Momentum（动量法），如果某一方向上的梯度较小，但是持续很久，就适合用这种方法。模拟静止小球在山中的运动，某一方向累计的梯度会给小球积累该方向的速度，于是在该方向上移动越来越快。 AdaGrad（Adaptive适应梯度法），对梯度中的每一个导数都有一个学习率，该学习率还会不断衰减。AdaGrad是通过记录过去所有梯度的平方和实现的，最终学习率会衰减到0。不想让学习率衰减太快可以用RMSProp法，其会更多地考虑最近的梯度、逐渐减小久远梯度的权重。 Ada…

按键精灵（python加强版）
type: item
date: 2025-12-17T14:38:00+00:00
description: 步骤/目录： 无本文首发于个人博客https://lisper517.top/index.php/archives/4259/，转载请注明出处。本文的原文写作日期为2020年10月22日，主要目的是用Python重构按键精灵。主体程序，主要是一些功能的实现，具体应用需要自己写。写的比较乱：import win32gui, win32api, win32con, win32ui import time from time import sleep import random from random import uniform import logging from logging import info, warning, error from config import VK_CODE import copy import cv2 as cv import traceback # mode为test意为调试模式，real则为实际应用 # In 'test' mode, it will print some hidden info for Debug mode = 'test' # 模式图的存储路径 # The save path of pattern pics pattern_path = 'yourpath\\' # 设置logging的书写格式 # Setting logging configs logging.basicConfig( level=logging.DEBUG, format= '%(lineno)d : %(asctime)s : %(levelname)s : %(funcName)s : %(message)s', filename='yourpath\\log{}.txt'.format( time.strftime('-%Y-%m-%d')), filemode='w') # 用当前时间初始化随机数 # Set random seed random.seed(time.time()) def Get_PosAndHwnd(hwnd=0, ClassName=None, TitleName=None): '''接受句柄、类名、标题名，返回第一个匹配的窗口位置和句柄。 Accepts Handle, ClassName or TitleName of a window, returns the rect-pos of the first window that matches. Args: hwnd: 目标句柄 target handle. ClassName: 目标窗口类名 target ClassName. TitleName: 目标窗口标题 target TitleName. Returns: x1, y1, x2, y2, hwnd 前四个参数描述窗口在显示器中的位置，hwnd为句柄。 x1-y2 describes the pos of the window in screen, last arg is the handle. ''' try: if hwnd == 0: hwnd = win32gui.FindWindow(ClassName, TitleName) x1, y1, x2, y2 = win32gui.GetWindowRect(hwnd) info('找到窗口，句柄：{}，标题名：{}，类名：{}，坐标：{}'.format( hwnd, win32gui.GetWindowText(hwnd), win32gui.GetClassName(hwnd), (x1, y1, x2, y2))) return x1, y1, x2, y2, hwnd except: global mode if mode == 'test': traceback.print_exc() elif mode == 'real': error('Get_PosAndHwnd 出现错误') def Activate_Hwnd(hwnd): '''激活指定句柄的窗口。每次转换时使用。 Activates the window with the matching hwnd. Args: hwnd: 目标句柄 target handle. Returns: No return. ''' try: win32gui.SendMessage(hwnd, win32con.WM_ACTIVATE, win32con.WA_ACTIVE, 0) # WA_CLICKACTIVE为通过鼠标激活，WA_ACTIVE为鼠标以外的东西（如键盘）激活，WA_INACTIVE为取消激活 # WA_CLICKACTIVE …

如何正确用Python截取屏幕
type: item
date: 2025-12-17T14:33:00+00:00
description: 步骤/目录： 无本文首发于个人博客https://lisper517.top/index.php/archives/4257/，转载请注明出处。本文的原文写作日期为2020年10月21日，主要目的是用Python截取屏幕。最近需要对窗口截图，看到了以下文章：https://www.cnblogs.com/Evan-fanfan/p/11097850.html其中有些错误（乱写文章害人不浅啊）。经过我2天实验，大概搞清楚了3个关键api的用处。注释和代码如下：# 根据句柄、截图位置和图片路径，对窗口的客户区截图并存到指定位置 # GetDC一类的需要用ReleaseDC释放，CreateDC一类的用DeleteDC释放，DeleteObject则删除一个逻辑笔、画笔、字体、位图、区域或者调色板， def ClientRect_PrtSc(hwnd, area=None, filename=''): try: hwnd = hwnd if filename == '': filename = 'C:\\Users\\tadio\\Desktop\\helper\\pics\\targets\\{}.bmp'.format( hwnd) hwndDC = win32gui.GetDC( hwnd) # 获取窗口的设备上下文Device Context。GetWindowDC包括了非客户区，而GetDC仅为客户区 mfcDC = win32ui.CreateDCFromHandle(hwndDC) # 获取mfcDC saveDC = mfcDC.CreateCompatibleDC() # 创建可兼容DC saveBitMap = win32ui.CreateBitmap() # 创建bitmap以保存图片 '''MonitorDev = win32api.EnumDisplayMonitors( None, None) # 获取显示器信息，枚举显示器，笔记本据说可能有问题''' x1, y1, x2, y2 = win32gui.GetClientRect( hwnd) #GetClientRect获取客户区窗口位置，GetWindowRect获取整个窗口的位置信息 x, y, w, h = (0, 0, 0, 0) if area == None: x = 0 y = 0 w = x2 - x1 h = y2 - y1 else: x, y, m, n = area w = m - x h = n - y saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) # 为bitmap开辟空间 # 对saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)的理解： # 1.mfc相当于一个虚拟屏幕。这里的参数w和h决定了这个屏幕的大小。 # 2.屏幕的初始状态是黑色，每个坐标都是#000000 # 3.之前有mfcDC = win32ui.CreateDCFromHandle(hwndDC)，又有hwndDC = win32gui.GetDC(hwnd) # mfcDC和hwnd窗口之间建立了某种关联，可以将hwnd窗口中的图像放到虚拟屏幕上 saveDC.SelectObject(saveBitMap) # 将截图保存到saveBitMap中 saveDC.BitBlt((0, 0), (w, h), mfcDC, (x, y), win32con.SRCCOPY) # 对saveDC.BitBlt(坐标1, (w, h), mfcDC, 坐标2, win32con.SRCCOPY)的理解： # BitBlt的功能大概是把从hwnd窗口截到的图放到虚拟屏幕上，信息转入saveDC。 # 1.坐标1是针对窗口截图的，指定截图放在黑色背景上的位置（指定左上角） # 2.w和h窗口截图的长宽，而坐标2指定了开始截图的位置 # 这两个参数决定了从hwnd窗口的哪里截图、截多大的图 # 3.mfcDC已经和hwnd窗口建立了关联，所以不需要指定虚拟屏幕从哪个窗口获得截图 # 4.SRCCOPY意为将截图直接拷贝到虚拟屏幕中 # 接下来的saveBitMap.SaveBitmapFile(saveDC, filename)则是对虚拟屏幕截图并保存到指定位置 saveBitMap.SaveBitmapFile(saveDC, filename) # 清除数据 win32gui.DeleteObject(saveBitMap.GetHandle()) saveDC.DeleteDC() mfcDC.DeleteDC() win32gui.ReleaseDC(hwnd, hwn…

JavaScript入门（源自runnoob）
type: item
date: 2025-12-17T14:21:00+00:00
description: 步骤/目录： 无本文首发于个人博客https://lisper517.top/index.php/archives/4252/，转载请注明出处。本文的原文写作日期为2020年9月24日，主要目的是初步了解JavaScript（源自runnoob）。下面的内容有些缩进或者图片缺失，可以参考 原word文档 。https://www.runoob.com/js/js-tutorial.html 1.js直接写入输出流： 设置一个按钮，对时间做出反应： 点我! 用js改变html内容： JavaScript 能改变 HTML 元素的内容。 点击这里 或者改变图片（这里可以使用?:运算符）： 验证输入： 点击这里 2.js应该位于 之间，放在 或 里。通常情况下都放在head里或者统一放在页面底部（脚本可以写在调用处之后）。也可以从调用外部脚本，修改script的src即可： 标签的innerHTML属性，即内容，可以赋值更改。 Document.write在页面加载后使用则会覆盖页面。 3.js输出： window.alert()弹出警告框，document.write()将内容写到HTML文档，innerHTML写出到标签的内容，console.log()写入到浏览器的控制台。 Js字面量：整数、小数、科学计数（123e5）、字符串（单双引号均可）、数组（[]括起来）、对象（由键值对组成）、函数（用function声明）。 声明变量用var。所有皆var（块中的变量可用let。如果不加var或let，则默认为全局变量。花哨一点可用用var x = new 类型(值)）。语句用;分隔（可选）。注释用//和/*。js对大小写敏感。Try对应catch，throw对raise。可用\表示下一行接续（有条件）。Js逐行执行。标签有this指针。 4.HTML常见事件： 事件 描述 onchange HTML 元素改变 onclick 用户点击 HTML 元素 onmouseover 用户在一个HTML元素上移动鼠标 onmouseout 用户从一个HTML元素上移开鼠标 onkeydown 用户按下键盘按键 onload 浏览器已完成页面的加载 5.字符串对象有length方法。其他常用的还有concat、indexOf、match（re匹配）。 ===操作要求类型和值都相同，==则先转换为同类型，只比较值。相对有!=和!==。 Js中也有switch，和c++中一样。这里的switch用的是===判断。 Break或continue可以后接具体的block名。 6.在 JavaScript 中有 6 种不同的数据类型： string number boolean object function symbol 3 种对象类型： Object Date Array 2 个不包含任何值的数据类型： null undefined 6.js中的re：格式为 /正则表达式主体/修饰符(可选) 比如i修饰符，表示不区分大小写。 其他修饰符： i 执行对大小写不敏感的匹配。 g 执行全局匹配（查找所有匹配而非在找到第一个匹配后停止）。 m 执行多行匹配。 search方法和replace方法都可用re。 元字符： \d 查找数字。 \s 查找空白字符。 \b 匹配单词边界。 \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。 Re有test方法，用来检验一个字符串是否含有自己。 Re详见https://www.runoob.com/jsref/jsref-obj-regexp.html 可用js验证表单。或者在input标签中添加required="required"属性来自动验证非空。Html5中新增了约束验证。 7.异步函数：在网页上执行一些时间较长、当前用不到的事情，比如读取大文件或者发出网络请求，可用在主线程之外用子线程，同时进行。具体用法是setTimeout(函数名，ms时间)，执行时启动一个独立于主线程的子线程，等待函数执行一定时间。 对于嵌套setTimeout，可用promise将其转变为顺序结构。 更多内容见后。以上内容仅用于初步看懂js。