首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C Sharp中获取当前活动窗口的图标?

在C#中获取当前活动窗口的图标可以通过以下步骤实现:

  1. 首先,需要引用System.Runtime.InteropServices命名空间,以便使用Windows API函数。
  2. 使用GetForegroundWindow函数获取当前活动窗口的句柄。
  3. 使用GetWindowThreadProcessId函数获取当前活动窗口所属进程的ID。
  4. 使用OpenProcess函数打开进程,获取进程的句柄。
  5. 使用GetModuleFileNameEx函数获取进程的可执行文件路径。
  6. 使用ExtractIconEx函数获取进程的图标。
  7. 使用DestroyIcon函数释放图标资源。

下面是一个示例代码:

代码语言:txt
复制
using System;
using System.Drawing;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("user32.dll")]
    private static extern IntPtr GetForegroundWindow();

    [DllImport("user32.dll")]
    private static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);

    [DllImport("kernel32.dll")]
    private static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

    [DllImport("psapi.dll")]
    private static extern int GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, out string lpFilename, int nSize);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern bool DestroyIcon(IntPtr handle);

    [DllImport("shell32.dll", CharSet = CharSet.Auto)]
    private static extern int ExtractIconEx(string lpszFile, int nIconIndex, out IntPtr phiconLarge, out IntPtr phiconSmall, int nIcons);

    static void Main()
    {
        IntPtr hWnd = GetForegroundWindow();
        int processId;
        GetWindowThreadProcessId(hWnd, out processId);

        IntPtr hProcess = OpenProcess(0x0410, false, processId);
        string fileName;
        GetModuleFileNameEx(hProcess, IntPtr.Zero, out fileName, 1024);

        IntPtr hIconLarge, hIconSmall;
        ExtractIconEx(fileName, 0, out hIconLarge, out hIconSmall, 1);

        Icon icon = Icon.FromHandle(hIconSmall);
        // 使用图标进行操作...

        DestroyIcon(hIconLarge);
        DestroyIcon(hIconSmall);
    }
}

这段代码通过调用Windows API函数获取当前活动窗口的句柄和进程ID,然后打开进程并获取进程的可执行文件路径。最后,使用ExtractIconEx函数获取进程的图标,并将其转换为Icon对象进行操作。

请注意,这只是一个简单的示例代码,实际应用中可能需要进行错误处理和资源释放等操作。另外,获取到的图标可能是多个图标中的一个,可以根据需要进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言获取当前输出窗口大小

很多同学在学习C语言,只是局限于课本知识学习及应用,课本上练习题做了不少,可一旦遇到实际应用问题,就感到无从下手。 以下就简单就printf函数进行分析。   ...C程序输出结果是在标准输出设备上,通常情况下,在Win环境下,其输出在一个字符窗口上,现在试问,如何得到该字符输出窗口大小,也即该窗口容纳多少字符,?行 * ?列。     ...;将字符串输出到输出窗口中,在当前确省光标位置上将Hello!依次输出到窗口上,如果当前行不足,则折行输出。...main() {   printf("\n");   for ( int i=1;i<=10;i++)     printf("0123456789"); }    同理,按此方法我们可以得到窗口所容纳字符行数...main() {     int i;   printf("\n");   for ( i=1;i<50;i++)     printf("%4d\n",i); }     记录当前显示窗口首行及末行显示数值即可

3.3K00

c++获取子类窗口句柄位置_C++各种获取窗口句柄方法「建议收藏」

AfxGetMainWnd AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函数功能:该函数检查与特定父窗口相联窗口...返回值: 如果函数成功,返回值为在Z序顶部窗口句柄。如果指定窗口无子窗口,返回值为NULL。 GetForegroundWindow 函数功能:该函数返回当前系统前台窗口窗口句柄。...GetActiveWindow 函数功能:该函数可以获得与调用该方法线程消息队列相关活动窗口窗口句柄(就是取得当前进程活动窗口窗口句柄)。...GetSafeHwnd 函数功能:获取某个窗口对象(CWnd派生对象)指针句柄(HWND)时,最安全方法是使用GetSafeHwnd()函数。...这个原子(一个16bit值),必须被放置在lpClassName低位字节,lpClassName高位字节置零。

2.4K30

何在代码获取Java应用当前版本号?

最近需要在项目中获取项目的版本号,最笨方法莫过于硬编码一个版本号,当然我也是这么干。不过闲下来时候突发奇想Spring Boot项目中pom.xml定义版本号能不能通过API获得呢?...从配置文件读取 Maven在构建项目时可以通过资源插件将构建属性即pom.xml属性注入到指定资源文件,具体操作为: ... 恰好spring-boot-starter-parent已经设置了这种方式。...Spring Boot提供 Spring Boot其实已经内置了获取项目构建信息自动配置ProjectInfoAutoConfiguration,它包含一个条件BeanBuildProperties:...spring-boot-version", "time" : { "epochSecond" : 1620664643, "nano" : 591000000 } } 总结 今天介绍了几种从通过API获取项目构建版本信息方法

3.2K20

何在代码获取Java应用当前版本号?

最近需要在项目中获取项目的版本号,最笨方法莫过于硬编码一个版本号,当然我也是这么干。不过闲下来时候突发奇想Spring Boot项目中pom.xml定义版本号能不能通过API获得呢?...从配置文件读取 Maven在构建项目时可以通过资源插件将构建属性即pom.xml属性注入到指定资源文件,具体操作为: ... 恰好spring-boot-starter-parent已经设置了这种方式。...Spring Boot提供 Spring Boot其实已经内置了获取项目构建信息自动配置ProjectInfoAutoConfiguration,它包含一个条件BeanBuildProperties:...spring-boot-version", "time" : { "epochSecond" : 1620664643, "nano" : 591000000 } } 总结 今天介绍了几种从通过API获取项目构建版本信息方法

5.8K20

程会玩 | 在.NET Core里操作Git

Git是很多程序员首选源代码版本控制工具,我最近也从TFVC切换到了Git,受益匪浅。今天我就来带大家看看如何在.NET Core里操作Git。 为啥要这么做 首先,这件事情意义,并不是闲蛋疼。...我们确实有很多不错Git客户端,GitHub for Windows、VS/VS Code,Git GUI等,都相当成熟,没有必要自己再去用.NET/C#重新发明轮子。...LibGit2Sharp 我们不需要从零开始研究Git原理,强大.NET社区已经有了一个操作Git库:LibGit2Sharp。...Repository.Init(@"D:\GitRocks"); 打开本地Git仓库 LibGit2Sharp.Repository 类型代表一个Git仓库,它可以只在内存,也可以从一个本地路径加载,...想要获取最新Commit,访问Repository.Head.Tip即可。

1.4K30

WinForm程序启动控制台窗口Console

本文转载:http://blog.csdn.net/oyi319/article/details/5753311 2.WinForm程序和控制台窗口Console 如果你调试过SharpDevelop源程序...或许我使用方法与其不同,不过你可以试一试,写出我们自己调试日志代码。 首先要解决问题是如何在Debug模式时显示Console窗口。我确定,这是一个WinForm项目,也没有改过它输出类型。...[c-sharp] view plaincopy [DllImport("kernel32.dll")]   public static extern Boolean AllocConsole();  ...这个Shell类是这样: [c-sharp] view plaincopy ///    /// 与控制台交互   ///    static class Shell...output.StartsWith("注意")) return ConsoleColor.Green;   return ConsoleColor.Gray;       }   }   那么程序入口函数Main代码如下: [c-sharp

2.4K11

Puppeteer Sharp: 使用C#和Headless Chrome爬网页

Puppeteer Sharp是用C#写,由达里奥·孔德拉蒂乌克于2017年发行,为.NET开发者提供同样功能。 ?...这是Puppeteer Sharp将使用与网站交互浏览器。 幸运是,我们可以使用 C# 下载默认修订版或开发人员指定修订版。仅当本地计算机上不存在该修订版本时,才会下载。...如果您想获取当前页面的屏幕截图: await page.ScreenshotAsync("C:\\Files\\screenshot.png"); ?...image.png 更改网页大小 如果需要测试特定显示大小网页(例如查看页面在手机上显示方式),可以使用 Puppeter Sharp 更改当前页面的网页大小: // Change the size...,而 DevTools 将显示查看 Web 应用程序 JavaScript 呈现代码选项,以及查看网络活动等功能。

5.8K20

游戏优化系列三:Unity游戏黑屏问题解决方法

UnityPlayerActivity,重写onStart()方法,添加获取焦点方法,可避免黑屏。...,是否在调用onStart后调用一次onWindowFocusChanged:true,来获取当前窗口焦点,实现正常交互。...原activity仍然是失去焦点状态(如果没有手动重新获取焦点),当前页面显示黑屏。...因此,虽然焦点更改通常与生命周期更改有某种关系(停止活动通常不会获得窗口焦点),但您不应依赖此处回调与其他生命周期方法(onResume()回调)之间特定顺序。...如果目的是要知道一个活动何时是最活跃,即用户在所有活动与之交互最后一个活动,但不包括非活动窗口(如对话框和弹出窗口),则应使用OnTopheMedActivityChanged(Boolean value

5.8K01

前端开发必备几个图片处理库!

1.sharp sharp 是 Node.js 平台上相当热门一个图像处理库,其实际上是基于 C 语言编写 libvips 库封装而来,因此高性能也成了 sharp 一大卖点。...sharp 可以方便地实现常见图片编辑操作,裁剪、格式转换、旋转变换、滤镜添加、添加水印等。...项目名称:sharp Star:24.3K Github:https://github.com/lovell/sharp 2.tui.image-editor ui.image-editor 是一款使用...支持对图片进行裁剪, 翻转, 旋转, 绘图, 形状, 图标, 文本, 蒙版滤镜, 图像滤镜等处理,并且集成了下载,图像加载,撤消,重做,重置等功能。...拥有强大过滤功能,灰度, 反转, 棕褐色, 模糊锐化, 浮雕, 删除白色等 项目名称:tui.image-editor Star:5.7K Github:https://github.com/nhn

1.9K30

Visual Studio 调试系列2 基本调试方法

展开对象以查看其所有属性(例如本示例 sharp 对象)。 通常,在调试时,你需要快速检查对象属性值,数据提示是一种实现此目的好方法。...在“自动”窗口中,可看到变量及其当前值和类型。 “自动”窗口显示当前行或前一行使用所有变量(在 C++ ,该窗口显示前三个代码行变量。 查看文档以了解特定于语言行为)。...接下来,查看“局部变量”窗口。 “局部变量”窗口显示当前范围变量。 ? 有关详细信息,请参阅在“自动”窗口和“局部变量”窗口中检查变量。...在本示例,在 sharp 对象上设置了监视,当在调试器中移动时,可看到其值发生了变化。 与其他变量窗口不同,“监视”窗口始终显示正在监视变量(当超出范围时,它们会变灰)。...有关如何在代码处理异常详细信息,请参阅调试技术和工具。 查看详细信息 ? 展开“异常设置”节点以查看有关如何处理此异常类型更多选项。异常设置 -> 编辑条件 ?

4.4K10

Windows 7 操作系统

所谓活动窗口是指该窗口可以接收用户键盘和鼠标输入等操作,非活动窗口不会接收键盘和鼠标输入,但相应应用程序仍在运行,称为后台运行。 3.窗口——地址栏  地址栏显示当前文件或文件夹所在路径。...c)对话框有控件,窗口没有控件。...桌面有自己背景图案,可以布局各种图标,桌面底部条状区域叫任务栏,任务栏上有“开始”按钮、任务按钮盒其他显示信息,时钟等。 1.桌面上主要元素  (1)图标。...4.设置快捷方式  快捷方式是到计算机或网络上任何可访问项目(程序、文件、文件夹、磁盘驱动器、Web页、打印机或者另一台计算机)连接,将快捷方式放置在桌面文件夹,使用快捷方式可以快速打开项目。...也可以右击选中项目,在快捷菜单单击“发送到”→“桌面快捷方式”命令,或者用鼠标右键将项目拖到桌面上,然后单击“在当前位置创建快捷方式”选项。

34730

iOS 9人机界面指南(四):UI元素(上) - 腾讯ISUX

API注释 想要了解如何在代码定义活动,请参考UI Activity Class Reference.想要了解如何将活动视图控制器整合到你应用,请参考Activity View Controller...活动是: 一种可定制对象,代表着某个可以让用户在app执行操作服务 以图标的形式呈现,外观与栏按钮图标相似 ? 用户通过点击活动图标来启动某样活动。...请注意,iOS本身提供了若干内置服务,打印,转发到Twitter,发送信息和Airplay等等,你不需要再额外为这些内置任务创建活动。...API注释 想要了解如何在代码定义活动视图控制器,请参考UIActivityView Class Reference.想要了解如何设计一个提供自定义服务活动菜单,请参阅上文中关于活动彩蛋内容。...活动视图控制器: 显示了让用户可以针对当前内容执行操作一系列可配置服务 根据所处场景不同,可能出现在操作列表或浮出层 使用活动视图控制器来为用户提供一系列针对当前内容服务。

10.1K51

X 随笔

风格信息,表示窗口显示风格。 位置信息,描述窗口及其各个组成部分在屏幕上位置。 内容信息,包括窗口内各组成部分相关数据,菜单等。 图像信息,存放与窗口相关屏幕图像,窗口图标。...从一般用户视角看, 窗口系统具有下述特征: 支持实现不同风格用户界面 具有网络透明性 本身独立于显示设备和输入设备 支持并行显示和多程序并行运行 支持重叠型和瓦片型窗口 提供了多种窗口管理器,但系统只能有一个活动窗口管理器...协议请求由xlib产生并送到服务器,请求可以携带各种各样信息,如一个画线说明,对当前某个窗口尺寸询问等。...X Client不用标准 C 函数来获取输入,而是接收事件,然后根据事件类型发生分支,执行适当响应。传统程序是由程序控制,在确定时间查询确定类型输入。...窗口管理器是决定X外观风格重要程序,能够改变窗口大小或位置、将窗口在堆叠重新安排位置、或将窗口改变成图标等等。

1K10

IntelliJ IDEA 2021.2 ,您完全不需要鼠标的 10 种情况

显示工具窗口 我们先来看看开发者们大多是如何在 IntelliJ IDEA 显示工具窗口。...将鼠标悬停在 Pull Requests 选项卡上,您可以查看是否已为此工具窗口分配快捷键。当前示例没有分配快捷键。我们来分配一个。...使用 Alt+Enter 查看灯泡图标的建议 不必再点击灯泡图标查看针对代码段建议了!...请注意,对话框大小不能超过特定限制(使用鼠标或键盘缩放时均适用)。此外,如果您位于对话框可编辑组件(文本字段或文本区域),则此快捷键将不起作用。 10....在不移动光标位置情况下滚动编辑器窗格文本 常见做法是向上或向下滚动编辑器窗格来阅读代码。如果不需要编辑代码,您可能也不需要将光标从其当前位置移开。

7810

Windows10 Penetration Suite Toolkit within Kali Linux

本镜像仅面向合法授权企业安全建设行为,您需要测试本镜像可用性,请自行搭建靶机环境;     2....您在使用本镜像过程存在任何非法行为,您需自行承担相应后果,作者将不承担任何法律及连带责任。 软件及工具介绍: `1....        - wappalyzer:网页技术分析工具         - whatruns:网页技术分析工具         - yet another drag and go: 超链接拖拽新窗口打开...渗透测试类(C:\Penetration):`     - 常用python及csharp脚本类工具均配有start.bat。      ...tools:       * sharp adi dnsdump:域dns枚举工具       * sharp decrypt pwd:浏览器密码解密工具       * sharp event log

3.1K20

基于MetronicBootstrap开发框架经验总结(8)--框架功能总体界面介绍

技术,采用当前最新Bootstrap3.x,集成了众多功能强大Bootstrap控件。...框架后台采用基于C#MVC技术,是目前.NET开发最为成熟流行技术,框架后台数据库支持Oracle、SqlServer、MySql、Sqlite、Access等常规数据库,可通过配置进行自由切换,使用...Web界面代码可以充分利用代码生成工具Database2Sharp元数据信息,实现Web界面的快速生成。...【系统菜单栏】内容,是动态从数据库里面获取菜单;【系统顶栏】放置一些信息展示,以及提供用户对个人数据快速处理,查看个人信息、注销、锁屏等操作内容;内容区一般包括【树列表区】、【条件查询区】和【列表数据及分页...选择菜单图标界面: ? 6)系统登录日志管理 ? 7)通用字典管理 ? 8)菜单图标管理 ? 9)图片相册管理 ? 编辑图片界面如下所示: ? 图片查看界面 ?

1.9K70

C++ Qt开发:TabWidget实现多窗体功能

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt我们可以通过拖拽方式将不同组件放到指定位置,实现图形化开发极大方便了开发效率,本章将重点介绍TabWidget...QWidget *currentWidget() const 返回当前活动标签页内容窗口。...这些方法可以帮助你在 QTabWidget 动态地管理标签页,设置标签文本、图标,以及进行标签页切换和管理。...在构造函数,通过 parentWidget() 获取了父窗口指针,并通过强制类型转换将其转为 MainWindow* 类型。...接着,通过调用 GetTableNumber() 方法获取了选中标签索引,然后将其输出到控制台。此处GetTableNumber()是父类函数,主要用于返回当前TabWidget组件下标。

1.6K10
领券