大家好,我是一登,欢迎来到我的教室,本课程是关于 python, 通过 wins, rcom 操作 word 金奖和项目实战。 好,从本节课开始,我们将陆续的讲解 document 这个接口。在上节课呢,我们有提到过,创建一个文档或者打开一个文档,都会返回一个 document 对象啊,那一个 document 对象等于一个文档啊, document 是弱者开发的重中之重,因为文档的绝大部分操作都会依赖于这个接口,它的属性和方法共计三百七十四个,只需要掌握部分的内容,就可以满足各种类型的开发需求。第一个要学的是 document 的认举方法,它可以实现资源 的选中。我们在操作一个文档某段文字的时候,我们得先选中文字啊,就像这个样子,先选中他,然后才能对他进行格式的操作。论举就是来实现这个作用的,或者是表示一个插入点,以便我们往文档里面写入内容。 它本身也是个独立的接口,它的方法和属性有一百八十四个。在 word 接口中,有两个接口能实现选中的啊,一个是 section, 一个是 range。 section 它就是一个鼠标啊,它所表现出来的和鼠标一模一样。那 range 呢?我们可以理解为是一个看不见的鼠标, 两个接口有太多的相似性了啊,但是本质却不同。在网上很多网友的分享,他们都会使用 section 来实现选中,但是在文档级编程中,我个人强烈推荐使用 range。 至于原因,我将会在最后做一个简单 演示来说明。好,这节课我们主要讲任举如何声明范围以及更改范围。呃,如何使用任举的部分重要的属性,以及如何使用任举来写入文本演示,使用 doctor 们这个 safe ass 来保存新文档。好,我们代码演示。 好,我们接着使用上节课所创建的目录和环境啊,先创建一个 jubiter 文件, 这里需要关注一下它所加载的解释器啊,是不是我们所创建的训练环境。 把那个 wins rcom 的 dispatch 引入进来,运行。 启动一个客户端。使用这个 dispat 来启动 k w p s a w p s 点 设置。用 visible 属性来控制客户端是否可见运行它。客户端已启动。 我们直接创建一个文档啊,用来演示使用 application the application 底下的 documents 的 air 方法创建一个 好文档。点创建,我们往里面先填入内容啊,这样方便我们来演示。我们首先要学的是使用 range 来获取范围,并且还可以更改 range 的范围。 获取范围有三种,第一种是表示文档全选。 range 是 document 接口下面的一个方法。那么它要使用 document 来发起调用这些 range 啊。不传入参数就表示全选的文档,它会返回一个 range 的对象。我们使用 range 一接收一下进行它。 我们接着把练举一打印出来,看一看。他返回的是一个对象,但是细节并没有体现出来,我们就可以使用第一个属性 text case 是返回或设置范围内的范围 中的内容,我们运行看一下。好,成功把所有内容返回回来。这里需要注意的是有两个转移符,它是回车键啊,在这里呢,它表示段落的标记就是这个段落。 好,这里是通过不传入参数来获取全部文档,这个时候 rent 的范围就是整一个文档。好,我们接着演示。第二种方式就是 有内容的范围啊,有跨度的范围,我们使用变量 range 二来接收 dog range。 range 需要我们传入两个参数啊,第一个是范围的起始位置,第二个呢是范围的结束位, 他们的单位是字符这个范围,他的意思是我要从零字符开始,也就是文档的开头一直向前取二十个字符,他的范围就是零到二十。我们运行 通过 tech 属性,把零到二十的字符的内容给全部打印出来。好,这就是零到二十字符的内容。 第三种方式是读内容的范围,也就是什么呢?起始位置和结束位置是从 重叠的表示一个插入点,我们来演示一下 range 三到 range, 假如我们声明一个范围是零到零,也就是起始位置和结束位置是重叠在一起的,那这个时候他就成了一个点啊,成了一个点 test 打印出来空字符串,表示这个点是没有内容的。这种声明方式一般用来做什么的呢? 一般使用,一般用来插入文本,我想在这个点上面插入些内容,那么我就可以先在这个点上 先声明一个认举,对吧?然后用认举自己的属性或者方法,往里面写的内容。范围也好,点也好,他都是认举对象,然后再使用认举对象所提供的属 性格方法来进行操作,往里面写内容呀,或者是调整这个范围的格式呀等等。接下来介绍两个比较重要的属性,两个重要属性,一个是 star, 一个是 end。 我们拿这个 range r 来举例, star, range r 点 hand, 我们先把它打印出来看一下零到二十。好, 认举的 star 属性呢?是用来设置或者返回这个对象,这个认举它的起始位置。 and 也一样用来设置或者返回它的结束位置, 那么意味着我们可以通过它来更改范围咯。是可以的啊,我们将这个任九二的起始位置改一下,改成当前是零嘛,我们改成二,接着再把它的 star 和 and 重新打印出来,可以看到二到二十。本来是零到二十嘛,零到二十, 现在是二到二十,意味着我们可以通过 star 和 and 的属性随意更改一个任举的范围。除了通过 star 的属性和 and 的属性来更改一个任举范围 之外呢, rent 接口还提供了另外两个方法, move star 和 move hand, 这两个方法其实更为强大。好,我们依然拿这个 rent 二来做演示。 move star 他默认是不存参数的,我们先执行,看一看他是什么效果啊。执行完之后,我们再把他的两个属性再打印出来,看一下运行,这个时候发现酿酒的范围已经改了, 从原来的二到二十变成三到二十。 ok, 那这个 move star 到底它有什么功能呢?我们来讲一讲。 原来它的原来连举二的范围是二到二十, 那么 move star 它是用来移动这个起始位置的,向哪移动呢?默认向前移动。 那移动多少个位置啊?默认移动一个字符,默认默认一次移动一个字符。好, move star 默认是将 起始位置向前一次移动一个字符,这就是 move star 的功能,那 move star 向前移动意味着范围缩小,对吧?意味着范围缩小,原来二到二十,现在变成 三到二十了。范围缩小,它的默认参数是, unit 等于一,表示按字符单位移动。 count 等于一,一次移动一个 unit, 很好理解啊, unit 等于一,表示移动的单位是字符,一表示字符, 一表示字符。一次移动一个字符,那么如果我们把它改成二的话, 执行这个的代码,那么这里会变成几啊?会变成五,对吧?因为当前是 三吧。我一次移动两个字符,试一下五,没错吧? uni 这个参数还有别的长量啊。呃,如果是四,就表示按段落移动,如果是三呢?按句子移动, 我把 con 改为一。如果我现在演示的是按三, move star 每次向前移动一个句子, 第一个句子应该是以句号为结束的啊,应该是句号结束的这个地方我们先执行看看效果。 四十到四十,我们看一看四十的这个位置到底是哪里 啊?直接通过到来,把零到四十的内容全部打印出来,看一下, 从句子的开始到开幕这里。没错,它确实移动了句子,但是为什么它的 end 也变成了四十了呢? 原来的 and 是二十,对不对?使用这个参数把这个 star 这个位置移动到四十这里的时候,他是不是超过原来的结束位置啊?对,那这个时候他会带着这个结束的位置 一起移动到这个距的,最后让他们俩变成了一个点。好,这就是 star 的作用。 move end 的用法和 move star 是完全一模一样,但是有一点不同的是, 它们的作用是一样,但是功能是相反的。功能相反,比如说 move star 向前移动,那么 它范围缩小对不对?那么它范围就会缩小,因为这个开始的位置是往这边移的嘛。范围缩小, move a 呢?也是朝前移动, 意味着我这个二十增大,对吧?变大,那么就是 move star 向前移动,范围缩小, move and 向前移动呢?范围增大,所以他们的效果是相反的,功能一样,但效果相反,这点大家多练习就 ok 了,没什么太大的问题。 那么这里我们提了个概念,一个是向前,那我得向后喽。什么是向前呢?就我们朝着文档结束的位置就在向前,那如果我朝着文档开始地方移动,这叫向后移动。我们可不可以控制他向后移动呢?可以的, 通过 con 的参数来控制位置向后移动。怎么控制呢?把它变成负数, 负数表示向后移动,负一表示向后移动一个单位, 这个单位 g 是多少就由它来取,由它来决定吧。那负二表示向后移动两个单位啊,这是没有问题的。好,那至于其他三数四 表示段落移动啊,这个请大家自己演示啊,非常简单,非常简单。这里需要注意的是啊,不管是 star 也好, and 也好,他位置的移动如果超过了另外一个位置,那么他们两个会重叠起来,并且一起移动啊,这个需要注意,其他并没有太大的问题。 好,这节课我们先讲那么多,我们下节课接着讲愿举的其他方法和属性。点赞加关注再看,不迷路,我是一登下节课见。
粉丝43获赞64

那么我们这地方来详细讲解一下,调用 a p a 函数呢,我们经常用 embok, 对吧?那么我们调用 a p a 函数呢,是温度系统给我们封装的动态内衣库里面的磁性函数。 ip 函数默认的钓牛方式是 sdco 钓鱼令啊,我们常用的这个温度超系统给我们提供的三个核心的迪奥呢,是看到三二点迪奥啊,基地啊,三二点迪奥,他负责图形设备接口的。看到三二呢,是负责系统服务,包括内存管理啊,任务管理啊,动态连接。 那么有的十二点调呢,是负责啊窗口见面的啊,消息传送的,这个都是我们在之前课程学习过的。那么我们在具体调的时候呢,我们要使用 emoke 一句啊,因为简单,实际上你用靠也可以的啊,当然写的要麻烦吗?这是高级会面写法啊, emoke, 那么 ip 函数呢,他有 他的返回值,这个就是用微能超系统给我们提供的函数的证明呢,是放在投孽里的,所以说我们必须要包含投孽哈,嗯, include 的一句包含投念 include 的立本啊,他这是伪指令啊,他是包含这个投入库。

哈喽,亲爱的小伙伴们,大家好,欢迎收看刘金玉编程,那么本期我们带大家一起走一下 windows api 的一个使用入门。 我想 windows api 其实如果说了解到的朋友们肯定清楚,它非常的重要,那它就相当于什么呢? windows api, 那么我想首先先从这里开始做起来,开始简单的说起, 首先我们来讲一下这个 windows api, 首先说到这个 windows, 我们肯定知道 windows 就是一个 windows 操作系统,对吧? windows 操作系统,哎, windows 操作系统啊操作系统。那么 windows 操作系统的话, 那我们现在由原来的啊,由原来的很多的,这个从插 p 开始,对吧对吧?后面到无音期, 然后呢?再到啊哈,不是到 win 七啊,威威斯塔威斯塔威斯塔威斯啊啊威威斯啊,对吧?我们不写了,直接跳过这一个,因为好像有点烂,这一款啊,只要直接到 win 七之后还可以比较稳定啊,叉 p 到 win 七中间的威萨啊,实在是被人劈的 不行了。 ok, 完了之后呢,到微音八,对吧?微音八有一个 ok, 直到现在的微音十, 五音九直接跳过了,看到没有?五音九直接跳过了啊,直接到五音十,那么这样一些是这只是一个我们的操作系统而已,对吧?那么如果说我们看到 除了操作系统之外,其实还有操作系统的啊,还有什么呢?操作系统的一个哎位数,哎位数, 操作系统的位数啊位数,什么是操作系统的位数呢啊?都是三十二位啊,也就说是三十二位操作系统,对吧? 还是六十四位操作系统,那么很早以前我们是八位啊,甚至啊,第一次开始是八位操作系统,对吧?八位操作系统,这其实就是计算机的 一个一个字长啊,字长,那么是哪里去看呢?我们可以直接在这个我的电脑属性当中去看到,呃,看到大家看到我的,这是我电脑的配置,对吧?呃,然后呢,我们可以看到 多少位?你看我这里是六十四位的啊,六十四位的一个尾处理器啊,操作系统,也就是说我装的是一个六十四位的无音石,对吧?六十四位的无音石,而我们这里面有一点是 要清楚的,就是说是什么呢?六十四位,虽然说有三十二位,六十四位之分,但是六十四位操作系统啊,还是兼容三十二位的 软件的啊。啊,兼容三十二位的软件的,那么也就是,哎,也就是什么意思呢?也就是什么意思呢?我们 最初啊,因为系统最初啊,最初肯定是由呃小的这一位到大的这一位,当然到我们接手到我们手 上的时候,我们普遍都已经看到的是三十二位了,当然最最最最早的时候是八位,对吧?后面到十六位啊,都是一个二的倍数,二的倍数啊,到后面再和那六六百四十位,三百二十位,三三千两百位都有可能,对吧?啊, 那么我们最初我们接手啊,我们我们在我们的这样一个认识当中,包括在我的这个认识当中,最初啊比较多的可能就是,呃,最初碰到多的,对啊, 啊,就是三十二位,基本上也就也那么非常的明显了,我们研究的对象那就是 win windows 啊, windows。 三十二位啊,三十二位的 api api 啊,简称叫是什么 啊?微音三二 apiapi 微音三二 api, 那么, 哎,这个我们可以给他写到同一行,简称简称, ok, 那么我们这一个我们已经知道了啊这一个我们已经知道了。呃,接下去的话呢?我们要知道 api 是什么呢? api, 应用程序开放的一个接口啊,应用程序开放的一个接口,那么我们用我的话来给大家啊,去讲啊,用我的话来给大家去讲 api 啊, api 啊,他是啊,他是 操作系统啊,或者是什么呢?我们这里 windows api 指的是 windows 操作系统啊, windows 操作系统, 那么我们其实还有好多还有好多其实就是,呃,简单的理解啊, 简单的理解,那么我们可以说是什么东西啊?就是系统的啊,是指,呃,应该是指接口啊,简单的理解就是接口, 哎,什么是接口?不是借口啊?接口。什么是接口啊?接口,那么接口无非就是啊, 接口,我们理解一下,从字面意思对接的口子,口子,对吧?这就是相当于是对接的口子吗?对接的口子吗?啊?啊,那么这样一个接口我们就是一个对接 口子,那么这个对接的口子我们是如何去理解呢?啊?就相当于是,呃,我们一间教一间教室啊,教室的话呢,我们开开着一扇门,对吧?开了一扇门就开着这扇门,我们从这扇门当中进去,对吧? 那么接口呢?有好好多好多接口啊,不同,就像我们教室,呃,教室的话,不同的门进去我们可能看到不同的一片景象啊,这样子啊,呃,这这个那么简单的去这样子去理解,那么对吧?然后我们说的是 windows a p i, 对吧? windows api 是什么呢?那么就是相当于是就是 windows 啊, windows 操作系统开放的啊,一个应用程序接口, 开放的,呃,嗯,用,哎,就直接写开放的接口吧。开放的接口,那么这些接口我们可以用来干什么呢?非常非常大的作用,这接口我们可以用来啊, 哎, windows 的 windows api 开放的这一接口啊,我们就这样啊,可以用来是干什么呢?用来好多作用啊,可以用来好多作用,呃,比如说可以用来啊, 基本上我们系统当中能做到的一些事情啊,就是 windows 系统能做到的一些事情,我们能够调用他的 api 就基本上都能够做到,比如说 啊,比如说我们想要调用这调用一些任务管理器,对吧?呃的一些功能啊,比如说我们 想要调用一个窗口啊,调用一个窗口啊,比如说我们调用一些其他的一些等等的一些功能,好多好多啊,好多好多都可以用。 这什么呢?用来控制。嗯,这些接口啊,接口啊,用来控制什么呢?控制, 用来控制啊, windows api, windows 系统啊,是用来控制 windows 系统的,那么假设我们 windows 系统 当中,我们这边,呃,旁边,对吧?他有个接口,假设是一个 com 接口啊, com 接口,不知道同学们有没有只看到过这个 com 接口,你自己可以网上去查一下,那么可以获取上面的数据啊,通过这样一个 api 也可以获取上面的数据,包括我们最为简单的能够常见的就是我们的键盘,对吧?键盘我们当然 ab 当中已经给了一些啊,其实给的这些函数啊,事件啊,其实最最基 基础的就是还是调用这个 windows api 啊,函数的里面我们写好了,还是调用 windows api, 也就是这个是最为根本的,对吧?就是这个最为根本的一个东西,那么 ok, 讲到这里我们就开始 啊,有个问题了,有个问题了,问题是什么呢?哎,那就是 windows api 如何去找呢?对吧? 如何入门啊?如何入门的问题就是到哪里去找啊?到哪里去找这个 windowsapi, ok, 那么我们威逼自带啊哈 啊,很好,这个 v b 六自带啊,自带 windows api 的查找工具, 哎,查找工具也就是这个东西很多很多被小伙伴们给忽略的啊,给忽略的,那么你装完之后他其实自带的这么一个 api 查找工具,我们可以根据查找的结果啊,可以根据 查找的结果啊,自动生成,哎,还是还,并且还能自动生成一个啊,声明语句 啊,自动生成一个生命语句,声明,声明语句,对吧?哎,是不是很棒,他还能自动给你生成一个生命,写都不要你写, 直接复制就可以了啊,好,那么我们直接来应用了,直接来应用了,如何来应用啊?我们来看到,首先要打开它,打开它之后我们找到 microsoft 啊,这里面有个微币,我们装完之后,对吧?装完之后,我们装完之后有个微币,微币六点零啊,微币六点零。完了之后,我们这里面看到有一项啊, 如果说您之前是按照我的第零几期啊?啊,是这样一个微 安装的一个 v 呃, vb 的一个工具的话,你可以直接找到这样一个 api 啊,完整的安装之后你肯定 是能够找到 api test view, api test view 什么意思呢? api 文本的一个查看期,对吧? api test viewer, 找到他啊,那么是在哪里呢啊?在菜单目录,菜单目录中找到我应叫做什么呢? api view, 再给大家看一下 m m, 这里面有一个叫做 api test viewer, 对吧?我们给它记一下啊,找到 api test viewer, ah viewer, api 查看器, api 文本查看器, ok, 找到之后并不是马上就能用的啊,大家看到这里面我什么都没有啊,什么都没有,对吧?而我怎么样去用呢?首先要加载, 加载,加载。怎么加载?直接加载这个 load text, load text file 啊? load text file, 那这里面我们找到一个叫做无音三二 api, 对吧?就是一个,我们直接直接就有了,但你看这个东西是在哪里呢?你在安装 vb 的时候,他就自己给你这个 ap 都给你装上去了啊,多棒啊,对吧?人家九八年就考虑到这个事情了,看到没有?一九九八年六月十八号啊,他就考虑到这个事事情了啊,你看,呃,更新的时候都还是零点啊,都还是零点,所以一般写程序的话,晚上可能会有比较多的灵感啊。 windows ipi, ok, 我们加载他,加载他之后,你看,直接就来了,一条一条直接就来了,对吧?那么多啊,就有那么多的 api 开放给我们,但是我这里看了一下啊,有 个别的,我们这个地方不全啊有个别的不全,但是基本上都还在了啊,基本上都还在了,也就是说,也就是说基本上是不影响我们的使用啊,不影响我们的使用, ok, 那么我们如何入门呢?大家看到了吧?找到啊,第一步,找到这个 so view, 对吧?第二步干什么呢?导入, 哎,第二步啊,到哪里导入呢? file 文件导入文件,对吧?哎到,哎。第二步导入导入, 导入 v 三二 api 啊。 v 三二 api, ok, 文本,应该说是 文本,对吧?文本。那么第三步我们导入了之后我们就可以直接使用了啊,直接使用怎么使用呢啊?假设啊,我们之前一直写了一个叫做什么东西啊?啊哈写的一个叫做失踪, 对吧?我们经常会用到一个时钟,那么这个时钟的话呢?这个时钟的话呢?怎么办呢?时钟时钟我们基本上都是 之前啊让他每秒钟停多少次啊?停多少次。四其实其实呢他就有用到一个叫做 sleep 啊,类似于这样一个 sleep, sleep 就是什么呢?睡眠,睡觉,哈哈哈哈。 sleep, 当我们找到他这个之后或者你往下拉 sleep 啊,找到他之后我们这个地方使用 private 啊, private 就是私有的,私有的,因为待会我们 form 当中我们用的时候只能写私有的。好,我们来点击, 大家看到上面是一个 api, 太是一个类型啊类型,第一个是一个合约,第三个是一个啊类型啊,第三个就是一个什么类型对吧?这个呢?呃 第二个是一个声明,那么我们在使用它的函数的时候呢我们就使用声明啊,使用声明 declares 声明。好,我们来添加爱的点一下啊点一下之后你看他 他连不需要叫你这样直接 copy 都有了啊,直接 copy 都有了,那么我们直接来把他 copy 一下,好,嗯,那么 第三步就是搜索我们需要的 api 函数,对吧?哎直接使用什么模式呢? private, private 模式添加啊。第四步复制啊,对吧?复制 api 文本,复制 api 文本好, 那么到这里的话呢,我们基本上这一个 api 的文本都已经如何利用?都已经讲完了啊,那么接下去我们来用于实践啊,用于实践 模拟啊,自动倒计时啊,倒计时, ok, 模拟自动啊,倒计时,比如说啊,使用技术点什么呢?技术点啊,我们就使用 api 啊,使用 api 好,我们就使用它,对吧?刚刚我们给它来找出来的这一个啊,找出来的这一个我们来使用它,我们来新建一个项目啊,从这里我们又要开始新建了, 好,新建这么一个项目,新建之后我们来又要保存了吧,哈哈,千万不要忘了保存好保存第一步,对吧? ctrl 加 s, 我已经出来 桌面上面我们有一个就刚刚的了解外, 好的,保分,那么我们这样子 保存之后,我们就可以直接啊,假设我们这个地方有一个,嗯,缝缝啊,比如说我们直接全部用全代码来写啊,全代码来写好缝的话呢?我们,呃,这个地方, 嗯,这个地方我们来写一个,写一个 label 啊,写一个 label private, 呃,写一个 label。 声明一下吧,声明一下吧, events ah with events label l a b e l e label es label, 这是带有 label 事件的一个 label, 按,哎 labor 标签啊,然后呢,我们在这个地方就把它加载出来,首先啊,把我们的刚刚的这个 东西 api 复制到最上方啊,复制到最上方,大家看到直接就可以生效了,对吧?直接就可以生效了。然后这个 api 的话,中间大家看到的是一个传递的是一个好秒,对吧?传递的是一个好秒啊,看到传递的是一个好秒, 也就是说中间这个参数啊,这个参数,我们的这个群里面我们是有有有一个 windows api 的一个介绍,对吧?有哪些 api 你可以去看一下,有专专门这样子的一个文本啊。啊,我们的 qq 群里面啊,编程创造城市 这个 qq 群里面专门有这样一个 api, 市区介绍他这个到底是什么意思,对吧?这个 api 到底是什么意思?好, 那么中间参数我们写一下啊,参数啊,传入什么的, 传入一个毫秒数,毫秒数啊,传入一个毫秒数,也就是我们还是要传入一秒钟就要一千,对吧?好,我们这个地方来,先把这个 labo 来给他 实力画一下啊实力画一下 let 一等于 ctrls, ctrls 点 a, 然后我们学会这样子用纯代码来写,之后我们要尽量的多练习一下啊啊啊, let ol a b e l 完了之后我们就哎这个地方名称 legal 一 legal 一 ok, label 一的什么呢啊,我们让他,嗯嗯,奥特 otto size 啊,首先等于 q 自动大小啊,因为这些基础我们之前都有,我们就不细讲了啊,这个地方只有这个地方给大家注视一下啊,就是一个 引路啊,引路英德斯 api 啊,这是一个什么函数呢?这是一个啊,是一个那个, 这是一个睡眠实力吧,就是睡眠睡眠函数实力盘数。 这是什么意思呢?暂停,暂停多少时间?意思就是暂停多少时间,对吧? okay, 那么我们这个地方继续啊,我们让他产生在中间位置吧。 label label 一的 left 等于啊,他的 left 等于什么中间位置啊?中间位置 skill 中间位置等于 skill wise 对吧? skill wise 除以二减去 label 一的 wise 除以二。 好,呃 label 一的 top 等于 scale height scale height 除以二减去 level 一的 hat 除以二,对吧? ok, 这样子我们就达到一个中间位置啊这样子我们就达到了一个中间中间位置我们先给他复个值吧 副个直吧副个直我们就让他就叫做从十开始好了。 来保十的。开不行你的开不行你说让他等于十啊让他等于十。好那么我们接下去的话我们来使用这样一个东西 让这个十来进行倒计时啊进行倒计时那么倒计时呢我们直接使用。嗯 啊你这个东西应该是要在载入之后啊载入之后这个是我们初始化啊初始化的一个地方然后 label e visible label 来吧一点 vs 吧属性等于九我们先来把它进行处置化应该在中间一个十的位置对吧稍微大一点啊。来吧一的 size front front size 对吧稍微让他大一点等于八十吧 哈哈。三十 五十好,我们这个位置可能需要调节一下啊调节一下 这个地方啊十,哎好像有点不是很正啊啊有点不是 不是很正啊我们暂时就先忽略这一点啊。看到啊,因为他这个地方奥特赛他自己的这样一个计算对吧自己这样一个计算呃估计这个地方这样子可能会好一点哎果然他上下的代码是有 大家看到啊代码是从上到下读的从上到下读的对吧从上到下读的啊然后就 ok 了。好,这是我们的这个十啊,这是十已经有了啊,这样一个十,那我们直接让他来进行倒计时啊,来进行倒计时。倒计时。我们怎么来倒计时呢?我们, 呃直接使用这样一个函数实力盘数来进行倒计时,实力盘数来进行倒计时的话呢?我们首先应该要让他进行载入,对吧?载入之后,然后再进行开始,对吧?然后再开始 看看载入之后来再开始的话,我们这个地方我们这是 innate back to。 我们来再选一个啊,再选一个这样一个事件, 再选一个这样一个时间,比如说是,呃,比如说是我看一下, 比如说是。我们这个地方我们试一下吧,我这个时间我我倒是没有用过, 我这是一个初始化事件,对吧?啊?我们来看一下他的一个先后顺序啊啊?比如说他是一个 print a 啊,我们这这事件其实都可以经过测试的,对吧?什么时候出来?哎,我们来测试一下啊,测试一下。大家看到我的,哎,这是初始化事件,应该也是在前面的啊,界面还没出来,对吧? 界面还没出来。第八个啊,界面还没出来他是不行的啊,他是没法输入的, 所以我们这个地方这个地方应该要忽略我们,我们换一个吧,让他变成最啊改变他大小的时候吧。啊?简单一点应该是 lowed it 啊,这个地方窗体也是还没加载出来的,对吧?都是在加载出来之前他才进行初始化的啊,我们这是我们习惯性的这个 用法。好,我们来看到接下去我们来用一个。什么时间呢?点击一下吧。啊?窗底窗底上点击一下 啊,点击一下,然后再让他开始点击一下,再让他开始。好,待会我们再让这个地方点击,我们先写一个 mac gbox, 这里肯定是有效果的,对吧?肯定是有效果的,随便点一个 有效果哈,我们这个效果待会怎么想?什么一个效果呢?直接吊用这样一个 v 的 cpr 函数我们来开始吊用吊用只。我们让让他一秒钟一次嘛,然后一秒钟一次的话呢?我们并且要让他重复的去执行,对吧?我们用一个 fo 啊, fo 函数 都是方案数 fo 关键字来开始啊,比如说我是 i as long 啊, four i 等于,呃,一秒钟一次啊,一秒钟一次,那么比如说我们是十秒,对吧?比如说我们就十秒吧, 就十秒吧,哎,等于十兔零啊十兔零啊。 step 什么呢?负一对吧 负一 ok i 好了之后我们来开始复制 label e 的 cap 型,等于 对吧?开始是十,然后呢我们逐渐逐渐的让他变化,让他变化 下一秒就是九,再下一秒就是那个,对吧?好,我们现在来,如果说不写这个 sleep 的时候我们直接看一下,点击啊,直接变灵了,对吧?瞬间就变灵了,你看都看不见啊,当然我们现在让他睡一会 sleep 啊,睡一会。好, sleep 括号传入一个好秒,比如说一秒钟一次啊,好了,就这样子就可以了啊。呃就什么意思呢? 暂停一秒钟暂停一秒啊,一千毫秒就是一秒,这里输入的是一千,这个是毫秒。好,我们来开始点击啊,这里看到点击是一秒钟 啊,怎么不下去了?哈哈。 又是一秒吗?不止啊啊直接被变零了。没刷新过来了啊没有刷新过来了吗?照到你应该是可以刷新过来的,我们再看一下这个倒是也没有。没有预料到啊没有预料到 好 label 好直接直接就过来了对吧?直接就过来了。那么如果说是呃我们那种普通的数字的话呢,他应该是可以能够刷新的过来的, 如果要想要让他具体的刷新过来,那么我们需要再加一点东西估计应该要再加一点东西。 好睡一秒钟对吧?睡一秒钟,下一次 之后呢应该要再重新进行复制,我们比如说让他暂停点击开始,好一秒钟之后下一次循环九在一秒钟之后下一次循环八 七六五四三二一 零啊,其实是有的啊其实是有的,对吧?这中间的过程其实是有的,但是使用的效果啊看起来好像是没有那么好啊没有那么好 哎,我们看出来这个效果应该是没有那么好,只出来个酒啊,不是很给力啊。这个睡眠了之后 啊,下一个他好像继续没有刷过来一样的啊。那么我们再我们来加一些特别的东西看一下啊,比如说 iphone 点 奥特加等于 q 自动重汇,这个可能看看跟重汇有没有关系。首先,哎,看到了,应该是跟重汇是没有关系的对吧?应该是跟重汇是没有关系的, 那么实际上就是跟界面的刷新有关系啊,就是说跟界面的 labor 的刷新有关系的啊。啊我们可能就要讲到下一节课的这个东西叫做都要问 我们来看到啊,试一下吧,能不能用啊,能不能用实际说对吧?实际说,哎,也没得用, 用啊,有的用啊,有的用啊,你看有的用就没有问题了。三二一零, ok 啊, 十,那点击一下再看一次,如果一直有的用,那就肯定是有的用,对吧? 哎,大家看到啊,应该来说是非常有的用的啊,非常有用的,那么这节课呢,我们主要是学这样一个 windows api 啊, windows api, 那么下一次我们下一期我们把这个读英文词再细细的讲一遍啊,细细的讲一遍,这里面是需要连用的,我们再需要一些 大数据的时候,我们来用它, ok, 那么这一节课我们最后的核心就先把它讲一下啊, 总结一下最后的核心,第一个要,呃,认识,首先要认识这个英德 cpi, 对吧?英德 cpi 好。第二个我们无意中要学会 啊,要学会去使用,使用啊,要学会去使用 啊,这个叫做什么呢? api test viewer 对吧?啊,这个非常的棒的啊,非常的棒的一个工具。第三个啊,我们,呃,要 啊,可以查看啊,归零三二 api 的函数啊,到我们的群里面可以看到,对吧?第四个 我们可以去,呃,要要对常用的啊,常用的 api, 看书要了解啊,大家自己去了解吧,我具体我就不讲了,因为后面可能常用到的一些东西的时候,用到的时候啊,我会进行啊,我会跟你说,我会跟你说,我们我们后面的课程当中我们再来进行介绍。 好的,那么今天的这个课程啊,就是这样一些,感谢您收看刘金玉编程, 如果说您对我们的这个课程感觉还可以的话啊,那么啊,欢迎您关注我以及分享给您和您的朋友们啊您的朋友们。呃,如果说我们有一些问题相关的,可以在视频下方进行留言以及对我的 教学方面的改进的话呢?呃,欢迎您对我进行留言啊啊,那么 感谢您的关注,谢谢!让我们一起用心去创造我们美丽的祖国,创造用编程创造城市。好,本期就到这里,拜拜。

apm 是什么?百度上面可能会说 apm 是什么预先定义的函数啊?或者说什么软件系统不同组成的衔接约定啊?其实这里面有点深色难懂,我给你举一个例子啊,就比如说平时我们在网上买东西,对吧?商家会给我们发货 啊?这个时候你能够在这个淘宝上,对吧?看到这个物流的一个进展信息,对吧?因为这是淘宝公司跟快递公司,他们作为两家公司合作的一个产物,对吧?那我们想在淘宝上看到快递的一个信息, 这边就需要是个 ap i 了,对吧?你想查快递的时候呢?淘宝可能说给快递公司那个网站去传递一些参数,然后比如传一个 id, 又传你的姓名,然后就能够拉到你这个订单下面的一个物流状态,对吧?这也是我们常说的 app。 那再个例子,就比如说我开发了一款软件,对吧?叫,哎,好了,那我的朋 朋友开发一个人叫 b, 那我朋友想调用我这款软件的部分功能来用,对吧?但是其实我又不可能把原码给他,但是他也不必要去看我的原码,对吧?所以这个时候我只需要去暴露一个接口,对吧?俗称 atm, 那么他就可以给我来传参数,来彼此调用我这里边的功能,好不好?

那我们接下来再次来搞定另外一个东西,我们就能做一个轻降级的小工程啊。现在呢?现在是 现,现在是,现在是这样,我们现在是接着来,呃,选中原文件,新建一个范儿,当然我们接接着把这个东西命名成什么帽子,你们知道什么是帽子的老鼠,对吧?老鼠实验也是, 接下来我们这个文件在这,大家知道我们是不是创建错了,对吧?所以我们现在需要把它删掉,当然我们这种情况需要需要新建一个什么东西呢?拍森塞尔消了。完了这样一步之后,我们在这接着说什么帽子,戴上帽子什么含义呢?鼠标,这个, 所以接下来我们现在来简单给大家提一下这个鼠标作用,削了,我削了。我们现在来想想啊,这中间带有这样一个现象, 我们因为我们有两套代码是一样的,然后我们首先把这两个代码粘过来,这个大家理解吧?是一个,是不是一个最为常见的,对吗?行了,接下来大家现在再想想 来了,我们已经简单理解这个帽子,对吧?然后接下来我们再来实现一个打开,用模拟鼠标打开一个东西啊,大家现在再来看一下,大家觉得我们此时此刻运行他会有什么效果? 运营拉什么效果?是不是温加地呢?对吧?加温加地会怎么办?是不是最小化,对吧?比如说我们,比如说我们现在是来实现一个这样的动作,对吧?啊?我们把这个东西放在这,对吧?比如说我们是不是要模拟鼠标,把鼠标挪到这个位置,对吧?然后是不是在这种情况,大概就是 我们这个鼠标是不是有个双击的过程,对吧?按下松开,再按下松开,对吧?那我在这种情况是不是就把这个东西打开,对吧?所以大家觉得我们怎么用鼠标来实现呢? 首先是不是需要找他位置,对吧?所以,呃,所以呢?我,所以我在这来简单给大家提及一下啊,这个东西呢,还是和我们之前学到一个东西有关,咱俩之前是不是拿 qq 画过一个窗口,对吧?这 中间了,我们这中间,我们在这来简单给大家提一下,是这个东西是不是和分辨率有关,对吧?大家知道左上左上角这个坐标是多少呢?零零,对吧?所以我们在这个地方是不是可以设置为,比如说三十三十不过分吧?五十五十也不,呃,三十三十是 不会越界,对吧?行了,我们现在来想想,接下来我们怎么设定这个鼠标的位置呢?实际上极其简单,五六三二 api, 对吧?当然这中间我们在这接着来教他的一个函数,当然这个函数叫什么了?四二的啊 啊塞的扣二针, pose, 打扰,这是什么含义?是不?设定一下他的位置,对吧?这位置,比如说我们在输入三十三十打扰,这个时候他会怎么办? 是不是把我们鼠标一位置挪动到这三十三十这位置上,对吧?那大家看好了啊,我们先我们现在这是不是选择运行,对吧?我们鼠标现在是不是在这,对吧?我们 鼠标是不是在三十三十的位置上了,对,对不对?所以我现在来简单给大家提一下关于鼠标的,关于鼠标的 坐标体系啊,我们现在是接着启动 ms 喷的,当然情况呢就是相当于这中间我们再来找同学问问,这个坐标是多少呢?零零,对吧?这个坐标呢 是不是跟你分辨率有关,对吧?这个地方一般是一千零二十四,多少了?零,然后这个地方这个地方一般是多少呢?零,然后呢?七六八,大家知道这个地方是多少呢? 一零二四七六八。那么在这种情况下,你是不是可以,你是不是可以模拟出这个鼠标的位置,然后就让他干活,对吧? 理解了吧?所,所以,所以在这种情况下我们是不是就可以模拟他干很多活,对吧?然后呢我们现在来讲讲啊,这中间我们刚才是不是已经实现 把把把这个位置挪过去,对吧?现在我就给大家提一下,这中间大家在这要注意一下这样一个规范啊,这个中括号是一个标准规范,也就是也就是说大家啥情况?这个东西现在我们之前学过的这样一个东西称之,为什么?利色的,利色有几个元素了, 两个,对吧?相当于这个是横坐标,这个是什么?正坐标,明白了吗?这个能理解吧?那么接下来我就在这简单给大家提一下,我们现在是不是要实现双击呢?对吧? 所以呢我们现在来简单给大家提一下,这中间我们为了,我,为了让这,我们为了让它延时有效果,我们在这死力扑一秒,然后完了之后呢,我们在这接着死力扑一秒,然后待会现在再来讲讲,我们现在如果要实现双 机怎么办? wifi 三二 api, 对吧?但是我们刚才有一个 k boll 的 n 问他,而现在我们需要使用什么帽子? n 问他,大家觉得这个函数呃好调用吗?实际上非常好调用, 现在来讲我们这中间接着出什么了?呃,现在现在这个大家可以看一下这个帽子 n 的是不是 y 特当,对吧?当然什么是 y 特当的? 右键右键按一下,对吧?大家觉得我们这个场是不是选择 f 的档,对吧?什么是 f 的档呢?左左边按一下,对吧?然后剩下四个参数都是零啊?这个 中这中间的那么大,接下来想想我们按一下之后还要干什么?松开,对吧?所以大家现在来讲,我们接下来是不是把在这把我们刚才给 东西再盖着,是吧?对,现在我们现在也也可以在这把刚才这个东西直接复制过来,完了之后呢?呃, 我我们在这就可以把这个蛋呃修改给修改成另外一个东西,叫什么? apple, 所以在这大家觉得我们现在这个鼠标是不是相当按下,对吧?单击可以吗? 单击是可以的,但是单击我们要打开怎么办?双击,所以在这我们是不是要把这个东西在复制一次,对吧?所以在这我就简单给大家提一下,比如说, 比如说这中间我们是不是要出这个双击的频率,对吧?我们再把它设定为什么?零点零一,对吧?是不是零点零一秒了,对吧?所以大家现在来想,当我们再次运行的时候呢? 是不是打开,对吧?所以大家这种情况小伙子们知道知道的什么东西进进游戏了, 行啊, 那现在是这样,我待会就给大家注释一下,但是这两行代码代表什么含义呢?鼠标干什么?按鼠标左键干什么?按下,然后呢?松开,对吧?大家觉得我们这种情况是我们单, 对吧?然后我们连续加两个是属于什么双击,所以懂了吗?想好了,我们先在这接下来再把我们刚才第一步注释了,小伙们,你们现在想想右键的话我们怎么改? 对,那不得改成 rap, 我们是不是就万事大吉了,对吧?接下来我们现在再来给大家测试一下,比如说我们现在接着把我们刚才更新修改一下,比如说我们在进出点,嗯,帽子 大家可以看看,这个就是如来的当,对吧?我们大家可以把这个东西改成如 iphone 啊,可玩了这样一步之后呢,我们现在可以把刚才这个东西再复制过来,当然我们现在需要把这个二付改成什么当,所以呢,大家知道这一步他是不是选择右键, 按照右键往往是什么效果呢?如果选中他,对吧?右键是不是谈菜单的,明白了吧?所以现在这我们接下来再再想想,我们现在把它运行起来啊,是不是显示出菜单,对吧?啊?但是我简单给大家提一下,就是 我们在某页情况,是不是应该先点左键选中他,然后再右键点菜单,对吧?所以大家知道我们这中间怎么来实现刚才这样一步呢?我们是不是在这呃, 把这个左键插入,对吧?接下来我们在是不是在延时零点零一秒,对吧?所以我们现在再次来给大家运行一下啊,现在是 实现这个菜单,对吧?明白了吗?所以我这么告诉大家啥情况,就是你在这就可以实现一些这样的细节啊?然后,然后呢?我们现在来简单给大家说一下,我们现在这个鼠标就已经给大家。

hello, 亲爱的小朋友们,大朋友们,我是狒狒,这一节课呢,我们录一个答疑课,呃,因为有一些粉丝,他说这个,能不能去讲一讲怎么去使用 windows api? 那么一般有这样的疑问的啊, 大概率都是新手,就是新手喜欢去折腾这种东西。嗯,有开发经验的这些程序员,他通常不会去折腾这个, 他可能就是说,如果你对 windows api 需求比较大的,他可能不会去使用 c 叉,把它改用 c 加加等等。所以你要使用 windows api, 那么你就必须对系统底层的一些 windows 给你提供的一些程序接口,你要比较熟悉。比如说, 呃,开一个, 把字调大一点好。 windows a p i, 我们要知道 a p i 是什么东西? a p i 当中的 a 呢,指的是 application, 就 a p p 就是应用程序的意思, p 呢,叫做 public, 就公共的。如果我没记错啊, i 叫做 interface 接口。所以 windows api 指的是什么东西啊?指的是 windows 应用程序,公共接口指的是这个。那么你看到的所有的窗体它是 是怎么画出来的?它都是通过 windows 底层一些 api 画出来的。那这些 api 在哪里呢?我们来看一眼这个。刚才我在网上截了个图,就是说 windows api 就是 windows 应用程序接口,是针对微软的 windows 操作系统家族的系统编程接口。 那同样啊,当时我们说跨平台的时候,为什么说微风不能跨平台呢?是因为你看到这些窗口是使用 windows 底层的这些 api 画出来的,对吧? 你把它换到 linux 或者是 max 下面的时候,它没有这个 a p i, 所以就画不出来,就这么简单啊,就这么简单,画不出来,那么这些 a p i 这些东西被放在哪里了?它都放在 d l l 文件里,比如说 corro 三十二点 d l l, 你平时不大容易见到 到,但是你如果对操作系统底层嗯,有过了解的话,你对这个东西肯定不陌生,对吧?这个内核包括之前的那个系统进程里面 啊,我们不说 win 十一啊,就说比如说 win 七啊、 xp 啊、 win 八啊等等,这些系统,它的系统进程里面可能都有这个东西, 你不信可以回头去看一下,对吧?那么 a p r 函数呢?分为好多类,那这个只是其中一部分,就是基础服务啦,图形设备接口啦,然后图形化用户界面啦, 还有什么通用对话框,呃,链接库了等等。这些东西很多啊,它每个里面有好多好多函数,它就相当于这 d l m, 就相当于我们 c 下里面一个内裤, 一个内裤里面有好多个类,每个类里面有若干个方法,对吧?所以他是非常庞大的,你如果想去了解的话,可以去网上去搜一搜 api 查询,或者是去 呃找专门的书籍去看一看。这些 a p i 它分别是叫什么名字,有什么作用?这个需要自己去熟悉,自己去查。没有办法说我一节答一课全部给你讲完啊,这需要自己去查。那么 有一些东西啊,你不用 a p i, 好像看似无法完成,比如说 我想把这个窗口的标题改掉,有人说这改掉简单啊,你把这个保存一下,给他改个文件名,再打开就是他的标题了,对吧?啊?我现在这边有一个程序,我有一个播放器, 把它的这个改掉,把它的标题就是这个福霸二零,呃,二零零零 v 一点六点一二,把这个改掉,或者是我把这个回收站上面的这个回收站改成垃圾箱, 那这个思路是什么呢?它既然是 windows api 画出来的,我们就可以去获取这个窗口的锯柄,那锯柄是什么东西呢? 句柄我们可以把它理解成窗口或者空间的身份标识,就跟人一样有个身份证,对吧?一个身份证号对应一个人,他还是一样的。当这个窗口开启的时候啊,被划 出来之后,他也有一个身份标识。那我们今天呢,就拿这个啊,获取窗口句柄,然后修改窗口标题来做个例子,看看怎么去用啊?首先你要知道他是在哪一个 da。 我要想啊, 就是首先你要知道你需要的功能在哪个 d l l 下叫什么名字。 有人说我,那我这个我哪知道啊?因为你是新手嘛,你当然不知道,对吧?如果你是对这个系统提成打交道比较多的,这个毫无疑问你都会知道,那你不知道怎么办?去查呀,是吧?呃,然后呢,如果你是在 c 下不下 去使用 a p i 的话,你要进行 d l l 引入,然后呢?引入了之后呢?声明 a p i 函数的签名,就是说这个 a p i 函数其实它已经在 d l l 中给你写好了,那么你要用呢?你得给它把签名声明出来,对吧?然后再调用它就可以了。 过程大概是这个过程,那么写起来他这个跟我们平时写的有点像,但是又有点不一样,我们来看一下吧, 我们创建一个文化民用程序啊,还是当年的 framework 吧, 这么 a p i。 好,这边有个窗口,我们给他稍微改一下啊,让他居中,然后呢?不需要在的话,这小花按钮,嗯,窗口不能调整大小, 然后标题改一下,叫 window cpi 简单视力。 好啊,好,这样啊,我们在里面放,放两个 label, 一个两个,然后放两个文本框,然后放两个按钮。 我们要做的就是刚才我说过了,去找一个窗体,就找到一个窗口的句柄,然后呢,把它的标题给它修改掉, ok, 嗯,还有一个是吧? 好,我们来给它改一下,这个我们就只改文字了。 level 就只改文字啊,窗口标题,你要找一个窗口呢?你得知道 他的标题是什么,对吧?好,呃,按照窗口表体去找窗口,找到了之后获取他的句柄,就是窗口句柄,然后呢,这个是新标题。 好,这一个我们把名字改一改,因为要调用它 text title 窗口曲柄, text h w n d 这个 text new title 就是新标题,然后这个按钮呢? button get h w n d, 这个呢? button set title。 好,这个叫做获取窗口,获取句柄,这个呢?设置标题, 那么这个窗口具体是获取下来的,所以我们不用去改它,把它改成 read only。 好,这样一个 g m 就写完了,对吧?就做完了,然后我们看看怎么去获取距离啊?首先我们刚才说了 要去啊,引入你需要这个功能的, d l l 就 d l l 引入,怎么去引入啊?我刚刚写在这个这个里面了,然后我们对着它抄一下就行了。好吧,哎,对着它抄一下啊。呃,怎么去写?写在哪里?首先你要去, 首先你要去引入他的命名空间,他在哪里呀?在 system 点 run time, 点 interop services, 在这个里面,所以你就要需要在这个地方 using system 点 run time, 点 interop services, 在这个里面,然后呢,你要去引入他的 d、 l、 l, 那么在哪里引入?在他的类里面啊?在类里面敲一个回车,然后在这边写对中括号,写完了之后呢?他关键是 叫 import, 叫 d l l import 就这个东西,那这个是什么意思呢?你要引入的 d l、 l 是叫什么名字?就是它的文件名是什么? 是写在这里的,那么刚刚我们也看了,是吧?嗯, 这个图形接口叫什么? g d i 图形化用户界面,我们是不是在 g y 这边啊?就窗体啊这些,它是在 user 三二点 d、 l、 l 里面的,因为我之前已经查过它在哪里了,所以我知道你不知道,你去查一下 user 三二点 d l l。 好,这就引入完了,对吧?呃,引入完 完了之后,他为什么下面给你标红呢?是因为你可能还没有去声明他的函数啊。好,那这个怎么去声明? 它的声明方式跟我们声明普通的函数差不多,你看看区别在哪里啊?首先 private 开头 就是访问修饰符,对吧?然后这是一个外部的,我们要加个关键字 external, internal external 这种 extern, 然后是静态的,因为我们要在它里面去调用吧,是吧?静态的你不可能去扭一下。 好,那么这个函数它会给我们返回一个什么样的类型?没有返回类型,我们之间写 boy 的,对吧?有的话就写返回值类型,它会返回 一个 inter 类型的窗口标识符,全部都是数字,它有它自己特有的这个类型,叫 int p t。 啊,就这个返回一个,实际上这个就是 inter 类型啊,这就是 inter 类型, 它名字叫什么呢?这个名字是它在这个内裤当中,这个函数叫什么名字啊?叫 find window。 那同样它也有参数 是吧?啊?它也有参数,有几个参数呢?有两个,一个是 string 类型的 ip class name 就是类名,还有一个呢, string 类型的 ip window name。 好,就这个样子的。有人说你这样一写就可以用了吗?来,我们来试一下啊,我们不是这 获取句柄吧,我们把获取到的句柄放到这个里面来,写到内成员为止。 private interptr 是不是这个东西啊?这个类型啊? h 导个 n d, 先给它来一个空,就是零 into p d r 点 zero 就是零。它不是没有吗?你初始化的时候给它个零,对吧?当获取的时候呢?呃,你看一下啊, 把这个类成员拿下来就等于什么?等于去钓这个方法。 它的第一个参数类名我不知道,你可以写个空,第二个写个窗口标题就可以了,比如说回收站, 回收在就可以了。好,那么我们把它显示到那个文本框里面, this 点 text, h w n d 点 text, 等于把它拖一下 screen 就可以了。 呃,走你,你得到了一串数字,这个就是他的句柄,你就拿到他了,对吧?就拿到他了。那么怎么把这个窗口标题这边输进去让他拿过来呢?很简单啊,你把这个回收站改成 那个文本框的内容, this 点 text, title 点 text。 不要不要给他去除前后空格,因为万一别人的标题里面他带前后空格,那怎么办,对吧?好, 回收站获取巨屏是不是有啊?来,再来,这个 f o o b a r 两千空格 v 一点六点一二,不能错啊,一点错,错一点就不行了啊,获取一下是不是能获取到啊,对吧? 好,获取没有问题,那么我们怎么去修改呢?修改,你当然是用的另外一个函数,它由于 还是在这个 user 三幺里面,就是在用户界面这个里边,所以这个不变啊,这个不变,那它的入口点呢?就是一个 set window text, 上面呢?我们没有写入口点,他也调用正常了,对吧?哎,也调用正常了啊,那么你看看这个 private external static interlating set window text 这个能不能成?那么第一个呢?是还是这个类型?就是锯柄,你要传个锯柄给他。 第二个呢?呃,你要设置的文,这个这个窗口的标题是什么东西? 好,踏爆这个了。如果你启动的时候,他会告诉你运用程序处于中 段模式,也就是说你上面调这个,你要 d l l import 一下,你下面要使用它的话也需要去 import 一下啊,这样才可以。好吧, 好,我们这个设置标题拿过来判断一下,如果我们获取到的句柄不是这个的话,如果获取到的这个句柄不是 interpt 二点 zero, 那也就是获取到了,对吧?获取到这点了,你才可以去设置它, 那么去调动一下这个 set window text, 首先你要填个句柄进去,句柄在哪里啊?是不是刚才就这个东西啊? 好,你要设置谁的?然后呢?要设置什么标题?我是新的标题,好,看看可不可以啊?启动一下,我把所有东西都最转化,然后呢,打开回收站, 我获取回收站的据柄获取来了吧,对吧?设置标题呢?我们是不是要设置这个 text 里面的标题啊? 新的标题给它改成 this, 点 text new title 点 text, 回收站 获取是不?获取到了,我给大家看垃圾箱设置标题,好,你看这里没有变,对吧?啊?这里没有变,因为 vo 十一的 ui 它受这个底层 dla 的影响,但是你把这个鼠标移到这个回收站窗口上面去, 移过来,你可以看到,在这里啊,你可以看到他的标题已经变成垃圾箱了,对吧?哎,已经变成垃圾箱了,他这边只是没有显示出来。好,我们再来一遍啊,我们再来试一下,我打开这个 还是有播放器,好吧,因为它不是那种选项卡,这种看起来清楚一点, f o o b a 二两千空格 v e 点六点幺二获取,是不是能获取到啊?我是一个播放器的标题,好设置,看是不是改过来了, 标题是不是改过来了,对吧?当然你通过他还可以做好多事情,比如说我把这个窗口让他永远置顶,就像 qq 面板一样,他一直在这上面,是吧?然后我可以把这个窗口的形状啊等等,里面也可以找到某些空间啊,比如说我这个播放按钮, 播放按钮是可以点的,就有些东西它的功能是不能用的,比如说撤销、重做、清除、全选这些,是不是在特定情况下你才可以去使用它,对吧?那为什么呢?它就是把这个按钮做了个判断啊?如果 现在不是正在播放的这种状态,你就不可以去操作这些东西,对吧?啊?如果列表为空,你就不可以去操作,那你只需要去获取到这一个按钮的身份证,就是他的这个叫做呃句柄,然后把他的 enable 改成 two 就可以了, 他就变成可用状态了,对吧?但是变成可用状态不代表你可以去用他,你点他,他可能没有反应,或者是会保错, 明白了吧?嗯,有一些东西,比如说现在我们写的一些工具里面, 让他去查一下这个用户底下的这个客户,可是呢,你没有权限去查按钮是灰色的,那你可以通过这种方式把按钮给激活了,然后去查那种是可以的,对吧?所以 windows a p i 可以做做很多 事情啊,可以做很多事情。呃,用起来呢,也不复杂,但是你去学习 windows api 是一个非常复杂的过程。好吧,你不是所有的函数都像这个这么简单,有的函数里面他不是都不一定都是这种死菌类型的东西。 他还有一种你看不懂的,或者石榴金子的那些东西,你可能看着就比较头大。所以我为什么说新手喜欢去折腾这个?因为新手对这些东西比较好奇。 你如果工作很多年,从事跟 windows 有关的一些开发,你可能不会去好奇这个东西,因为太麻烦了。好吧,好,那这节课就到这里,拜拜。

本期学习如何读写合并二进制文件。最近看到网上讲解程序提权的视频,说他是 windows 为公开的 api 函数,即语言提权的代码,就只用这两句。吊用的函数跟 wec 是一样的, 但是 vc 的全部代码有上百行之多,因为要提交这十六次结数据, vc 要用到很多结构体带这些有上百行。这个消息框类是弹出自定义消息框的,第一期教程就讲过了,这也是为公开函数 弹出框需要定义消息框的内容和标题。这个发送消息函数是给列表框发消息, 告诉列表框要显示指定目录,全部文件只写一个星号是表示当前目录下也可以写地表, 表示地盘所有文件前面的零表示只显示普通文件。改成全部路径就包括指读隐藏系统、文件夹、存档和盘辅等文件和目录运行之后就看到当前目录下所有文件。 幺零零零三是单击列表框时执行显示内容,相应代码是读取文件,把内容显示文本框,点击这个文本文档就可以看到其内容。 继续看代码,先是判断编辑框内容改变,如果有改变,弹出提示,询问是否保存。接下来是读取选中的列表框内容,得到文件名称,再用开文件函数打开它, 打开成功后获取文件大小。这个开文件也是 windows 为公开的函数,这些是 c 语言库的文件 操作系列函数。文件读取四个参数长度成数量太多余了。虽然这套函数很全,但不能读,写串并口。二是读 w 是写,但是写二禁止文件时写记要用二 b, 不能用 ww。 很奇葩的设定,使用英文字母和加号组合的方式太复杂, 所以我更喜欢用开文件这一系列函数参数只是几个简单的数字,特别好记。微软推荐使用这套函数去读写文件。 这个好像更复杂些,一堆英文参数,上面是读取文件,下面这里是写入文件。最早是因为读写串口必须用这个函数,后来才发现开文件这套函数也可以读写文件内容和留定位,操作特别简单。申请 内存的长度指定是的文件的长度。读文件函数读取相应长度的内容,再用改窗口字把内容显示到编辑框,发送消息是清除编辑框是否修改状态,最后释放内容这个内存缓冲区。 编辑框显示文件内容时就已经被更改,所以要设置未修改。点击时先判断状态,如果文本框内容没被修改,再点击,列表也不会提示你是否要保存文件内容。 现在修改了编辑框的内容就有提示了,点了确定再看,里面的内容已经变了。下面这个判断语句是选了确定按钮才会执行保存文件的代码。这里是先获取编辑框内文字的长度,通过这个长度申请内存, 此时的长度会跟之前读取文件长度不同,申请内存长度可以加一,防止意外发生。读文件用的是改窗口字,这里是先读取窗口内的文字。 注意,刚才打开文件读取内容后并没有关刘指针是停留在文件最后的,所以要使用刘定位函数,移动到起始处,没有这句代码就把内容追加到最后了。写文件的用法跟读文件格式是一样的, 写完内容之后,再把编辑框状态清除为零。保存文件代码,点击保存按钮也会执行修改内容,但点击了保存按钮,也不会再谈出提示文件是否保存。除了消息框,还有个未公开的 api 函数,就是岩石框,它比信息框多两个参数。先复制这四个参数过去, 把显示内容和标题修改一下,图标也要换,都改了就没复制的必要了。 既然是询问框,应该换成问号图标,多加两个参数,最后是一千五百毫秒,算下来只有一点五秒。设置延时有点短了,我们先来测试一下,把这里改成数字, 再点击列表框,让他触发弹出框提示,我并没有点击,一点五秒后弹出框自动消失。再来看看内容的变化,确实是变了,为什么会变?因为弹出框只有确定按钮,如果弹出的消息框上不 一个按钮的话,超时之后是不会自动点击确定按钮的。现在把延时框的样式改一下, 也不知道这个数值会显示哪些按钮,再把内容里的数字改成英文字母。 刚才延时框是有三个按钮超时之后自动点击的,是哪一个按钮呢?其他三个按钮都没点,而直接关掉了, 直接关闭。弹出框返回的数值是三万两千。判断语句要改成等于三万两千才会保存,也可以改成判断,不等于选了取消。 只有读取的数据是文字内容才能显示,不是文本的文件内容就无法正常显示。 合并文件就是先读取第一个文件内容,再读取第二个压缩文件的数据到缓存,然后新建一个测试 jpg 文件,把刚才两个文件的数据都写进来,前两个文件都是我事先已经准备好的。 四 .gpg 是一张图片压缩文件,打开看看,里面包含这么多文件, 点击合并按钮,会把两个文件数据合并写到一个新建的文件里,名字叫测试。 点击之后,新的文件已经生成,双击打开还是美女的图片, 那压缩文件的内容还能看到吗?答案是肯定的,只用把扩展名改成二 a 二 二,双击打开就能看到内容,也可以解压出来,再把扩展名改回 jpg, 又能显示图片了。 二、禁制文件读写也没那么神秘,读写很简单,修改里面内容就复杂多了。好了,今天就先到这里,我们下次再见。

本节课来学习 api 函数的重定像,增加了进程窗体和计时这三个全局整数举行类,并没有使用,忘记删除了。添加这个账号用于测试。自动输入,获取到密码可以自动登录,线路是选线用 dlll 启动时会检测游戏环境的安全性。这段代码在之前的视频中有讲解过,本期主要讲解新增的代码功能。 这里是一千两百毫秒延时等待游戏启动,有些电脑可能需要三秒才能启动,玩游戏在适当延时之后才能获取到游戏的窗口。 然后直行查找函数和发字符的代码。查找函数就是查找游戏导入的 api 函数。查找到指定函数地址可以进行重定项。先是通过导入列表 这个外部函数获取到游戏的导入函数列表。四十万是进程的起始地址,数字一表示查询导入表。在导入表里查找到指定的支持库名称。 由于导入表里都是相对偏移地址,所以要加上四十万的起始地址。这里使用的是比较字母函数,他在比较字符串时不区分大小写,然后计算出该函数库的手地址。通过首个函数地址查找到指定的函数 这段地址表里存有所需函数的动态地址,通过函数地址也可获取到动态地址,在这个表里检索相应函数。动态地址检索到指定数据时返回位置序号。 检索函数主要用来检索数组的,也可以用来检索内存段。符号是按整数要指定最大查询个数,这里指定为一版定位到存放函数地址的内存表位置, 然后把此处的地址修改为自己的地址,在修改之前先要更改内存的读写权限,修改完之后再还原之前的内存权限。 核心原理是获取程序导入表里的地址,程序通过此表里的地址去执行函数,修改这个地址就可以实现重定项, 比如查询到 santa 这个函数的表位置,把导入表里的地址改成发包这个地址,程序在执行原来的 santa 函数时就会转而执行发包这里的代码。同样道理,查找到 swatson 的这个位置,修改违法数据,这段小程 程序的地址,程序也会转而执行发数据这里的代码在这里可以根据不同的数据进行处理手续。代码让计时为零,配合游戏检测使用。游戏检测每秒触发一次,增加计时,只要有发送数据就让计时数归零, 长时间没有数据发送就会关闭游戏。这里的发字符是自动介入字符串的,刚才提到过,游戏启动时会执行到这里,通过循环数组向窗体发送每个字符,发完之后再发送 tap 键对应数字。九、 这段选人物代码用来测试模拟鼠标,获取到游戏窗体的位置和大小,计算出第几号人物的坐标位置,然后移动鼠标到指定位置,并按下鼠标。配置低的电脑响应慢, 所以加了多个岩石,现在编译测试一下。 启动游戏后稍等片刻,账号就会自动输入,登录之后继续等待会自动进游戏。 刚才测试的是选择第零号人物进游戏, 现在把这里的序号改成一, 再次编译测试一下。 这次自动选择的是另一个角色。本节课学习的仍然是开发游戏基础知识,开发一个游戏是很庞大的工程,需要多人协作共同完成。好了,今天就先到这里,我们下次再见。

我来,我不知道大家有没有报管院的,咱们我来简单给大家说一下。呃,可能因为有些同学他不一定在看直播,所以说我就如果有的话也可以提出问题。 就管院这边来说呢,我来简单说一下我这边了解的情况,嗯, 就因为管用的,他是今年年初新开的,对吧?二月的时候,二月的时候是西店与 广州市,广州市政府签约的,然后呢到因为今年因为疫情嘛,复试推迟的很晚,然后到五月的时候咱们开始啊,我们开始复试那个时候呢?其实因为在 一九年,在一九年报名的时候,一九年报名的时候,那个时候还没有管院这个这个这个学院,所以我们当时在报名的时候是没有是没有办法选择管院的。然后我就是暴走计算机学院,我就 我我的专,我的专业呢?其实就是就是计算机专属嘛,电子信息计算机技术方向就是往您的计算机专属,然后在呃,去年年年年初的时候,现在二十一年了,那就是去年二零一年年初的五月的时候, 那个时候呢,因为复试吧,他开这个学院呢,肯定化为化为一点人,化为学生的吗?你不能没有学生啊,对吧?所以说他就嗯,有,就像网信院、通院、网信智能 技技科院,呃,机电院、空间院等等,好好好多院,微电子院,学院等等,他那个时候 都是在呃过线的那些人呢,基本上都是在复试前面让你填一下,就是你要不要报报告人员?报告人员,然后你报的话呢,我们那一年是提前面试,就是说 你,你要说了你要报管研院,然后呢,你就去参加管研院的面试,然后呃,你面试如果不通过是可以在参加本部的面试的,但是那个时候因为,呃去年的时候 计算机专属是挺炸的,然后高分很高,四百多的有好多个,将近十个人吧,差不多四百多的很 很多高分很多,所以说有些人呃就有好多呢就,嗯,也不敢赌吧,所以就报了广元院,然后就我知道的而言,广元院这边的分我们我们这一届啊,也很高,我是演艺的,就比你们大一届, 他的分也很高,三百九十多的就初试,三百九十多的有两三个吧,三百六十,三百六以上的得有,呃, 有,至少得有二三十吧,三四十那个样其实分也挺高的。然后呢?然后今年他开了管院,开了一年了吗?所以说他我好像在报名的时候就可以报管,选择管院,对吧?那你选择管院的话,那 明年,那今年复试的时候呢,那肯定就直接复试管院了吗?然后下面来说一下管研院的一些一些政策吧。 首先就是奖学金,还有助学金这块,我觉得挺多人估计挺感兴趣的,对吧?嗯,首先就是奖奖学金,奖学金他管医院这边呢,就是 我说我,我这边我的导师是计算机学院的,然后所以我也我其实也也也属于计算机学院,但是呢,他的在行政上就是说在 在这个奖学奖助学金的发放上,他又是按照管院这边来来来算的,所以我的 我们这边讲一些都是管院的嘛,然后他的一等一等呢,是百分之二十比例啊,百分之二十,然后金额呢是七千,然后二 二等是百分之四十,然后金额是是四千,四千,三等是百分之四十, 然后金额是两千。所以研究生期间呢?你计算机学院肯定也是这样吧,全都是全覆盖的,都是百分之百的,只不过都多少的问题。 计算机学院的一等是百分之四十,这个比例我不,我,我记得不太清,但是他金额我知道,金额一等是四千三,对吧? 二等的金额是两千,三等的金额是一千,这个比例我不太清楚,然后咱们可以问一下李学长。呃,这个应该 我记得二等也是四十吧,最三等应该是百分之二十吧,我记不太清了,他的金额应该是这个没错的。计算机学院他的奖学金这块其实不算太高,但是 这个其实你要知道,你,你考上西店的话,你可你都考上西店了,你还在乎这一年这一两千块钱的奖学金吗?对吧?你考上西店之后,你毕业呢?一年几十万,对吧?你这这几千块钱奖学金肯定不在乎的,只不过说一个, 这是一个激励政策,对吧?然后呢就是助学金,助学金,助学金是国家发放的嘛,一年六千,一年六 六千,然后呢分成十二个月,也就是一个月是五百,对吧?我们现在呃,计算机学院应该也是这样发的,一个月五百块钱。然后呢管院的第三个方面呢?就是我来话筒 我得说一下吧,管用的第三个就是就是他的有个驻颜津贴,他那个官网那个啥专业目录也有驻颜,驻颜津贴也是一年六千, 一年六千,然后也是分成十二个月,也也就是一个月五百,对吧?啊,你看, 如果我现在我就说管学院啊,管学院这边住院津贴呃,六千,然后助学金六千,奖学金, 奖学金是一等七千,然后二等是四千,三等是两千, 所以你这个如果只要你能录取,就算你的分数不是太高,你也能拿到一年一万四,你这个 一年一万四,其实,呃,你在广州那边大概吃饭一个月一千块钱左右吧,千块钱一个月一千块钱差不多,也就是说这一千四其实 是基本上能把你这一年的生活费给就是吃饭的钱给包出来的,你买衣服的钱呢?另算对吧?你不能 不能只靠学校的钱还给你,买衣服还给你啊,吃饭还让你谈对象啥的,对吧?吃饭的钱这个肯定是能给你包出来的,所以 说大家复式的时候好好准备,其实逆袭的可能性是很大的。嗯,你就像你就就我而言吧,我出事是三百六十多,我计算机,计算机专属啊, 初试三百六十多,然后我的复试我的复试分好像是四百六十二吧,四百六十二还是四百六十一来着,然后因为我们今年是网络面试嘛,网络面试初试占百分之八十,比例比 高,然后复试是占百分之二十,然后我最终的总成绩是三百三百八十算八十一点多吧,将近三百八十二,那八十一点多,然后你看我的复试就是一下子给我初试提上去了二十多分, 二十分左右。呃,其实如果说如果说我的总成绩还是三百六左右的话,在广元院是拿不到一等奖佣金的,但是 如果最终我的成绩三百八十多万,总成绩啊,就是我最终拿的是一等奖佣金七千。所以说你这个复试好好准备,就算你初试考考的不太高啊, 那提上去几十分也是没问题的。而且如果说你在动手能力比较强,然后能够提前联系上导师,那就基本上稳了嘛,对吧? 还有就是广元院的住宿,住宿,还有还有他的那个教教学楼吧,他的住宿呢?是是在是在绿地, 绿地城那个地地址叫啥?绿地 c 一栋是在 c 一栋,然后他的住宿那个楼 离到离他的教学楼其实是比较远的,他的教学楼一共是三个楼,假如是分别是 b 五、 b 六、 b 七,然后一 一般的话,如果就是正常走路啊,从从寝室到到教学楼吧,大概就是十五分钟的路程,十五分钟, 然后 b 五和 b 六他的在一楼到一楼到三 三楼吧,还是到四楼来着。目前因为我们这一届学生不太多嘛,我们去了六百六百人,去了六百人,然后他的教训 目前大部分上课是在 b 五和 b 六这两栋楼, b 五的话是一二楼到四楼吧,反正目前的 目前的教学就教学楼那个,这个教学教室不太多,但是他他教室大部分都开着,但是我们目前上课我上课主要是集中在 b 五的二楼和三楼, 还有 b 六上英语就是在二楼,然后 b 七的二楼呢是有健身房,目前来说我们这一个学期他的健身房是免费的。呃, 到明年不,不知道怎么办?不知道怎么样,目前我们这一年他的健身房是免费的,然后咱们计算机学院,计算机学院在他的工位也就是在我在管研院那边,我们把 啥叫做工位,就跟上班的那个那个位置一样,然后在本部这边是你跟哪个导师就就有那个实验室,对吧?是一样的,我们的 位是在 b 六的七楼和八楼,因为因为计算机学院他去管院的还是比较多的,一百一十个人还挺多的,他一楼的话站站不完,然后是七楼到八楼。 嗯,还有有一个在周围呢,这是教学楼,是在海斯芝士中心。海斯海斯芝士中心他旁边有一个 就是缤纷城里边吃的玩的啥都有,还还挺挺好,就是这这个走过去大概就是七八分钟, 十八分钟,五十将近八九分钟那个样,也不算太远。然后就是 导师,呃,来这边来管院指导这个情况啊。嗯,咱们官网说的是大概,呃,一个月一次是吧? 这个其实你一个月一次的话,你导师来这边你可能由于工作的安排冲突了啥的也 一个月一次,其实跑的次数是有点勤的。然后呢?还有这个安排任务啥的,就有没有项目了,因为咱们专属吗?可能有些人比较注重这个, 有没有是项目啥的,练手吗?然后我们就我目前而言呢,这个就是看你导师咋样,你那个导师呢?如果他手上项目比较多,然后他安排的项目呢?就比较多。我我有一个室友,他在开学的时候 就是那几天就经常熬夜。熬夜写代码吗?对他项目的话,这个就是看你导师,你不能说。 嗯,管院在那边,老师不问你,这个目前来说还比较少吧,再说我们,我们导师是我们一周开一次会的,在我们这边一周开,每每周一开会, 每周一开会都是这样,不会把,你没有,我目前我知道的,因为我一百一十个人,其实我我到那边每个人要么在寝室,要么在公会,我不可能都认识,就我目前认识的而言,呃, 基本上都是每周能够一次开,开一次会吧。那个样,就每周都要把你的这一周干了啥工作,干了啥给老师汇报,或者是老师安排的有任务,然后问你这这一周任务安排安排完成的怎么样?这这样的 夜晚是看着我们的夜晚是写项目的。呃,写,写项目的?对,嗯,然后呢?我想一下还有啥,咱们咱们这边有没有就是现在看。

下面呢我们来介绍一下我们这节课当中最重要的一个知识点,就是信号信号量常用的 a p i 函数的一个使用,这个呢在我们编写程序的时候啊,对这些函数啊,一定要啊了如指掌啊,知道这个函数的一个用法。首先我们看一下创建信号量的函数, 创建信号量里面呢,我们主要介绍二字信号量和技术型信号量。首先我们来看一下创建二字信号量这个函数,那么这个函数呢,是用于创建一个二字信号量的,并且呢返回一个句柄 啊,那么其实啊二字信号量和互字信号量呢,都共同使用了一个类型啊,这样的一个句柄, s e m a p h o r e h a n d l e 杠 t, 这是我们的一个消息啊,对列或者说我们的一个信号量和互质量,他共同使用的一个类型的一个句柄,那这个句柄的原型呢,其实是一个 word 的啊类型的一个指针,使用这个函数创建的二次信号量呢,都是空的。 那么在使用我们这个呃销量获取的时候啊,获取之前啊,必须先要调用这个函数来释放,释放才可以进行获取, 如果是使用老式的函数啊,也就是这个函数创建二次信号量的时候呢,他会为一,在使用之前呢可以不用释放。 那要想使用这个函数呢,必须在我们的一个配置文件当中把对应的一个红定义呢,设置 唯一,也就是开启动态内存分配。那对于我们这个呃 few ids 创建的工程模板来说,我们已经把它给设置为一了啊,设置为一了,下面我们就来看一下我们的这个创建二次信号量的具体的一个函数 啊,这个哈,这是我们的一个创建二指信号量的一个呃,具体的一个函数的一个原型啊,所以呢,我们在使用它的时候,首先把这个红啊给设置为一啊,设置为一, 然后呢设置为一之后,它里面的这个语句呢才能执行,它其实就是一个红,红里面呢调用了这个函数,调用这个函数, 从这个函数的原型呢,我们就可以知道,二指信号量的创建呢,实际上使用的函数呢就是这个啊, 是不是很如意呢?这个就是消息对列创建使用的函数,但是参数啊是不一样的啊,根据这个函数的原型,我们来讲解一下它的一个参数的作用。首先我们来看一下第一个,第一个参数呢是表示 这个消息创建的队列长度为一,那么其实呢是用作呃,消息用作我们的信号量,就是表示信号量的最大的可用个数。从前面的知识点我们知道二指信号量,那么要么就是空,要么就是满,所以呢,它长度就是一 啊,长度就是一。第二个这个红啊,这个红其实就是一个用来表示啊,这个红的值呢,其实就是零啊,其实 就是零,表示我们创建的消息空间呢,它的大小呢为零,因为这个所谓的消息对列其实并不是用于存储消息的,而是被用于二值信号量, 因此呢,我们根本不需要关注这个消息里面的内容是什么,所以呢,我们把它的一个长度设置为零就可以了。 然后第三个成员呢,表示的是创建消息对列的时候的一个类型啊,在我们的这个对应的 q u e u e 点 h, 这个对列的头文件当中呢,有定义,那我们看一下,他这里传递的是一个二值信号量的一个头文件啊,一个一个红啊,一个红,那表示是我们这 这个函数呢,是创建一个二指信号量的一个函数啊,那么具体你要设置的是哪一个值呢?可以在这个头文件当中啊查找得到。比如我们现在这里设置的是二指信号量, 也就是这个啊,也就是这个,那这里呢有一个基础的啊,户次信号量,技术型信号量啊,还有低规啊,低规啊等等。 那可能有很多人会问啊,我们创建一个没有消息存储空间的对列, 那么这个信号量用什么表示呢?其实啊,二指信号量的释放和获取都是通过操作对列结构体当中的一个成员来实现的,那这个成员呢,就是我们前面介绍的啊,这个值,这个值 啊,它表示信号量中可当前可用的信号量的个数。在这个信号量创建之前呐,这个变量值呢是为零的, 这说明当前信号量处于无效的状态,此时信号量是无法被获取到的。在获取信号量之前,我们应该先释放一个信号量信,释放一个信号量,他才能加一,这样我们才后续的任务呢,才能进行获取。 这是我们的一个二值信号量创建的一个函数,大家知道一下,我们直接调用这个函数的时候,就可以实现我们的一个二值信号量的一个创建, 然后呢调用这个函数的时候,他会返回一个呃信号量的一个聚饼啊,信号量的一个聚饼。 后续我们要对这个信号量进行操作的时候,我们就直接对这个据柄啊进行操作获取和释放啊,这是我们的二次信号量的一个呃创建的一个函数, 下面呢,我们再来看一下我们的一个技术信号量的一个创建函数,那技术型信号量创建呢?其实跟我们的一个二字信号量创建其实差不多啊,差不多。那我们来看一下我们的技术型信号量,这是他的一个函数,这是创建技术型信号量的一个函数的原型 啊,用于创建一个技术信号量,那么这个函数里面有两个参数,第一个参数呢,是用于技术信号量的一个最大值,当达到这个值的时候,信号量就不能再被释放了啊,不能再被释放, 也就相当于啊,一个最大值啊,最大值,比如说我们的一百啊,你不可能是一百零一啊。然后呢,这个第二个值呢,是用于创建技术信号量的一个初始值,初始值啊,比如说零啊,零。 如果说我们创建啊技术型信号量成功的话,那么返回一个技术型信号量的一个句柄啊,这个句柄, 然后呢用于访问创建技术型信号量啊,因为我们后续要访问这个技术型信号量的话,都会通过这个句柄来实现啊,访问。如果说我们创建失败,那么返回是 now 啊, now 技术型销量跟二指型销量的创建过程呢,都差不多啊,也是间接的调用了 这么一个函数啊,跟我们的二次信号量呢一样,调用这个函数只是它的一个类型啊,不同而已, 这是我们的一个创建技术型信号量啊,创建技术进行技术型的一个信号量,下面呢我们再来看一下我们的一个删除信号量,删除的一个函数,那么我们要对这个信号量呢进行一个删除的话,那我们可以调用这个函数来删除 这个信号量,删除函数可以用于删除一个二字信号量信号啊,技术型信号量,户次量以及地规户次量,通通都会调用这个函数来删除它啊, 如果说有任务主色在这个信号量上的时候呢,我们不要去删除这个信号量啊,注意一点,这一点啊, 就是说我们的任务啊,在等待某个信号量的时候啊,那么你不要在其他任务不要去调用这个删除信号量的这个函数了, 那你删除的话,那这个任务就没办法得到这个信号量了,对不对啊?所以这是这个删除啊,删除的一个信号量的一个函数,那么这个函数的原型就是这个, 然后呢里面呢是要指定你的信号量的一个句柄啊,你要删除哪一个,就通过你创建信号量的时候得到的一个句柄传递进来就可以了。删除信号量过程呢,其实就是删除消息对列啊,通过调用这个消息对列的删除函数, 这是我们信号量删除函数啊,然后我们再来看一下信号量的一个释放函数,那么有啊,他的一个创建, 那么我们也会有释放啊,有释放啊,跟我们的消息对列操作是一样的,销量的释放呢,可以在任务中断中使用,所以呢,我们需要不一样的 a b i 函数, 对于我们普通的任务函数当中,我们可以通过这个函数来实现我们的信号量的释放。对于我们使用中断函数里面要释放某个信号量的时候,我们就要带中断保护的这个函数 from isr 啊,这是这两个函数的一个区别。 在前面的讲解当中,我们知道当我们信号量有效的时候啊,我们的任务呢,才能获取到信号量。那么是什么函数使得信号量变得有效呢?其实有两种方式啊,一种是在创建的时候,对他进行初始化, 将它可用的信号量个数呢,设置为一个初始值啊,在二十信号量当中啊,初始值的范围呢,就是零和一啊, 假如初始值为一的话,表示一个可用的信号量,那被申请一次就变得为零了,也就是不可用了,那需要我们释放信号量才变变为一,又变成可用。 那么这里的释放就是调用我们的这个释放的这个函数,每调用一次这个函数呢,就释放一个信号量,但是有一个问题哈,能不能一直释放呢? 很显然这是不能的,无论你的信号量的是二指信号量还是技术信号量, 都要注意可用信号量的一个范围,当用作二指信号量的时候,必须确保它的可用范围是零 一二零一。而用作技术型信号量的话,那么他的一个可用范围就是在你用户创建这个信号量的时候,他会指定一个最大的一个技术的一个值,你的最大可用信号不允许超过这个值, 这样呢,我们就不能一直调用这个释放信号量函数来释放这个信号量了,其实一直调用也没有办法 释放成功啊,这个在 fil rts 的底层呢,它就已经通过这个值来判断了你即使你等于这个值,你再释放的时候,它也不会释放成功的啊。 所以我们在写代码的时候,虽然说它的底层已经帮我们判判别了,但是我们尽量不要这样去做啊,我们要让我们的代码呢更严谨啊,更严谨, 这是我们的一个信号量释放它的一个作用。现在呢我们来看一下普通任务当中调用这个信号量的一个释放函数,它这个圆形啊,就是下面这个也是通过一个红啊,实际上就是调用这个函数对列的一个发送的一个消息的一个函数啊。 那我们要在使用这个信号量释放的时候呢,必须要确保他是信号量已经是创建的,那么那我们要对信号量,哪些信号量的二次信号量,技术型信号量互质互质量的 释放呢?通通都可以对这个函数的一个调用,但是要注意一下,如果说你使用的是这个函数创建的一个什么地规复制信号量的话,那你不能调用这个函数来释放它啊, 而且这个函数呢,是不能放在中段里面进行操作的,在中段里面的话,他会有一个专门用于中段保护的一个释放函数,就是下面这一个啊,下面这个, 那我们在释放销量的时候呢,在控制快当中呢这个成员, 这个成员他会进行加一,这是我们的一个释放啊,我们的信号量的一个释放的一个函数, 释放了一个函数,那我们再来看一下,我们在这个中断函数当中要释放一个信号量的话,那我们就要调用这个函数来啊,实现啊,因为这个函数是带中断保护的,看到有 from i s r 就可以知道它是应用于 中断符函数里面进行释放信号量的啊,那么释放的信号量跟这个是一样,可以释放为二字信号量和技术型信号量。那对于啊使用啊,这个创建的这个地规互刺的这个信号量来说,不能通过这个函数来释放, 那么这个中断带中断保护的这个释放销量的这个函数啊,和我们普通的这个函数是有些不同的,它不能释放 户质量啊,这是因为户质量呢,不可以在中断中使用啊,户质量的优先级继承机制啊,只能在任务中使用, 而在中断中呢就毫无意义。带中断保护的信号量释放呢,其实也是一个红啊,就是下面的这个啊,下面这个它里面呢也是调通过这个函数来调用啊,消息对列的一个呃,获取函数啊,释放释放的一个函数, 那这个函数里面呢,有两个参数,第一个是我们的一个销量的一个句柄,注意,在我们的这个 释放带中断保护的这个释放函数里面呢,不能用于释放护质量,刚才我们也说了啊,护质量他是不能在这个中断里面进行使用的。然后呢,第二个呢, 是它的一个可选的一个参数,那可以设置为 now 啊,可以设置为 now, 这是我们的一个释放信号量的一个函数啊, 我们再来啊,再来重复一遍啊,我们这个释放信号信号量的函数,这个呢是用于普通的一个任务,这个呢是用于我们的一个中断的一个符号函数里面对信号量的一个释放, 这个函数呢适用于二指信号量,技术型信号量和护士型信号量,通通都可以释放,然后呢这个函数呢用于二指信号量啊,以及技术型信号量, 那么对于呼市信号量呢,它不适用,所以呢它们之间的区别大家一定要注意。 接下来我们再来看一下销量的一个获取, 那么有释放啊,必然有获取,那么这是我们的一个普通任务的一个信号量获取的一个函数,这是它的一个函数的一个原型,它其实上就是调用了这个消息对列的一个接收的一个函数。那么我们来看一下信号量获取的函数当中呢, 它里面有两个参数,第一个呢是消息的信号量的一个句柄,第二个呢是它这个信号量的一个主摄时间,因为我们要获取这个信号量 啊,当我们资源里面有这个信号量的时候,那我们当然可以直接获取,如果说没有的时候呢,那你通过这个组成时间可以设置为 直接走还是等待,还是说一直等待,就通过这个时间来指定。那么调用了这个信号量获取函数的时候呢,那么 控制块里面的那个变量啊,里面的一个值,这个值呢,它会减一啊,释放的话它会加一啊,所以这个一定要注意啊,那获取之后呢,它会有一个 返回值啊,通过调用这个函数的时候,它会有一个返回值,如果获取成功,返回 cure, 如果说获取失败,那么就是这个, 那我们要获取信号量呢,可以通过,可以通过这个函数获取二值信号量, 技术型信号量以及互次量,这个函数只适用于普通的任务函数地规互次量呢,不能使用这个函数来获取,它有 专门的自己的一个函数来获取啊,来获取,注意这个只是普通的任务函数里面使用,对于在中段符函数里面要获取销量的话,不能使用这个函数啊,那么他会有一个专门的一个函数, 带中断保护功能的啊,信号量获取的一个函数,那么在中段服务函数里面要获取信号量的话,他只能获取二次信号量和技术型信号量,跟啊信号量的一个释放是一样的, 那互字销量呢?他是不能直接在这里中断里面获取的啊,这个函数的一个圆形呢,是这个,是这个啊,那么这个函数返回值啊, 如果获取成功,它就 char, 没有的话就是这个这个成员啊,这个返回值, 那么这个函数的参数呢?有两个,第一个用于指定我们的信号量的一个句柄,第二个呢,你可以设置为空啊,设置为空 这个函数呢,适用于我们的一个中段符号函数里面啊,如果说你的是要在普通任务函数里面,那你就调用这个函数来释放啊,获取我们的信号量,如果要在中段里面获取信号量的话,那你就调用这个啊,调用这个, 这是我们销量获取的一个函数的一个介绍啊。同样的这两个函数的区别呢?第一个,这个适用于普通任务函数,在中段里面不适用。 第二个,这个适用于中断符函数啊,它带有中断保护功能。然后呢,这个销量会 获取呢?它只能获取二字信号量、技术型信号量和互字信号量。而带中断保护功能呢,它只能获取二字信号量、技术型信号量,互字信号量它不能获取,这是这两个函数的一个区别。

大家好,我是一登,欢迎来到我的教室。本课程是关于 python 通过 winsharcom 操作 word 金奖和项目实战。 好,欢迎来到我的第一课,课程的主题呢是关于 python 通过 wins arecome 操作 word 进价和项目实战。在 python 操作 word 开源库中,有两个库非常出名,第一个库是 python dogs, 这个库是我们耳熟能详的,它是纯 pithen 实现,简单易用,跨平台 啊,但只能操作到格式的文档。在我们的开发中,如果遇到 d o c 格式的文档,一般都需要做格式转换,否则拍成 dos 是没办法操作的。拍成 dos 适合对 word 操作要求不高的项目。另外一个酷 呢是 win 三二 com, 实际上他是 p i win 三二的组件之一,他的底层是由 c 加加实现的,他使用了微软的 word 接口。右侧,这里是微软官方提供的 word 编程接口,基本上客户端上能实现的功能都能在上面找到对应的 api。 win 十 r com 是功能全面,操作颗粒度非常小,人工操作沃尔能做到的, win 十 r com 都能办到。当然,他也有缺点,他只能在 windows 环境下使用,他并不能跨平台, 它适合对 word 操作要求高的项目。如果朋友们想学 python 的 word 编程,那么 wins upcome 是必须要掌握的库之一,那本课程会分两部分,呃,第一部分是 api 的金奖,它覆盖了 word 编程常用的 ap p i, 学完之后呢,能满足各种 word 编程项目的开发需求。呃,在实战课程的这一部分,我们将会使用 gentle salary redis, la ui minisotcom 及微信支付来打造一套毕业论文格式检测及调整的 web 平台。 在该项目的学习过程中呢,我们将会接触到捐狗的 model limit, 高级用法 seller 和 redis 结合起来,防止 word 打开过多导致系统内存溢出。类 ui 方面呢,可以学习到它组件的使用,比如说组件的渲染和实践,以及义务请求。 除此以外,还学习到在坚果中如何使用 vsr com, 也就是说我们的 word 编程如何与坚果来结合,还有在坚果中如何使用微信支付。最后请各位杜绝一看就懂,一听就会,一做就废, 跟着我一起看百遍不如做一遍,点赞加关注再看不迷路,我是一登,下节课见!

大家好,我是一灯,欢迎来到我的教室。本课程是关于 python 通过 wins arecom 操作 word 金奖和项目实战。在 word 编程中,有两个接口的使用频率是最高的。 呃,第一个是 range, 这个接口呢,我们前面学过了,他表示一个范围的选中。实际上大部分的接口都有 range 属性, 比如说页面页角,文本批注,图片表格以及它的单元格,公式,图形等等,他们有链接属性,这样就很方便我们使用 range 呢对他们进行操作了。那第二个就是 program 这个接口了,这个接口表示段落对象的集合。 我们先看一看文档的说明,所选内容区域或文档中段落对象的集合, 因为中文的文档呢,他是及其翻译的,结果他中文语序不定准确的。当初我看这个文档的时候,我有点懵,我没有办法将这两个词汇和接口产生任何的联系,像这个时候我们可以看一看他英文的文档,我们点击右上角这个小地球, 这样看我们就很清楚了。段落对象的集合是什么段落对象的集合呢? selection, range 或者是 document? 那么这里我们就可以将这三个词和我们之前所学过的接口产生了联系了,对吧?实际上呢, selection 接口, range 接口和 document 接口 这三个接口呢,都有 programs 的这个属性,我们可以对一个 selection 的范围 使用 programs 的属性来获得这个范围内的所有段落。我们也可以通过 range 的 programs 的属性来获得这个范围内的所有段落对象。获得是通过 document 的 program 属性 来获得当前文档所有的段落对象。好,我们可以直接使用代码演示一下。 呃,当前我已经打开了一个文档了,我们可以通过 document 的 power gaps 的属性来获得当前整个文档的所有段落对象的集合。 我们在学 documents 那个接口的时候,我们是不是使用了一个 count 的属性来统计一共有几个对象呀?这里也是一样的,我们就使用 count 的属性 请来统计一下,整个都可以买。下面一共有几个段落?我们运行一下代码返回了八。当我们这个时候我们就很疑惑了,好像我们文档也没有八段呀,第一段,第二段,第三段, 第四,第五第六段。哎,充其量也就六段而已啊,他为什么返回八呢?这个情况我们后面再做解释。好,接下来我们讲一讲 range 来使用这个属性。我们先声明一个 range 的范围, 让它选择零到二的字符,然后再使用 programs 的属性, 我们依然使用 can 的属性来统计一下这个范围内一共有几个段落。 range 零到二是哪呀?就是这个零到二。这个 range 一共有几个段落呀? 有一个 ok 打回来一是吧,虽然这个 range 他并没有覆盖整一个段落,但是这个并不影响的啊,我们哪怕是一个插入点, 他依然能统计插入点所在的段落,他依然能统计所在的段落。如果我们乱局覆盖的范围比较大,比如覆盖这么多,那么他就来统计这个范围内所有的段落。我们再使用一个 select 来统计一下, 谁能调用 selection 呢?就是 application, 能调用 selection, 这里的 client 就是 application 的实力, 再把它的 star 和 an 分别声明,好让它选择四个四个字符吧,好运行。那么当前 我们就选中了这四个字。我们再通过这个 selection 的 program 属性, program 属性再用他的 count 来统计,当前的选区就只有一个段落。 ok, 好,我们再回到文档这里。我们在学习这个 program 的接口的时候,我们要非常非常清楚一件事情, 我们通过这个接口获取了所有段落,我们既可以对全部的段落进行格式操作,我们也可以对某一个段落进行操作。这个接口呢提供了一些属性,让我们可以很方便的获取某一个段落, 这个 pro 可以对某一个段落进行操作了。在我们的课程讲解过程中呢,这两个接口呢是交 叉混合使用的,实际上这两个接口的大部分的属性和方法呀,都差不多,他们有一点不太一样, paragraphs 没有这个 range 的属性啊,这一点区别一定要记住,在我们的实际开发中, paragraph, paragraphs 和 range 他们三者经常相互转换的。比如说我把一个 paragraph 转成一个 range 进行操作,或者我把一个 range 转成一个 power graphs 进行操作,要从 power graphs 里面获得。我们来演示一下如何获取某个进行操作啊,这种使用是很常见的,也正因为他们这种交叉引用的关系,极大的便利了我们的开发。好,我们 回到我们代码的演示中, 我们直接通过 document 来使用 paragraphs 的属性。 paragraphs 使用缩影一,获取第一段,用个变量 p e 接收,运行 好可以打印出来了,但是 print 打印出来的只是给人看的,它不代表全部的内容,我们可以演示一下,我们给它加一个 screen 的方法,把 p 传入进去, 我们可以看两者之间的区别。这个并不是返回值啊, print 是没有返回值的,我们用 print 只是打印某个东西来看而已,但是 g 呢?它的返回值就是这个,它是有返回值的,它返回了什么呀?演示文档,再加一个段落标记符。那这里我们就需要注意了, 我们使用 pin 的方法打印出来的东西一不一定是我们想要的,尤其是在 word 编程中,这一点一定切记。除了这种方式获取到某个段落以外,还可以通过 item 的方式传入锁引一来获取它的效果是一样的啊, 我们还可以使用什么呀?直接切片的方式,这个在之前我们讲 document 的接口的时候也讲过。除了这几个方式以外呢? programs 这个接口有一个属性 first, 可以让我们很方便的获取到第一个段落。同样的,它也实现了一个 last 的方法,通过这个方法,我们可以 获取到最后一个段落。 我们最后一个段落是谁啊?这个图片就是最后一个段落, 他法返回的是什么?是一个斜杠和一个段落标记符。因为我没有办法将图片直接打印出来,所以它内部的一个 dender stripping 方法或者是 dende presentation 方法 实现了。一个斜杠啊,一旦有人去打印这张图片,那么他就会返回这个斜杠。在之前我们使用这 count 属性统计整个文档的段落数量的时候, 他返回了八,但是我们的文档中好像没有八段呀,一二三四五六啊。那么这个就牵扯到一个关键的问题了,在 word 编程中,什么是段落? 我们通过一个方法来演示一下,我们便利 paragraphs, 把单个段落对象放到一个列表中, stream p four p in dog paragraphs。 好,我们运行一下,我们对着文档看啊。第一个段落是谁演示文档,然后呢?带了一个段落标记符,第二个段落是空段落,也就是这个地方,这个地方是空段落,他也算一个段落。好吧, 第三个段落才到这个标题,呃呀,中间又有一个空段落,应该是在这个地方啊,空段落,但凡带有一个段落标记符的,他都算一个段落,不管他是空段落 还是有内容的段落。好,这点请大家要注意。好,我们回到我们的这个文档, program 和 programs, 这两个接口的方法属性非常多, 我们使用这两个接口的目的无非就是实现对段落的操作。接下来的几节课,我们就会用这两个接口的一些关于操作类型的方法和属性啊进行讲解。这节课就先到这,点赞加关注再看,不迷路,我是一登下节课见!

嗨,大家好,我是师哥。我们时常会听到别人在讨论 api 这个概念, 其实日常生活中我们有很多类似 api 的场景,比如电脑需要调用手机里面的信息, 这时候你会拿起一根数据线,将电脑与手机连接起来。电脑和手机上连接数据线的接口就是传说中的 api 接口。 但比喻到底是比喻,并非本质。要想真正了解 api, 还得老老实实去理解 api 的概念和真实应用场景。下面我们就先来看 一下什么是 api。 百度百科是这样介绍的, api 英文全称 application programming interface, 翻译为应用程序变成接口。 他是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组历程的能力, 而又无需访问圆码或理解内部工作机制的细节。大家看的是不是有点头晕?没关系,师哥讲一个小故事来帮助大家理解。我们有两个研发人员 a 和 b。 研发人员 a 开发了软件 a 一,研发人员 b 正在研发软件 b 一。有一天,研发人员 b 想要使用一下软件 a 一的部分功能, 但是他又不想查看软件 ae 的代码实现过程,怎么办呢? 研发人员 a 想了一个好主意,我可以把软件 a 一里你需要的功能写成一个代码块,并取一个名字叫做 w。 当软件 b 一中要用到这个功能时,就把代码快的名字 w 按照预定流程放在软件 b 一中,就能直接用我的功能了。 其中 api 就是研发人员 a 说的那个代码块。 那么 api 在现实社会中是如何使用的呢?举一个真正的 api 例子, 大家都熟悉在网上搜索航班信息的过程。假设我们国家只有一个航空公司 a, 大家可以直接登录航空公司 a 的网站,选择出发城市和目的城市、出发时间以及仓位等级等等。然后网站会自动访问航空公司数据库, 查到该天是否有空位。但当我们有多家航空公司 a、 b、 c、 d、 e 时, 我们就不能一个个登录每家公司的网站进行查询,而是可以使用一个拥有不同航空公司信息的集成方来进行选择。比如某 app, 这个集成方之所以能够获取不同公司的机票信息,就是因为这些公司的系统向集成方开放了 api, 使得集成方能够对这些公司的数据进行查询、订票、改签等操作。 可以说, api 就是集成方与不同航空公司的连接枢纽。 现在我们早已习惯动动手指就连接世界,从计算机到手机,我们可以在任何地方、任何时间进行聊天、购物、订餐、游戏等活动。 这一切的背后都是因为有 api 这个东西。所以以后再遇到 api 时,你就把它想象成服务员, 主要是奔波于应用与设备之间来传递数据,创造出让世界触手可及的连接。 好了,今天的内容就讲到这里,感谢观看喜欢小事编程课堂的小伙伴一定要记得点赞分享加关注哦,因为你们的支持是我们研发团队最大的动力!