.net API 与win32API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net API 与win32API相关的知识,希望对你有一定的参考价值。

.net API 是不是封装了所有的win32API。 如果不是的话,这有什么意义。不如直接调用win32API 好了,干嘛又来个.net API

这个兄弟对API这个词的理解有误,我个人觉得.
首先,API的意思是Application Program Interface,应用程序接口.
实际上,只要是程序,都可以对外提供API,比如你写一个网站.然后对外提供API,任何人都可以通过你提供的API获取到对应的信息.例如你网站中的数据.
win32 API是windows系统提供的API,
.NET 也可以提供API
虽然提供的作用可能会有重合,但是不影响说,其实这是两个不同程序提供的API.
不能因为说windows提供了API,那么.NET就不能提供API了.
而且.NET的API虽然很多是对WINDOWS的封装,但是这样可以避免一个人要学习.NET.还必须要去学习WINDOWS的API.
参考技术A 首先,前提是你打算面向.NET Framework开发。
那么如果要调用Windows系统提供的功能,有两种方式,直接调用win32API, 或者使用.NET帮你封装好的框架类库。
直接调用win32API,要做的工作包括:
1.知道所调用的功能在哪个Dll;
2.在.NET程序里面写引入语句,这里面要解决C类型参数、返回值,和.NET基本类型之间的对应和转换问题;
3.如果某个操作需要多次调用API,需要了解其具体做法。

这里面如果不是很熟Win32的人,处理起来很困难。所以.NET提供的框架类库,简化了程序员这方面的工作,而且用友好的组织形式(命名空间)提供。

当然,如楼上所说,有些功能,.NET的框架类库没有封装到,这就必须自己来做上面那3个工作了,所以如何直接调用Win32API,也是一个.NET程序员需要掌握的。
参考技术B 人拉出来的屎是不是都是由饭菜变来的. 不过不是的话,这有什么意义.不如直接吃屎好了,干嘛要吃饭菜!
简单说调用API运行更快 更简洁追问

问题是C#能直接调用 win32API . 你能直接吃那个吗?

追答

我不吃 dan'shi 没有人规定不能吃 OK ? 我的意思是 存在即合理 你一行.net的代码 就直接完成了api N个 函数的功能 你说那个更容易懂 如果.NET代码无法完成还是要借助api的 代码怎么写无所谓 关键是要达到目的

追问

我这个问题就是想知道这个.net API存在的合理性。想比较了解这些的人说解下而已。想知道.net API 有多强大。
一行.net的代码 就直接完成了api N个 函数的功能(这句话的意思是 .net API 优化了 win32 API ?)

追答

有Q吗

追问

80131490

追答

截取自身的界面的图片 C# GDI+ 图片内容是API C#的更简洁一些 不容易出错
private Bitmap getMainFormImage()

Screen scr = Screen.PrimaryScreen;
Bitmap img = new Bitmap(Width, Height);
Graphics g = Graphics.FromImage(img);
g.CopyFromScreen(new Point(Location.X, Location.Y), new Point(0, 0), new Size(Width, Height));
g.Dispose();
return img;

本回答被提问者采纳

Pywinauto常用02--pywin32(Python调用win api)

pywin32(Python调用win api

pywin32是一个第三方模块库,主要的作用是方便python开发者快速调用windows API的一个模块库。

  • Win32gui: Windows图形界面接口模块。
    • 主要负责操作窗口切换以及窗口中元素id标签的获取
  • Win32api: Windows开发接口模块。
    • 主要负责模拟键盘和鼠标操作,对win32gui获取的标签进行点击/获取值/修改值等操作
  • Win32con:全面的库函数。
    • 提供Win32gui和Win32api需要的操作参数

安装

pip install pywin32

一、Win32gui 函数

1、FindWindow(ClassName,Title)查找窗体

hld=win32gui.FindWindow(ClassName,Title)

  • ClassName:窗口的类名
  • Title:窗口的标题名称,即左上角的文字描述信息
  • hld:返回结果为当前窗口的句柄信息

1)判断窗口是否打开

import win32gui

winClass = "Notepad"
winTitle = "test001.txt - 记事本"
dialog = win32gui.FindWindow(winClass, winTitle)

# dialog返回0,则为记事本未打开;dialog返回数值,则为窗体的句柄NativeWindowHandle的值2564730
print(dialog)

if dialog:
    print("test001.txt记事本窗口,已打开")
else:
    print("test001.txt记事本窗口,未打开")

2) 返回Windows【另存为】窗口句柄

hld=win32gui.FindWindow("#32770",u"另存为")

Title: 另存为 #这里就是上面的Title
Class: #32770 #这里就是上面的ClassName
Handle: 0x001E03A0 #这里就是上面函数返回值

二、win32api 函数

1、弹出提示框,展示提示信息

import win32con, win32api

win32api.MessageBox(0, "提示框--提示信息内容展示", "MessageBox", win32con.MB_OK | win32con.MB_ICONWARNING)

以上是关于.net API 与win32API的主要内容,如果未能解决你的问题,请参考以下文章

用Python 打开程序的两中方法

Win32 API 获取机器 UUID

发送/捕获 SIGTERM 的 Win32 API 模拟

C# .NET Framework API(非 Win32 API)中的 CreateProcessAsUser()

.NET下如何拦截鼠标、键盘消息?Win32NET来帮你

cad.net 利用win32api实现一个命令开关参照面板