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

如何使用进程ID获取Excel实例或Excel实例CLSID?

要使用进程ID获取Excel实例或Excel实例CLSID,可以使用Windows API函数OpenProcess和GetClassLongPtr。

以下是一个使用C++编写的示例代码:

代码语言:c++
复制
#include<Windows.h>
#include<iostream>

// 获取Excel实例
HWND GetExcelHwnd(DWORD dwProcessID)
{
    HWND hwnd = NULL;
    while ((hwnd = FindWindowEx(NULL, hwnd, L"XLMAIN", NULL)) != NULL)
    {
        DWORD dwPID = 0;
        GetWindowThreadProcessId(hwnd, &dwPID);
        if (dwPID == dwProcessID)
            return hwnd;
    }
    return NULL;
}

// 获取Excel实例CLSID
bool GetExcelCLSID(DWORD dwProcessID, CLSID& clsid)
{
    HWND hwnd = GetExcelHwnd(dwProcessID);
    if (hwnd == NULL)
        return false;

    LONG_PTR hwndExcel = GetClassLongPtr(hwnd, GCLP_HICON);
    if (hwndExcel == 0)
        return false;

    clsid.Data1 = (DWORD)((hwndExcel >> 32) & 0xFFFFFFFF);
    clsid.Data2 = (WORD)(hwndExcel & 0xFFFF);
    clsid.Data3 = (WORD)((hwndExcel >> 16) & 0xFFFF);
    clsid.Data4[0] = (BYTE)((hwndExcel >> 48) & 0xFF);
    clsid.Data4[1] = (BYTE)((hwndExcel >> 56) & 0xFF);
    clsid.Data4[2] = (BYTE)((hwndExcel >> 32) & 0xFF);
    clsid.Data4[3] = (BYTE)((hwndExcel >> 40) & 0xFF);
    clsid.Data4[4] = (BYTE)((hwndExcel >> 48) & 0xFF);
    clsid.Data4[5] = (BYTE)((hwndExcel >> 56) & 0xFF);
    clsid.Data4[6] = (BYTE)((hwndExcel >> 32) & 0xFF);
    clsid.Data4[7] = (BYTE)((hwndExcel >> 40) & 0xFF);

    return true;
}

int main()
{
    DWORD dwProcessID = 0;
    std::cout << "请输入Excel进程ID:";
    std::cin >> dwProcessID;

    CLSID clsid;
    if (GetExcelCLSID(dwProcessID, clsid))
    {
        std::cout << "Excel实例CLSID:"<< std::hex << clsid.Data1 << "-"<< std::hex << clsid.Data2 << "-"<< std::hex << clsid.Data3 << "-"<< std::hex << (clsid.Data4[0] << 8 | clsid.Data4[1]) << "-"<< std::hex << (clsid.Data4[2] << 24 | clsid.Data4[3] << 16 | clsid.Data4[4] << 8 | clsid.Data4[5])<< std::endl;
    }
    else
    {
        std::cout << "无法获取Excel实例CLSID。"<< std::endl;
    }

    return 0;
}

在上面的代码中,我们首先使用FindWindowEx函数找到Excel主窗口的句柄,然后使用GetWindowThreadProcessId函数获取该窗口所属的进程ID。如果该进程ID与指定的进程ID相同,则使用GetClassLongPtr函数获取该窗口的实例句柄,并将其转换为CLSID。最后,我们使用std::cout输出CLSID。

需要注意的是,上述代码仅适用于当前登录的用户。如果要获取其他用户的Excel实例,需要使用其他方法。

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

相关·内容

如何利用python读excel数据_python在excel应用实例

文章目录 python读取excel表数据的方法: 完整的程序代码 python读取excel表数据的方法:首先安装Excel读取数据的库xlrd;然后获取Excel文件的位置并且读取进来;接着读取指定的行和列的内容...python读取excel表数据的方法: 安装Excel读取数据的库—–xlrd 直接pip install xlrd安装xlrd库 #引入Excel库的xlrd import xlrd 获取Excel...tables列表中 def import_excel(excel): for rown in range(excel.nrows): array = { 'road_name':'','bus_plate...tables列表中 def import_excel(excel): for rown in range(excel.nrows): array = { 'road_name':'','bus_plate...表格的内容导入到列表中 import_excel(table) for i in tables: print(i) 以上就是python如何读取excel表数据的详细内容。

1.1K20

如何使用 ref 属性获取子组件实例对象?

在 Vue 中,我们可以使用 ref 属性来获取子组件的实例对象。这个功能非常方便,可以让父组件直接访问子组件的方法和数据。本文将详细介绍如何使用 ref 属性获取子组件实例对象。...当使用 ref 属性时,Vue 将会创建一个 $refs 对象,并将注册了 ref 的元素组件的引用存储到 $refs 对象中。这个 $refs 对象可以很方便地用来访问子组件的实例对象。...在父组件中通过 ref 获取子组件的实例对象在父组件中,我们可以通过 ref 属性获取子组件的实例对象。...$refs.childComponent 就可以获取到子组件的实例对象,可以对子组件进行修改调用子组件的方法。...在子组件中通过 $parent 访问父组件的实例对象除了在父组件中获取子组件的实例对象以外,我们也可以在子组件中通过 $parent 访问父组件的实例对象。

2.3K00

内网渗透之DCOM横向移动

,如果要在远程系统中执行命令Payload,除了会使用at、schtasks、Psexec、WMI、smbexec、Powershell、通过Office应用程序以及包含不安全方法的其他Windows...使用DCOM进行横向移动的优势之一在于,在远程主机上执行的进程将会是托管COM服务器端的软件。...,但是我无法通过DCOM查询到CLSID或者是ProgID,所以没法判断DCOM能够执行什么功能 2、使用DCOM执行任意命令 首先要一个管理员权限的shell ?...COM对象的实例,如果获取成功,可以使用命令查看用法 $com.Document.ActiveView | Get-Member 可以看到一条命令执行的 ?...调用Excel.Application远程执行命令 # 通过PowerShell与DCOM进行远程交互,创建Excel.Application对象的实例: $com = [activator]::CreateInstance

2.2K20

红队技巧-常规横向手法

实操 1.ICP Ipc(共享命名管道),其作用是为了实现进程间通信而开放的命名管道。ipc可以通过用户名和密码建立ipc链接,获取相应的用户权限。...在powershell中我们可以使用 get-CimInstance来列出本地COM程序列表 远程DCOM对象的实例表现如下: 客户端计算机从远程计算机请求实例化由CLSID表示的对象。...如果客户端使用ProgID,则首先将其本地解析为CLSID。 远程计算机检查是否存在与所讨论的CLSID关联的AppID,并验证客户端的权限。...利用思路就是找到一些默认权限(DefaultLaunchPermission)的COM程序来进行利用 1.使用EXCEL DDEß 利用: 第一步,创建对象的实例使用ProgID $a = [activator...注意: 可以将“ Shell.Application”(已加载的shell32.dll中实现)对象替换为“ Wscript.Shell”. 7.Excel XLL (Excel进程加载恶意的DLL) XLL

2K20

利用 RDPWRAP 做 RDP 劫持的威胁检测

*excel.*|.*powerpnt.*))') and (TargetImage imatches '.*syswow64.*') 使用默认 CACTUSTORCH 脚本测试: ?...threat-hunting-rdp-hijacking-via.html> Threat Hunting 15# 检测宏调用 WMI 或者 SBW/SW COM 对象的文档 在这篇文章中,我们将讨论如何检测攻击者使用的两个方法来绕过基于宏的...使用 CBR EDR 检测: (process_name:winword.exe or process_name:excel.exe or process_name:powerpnt.exe) and...macro 执行后,它的 explorer.exe 会调用生成 cmd.exe,这种方式很难用常规检测去定位(winword.exe 会生成 powershell.exe cmd.exe 等等)。...COM 调用后,svchost.exe 承载的 DCOMLaunch 服务会生成一个涉及 ShellBrowserWindows CLSID 的具有命令行属性的 rundll32.exe 实例: ?

3.1K10

内网渗透测试:利用DCOM进行横向渗透

DCOM 使用远程过程调用(RPC)技术将组件对象模型(COM)的功能扩展到本地计算机之外,因此,在远程系统上托管COM服务器端的软件(通常在DLLexe中)可以通过RPC向客户端公开其方法。...使用DCOM进行横向移动的优势之一在于,在远程主机上执行的进程将会是托管COM服务器端的软件。...下面进行演示使用DCOM对远程主机执行命令。 使用DCOM对远程主机执行命令 下面通过几个实验来演示如何使用DCOM在远程主机上面执行命令。...(3)调用Excel.Application远程执行命令 使用方法如下: # 通过PowerShell与DCOM进行远程交互,创建Excel.Application对象的实例:$com = [activator...使用方法如下: # 通过PowerShell与DCOM进行远程交互,创建Excel.Application对象的实例:$com = [activator]::CreateInstance([type]:

2.5K20

JavaScript 技术篇 - js读取Excel文档里的内容实例演示,js如何读取excel指定单元格的内容,js将excel的内容转化为json字符串方法

JavaScript 读取 Excel 文档里的内容实例演示 第一章:准备 ① 下载 xlsx.full.min.js 支持包 第二章:功能实现与使用演示 ① 实现代码 ② 使用效果演示 ③ 获取指定单元格的内容...④ 将读取的 Excel 内容转化为 json 字符串 第一章:准备 ① 下载 xlsx.full.min.js 支持包 获取地址: 官方 Github 小蓝枣的 csdn 资源仓库 在点进 Raw...第二章:功能实现与使用演示 ① 实现代码 <!...名页签下的数据 console.log(sheets); // 返回sheet对象到控制台 }; } ② 使用效果演示...这是源 Excel 文档。 ③ 获取指定单元格的内容 通过 sheets['单元格'].v; sheets.单元格.v; 可以获取指定单元格里的内容。

8.3K30

8000—0004显示设备出现问题_错误0x8007005

,错误出现在创建Excel进程的语句,如下: Application myExcelApp = new ApplicationClass(); IIS提示信息如下: 检索 COM 类工厂中 CLSID...如果应用程序正在通过 模拟,则标识将为匿名用户(通常为IUSR_MACHINENAME)经过身份验证的请求用户。...但是无法创建Excel实例,说明network service进程标识的权限不够,如何给他授权在服务器上创建Excel实例呢?...-VM2″ password=”密码”/> 实验结果:能正常访问web应用,也能访问excel文件,但无法创建excel实例,报com类工厂错80070005 【试验八】 DCOM设置使用“启动用户”后...IIS 6默认使用network service进程标识去调用默认的“匿名账户IUSR_MACHINENAME”来用访问web应用,此时操作Excel的“启动用户”应该是network service进程标识

2.5K30

Antimalware Scan Interface Provider for Persistence

用户帐户控制 UAC(EXE、COM、MSI ActiveX 安装的提升) PowerShell(脚本、交互使用和动态代码评估) Windows 脚本宿主(wscript.exe 和 cscript.exe...可以利用 AMSI 技术的应用程序类型包括脚本引擎、需要在使用前扫描内存缓冲区的应用程序,以及处理可能包含非 PE 可执行代码(例如 Microsoft Word 和 Excel PDF 文档)的文件的应用程序...通过使用 AMSI COM 接口。 那么我们可以通过建立和注册自己的进程内 COM 服务器 (DLL) 以充当 AMSI Provider。...参考微软文档我们可以知道如何使用 AMSI 注册提供程序 DLL 1.需要查看确认 Windows 注册表项存在: HKLM\SOFTWARE\Microsoft\AMSI\Providers...”调用amsi接口时就可以触发我们的恶意DLL来进行维权,在原作者中的演示为通过在ASMI扫描特定单词的情况下触发我们的恶意DLL的执行并给出了scan方法的实例: HRESULT SampleAmsiProvider

78110

WEB 打印的相关技术分析

难点主要是定义打印格式、如何来分析打印源文件。现有的比较好的方法是利用XML 技术来全面的解决问题,利用XML 可以非常容易地定义打印目标的文本、表格等内容的格式。...由于打印 内容是从数据库中获取的,所以生成操作相对简单; 缺点:服务器端负载比较大; (二)、页面设置 页面设置主要是指设置打印文档的页边距、页眉、页脚、纸张等内容。...<object ID='WebBrowser1' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'> //打印...三、将报表导出成Word,ExcelPDF形式打印 这种方式需要将页面导出成Office文档pdf,最低的要求是客户端已经安装用以打开Word、ExcelPdf文档的软件。...这种方式可以通过水晶报表组件其他一些第三方控件非常容易地实现。导出成Pdf形式后打印质量和效果都很好,导出成WordExcel后用户可以自定义打印的内容和格式。

2.2K20

你能分清多进程与多线程吗?

同样,PPT制作这个进程可以由明确主题、选模板、列大纲、丰富页面这几个线程组成。 线程是程序执行的最小单位,一个进程可以由一个多个线程组成,各个线程之间也是交叉执行。...4.多进程与多线程是如何实现的 了解清楚了多进程与多线程是什么,以及是如何提高处理任务的效率的以后,我们进入到硬干货部分,那就是具体多进程/多线程如何实现“同时”处理多任务的。...这star执行默认run()方法 #Process常用属性 pid 进程ID name 进程名字 4.1.2建立一个子进程 下面的例子演示了启动一个子进程(即单进程)并等待其结束: from multiprocessing...ID p = Process(target=run_proc, args=('test',))#实例进程p,调用run_proc函数,传入参数对象args print('Child process...+多线程 多进程+多线程就是一次启动多个进程,每个进程又启动多个线程,这样同时执行的任务就会很多,但是模型相对复杂,不建议使用

49640

轻松实现Python中的多进程与多线程

同样,PPT制作这个进程可以由明确主题、选模板、列大纲、丰富页面这几个线程组成。 线程是程序执行的最小单位,一个进程可以由一个多个线程组成,各个线程之间也是交叉执行。...04 多进程与多线程是如何实现的 了解清楚了多进程与多线程是什么,以及是如何提高处理任务的效率的以后,我们进入到硬干货部分,那就是具体多进程/多线程如何实现“同时”处理多任务的。...这star执行默认run()方法 #Process常用属性 pid 进程ID name 进程名字 4.1.2建立一个子进程 下面的例子演示了启动一个子进程(即单进程)并等待其结束: from multiprocessing...ID p = Process(target=run_proc, args=('test',))#实例进程p,调用run_proc函数,传入参数对象args print('Child process...+多线程 多进程+多线程就是一次启动多个进程,每个进程又启动多个线程,这样同时执行的任务就会很多,但是模型相对复杂,不建议使用

82820

Excel催化剂开源第47波-Excel与PowerBIDeskTop互通互联之第一篇

如何识别到当前电脑打开的PowerBIDeskTop所开启的SSAS服务实例?...因PowerBIDeskTop运行的时候,是开启了SSAS的实例,和Sqlserver上开启的类似,只是功能上受限于本机访问,具体表现形式为在任务管理器上可查看到有msmdsrv.exe进程。...打开Pbix文件后出现的msmdsrv.exe进程 当打开多个pbix文件时,会出现多个msmdsrv.exe进程,而Excel连接PowerBIDeskTop的核心就变为识别到msmdsrv.exe所开启的端口号...具体代码 Excel催化剂实现了以上的技术难点,使用的是DAXStudio开源代码里的代码片段。 老规则,先建立一个实体类,用于存储一些关键信息。...最终拿齐了所有信息后,可以回到Excel客户端去发起访问连接。 而在用户层面,使用窗体直观呈现关键可读性信息供用户选择不同的模型。

58640

科普 | COM组件劫持原理与实践

,实际对象数据对应的处理程序路径string往往不尽相同,比如有的放C盘有的D盘,微软想出了一个解决方案,那就是不使用直接的路径表示方法,而使用一个叫 CLSID的方式间接描述这些对象数据的处理程序路径...WORD Data3; // 和时间相关 BYTE Data4[8]; // 和网卡MAC相关 } GUID; typedef GUID CLSID; // 组件ID typedef GUID...IID; // 接口ID \#define REFCLSID const CLSID & // 常见的声明和赋值方法 CLSID CLSID_Excel = {0x00024500,0x0000,0x0000...),这样当我调用COM组件的这个功能的时候,程序会进注册表进行读取相应位置的DLL或者EXE,加载到进程还是线程中来,供我们使用。...那我们用Excel中的VBA写一个调用看看吧!

2.1K10
领券