当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《获取与正在运行的应用程序关联的图标》经验,为你挑选了2个好方法。

拥有打开的应用程序的窗口句柄,我可以使用GetWindowText函数从应用程序的标题栏中检索文本.我想更进一步,并检索与同一个应用程序关联的图标.

我该怎么做呢?我查看了我认为相关的Win32 API部分,但没有任何内容跳出来.

任何指针将不胜感激.

提前致谢!



1> Adam Davis..:
Icon ico = Icon.ExtractAssociatedIcon(theProcess.MainModule.FileName);

来自TheSoftwareJedi

最初这似乎是一个完全重复的如何从可执行文件中获取图标只有C#中的进程的实例,但是那个人似乎主要关注如何从它自己的内部获取它,而你可能是询问如何使用与正在运行的进程分开的程序获取图标.

-亚当



2> tklepzig..:

您可以执行以下操作:

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll")]
static extern IntPtr LoadIcon(IntPtr hInstance, IntPtr lpIconName);

[DllImport("user32.dll", EntryPoint = "GetClassLong")]
static extern uint GetClassLong32(IntPtr hWnd, int nIndex);

[DllImport("user32.dll", EntryPoint = "GetClassLongPtr")]
static extern IntPtr GetClassLong64(IntPtr hWnd, int nIndex);

/// 
/// 64 bit version maybe loses significant 64-bit specific information
/// 
static IntPtr GetClassLongPtr(IntPtr hWnd, int nIndex)
{
    if (IntPtr.Size == 4)
        return new IntPtr((long)GetClassLong32(hWnd, nIndex));
    else
        return GetClassLong64(hWnd, nIndex);
}


uint WM_GETICON = 0x007f;
IntPtr ICON_SMALL2 = new IntPtr(2);
IntPtr IDI_APPLICATION = new IntPtr(0x7F00);
int GCL_HICON = -14;

public static Image GetSmallWindowIcon(IntPtr hWnd)
{
    try
    {
        IntPtr hIcon = default(IntPtr);

        hIcon = SendMessage(hWnd, WM_GETICON, ICON_SMALL2, IntPtr.Zero);

        if (hIcon == IntPtr.Zero)
            hIcon = GetClassLongPtr(hWnd, GCL_HICON);

        if (hIcon == IntPtr.Zero)
            hIcon = LoadIcon(IntPtr.Zero, (IntPtr)0x7F00/*IDI_APPLICATION*/);

        if (hIcon != IntPtr.Zero)
            return new Bitmap(Icon.FromHandle(hIcon).ToBitmap(), 16, 16);
        else
            return null;
    }
    catch (Exception)
    {
        return null;
    }
}

此代码检索小窗口图标,该图标显示在标题栏中的窗口文本旁边.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有