图解什么是API,C++如何调用系统API

图解什么是API,C++如何调用系统API,第1张

首先,要知道: *** 作系统与用户间的接口有两种,一种是命令接口,另一种是程序接口。什么是命令接口: 为了便于用户直接或者间接地控制自己的作业, *** 作系统向用户提供了命令接口,用户可以通过该接口向作业发出命令以控制作业的运行。该接口又进一步分为联机用户接口和脱机用户接口。(

参考资料:

《计算机 *** 作系统》 第三版 汤小丹编著 西安电子科技大学出版社 23页)什么是程序接口: 程序接口是提供给程序员在编程时使用的接口,是用户的程序取得 *** 作系统服务的唯一途径。可以说,程序接口是为用户程序在执行中访问系统资源而设置的。程序接口由一组系统调用命令(简称系统调用)组成。用户通过在程序中使用这些系统调用命令来请求 *** 作系统提供服务。系统调用详解:系统调用就是用户在程序中调用 *** 作系统所提供的一些子功能,每一个系统调用都是一个能完成特定功能的子程序。具体讲,系统调用就是通过系统调用命令中断现行的用户程序,而转去执行相应的子程序,以完成特定的系统功能;系统调用完成后,控制又返回到系统调用命令的下条指令,被中断的程序将继续执行下去。需要注意的是:系统调用的执行是在管态下运行的。Windows系统调用:Windows *** 作系统提供了丰富的系统调用,这些系统调用又被进一步编写成不同的库函数后放入动态链接库DLL(DLL是动态链接库的英文缩写,全称是是Dynamic Link Library)中,这些库函数构成了Windows *** 作系统提供给程序员的编程界面,这个编程界面被称为应用编程接口API。库函数:百科上的解释是:库函数顾名思义是把函数放到库里是别人把一些常用到的函数编完放到一个文件里,供别人用。别人用的时候把它所在的文件名用#include<>加到里面就可以了。库分动态链接库和静态链接库。这些库是通过编译连接生成的(在编译软件里,可以设置文件生成库文件还是普通的EXE文件)。其实库函数就好比是在word文件里写了几篇作文,然后保存成一个word文档,那么这个word文档就相当于一个库,里面的每一篇作文都是一个库函数。动态链接库的英文缩写是DLL,Windows中,动态链接库一般被存放在C:\Windows\System目录下,DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。所以说:API函数可以看做是一些函数,在windows *** 作系统下,这些函数通常存放在动态链接库中,其头文件通常包含在windowsh中(windowsh是VC 或者VS中带的)。这些存放在动态链接库里的API函数是 *** 作系统与用户程序之间的唯一接口,用户程序只能通过这些库函数(API函数)请求 *** 作系统服务,即用户程序只能通过这些存放在动态链接库里的API函数来实现系统调用。当用户程序中使用了这些API函数时,通常会发生系统调用, *** 作系统进入管态下运行,系统调用结束后,再返回到用户程序继续往下执行。其实,C语言中最常用的printf和scanf函数,最后都是通过系统调用来完成的不止这两个函数,其实C语言的标准库函数,很多都是通过系统调用实现的。而要使用系统调用,windows下必然要使用存放在动态链接库里的API函数。当然,我们在程序中也可以不采用系统调用,因为没人规定你必须使用系统调用(当然,有时候采用系统调用会简单的多)。比如完成一个简单的加法运算程序,又比如单片机C语言编程,都没有系统调用。 许多应用软件,安装后,在其目录文件夹里通常会有一些DLL文件,这些DLL就是给该软件来调用的。网上对API的解释如下: API是系统的基石,是Windows的一砖一瓦。明确一个概念,软件是运行在系统平台的支持上的,软件的功能其实就是向系统伸请,并由系统完成这些功能的过程。那么软件要做的事情如何传递给系统呢,也就是这些API的作用了,系统定义了这些API函数,做为支持软件执行系统功能的接口。不同的 *** 作系统自然API会是不同的mfc就是对api的封装啊就是很好的例子,候杰的深入浅出mfc正是讲这些原理的

首先要

#include <windowsh>

这个头文件

你需要下载msdn,也就是微软的知识库,里边有windows一些公开函数(api)的原型

然后你就可以想调用自己的函数一样使用他们完成你功能了

==============================

至于如何查看相关api所在的库,这些msdn上有的,你最好去下载一个,这个是写win32应用程序必备的参考啊

vc6对应的版本是 msdn 2001 oct

一般的api只要包含windowsh就足够了,windowsh是很多头文件的集合,直接包含它能完成绝大部分的 *** 作了

代码

Private Type PROCESSENTRY32

dwSize As Long

cntUsage As Long

th32ProcessID As Long

th32DefaultHeapID As Long

th32ModuleID As Long

cntThreads As Long

th32ParentProcessID As Long

pcPriClassBase As Long

dwFlags As Long

szExeFile As String 1024

End Type

Private Type MODULEENTRY32

dwSize As Long

th32ModuleID As Long

th32ProcessID As Long

GlblcntUsage As Long

ProccntUsage As Long

modBaseAddr As Byte

modBaseSize As Long

hModule As Long

szModule As String 256

szExePath As String 1024

End Type

Const TH32CS_SNAPHEAPLIST = &H1

Const TH32CS_SNAPPROCESS = &H2

Const TH32CS_SNAPTHREAD = &H4

Const TH32CS_SNAPMODULE = &H8

Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)

Const TH32CS_INHERIT = &H80000000

Public Const MF_DISABLED = &H2

Public Const MF_BYPOSITION = &H400

Public Const HWND_TOPMOST = -1

Public Const HWND_BOTTOM = 1

Public Const HWND_NOTOPMOST = -2

Public Const SWP_NOSIZE = &H1

Public Const SWP_NOMOVE = &H2

Public Const SWP_NOZORDER = &H4

Public Const SWP_NOACTIVATE = &H10

Public Const SWP_SHOWWINDOW = &H40

Public Const SWP_HIDEWINDOW = &H80

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long

Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Declare Function EnumWindows& Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long)

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long

Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Function GetProcessID(EXEName As String, ProcessID As Long) As Boolean

Dim my As PROCESSENTRY32

Dim l As Long

l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

If l Then

mydwSize = 1060

If (Process32First(l, my)) Then

Do

If UCase$(Right$(Left$(myszExeFile, InStr(1, myszExeFile, Chr$(0)) - 1), Len(EXEName))) = UCase$(EXEName) Then

CloseHandle l

ProcessID = myth32ProcessID

GetProcessID = True

Exit Function

End If

Loop Until (Process32Next(l, my) < 1)

End If

CloseHandle l

End If

GetProcessID = False

End Function

Private Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean

Dim lpdwProcessId As Long

GetWindowThreadProcessId hwnd, lpdwProcessId

If lpdwProcessId = lParam Then

If GetParent(hwnd) = 0 And IsWindowVisible(hwnd) Then Form1List1AddItem hwnd

End If

EnumWindowsProc = True

End Function

Public Sub FindProcessWindow(ProcessID As Long)

Call EnumWindows(AddressOf EnumWindowsProc, ProcessID)

End Sub

'窗体代码

Private Sub Command1_Click()

Dim ProcessID As Long

If GetProcessID("qqexe", ProcessID) Then FindProcessWindow ProcessID

End Sub

GetProcessID(EXEName, ProcessID)

找到 文件名为EXEName的进程, ProcessID 返回的进程ID

FindProcessWindow(ProcessID As Long)

找到 属于进程ProcessID 的窗口,可能不只一个,窗口句柄放到了列表框List1中

窗口置前

Call SetWindowPos(Form1hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE Or SWP_NOMOVE)

窗口不置前

Call SetWindowPos(Form1hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOSIZE Or SWP_NOMOVE)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11669258.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存