Windows API的最酷部分

我注意到在Stack Overflow上有很多关于编程语言和API的“提示和技巧”或“隐藏特性”的社区wiki。 但是我找不到我个人的最爱:Win32 API和Delphi。 因此,我开始我的“自己的”关于Win32 API的CW。

至less有两种Win API用户:那些在C / C ++中使用Windows API的用户,以及在Windows API之上使用某种抽象级别的用户。 我属于后一类,用Delphi的VCL提出来。 但在过去的五年里,我对Windows操作系统的底层API越来越感兴趣,今天我用了很多东西。

根据程序员属于哪个类别,他(或者可能她)会认为在Windows API中不同的东西是“酷”的。 举个例子,一个VCL开发的开发人员可能会觉得这很酷

var errIcon: HICON; begin errIcon := LoadIcon(0, IDI_ERROR); DrawIcon(Canvas.Handle, 10, 10, errIcon), 

一个使用C语言编写的Windows API的程序员不会感到印象深刻。

但是,无论你如何“提高”,Windows API中最酷的“技巧”是什么?

我首先列出一些我自己的最爱,其中一些比“有用”更“酷”,但是:

  • LoadIconMessageBeep可以加载/播放系统默认的图标和声音。
  • 打开CD盘: mciSendString('Set cdaudio door open wait', nil, 0, 0);
  • 淡出屏幕(Windows Vista及更高版本)并closures监视器: SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
  • GetWindowDC(GetDesktopWindow)返回桌面的DC。
  • 使用GetSystemMenu可以在窗口的系统菜单上添加/更改/删除菜单项。 有时非常好。
  • DrawThemeBackground和其他主题服务function,可以让您绘制当前主题的细节,无论您希望如何。 糖果: 零件和国家

Raymond Chen 。

有一个Windows API的事实。

我们理所当然地认为,这个API系统有效地允许我们在Windows环境中做任何事情。 它所能产生的一切以及它被如此详细记载的事实(特别是感谢Charles Petzold )都是奇迹般的。

我在.NET框架中执行我个人的日常编码,我很喜欢它的容易程度。 但是我也知道,如果我能想到基于Windows的东西在托pipe的.NET代码中是不可能的,我可以通过WinAPI挖掘,并find一种方法让我的孩子成为可能。

 SendMessage(HWND_BROADCAST, WM_CLOSE, 0, 0); 

几乎closures了你的机器上运行的所有应用程序。 有趣的见证在行动,但谨慎部署…也许这不是一个伎俩。 除了你(即将成为前)的朋友。

WSAAsyncSelect ,所以你可以有高效的交互式应用程序,在后台执行networking内容,而不会失去响应能力或忍受multithreading头痛。

和MsgWaitForMultipleObjectsEx 。 使用其他任何东西(GetMessage,PeekMessage)作为主事件循环的基础是疯狂的。 使用其他任何东西来构build框架应该是非法的。

如果你在Shell Lightweight Utility API中search ,特别是path,string和stream函数,你可以find一些非常有用和省时的东西。

Spy ++和SendMessage可以让你做各种各样的很酷的事情。

你可以find关于Windows和任何其他应用程序如何构build的各种信息。 而且你可以通过手动发送键盘input。 你可以findwindows的层次结构并发送消息给他们。 你可以像closures开始button一样。

另一个很酷的方面是windows挂钩 。

重新分析点 。 几乎感觉像Linux。

你有没有想过检查一个线程是否还活着?

 DWORD ExitCode; GetExitCodeThread (Thread, &ExitCode); if (ExitCode == STILL_ALIVE) { TerminateThread (Thread) }