使用 WinAPI 获取与正在运行的应用程序关联的图标

7 winapi

如果我知道 Hwnd,如何获取正在运行的应用程序的图标?

Cat*_*lus 6

如果您有窗口句柄,则可以使用GetClassLong

HICON icon = (HICON)GetClassLong(window, GCL_HICON);
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于某些应用程序(在 Windows 7 下),例如 Steam、Firefox,但不适用于 Visual Studio、Explorer、Skype。您还可以尝试使用 WM_GETICON,如本例所示 - http://codeutopia.net/blog/2007/12/18/find-an-applications-icon-with-winapi/ 但这仍然只给您提供小图标其他。即使应用程序显然有更大的图标(如任务栏上),那么也许更好的方法是从应用程序 exe 文件获取图标? (3认同)

Ehz*_*Ehz 4

如果您有 hwnd,则可以使用 WINAPI GetWindowThreadProcessId 获取进程 ID。这样您就可以创建一个 C# Process 对象。接下来,您可以迭代进程的 ProcessModule 集合以获取可执行文件的文件名。最后,可以使用WINAPI函数ExtractIconEx从路径中获取图标

Pinvoke 有关于两种 WINAPI 方法的信息

http://www.pinvoke.net/default.aspx/user32/GetWindowThreadProcessId.html

http://www.pinvoke.net/default.aspx/shell32/ExtractIconEx.html