盘点儿童智力开发的首选编程语言——Scratch

大家好,我是IT共享者,人称皮皮。

前言

Scratch作为少儿编程的首选编程语言,这几年发展的如火如荼,当然,这主要还是因为它简单易学,不用掌握太多概念即可编程,这意味着你不用认识英文单词,编程照样行云流水,是不是很激动?那么现在让我们一起进入Scratch的世界吧。

一、安装Scratch

首先我们需要安装Scratch,下载地址:
https://u062.com/file/7715018-456560477,然后我们双击安装软件,它会自动安装,并且无法选择安装路径,所以系统盘最好保留足够的空间,安装完毕,打开如图所示:

当然如果你想切换到其它语言的界面也很简单,如图:

二、基本操作

我们从上图中可以看出Scratch的界面比较简洁,非常适合少儿编程,所以我们学起来也不会很困难。可以看到Scratch有这些早就编好的代码功能模块供我们使用,如图:

首先我们来看看猫咪的基本属性,如图:

这些参数我们都可以设置,我们还可以设置多个角色,比如大于吃小鱼,就可以找几个大鱼的图片和小鱼的图片。那么接下来让我们来看看Scratch有哪些妙用之处吧。

1.运动

这个板块具有让Scratch中的对象运动起来的功能,如下:

这里我们点击移动10步,角色就会向右移动10个像素,不过我们需要将这个模块拖动到中间这个窗口中来,如图:

这样点击中间的这个蓝色的不规则方块即可执行角色动作任务。比如我要角色左转,如图:

可以看到,我们拖动左转后可以设置左转的角度,然后点击之后角色就开始旋转一定角度,就好比移动了一样。然后我们还可以移动角色,这里可以选择移动到随机位置或者鼠标指针位置,这里我选择了随机位置,如图:

这里选择了随机位置的所有操作,可以看到我们的角色开始移动并且还可以在指定时间内移动到某个位置。这里还有一个边缘检测模块,如图:

当角色碰到边缘的时候,只要触发该模块的功能,角色即可反弹回来。勾选下面的三个选项即可显示当前角色的坐标和方向,如图:

2.外观

这个模块可以设置角色的形状和语言还有显示隐藏以及各种特效,如图:

我们可以看到这几个动作不像刚才那样连接起来了,我们将它镶嵌起来了,这样做的用途便是点击一处即可触发所有的功能,这里我们可以看到改变了角色的颜色和形状,甚至加了点特效,看起来怪怪的。我们也可以利用清除图形特效功能来清除上面的特效,也可以设置角色的状态,显示或者隐藏,并把角色移动到前面或者后面,显示角色的信息,如图:

3.声音

这个不用我多说,大家都知道,这个就是用来设置角色的声音的,如图:

系统内置的是猫咪的声音,我们可以自己录制猫咪的声音,如图:

4.事件

可以接收响应角色的各个事件,如图:

这个模块需要配合其它模块使用,比如前面的模块,我们让它在按下某个键后就发出猫咪声,如图:

这里小编设置了按下“a”键发出猫咪叫,按下”b”键角色马赛克特效增加25,小编刚按下“b”键就出现了马赛克效果,可见小编的做法是正确的。然后我们还可以看到这个事件可以接收到消息,并进行一些处理,比如说:

可以看到当我们收到这条消息后角色就进行思考,而且是不停的思考。

5.控制

控制就是可以重复执行角色的基本操作,或者使用一些控制循环语句,来看一下,如图:

这里我们克隆了这个角色,而且重复执行了十次说Hello并等待3秒的过程,但是控制里面有一些功能并不能单独使用,所以我们需要搭配其它功能模块来使用,下面我们接着来看其它模块。

6.侦测

这个模块通常是和控制和其它模块相辅相成的,它是控制模块中的某些判读语句的条件,如图:

7.运算

这里有这众多的计算方法,如加减乘除,下面来看看:

我们可以在里面输入任意数值来进行计算,不过随机数中只会显示随机整数。

8.变量

这个可以说是一门编程语言必备的东西了,Scratch也是,有了它,你可以做很多事情并实现它们。我们点击变量模块并点击建立一个变量,如图:

新建变量名然后选择变量的作用范围,如果适用于所有角色则是全局变量,可以在整个程序的任意位置使用,如果是仅适用于当前角色,说明只能作用在局部环境中。新建好变量后我们给变量设置一个值,如图:

这样即可使用变量了。

9.自制积木

这个模块我们在编写程序时完全可以不使用它,但是如果你的逻辑变得十分冗长的时候,你可以使用它来讲逻辑给包裹起来,也就是面向对象中的封装技术了。

三、总结

Scratch是儿童智力开发的首选编程语言,它把编程变得简单,而且可以提升孩子们 的想象力,如果可以做到亲子互动的话那么将更加有趣。

厉害了,Python也能操作注册表

前言

大家好,我是IT共享者,人称皮皮。

注册表这个东西大家可能都不是很熟悉,因为我们平时用到的少;但是它是Windows的核心,很多软件的启动和日志记录什么的都包含在里面,可以说它是一个大型的数据库也不为过,今天我们就来看看Python是如何操作注册表的吧。

一、注册表初次见面

进入系统注册表的方法多种多样,最常见的就是运行窗口输入命令“regedit”,即可进入注册表:

注册表中的几个菜单分别对应机器的根目录登陆的用户信息和本地机器信息以及用户信息和本地配置信息等。

二、认识操作注册表的模块

在Python中就有这么一个神奇的模块,它可以用来操作注册表。它就是—–“winreg”,一个Python自带的操作注册表的模块。

三、导入

import winreg

1.常量

”winreg“总有很多有用的方法,基本上就是操作注册表中的键值,我们挑几个重要的来说说。首先我们来了解下”winreg“中的各个常量:

1).HKEY_ 常量

winreg.HKEY_CLASSES_ROOT     #存储应用和shell的信息
winreg.HKEY_CURRENT_USER     #当前用户自定义的信息
winreg.HKEY_LOCAL_MACHINE    #计算机系统所有的信息
winreg.HKEY_USERS            #所有用户信息
winreg.HKEY_PERFORMANCE_DATA #性能数据
winreg.HKEY_CURRENT_CONFIG   #本地计算机系统的硬件配置文件
winreg.HKEY_DYN_DATA         #windows98后的版本无法使用

2).访问权限

winreg.KEY_ALL_ACCESS           #所有权限
winreg.KEY_WRITE                #可写
winreg.KEY_READ                 #可读
winreg.KEY_EXECUTE              #可执行相当于KEY_READ
winreg.KEY_QUERY_VALUE          #查询注册表键值
winreg.KEY_SET_VALUE            #创建、删除或设置一组注册表值
winreg.KEY_CREATE_SUB_KEY       #创建一个注册表子项的注册表键
winreg.KEY_ENUMERATE_SUB_KEYS   #枚举注册表子项所需的注册表键
winreg.KEY_NOTIFY               #修改注册表键时的提示
winreg.KEY_CREATE_LINK          #创建一个链接,预留给系统用

3).64位的具体应用

winreg.KEY_WOW64_64KEY  #在64位Windows应用程序应该运行在64位注册表视图
winreg.KEY_WOW64_32KEY  #在64位Windows应用程序应该运行在32位注册表视图

4).值类型

winreg.REG_BINARY                  #任何形式的二进制数据
winreg.REG_DWORD                   #32位的数
winreg.REG_DWORD_LITTLE_ENDIAN     #32位的数字在低位优先的格式,相当于REG_DWORD
winreg.REG_DWORD_BIG_ENDIAN        #32位的数字在高位优先的格式
winreg.REG_EXPAND_SZ               #以null结尾的字符串包含环境变量的引用(% %)
winreg.REG_LINK                    #Unicode符号链接
winreg.REG_MULTI_SZ                #一个以null结尾的字符串序列,由两个空字符结束
winreg.REG_NONE                    #没有定义的值类型
winreg.REG_QWORD                   #64位的数
winreg.REG_QWORD_LITTLE_ENDIAN         #在低位优先一个64位的数字格式,相当于REG_QWORD
winreg.REG_RESOURCE_LIST               #设备驱动器资源列表
winreg.REG_FULL_RESOURCE_DESCRIPTOR    #硬件设置
winreg.REG_RESOURCE_REQUIREMENTS_LIST  #硬件资源列表
winreg.REG_SZ                          #一个以null结尾的字符串

四、注册表相关操作

1.连接远程计算机注册表

reg=winreg.ConnectRegistry('\\计算机名',winreg.HKEY_LOCAL_MACHINE)#返回值是所开打键的句柄
#第一个参数是指远程计算机名,第二个参数是指注册表中的键,如HKEY_LOCAL_MACHINE,它是winreg中的常量。

不过我们在这里要注意的是,如果远程注册表没有系统管理员权限,是无法正常访问注册表的。所以我们先要判断下它的访问权限。这里就要用到我们之前讲的”ctypes”模块中的判断用户是否是管理员用户的方法了。

import ctypes
import sys
def admin():
    aa=ctypes.windll.shell32.IsUserAnAdmin()
    return aa


if admin()==1: #有管理员权限可打开远程注册表
    winreg.ConnectRegistry('\\计算机名',winreg.HKEY_LOCAL_MACHINE)
else:
    if sys.version_info[0]==3: #python版本是3以上的版本
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    else: #python2 版本
        ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)

2.关闭连接注册表

连接之后我们不想用了,就要随手把它给关闭了,也很简单,只要拿到打开注册表的句柄,就可以关闭了。

winreg.CloseKey(reg)

可以看到句柄的值不一样。

其实还有一种方法,就是利用注册处理对象的方法来关闭。

reg.Close()

注册对象还支持上下文和分离处理对象周期:

reg.detach() #返回一个整数,记录当前对象的生命周期,如果关闭注册句柄对象,那么则为0

3.打开注册表键

#打开指定的键,返回一个处理对象
winreg.OpenKey(key, sub_key, reserved=0, access=winreg.KEY_READ)
winreg.OpenKeyEx(key, sub_key, reserved=0, access=winreg.KEY_READ)
#key:HKEY_ 常量
#sub_key:指定键的子键
#reserved:一个保留的证书,必须是零。默认值为零
#access:访问权限

4.创建新的注册表键

winreg.CreateKey(key,sub_key)
winreg.CreateKeyEx(key,sub_key,reserved=0,access=winreg.KEY_WRITE)
#key:HKEY_ 常量
#sub_key:指定键的子键
#reserved:一个保留的证书,必须是零。默认值为零
#access:访问权限

5.删除注册表中指定的键

winreg.DeleteKey( key,sub_key) #不能删除带有子项的键
winreg.DeleteKeyEx(key,sub_key,reserved=0,access=winreg.KEY_WOW64_64KEY)#不能删除带有子项的键
winreg.DeleteValue(key, value)#从某个注册键中删除一个命名值项
#用法与上面相同,只是结果是删除罢了

可以看到”cnm“已经被删除了。如果键不存在,删除会报错。

6.枚举注册表键

winreg.EnumKey(key,index) #枚举打开的注册表键的子键,并返回一个字符串
winreg.EnumValue(key,index)#枚举打开的注册表键值,并返回一个元组
#index:一个整数,用于标识所获取键的索引

7.刷新注册表键

winreg.FlushKey(key)  #同步某个键的所有属性写入注册表

8.读取注册表

winreg.LoadKey(key,sub_key,file_name)
#file_name:读取注册表的数据的文件名

9.查找注册表键

winreg.QueryInfoKey(key) #返回一个3元素元组的键的信息
winreg.QueryValue(key,sub_key) #用一个字符串来检索一个键的值
winreg.QueryValueEx(key,value_name) #检索与开放权限的注册表键相关联的指定值的数据类型和名称

10.保存注册表键

winreg.SaveKey(key, file_name) #保存指定的键和所有指定文件的注册表子项

11.启用禁用注册表

winreg.DisableReflectionKey(key) #禁用
winreg.EnableReflectionKey(key)  #启用

12.反射状态是否禁用

winreg.QueryReflectionKey(key) #结果为True 则表示禁用

13.在指定键上关联值

winreg.SetValue(key, sub_key, type, value) #添加键和值
winreg.SetValueEx(key,value_name,reserved,type,value)#将数据存储在一个开放的注册表键值字段
#value_name:该字符串名称的注册表子键
#type:值类型
#value:子键的键值

可以看出它们的区别,而且前者值类型只能指定为“winreg.REG_SZ”,而后者什么类型都可以。

14.寻找应用程序的位置并打开

前面我们介绍了”winreg”几乎所有的方法,现在我们就来具体做一个应用练练手,就拿我们的360安全卫士为例,我们尝试着通过注册表先找到它的位置然后打开它。那么接下来小编开始表演了:

1).定位360安全卫士的注册表项:

1)).打开系统注册表编辑器,然后进行搜索关键字:

2)).定位到注册表路径

2).打开注册表键

通过我们找到的子键然后对其进行查找操作,得到处理对象的句柄“reg”

reg=winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\360安全卫士")

3).找到应用的绝对路径并打印

通过数值名称找到数值数据,

path=winreg.QueryValueEx(reg,'DisplayIcon')

这样就找到了这个应用的绝对路径了,返回值是一个元祖,我们使用索引访问:

path[0]

可以看到我们已经成功打印出了我们要找的应用程序的绝对路径了,接下来就可以愉快的打开它了。打开的方法多种多样,什么“os”,“subprocess”,”ctypes”,”pywin32″,一大堆的方法,不过小编还是觉得“os”最方便。

os.popen(path[0])

最后别忘了关闭对象处理句柄哦。

#两种方法都可以关闭
winreg.CloseKey(reg)
reg.Close()

四、总结

利用”winreg“可以完成很多骚操作,你也可以通过注册表设置系统开机启动项以及其它操作,如果你想往黑客方面发展的话。