初识Windows API

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()函数

1语法 2BOOL DeleteFile( 3 LPCTSTR lpFileName 4);

可以看到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删除文件会直接删掉,并不会放入回收站)

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

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

image

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

点赞
收藏

评论区

加载中...

相关推荐

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:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )