【问题标题】:How should I learn to use the Windows API with Python?我应该如何学习在 Python 中使用 Windows API?
【发布时间】:2010-09-25 10:58:46
【问题描述】:

我几乎没有为 Windows 构建软件的经验,并且零使用 Windows API 的经验,但我对 Python 相当熟悉。我应该如何开始学习在 Python 中使用 Windows API?

【问题讨论】:

    标签: python winapi


    【解决方案1】:

    老实说,没有。 Windows API 是一个重达 800 磅的怪物,身上长满了头发。 Charlie Petzold's 15 pound book 曾是规范的参考。

    也就是说,Python for Windows 的人有一些很好的材料。微软有whole API online,包括一些示例代码等。 Wikipedia article 是一个很好的概述。

    【讨论】:

    【解决方案2】:

    大约 4 年前,我开始真正了解 Windows API。当时我正在使用 C# 进行编码,但我觉得该框架将我从 API 中抽象了太多(确实如此)。所以我改用 Delphi(C++ 或 C 也是不错的选择)。

    在我看来,重要的是您开始使用一种可以创建本机代码并直接与 Windows API 对话并让您关心 Windows 直接使用的缓冲区、指针、结构和实际构造的语言。 C# 是一门很棒的语言,但不是学习 Windows API 的最佳选择。

    接下来,购买 Mark Russinovich 的书“Windows Internals”Amazon link。这是第 5 版。第 6 版将于 2012 年 4 月发布,并添加了有关 Server 2008 R2 和 Windows 7 的信息。

    现在,学习 Win32 API 的最重要(也是最好的)资源:

    Mark Russinovich 的Windows Operating Systems Internals Curriculum 免费提供。

    它旨在供教师用来教授学生。我经历了它,这太棒了。充满了例子、历史和详细的解释。在我看来,这是学习 Windows API 的理想方式。

    Mark Russinovich 是 Microsoft 技术研究员(包括 C# 的创建者在内,MS 只有 14 人)。在将 Winternals 卖给 MS 之前,他曾经拥有 Winternals,他拥有卡内基梅隆大学的计算机工程博士学位,他经常在微软会议上发表演讲(甚至在他为这些会议工作之前),而且他非常聪明。他的演讲是我每年参加 Microsoft TechEd 的主要原因之一。

    【讨论】:

    • 感谢您提供指向 Windows 操作系统内部课程的链接。我从来不知道它的存在。
    • “Windows 操作系统内部课程”+1 我也不知道它存在。
    • Windows 操作系统内部课程的文件已移动 :((。请提供新链接?谢谢!
    • 链接已损坏。你介意修复它吗?谢谢。
    【解决方案3】:

    你必须从这两本书开始。

    Petzold book:非常适合学习消息和消息泵、GDI 和 User32 的东西。

    Richter book:Windows 基础服务,即。进程、内存、线程和 dll

    【讨论】:

      【解决方案4】:

      嗯...很多人在这个问题上本末倒置。我要问你的问题是:你为什么要学习Win32?

      如果您想学习它以便构建 Windows 用户界面,不妨考虑使用 wxPython。如果您只打算调用非可视化 Win32 API,那么 Petzold 书可能不是最好的。有像 SWIG 这样的工具,可以更轻松地从 Python 等语言调用 Win32 等库。

      【讨论】:

      • 我不同意,首先学习低级可以让您在所有 Windows 编程中站稳脚跟。学习 win32 可以让您了解幕后情况。
      【解决方案5】:

      正如Charlie 所说:“这个 Api 是一个 800 磅重的怪物,上面覆盖着头发”。

      考虑使用 Visual Studio for vb 或 c# (http://www.microsoft.com/express/) 的 express 版本(免费)以及 msdn 库 (http://msdn.microsoft.com/en-us/library/default.aspx)。这将使您尽可能多地接触 api。

      【讨论】:

        【解决方案6】:

        曾几何时,我在www.relisoft.com阅读了一些 Win32 API 教程

        他们是反 MFC 和支持 Win32 API 的商店,并且有一份宣言,解释了为什么的实际原因。

        他们也有一个通用的 C++ 教程。 99% 的时间我都喜欢他们的编程风格。

        【讨论】:

          【解决方案7】:

          避免教程(由孩子编写,为孩子们,新手级别) 阅读 Petzold、Richter、Pietrek、Russinovich 和 Adv。 Win32 api 新闻组 新闻://comp.os.ms-windows.programmer.win32

          【讨论】:

            【解决方案8】:

            【讨论】:

              【解决方案9】:

              既然你问过 Python,为什么需要 Win32 API?它用于编写小型、快速的 C/C++ 程序。如果您的工具是 Python,只需下载 wxPython,它可以在 Windows 上完美运行,并且只需 1% 的代码和工作量即可生成时尚的原生 GUI。

              【讨论】:

              • 另外,它应该更容易移植到其他系统。
              • 当然,除非需要完成一项只能用 windows api 完成的特定任务,并且不会 C(++/#)
              【解决方案10】:

              我强烈推荐theForger's Win32 API Tutorial。它是一个 C 教程,但他几乎握着你的手,向你展示了基础知识。它也很短,在教程中很好。

              【讨论】:

              • 你推荐的教程太棒了!
              • 谢谢!非常动手并立即开始使用它!
              • 哇,这让我想起了一些回忆!
              【解决方案11】:

              您所需要的一切都在 MSDN.COM 上完全免费。 Win32 很容易使用 C/C++、C# 和 Visual Basic 进行编程。我推荐 C/C++。您可以下载 Visual Studio Express 版本here

              所有文档(不是缩写形式)都在网络上here

              请注意,Win32 经常被松散地用来表示“Windows 的所有编程接口”。更规范地说,它是用户模式应用程序的基本原生 API 集。有一组类似的用于驱动程序和内核组件的 API。你可以了解here

              Microsoft 也有许多其他 Windows 编程接口:Common Language Run time and .NET frame work 是 Windows 顶部的管理层。还有许多其他 API 系列,例如 DX9 and DX10(游戏编程的良好链接 here)。

              【讨论】:

              • 问题说明了python,所以我认为推荐c(++)并不是一个很好的答案。
              • 他确实说过“最好是 python” 问题是 WIn32 API 是一个 C/C++ API。 Phtyon 不会直接暴露它。如果他想学习 API,那么他应该用它的母语编程。
              【解决方案12】:

              学习 Win32 API 是对概念和使用的模式的初步理解的 5% 以及 RTFM 的 95%。

              对于最初的 5%,Petzold 的书确实不错,但我怀疑应该有一些在线教程,你可以在 google 中找到我能找到的最好的。

              真的,一旦你掌握了窍门,就可以做任何事情了。一旦你到达那里,可能是时候转向像 QT 这样更好的东西了,再也不要接触 Win32 API。现在没有人真正将裸 Win32 API 用于任何比琐碎的事情,因为它所涉及的开销和极度缺乏舒适性。

              【讨论】:

              • 我一直使用 Windows API。实际上,我在解决问题和编写代码时一直使用我对 Windows API 的理解,即使在使用框架时也是如此。不要被愚弄。你可能并不总是直接调用 API,但如果你知道它,你会成为一个更好的程序员。
              猜你喜欢
              • 1970-01-01
              • 2016-02-13
              • 2010-10-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-10-31
              • 1970-01-01
              • 2012-09-17
              相关资源
              最近更新 更多