windows系统函数的简单介绍

rust里面可以使用windows系统函数吗

时下如果语言界要评选一个网红的话,无疑会是Rust。Rust凭借着自己出色的安全性和高效性被各大平台所接纳,Linux内核,安卓底层开发,Windows底层开发相继都采纳并给出了对应的借口。微软的Windows也是,最近发布了Rust for Windows(windows-rs) v 0.9。更新中包括全面的调用支持,Rust可以直接原生调用任何Windows API可以极大的拓展Rust在Windows下的开发能力和范围。本文我们通过实例来学习Rust for Windows 。

10年积累的网站建设、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有祁县免费网站建设让你可以放心的选择与我们合作。

概述

本次更新提供了很多新的特性和更新,根据官方的信息包括:

添加了对Win32和COM API的支持,统一了Windows板条箱。这些Windows API有新的项目win32metadata来添加。为了方便和统一,项目名称由“Rust/WinRT”更改为“Rust for Windows”。

添加了几个示例 ,演示了如何调用各种Windows API(包括Win32,COM和WinRT API)。

Windows 板条箱在crates.io发布,现在支持MIT或Apache双开源版权。

内置生成的binding,无需再手动编写。

Windows支持在Linux上构建。

Win32 API的许多改进和修复,例如对数组类型,各种字符串类型和更新的元数据的支持。

添加了对COM接口的更自然和惯用的支持,例如返回值,以及对涉及C样式联合和嵌套类型之类的其他API的支持。

缩短了构建时间并改善了错误处理。

保留原始的API大小写,这会影响使用Windows crate的现有代码。通过类似于QueryInterface的函数转换为通用函数,从而可以更安全,更方便地调用许多与COM相关的函数。

环境配置

Window板条箱使用需要首先要在Windows下配置Rust开发环境,还在Rust环境的安装也非常简单傻瓜化。

安装rustup

首先从Rust官方(rust-lang.org)下载安装包rustup-init.exe(记得下载当前Windows对应的32位或者64位版本)。

然后直接执行安装包,安装程序为自动配置好系统路径,以后就可以直接在命令行下使用了,比如cargo包管理器。

安装C++ build tools

Windows下的rust编译还依赖Microsoft C++ build tools工具,不安装,后面在编译时,会报错说“link.exe”无法找到。

需要从微软VS下载出下载vs_buildtools,选中C++工具和Windows SDK组件并安装。

安装VS Code及其Rust插件

另外,为了方便一般建议安装VS Code及其Rust插件:

crates-io国内源

配置Rust 板条箱的国内源,由于官方crates-io国内下载太慢,甚至容易失败,所以先配置国内源(比如ustc)

在用户目录C:\Users\CC\.cargo创建一个config文件,内容配置为:

示例

首先,通过cargo创建一个新的Rust项目:

cargo new hello-chongchong

以上命令这将创建一个新目录并hello-chongchong创建基本项目框架目录和文件。

进入该目录,并使用--lib 命令嵌套创建依赖的库项目:

cargo new --lib bindings

然后通过

code .

在VS Code打开该项目,截图如下:

修改项目Cargo.toml文件中,添加以下依赖项,依赖项告诉Cargo现在它依赖于新创建的win库。

[dependencies]

bindings = {path = " bindings"}

现在,在win文件夹下的Cargo.toml文件中,添加对Windows板条箱的依赖项,版本指定为最新的0.9.1。这样就可以通过允许Cargo打包下载,构建和缓存Windows支持。

[dependencies]

windows = "0.9.1"

[build-dependencies]

windows = "0.9.1"

然后在bindings目录下创建一个新的源文件build.rs,并输入一下源码:

// build.rs

fn main() {

windows::build!(

Windows::Win32::WindowsAndMessaging::MessageBoxA

);

}

在代码中,使用 windows::build 宏指定要使用的类型,可以再次列出需要使用的所API,Windows板条箱将直接元数据生成必要的绑定。

然后修改win/src目录中为以下代码:

windows::include_bindings!();

这样,就可以在主项目main.rs文件中,任意调用指定的Windows API。此处我们创建一个“Hello Chongchong!”消息对话框。

use bindings::Windows::Win32::WindowsAndMessaging::{MessageBoxA, MESSAGEBOX_STYLE};

fn main() {

unsafe {

MessageBoxA(None, "Hello Chongchong!", "Message", MESSAGEBOX_STYLE::MB_OK);

}

}

注意,任何Win32函数和COM接口方法,都需要用unsafe方式调用。

然后通过cargo build编译该项目,并通过cargo run 会弹出一下对话框。

新版本的板条箱中再带了几个例子,可以在windows-rs项目仓库的examples目录。

总结

Rust for Windows 给rust在Windows开发应用带来了福音,虽然一些API可能早就被广泛地使用了,但是现在有了官方的支持,可以在文档、示例和稳定性等各方面都有极大的改善。

system的Windows函数

windows操作系统下system () 函数详解(主要是在C语言中的应用) 函数名: system

功 能: 发出一个DOS命令

用 法: int system(char *command);

system函数需加头文件stdlib.h后方可调用

程序例: #include stdlib.h#include stdio.hint main(void){printf(About to spawn and run a DOS command\n);system(dir);return 0;}又如:system(pause)可以实现冻结屏幕,便于观察程序的执行结果;system(CLS)可以实现清屏操作。而调用color函数可以改变控制台的前景色和背景,具体参数在下面说明。

例如,用 system(color 0A); 其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:

0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色

(注意:Microsoft Visual C++6.0 支持system)

举例

看了下面实例,相信你会对学到更多system在C程序设计中的应用。

例一:

C语言调用DOS命令实现定时关机: #includestdio.h#includestring.h#includestdlib.hint print(){printf( ╪╪╪╪╪╪╧╧╧╧╧╧╧╧╪╪╪╪╪╪\n);printf(╔═══╧╧C语言关机程序 ╧╧═══╗\n);printf(║※1.实现10分钟内的定时关闭计算机 ║\n);printf(║※2.立即关闭计算机  ║\n);printf(║※3.注销计算机  ║\n);printf(║※0.退出系统  ║\n);printf(╚═══════════════════╝\n);return 0;}void main(){system(title C语言关机程序);//设置cmd窗口标题system(mode con cols=48 lines=25);//窗口宽度高度system(color 0B);system(date /T);system(TIME /T);char cmd[20]=shutdown -s -t ;char t[5]=0;print();int c;scanf(%d,c);getchar();switch(c){case 1:printf(您想在多少秒后自动关闭计算机?(0~600)\n);scanf(%s,t);system(strcat(cmd,t));break;case 2:system(shutdown -p);break;case 3:system(shutdown -l);break;case 0:break;default:printf(Error!\n);}system(pause);exit(0);}例二:

用C语言删除文件,例如文件的位置是d:\123.txt

用system()函数执行windows命令。 #include stdlib.h#include stdio.hint main(void){system(del d:\\123.txt);return 0;}

Windows编程中,Zw、Ke、Nt开头的函数代表什么?

这些都代表着是Windows native(原生)系统服务(system services)例程(routines)。

Ke - kernel的缩写,代表的是内核模式的API接口。

Nt - Windows NT的缩写,代表的是Windows 系统服务功能API接口。 大部分以Nt开头的函数,都映射到了用户态(User Mode)API接口。比如你编写的用户模式程序,用到了CreateFile这个函数,由于它需要访问系统内部的数据结构,必须要进入内核模式,这时的程序就要转入内核模式,相对应的内核模式功能服务接口,正是ntdll.dll中的NtCreateFile,它最终完成来自用户态程序的函数功能请求。

Zw - 没有具体的缩写含义,只是为了避免和其它前缀的重复。它的功能和与之相对应的Nt函数是一致的(可以说是Nt功能的镜像)。 不同点在于: 相应的Nt函数,是对系统服务的直接;而Zw需要经过一系列系统准备动作,比如:系统服务码入寄存器保存,系统KiSystemService加载,然后才执行具体的服务功能调用。 看着负担加重了,但好处是,在执行时,系统参数的系列校验不必再进行了(拜所谓的previous access mode之赐),所以反而轻快了;而Nt系列函数虽然调用时简洁,但每一次执行都要参数校验,因此反而累赘了。这也正是内核态程序(比如驱动程序)多用Zw系统的原因(因为需要和previous mode打交道)。

什么是windows窗口函数

理解Window系统、主窗口、窗口函数这三者之间的关系,对于编写Windows程序十分重要。

主函数和窗口函数都是由Windows系统来调用的函数,只不过主函数是程序启动之后,系统首先调用的函数;

而窗口函数是主函数在获得消息并把消息发给系统之后,由操作系统调用的函数。

不同的消息所对应的操作就是由窗口函数完成的,Windows程序员的工作就是编写窗口函数的case中的代码。

Windows系统、主函数、窗口函数这三者之间的关系,如下图所示:

Windows API函数 是什么

API的英文全称(Application Programming Interface),WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。对这个定义的理解,需要追溯到操作系统的发展历史上,当WINDOWS操作系统开始占据主导地位的时候,开发WINDOWS平台下的应用程序成为人们的需要。而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。所以可以认为API函数是构筑整个WINDOWS框架的基石,在它的下面是WINDOWS的操作系统核心,而它的上面则是所有的华丽的WINDOWS应用程序。

但是,那时的WINDOWS程序开发还是比较复杂的工作,程序员必须熟记一大堆常用的API函数,而且还得对WINDOWS操作系统有深入的了解。然而随着软件技术的不断发展,在WINDOWS平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。

这些优秀可视化编程环境操作简单、界面友好(诸如VB、VC++、DELPHI等),在这些工具中提供了大量的类库和各种控件,它们替代了API的神秘功能,事实上这些类库和控件都是构架在WIN32 API函数基础之上的,是封装了的API函数的集合。它们把常用的API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS应用程序开发的过程。有了这些控件和类库,程序员便可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节。

实际上如果我们要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数,虽然类库和控件使应用程序的开发简单的多,但它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。

这也是API函数使用的场合,所以我们对待API函数不必刻来研究每一个函数的用法,那也是不现实的(能用的到的API函数有几千个呢)。正如某位大虾所说:API不要去学,在需要的时候去查API帮助就足够了。


文章名称:windows系统函数的简单介绍
标题网址:http://ybzwz.com/article/hpcgdj.html