适用于 VISTA、7 及更高版本的 Windows API

2024-01-14

WinAPI/Win32 之间有什么根本区别吗?利用新操作系统功能是否需要任何其他知识?

过去编写过 Win32 应用程序的人是否可能会陷入任何陷阱?

我不是在谈论 Silverlight,那是一个完全不同的蜡球。 (我还没有在工作中支持这一点的 VS。)

编辑: 到目前为止,德鲁已经给出了一个很好的答案,但是对于程序员来说最重要的是要知道什么? 即查尔斯·佩措尔德的书的附录中应该包含什么内容? (理论上)


当然,您应该了解许多新的 API,以确保您拥有所需的工具。除此之外,还有一些变化需要注意。

哲学变革
旧的 win32 API 的大部分集中于传递句柄的 C 风格 API。如今,许多正在开发的新 API 都是基于 COM 的,因此加强 COM 和 ATL 是值得的。

如果您正在编写自己的库,您可能还需要注意新的 API 样式,它更加一致,并且避免了匈牙利表示法等内容。

替换品
一般来说,不要认为您 10 年前知道的方法仍然是最先进的;它们仍然存在,因此您不一定会被告知您做错了。检查 MSDN,看看它是否向您推荐了更好的东西,并使用最新的 SDK,以便您会收到某些功能的弃用警告。特别是,请确保您使用的字符串函数是安全的。

具体来说,一个“替代”API 是 Direct 2d,它是一种用于 UI 的 DirectX 风格的 API。如果您正在为 Windows 7 编写图形代码,则应该考虑使用 Direct2d 而不是 GDI,它的编程模型与 GDI 兼容,但又截然不同。 Direct 2d 可能会移植回 Vista。

另外,不要使用 win32 风格的菜单,请考虑使用功能区,该功能区适用于 Vista 和 Win7。

如果您使用通用控件库,请确保使用 v6,而不是默认的 v5。

最后,确保您没有不必要地调用需要管理员权限的内容,因为这会提示 UAC。

目前我能想到的就这些了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 VISTA、7 及更高版本的 Windows API 的相关文章

  • 使 GetRawInputDeviceInfo 和 RIDI_DEVICEINFO 与 C# 一起使用

    我有一个问题 我似乎无法使 GetRawInputDeviceInfo 与 RIDI DEVICEINFO 结合使用 尝试检索 RID DEVICE INFO 根本不起作用 我从函数中得到错误 1 这意味着没有足够的空间来存储 RID DE
  • 了解 GetDiBits。 C++

    MSDN 说位图用于GetDiBits在调用此函数之前不应将其选入 DC 但根据我的经验 与BitBlt 我知道除非选择了位图 否则我无法绘制位图 如何GetDiBits规避这个 我可以只使用未选择的 新创建的位图作为该函数的参数吗 Get
  • 新编译的应用程序需要 UAC/elevation?

    我有一个系统 我将其设置为普通的 UAC 并在我的 delphi 环境中编译名为 ka exe 的项目 并为其创建一个 installshield 项目 设置完毕 一切顺利 但每当我开始我的程序时 它都需要提升 而我不知道为什么 为了确保
  • 如何从系统属性获取Windows操作系统环境变量

    我遇到一个关于系统属性环境变量的奇怪问题 如你所知 我们可以打开Computer gt Property gt Advanced System Settings gt Advanced gt System Environment Varia
  • 注册表碎片整理程序[重复]

    这个问题在这里已经有答案了 这是出于好奇 但我见过几个 其中一些非常流行 称为注册表碎片整理程序的软件 虽然我可以看到它们提供的好处 但我很好奇您到底是如何进行注册表碎片整理的 请注意 我并不是要求提供软件名称 只是询问其如何以编程方式完成
  • Vista 中的文本转语音

    我通过在 2000 NT XP 中使用 Delphi 创建 OLE 对象来做到这一点 如下所示 Voice CreateOLEObject SAPI SpVoice Voice speak 但这在 Vista 中不起作用 我怎样才能让我的程
  • 多个原始输入窗口接收器

    我有一个仅消息窗口 ATL CWindowImpl 它使用 RIDEV INPUTSINK 标志将自身注册为原始输入 这意味着无论该窗口是否是前台窗口 它都会获取所有输入 当该窗口只有一个实例时 这非常有效 但是 当我创建超过 1 个窗口实
  • 如何从 Java 访问 Windows 设备管理器中的信息?

    我有一个串行 USB 设备 并且其中多个设备可以连接到计算机 我需要查询和检索设备连接到的 COM 端口列表 在 Windows 设备管理器中 您可以获得当前连接的设备的 COM 端口 友好名称 该列表是动态的 从注册表中读取不工作 htt
  • 如何使用 WinAPI 读取 MessageBox 文本

    如何读取标准Win消息框 Info 的消息 Using SendMessage this HandleControl WM GETTEXT builder Capacity builder 我只能读取消息框的标题或按钮的文本 但不能读取消息
  • 如何拥有程序执行时间的控制台?

    我正在尝试编写一个在控制台或 GUI 模式下工作的程序 具体取决于执行参数 我已经成功编写了以下示例代码 using System using System Collections Generic using System Linq usi
  • 尝试使用 C++ 创建一个计划任务运行一次,win7 上的任务计划程序 1.0

    我正在尝试创建一个非常简单的程序 它将在两分钟后运行记事本 这些都经过简化以提出更清晰的问题 我尝试合并一些MSDN 的例子 http msdn microsoft com en us library windows desktop aa3
  • 如何在超时后关闭上下文菜单?

    我需要有一个上下文菜单 当前使用 TrackPopupMenu 创建 在一段时间不活动后自动关闭 我正在尝试搜索 但只找到相反的结果 如何activate超时后的弹出窗口 或针对特定应用程序的专门内容 我发现的唯一接近的事情是枚举桌面的子级
  • Win32:是否可以构建一个容纳其他应用程序的应用程序?

    我想知道 您将如何编写一个基本上包含其他应用程序的应用程序 我问这个问题的原因是我想构建一个应用程序来 征服 我目前打开的窗口数量激增的情况 我以前使用过虚拟窗口管理器 它们非常好 但是我可以使用我提到的应用程序做很多事情 或者 有人知道有
  • 密码保护 IIS 7.5 中的 ASP.NET Web 应用程序

    我在 Windows 7 上使用 IIS 7 5 为我的 asp net 网站提供测试服务 为了阻止随意的人查看我的网站 我希望 IIS 在提供任何服务之前需要用户名和密码 我已尝试在应用程序上禁用匿名身份验证并启用 Windows 身份验
  • 如何使用 P/Invoke 在 PowerShell 1.0 中调用 Win32 函数?

    在许多情况下 从 PowerShell 脚本调用 Win32 函数或其他一些 DLL 会很有用 给定以下函数签名 bool MyFunction char buffer int bufferSize 我听说 PowerShell CTP 2
  • win32 Python - pythoncom 错误 - ImportError: 没有名为 pywintypes 的模块

    我正在尝试导入 pythoncom 但它给了我这个错误 Traceback 最近一次调用最后 文件 F Documents and Settings Emery Desktop Python 27 Try 第 2 行 位于 导入python
  • 发送和接收 Windows 消息

    Windows 消息似乎是通知 Windows 操作系统上的应用程序的好方法 它实际上运作良好 但我想到了几个问题 How to指定结构化数据lparamSendMessage 例程 就像许多消息代码一样 我的意思是 参数当然是一个指针 但
  • 如何使用本机 C++ 检查进程是否在 Windows 7 中具有提升的权限?

    如何检查进程在 Windows 7 中是否具有提升的权限 使用本机 C 而不是 C C net 我有时一直在寻找答案 但我只能找到使用 NET 框架的答案 最简单的方法是调用 IsUserAnAdmin 函数 如果您需要更高的精度 您也可以
  • 在64位环境中加载32位进程

    我有以下几个问题 CHM 是 编译的 HTML 文件 我的 CHM 文件有一个启动 32 位应用程序的链接 CHM 文件是用 Javascript 编码的 这在 32 位操作系统环境中运行良好 但这在 64 位操作系统环境中不起作用 原因是
  • Windows 家长控制 API 的 C# 示例

    谁能给我提供一些 Windows 家长控制 API 的 C 示例 我想添加一些功能 允许用户设置他们的孩子一天内可以登录的持续时间 我想将其作为 F OSS 应用程序来实现 以便其他人也可以从中受益 Cheers 类似的应用程序已经存在 限

随机推荐