初识Windows API

Ustinain
• 阅读 1346

Windows API是什么

Windows系统是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务 ,就是一个函数)可以帮应用程序达到开启视窗、描绘图形、使用周边设备等,由于这些函数服务的对象是应用程序(Application),所以便称之为Application Programming Interface,简称API函数,Win32 API也就是Microsoft Windows 32位平台的应用程序接口

Windows API 就是Windows应用程序接口,是针对Microsoft Windows 操作系统家族的编程接口,这样的系统包括Windows8.1、Windows8、WIndows7、Windows Vista、Windows XP、Windows Server2012、Windows Server2003、Windows 2008 R2、Windows 2000、Windows 95等等,几乎windows所有版本

其中位WIndows操作系统的编程接口为,Win API以便于于以前的16位的Windows API区分开

Windows API大致分为以下几个函数大块:

  1. 基本服务
  2. 组件服务
  3. 用户界面服务
  4. 图形多媒体服务
  5. 消息和协作
  6. 网络
  7. web服务

举个例子,比如我们要和删除文件,这个时候我们可以使用 win32中 DeleteFile()函数

语法
BOOL DeleteFile(
  LPCTSTR lpFileName
);

可以看到DeleteFile返回类型是BOO类型,需要的参数是lpFileName ::: tip 提示 从Windows 10版本1607开始,对于此功能的unicode版本(DeleteFileW),您可以选择删除MAX_PATH字符限制,而无需添加“ \?\”。有关详细信息,请参见命名文件,路径和命名空间的“最大路径限制”部分 。 :::

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零(0)。要获取扩展的错误信息,请调用 GetLastError。

如果应用程序尝试删除不存在的文件,则 DeleteFile函数将失败,并显示 ERROR_FILE_NOT_FOUND。如果该文件是只读文件,则该函数将失败,并显示 ERROR_ACCESS_DENIED。

以下列表列出了一些删除,删除或关闭文件的技巧:

  • 要删除只读文件,首先必须删除只读属性。
  • 要删除或重命名文件,您必须对文件具有删除权限,或者在父目录中具有删除子权限。
  • 若要递归删除目录中的文件,请使用 SHFileOperation函数。
  • 要删除一个空目录,请使用 RemoveDirectory函数。
  • 要关闭打开的文件,请使用 CloseHandle函数。

我们来实际操作一下GetLastError函数,理解一下他的用法:

首先我们在桌面上创建一个名为hello.txt的文本文件,然后调用win32 API中GetLastError函数来进行操作(使用API删除文件会直接删掉,并不会放入回收站)

#include <windows.h>
int main() {
    BOOL a;
    const char file_path[] = "C:\\Users\\86132\\Desktop\\hello.txt";
     a = DeleteFile(file_path);
    printf("返回值=%X  扩展错误信息=%d",a, GetLastError());
    return 0;
}

hello.txt文件被成功删除,程序返回 初识Windows API 若是文件不存在,程序返回

初识Windows API

::: tip 虽然返回值只有0或者1 但是系统扩展错误信息却有很多,大家可以自己手动尝试一下 ::: 这期的文章就到这里,虽然很基础,但学习却是一个逐渐积累的过程,三天打鱼两天晒网肯定是不行的,只要有一丝的收获,将这个收获X时间得到的就是技术与财富。

点赞
收藏
评论区
推荐文章
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
Stella981 Stella981
11个月前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解 ============================== 2016年09月02日 00:00:36 [\-牧野-](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
11个月前
KVM调整cpu和内存
一.修改kvm虚拟机的配置 1、virsh edit centos7 找到“memory”和“vcpu”标签,将 <name>centos7</name> <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>
Easter79 Easter79
11个月前
Twitter的分布式自增ID算法snowflake (Java版)
概述 == 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
11个月前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表: **时辰** **时间** **24时制** 子时 深夜 11:00 - 凌晨 01:00 23:00 - 01 :00 丑时 上午 01:00 - 上午 03:00 01:00 - 03 :00 寅时 上午 03:00 - 上午 0
Wesley13 Wesley13
11个月前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序 select * from table_name order id desc; 2.按照指定(多个)字段排序 select * from table_name order id desc,status desc; 3.按照指定字段和规则排序 selec
Stella981 Stella981
11个月前
Angular material mat
Icon Icon Name mat-icon code _add\_comment_ add comment icon <mat-icon> add\_comment</mat-icon> _attach\_file_ attach file icon <mat-icon> attach\_file</mat-icon> _attach\
Wesley13 Wesley13
11个月前
PHP中的NOW()函数
是否有一个PHP函数以与MySQL函数`NOW()`相同的格式返回日期和时间? 我知道如何使用`date()`做到这一点,但是我问是否有一个仅用于此的函数。 例如,返回: 2009-12-01 00:00:00 * * * ### #1楼 使用此功能: function getDatetimeNow() {
Wesley13 Wesley13
11个月前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_
helloworld_34035044 helloworld_34035044
2个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。 uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid() 或 uuid(sep)参数说明:sep 布尔值,生成的uuid中是否包含分隔符'',缺省为