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

如何在C#中读取另一个进程的命令行参数?

要在C#中读取另一个进程的命令行参数,可以使用Windows API函数OpenProcessReadProcessMemory。以下是一个简单的示例代码:

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

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

    [DllImport("kernel32.dll")]
    public static extern bool ReadProcessMemory(int hProcess, int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);

    public static string GetCommandLine(int processId)
    {
        IntPtr processHandle = OpenProcess(0x0410, false, processId);
        if (processHandle == IntPtr.Zero)
        {
            return null;
        }

        int pSize = Marshal.SizeOf(typeof(PEB)) + 1024;
        byte[] buffer = new byte[pSize];
        int bytesRead = 0;

        if (!ReadProcessMemory((int)processHandle, 0x00400000, buffer, pSize, ref bytesRead))
        {
            return null;
        }

        int offset = BitConverter.ToInt32(buffer, 0x00000230);
        int size = BitConverter.ToInt32(buffer, offset + 0x00000040);
        string commandLine = System.Text.Encoding.Unicode.GetString(buffer, offset + 0x00000044, size * 2);

        return commandLine;
    }
}

[StructLayout(LayoutKind.Sequential)]
public struct PEB
{
    public byte[] reserved1;
    public byte[] beingDebugged;
    public byte[] reserved2;
    public IntPtr ldr;
    public IntPtr processParameters;
    public byte[] reserved3;
    public IntPtr atlThunkSListPtr;
    public byte[] reserved4;
    public IntPtr reserved5;
    public IntPtr reserved6;
    public IntPtr reserved7;
    public byte[] reserved8;
}

使用GetCommandLine方法可以获取指定进程ID的命令行参数。

需要注意的是,这种方法可能会受到操作系统版本和安全设置的影响,因此可能会在某些情况下失败。此外,这种方法可能会违反安全性和隐私原则,因此在使用时需要谨慎。

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

相关·内容

何在进程读取子(外部)进程标准输出和标准错误输出结果

最近接手一个小项目,要求使用谷歌aapt.exe获取apk软件包信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程输出结果,当时还研究了一番,只是没有做整理。...这个API参数非常多,我想我们工程对CreateProcess调用可能就关注于程序路径(lpApplicationName),或者命令行(lpCommandLine)。...它是我们启动子进程时,控制子进程启动方式参数。...我们正是靠这几个参数来解决我们所遇到问题。那么如何使用这些参数呢?         我们选用还是老方法——管道。...我们之后将hWrite交给我们创建进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取进程写入管道内容。

3.8K10

dotnet 获取指定进程输入命令行

本文告诉大家如何在 dotnet 获取指定进程命令行参数 很多程序在启动时候都需要传入参数,那么如何拿到这些程序传入参数?...我找到两个方法,一个需要引用 C++ 库支持 x86 和 x64 程序,另一个都是C#代码,但是只支持 x64 程序 本文提供一个由 StackOverflow 大神开发库拿到进程命令行 在使用下面的代码需要引用两个...C++ 库,可以从 csdn 下载 使用下面的代码就可以拿到传入进程参数,在使用之前,需要在输出文件夹里面包含 ProcCmdLine32.dll 和 ProcCmdLine64.dll 可以从...static extern bool GetProcCmdLine64(uint nProcId, StringBuilder stringBuilder, uint dwSizeBuf); 获取所有的进程命令行可以使用这个代码...process.ProcessName} {GetCommandLineOfProcess(process.Id)}"); } } 更简单是通过 WMI 获取指定进程输入命令行

1.2K20

win32 api函数_c调用webapi接口

使用就行了,但在 C#不会这么简单,需要在指定模块之中导入想要Win32,下面我们来学习一下如何在C#之中使用Win32 Api . . . ---- 在测试Win32 Api 之前,我先教大家如何获取有窗口进程信息...,代码如下: 有窗口进程,它窗口句柄不会为 0,所以我们只需在所有运行程序之中判断一下即可,下面是效果: 这些都是我所运行有窗口进程 . . . ---- Win32 Api 使用 首先我们准备一个额外窗口...,用于测试 Api: 准备两个按钮,一个用于显示上面的窗口,另一个用于测试 Api: 导入 Win32 Api: User32 表示导入 Api所在模块 CharSet 表示字符集 下面的是一个...Api 对应样式(参数要对应正确),可以百度搜索查询 . . ....发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

1.3K20

linux常见面试题

通常,一个桌面环境,KDE或Gnome,足以在没有问题情况下运行。尽管系统允许从一个环境切换到另一个环境,但这对用户来说都是优先考虑问题。...grep使用基于模式搜索搜索命令。它使用与命令行一起指定选项和参数,并在搜索所需文件输出时应用此模式。 41)当发出命令与上次使用时产生结果不同时,会出现什么问题?...44)如何在命令行提示符插入注释? 通过在实际注释文本之前键入#符号来创建注释。这告诉shell完全忽略后面的内容。例如“#这只是shell将忽略注释。”...在命令,color.ui变量设置变量默认值,例如color.diff和color.grep。 55)如何在Linux中将一个文件附加到另一个文件?...它将停止接收NOHUP信号进程,从而终止它,你注销了调用程序。并在后台运行该过程。 62)解释如何在Linux卸载库?

2.4K10

.NETC# 获取一个正在运行进程命令行参数

在自己进程内部,我们可以通过 Main 函数传入参数,也可以通过 Environment.GetCommandLineArgs 来获取命令行参数。...但是,可以通过什么方式来获取另一个运行着程序命令行参数呢? ---- 进程内部获取传入参数方法,可以参见我另一篇博客:.NET 命令行参数包含应用程序路径吗?。....NET Framework / .NET Core 框架内部是不包含获取其他进程命令行参数方法,但是我们可以在任务管理器中看到,说明肯定存在这样方法。 ?.../summary> public static class ProcessExtensions { /// /// 获取一个正在运行进程命令行参数...如果你需要将其转换为字符串数组,可以使用我在另一篇博客中使用方法: .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args ---- 参考资料 Can I get command line

2.2K10

Edge.js:让.NET和Node.js代码比翼齐飞

输入参数在第4行被传递到C#异步Lambda表达式,这个表达式在第6行将传入值附加到“.NET welcomes”字符串之后。...从概念上讲,你可以认为在V8和CLR之间数据传递就像是在一个环境中将数据序列化为JSON,而在另一个环境对JSON进行反序列化。但是,Edge.js并没有在进程中进行实际JSON序列化过程。...第9行传给createCounter函数参数在第3行被强制转化为一个C#本地变量。...当计算执行时候,进程单例(singleton)V8线程可以处理后续事件。C#代码随第6行await关键字而等待图片转换完成。...另一个让Edge.js大显身手例子是在MS SQL读取数据。现在Node.js开发者还没有什么读取MS SQL数据方法可以比.NET FrameworkADO.NET更加完善和成熟。

3.5K60

.NET周刊【5月第4期 2024-05-26】

其中包括如何在SqlSugar处理SQLIN参数、动态类型属性访问、表值参数typeName传递、类型转换,以及两者联表查询差异。...文章还提供了一些代码示例,创建容错动态对象类和使用SqlSugar进行类型转换方法。...介绍了使用IModbusReadWriteService接口进行读写测试,包括批量读取和写入数据,并解释了客户端参数实体类。提供了关于Modbus协议文章链接以及测试读写效率日志示例。...C#奇技淫巧:利用WinRM来远程操控其他服务器上进程 https://www.cnblogs.com/weskynet/p/18213135 文章介绍如何通过WinRM在不开启远程桌面的情况下,远程执行服务器进程查看...PomeloCli通过nuget服务发布,并提供了开发、集成、卸载命令行插件与宿主完整流程,同时解决了编写命令行应用一些常见问题。文档也提供了快速起步指导和示例代码。

8810

Python面试题

深拷贝:将对象本身复制给另一个对象,用deepcopy()函数 浅拷贝:将对象引用复制给另一个对象copy() (7)解释pythonjoin()和split()函数?... read / for / in / true / def 等 (9)如何删除字符串前置空格?... ‘abc’.encode(‘utf8’) 当然解码 就用 decode() (27)进程和线程区别? 进程是运行着程序,而线程是进程中指令执行单元。...代码指令必须在操作系统分配线程执行。 一个进程至少包含一个线程。 (28) 进程间通信有哪些方法? 共享内存、session通信都可以。...os —– 提供了不少与操作系统相关联函数 sys —– 通常用于命令行参数 re —– 正则匹配 math —– 数学运算

2.7K10

程序员开发者神器:10个.Net开源项目

它还额外提供很多功能,参数校验、自动生成使用帮助和tab补全等,适用于任何使用命令行接口.NET应用程序。...项目特点 1、将命令行参数转换为.NET对象:可以根据参数定义将命令行参数解析为.NET对象,使得程序可以更方便地使用命令行参数。...2、提供参数校验:可以对参数进行校验,确保参数满足指定规则,必填字段、数据类型和范围等。 3、自动生成使用帮助:可以根据参数定义自动生成使用帮助文档,提供用户输入参数指导。...5、可扩展性:提供了丰富扩展点,用户可以根据自己需求自定义扩展,自定义校验规则、自定义参数类型等。 9、一个程序员开发者神器,微软官方出品,采用C#开发!...推荐阅读: 一份阅读量突破10万+C#/.NET/.NET Core面试宝典(基础版) 【微信自动化】使用c#实现微信自动化 细聊C# AsyncLocal如何在异步间进行数据流转 从未来看C

39740

.NET周刊【7月第2期 2024-07-14】

C#使用SendMessage进行进程间通讯 https://www.cnblogs.com/wihalo/p/18293731 本文介绍了一种在WPF应用实现拖动文件到桌面图标并自动打开方法。...通过在OnStartup事件获取文件名并处理,解决了软件启动后参数传递问题。使用窗口句柄实现跨进程通信。...详解C#委托与事件 https://www.cnblogs.com/ayic/p/18295844 在C#,委托是一种引用类型,用于封装方法引用,可以作为参数传递,或将多个方法组合。...然后,通过C#代码实现根据数据库存储图片地址动态替换签名图片。具体步骤包括定义报表参数读取医生签名图片地址、构建数据集合并赋值给报表对象,最后生成PDF文件供移动端查看。...扩展了参数收集灵活性 锁定对象 索引运算符改进 \e 转义序列 部分属性 方法组自然类型改进 “async”方法和迭代器“ref”和“unsafe” 关于扩展类型更新 扩展类型推迟到 C#

1300

.NET周报【12月第1期 2022-12-08】

C# 探索 C#定位记录参数数量上限 https://zenn.dev/shimat/articles/5b81d6627491ab 文章研究了 C#9 引入记录类型位置参数上界。.../ 这篇文章解释了如何在 WinForms .NET Core 及以上版本进程外设计器中支持自定义控件,该设计器在 Visual Studio 中使用。...它与 CefSharp 不同之处在于,它有一个托管模式(与 CefSharp 相比,它在一个更外部进程运行),并且可以轻松地启用视频支持。...Core ,ASPNET_前缀环境变量衍生配置覆盖了命令行参数和DOTNET_前缀值,但在.NET 7 及以后版本,用ASPNET_前缀指定不能使用命令行参数和 一个破坏性改变,即带有 DOTNET..._前缀规范取代带有命令行参数或 DOTNET_前缀规范。

4.6K20

Windows中使用MySql.Data库将C# 接到 MySQL

创建一个 MySqlDataReader 对象来读取选定记录/数据。 执行命令。 读取记录并显示它们或将它们存储在列表。 关闭数据读取器。 关闭连接。...,我将解释一些有关进程、命令、参数以及输入和输出信息。...现在我们知道了命令是如何划分,我们可以开始在我们应用程序实现它。 在 C# 和 .NET 应用程序,启动进程很容易。...现在回到我们应用程序,要备份数据库,我们必须将 RedirectStandardOutput 设置为 true,并将进程输出读取到字符串并将其保存到文件。...; } } 为了恢复数据库,我们读取 .sql 文件并将其存储在字符串,然后将 RedirectStandardInput 属性设置为 true,并将字符串输入写入进程

15600

(3)Powershell基础知识(一)

如果使用参数不正确,则该工具可能会忽略键入内容,并自动开始执行任务。 但在 PowerShell 输入命令时,它会自动分析并预处理所输入全部内容。...参数,则始终表示“显示此命令帮助”。脚本命令开发人员无需分析该命令,他们只需提供帮助文本。即使是在 PowerShell 运行传统命令行工具,也可以使用 PowerShell 帮助功能。...换句话说,学习C#和Powershell是相互促进,如果您不是 C# 程序员或是完全不了解C#,也没有关系,了解任何一门面对对象编程语言都有助于学习Powershell。...如果已经熟悉 C#,则这些相似性可以帮助你更轻松地了解PowerShell。 ---- 理解Powershell命令命名规范 使用大多数命令行界面时,通常会遇到以下问题。...命令没有统一模式,因此只能通过记住常用每种命令和每个参数来了解这些命令行界面。 大多数命令都是为管理操作系统或应用程序元素(服务或进程)构建

4.1K20

不得不提容器 JVM

当我们在没有任何调优参数(例如,最为简洁启动命令行:“ java -jar myapplication .jar”)情况下执行 Java 应用程序时,JVM 将自行调整某些特定参数,以在当前执行环境获得最佳性能表现...其实,从本质上而言,容器更倾向于一种隔离机制环境,其中一个进程资源( CPU、内存、文件系统、网络等)与另一个进程隔离。这种隔离是可能,因为 Linux 内核中有一个名为 CGroups 特性。...在本文中,我们将了解如何在运行 Java 进程容器环境设置 JVM 参数。尽管以下内容适用于任何 JVM 设置,但我们将重点关注公共参数 -Xmx 和 -Xms 等。...除此之外,我们还将讨论一些常见问题,如何对使用特定版本 Java 运行程序进行容器化,以及如何在一些流行容器化 Java 应用程序设置标志。...为了解决这个问题,在当前方案,我们可以通过在容器服务启动命令行设置 -Xmx 或者 MaxRAM 等参数来解决,但就正如上述描述那样,在很多时候此种操作显得不够友好、不够优雅。

1.2K40

不得不提容器 JVM

当我们在没有任何调优参数(例如,最为简洁启动命令行:“ java -jar myapplication .jar”)情况下执行 Java 应用程序时,JVM 将自行调整某些特定参数,以在当前执行环境获得最佳性能表现...其实,从本质上而言,容器更倾向于一种隔离机制环境,其中一个进程资源( CPU、内存、文件系统、网络等)与另一个进程隔离。这种隔离是可能,因为 Linux 内核中有一个名为 CGroups 特性。...在本文中,我们将了解如何在运行 Java 进程容器环境设置 JVM 参数。尽管以下内容适用于任何 JVM 设置,但我们将重点关注公共参数 -Xmx 和 -Xms 等。...除此之外,我们还将讨论一些常见问题,如何对使用特定版本 Java 运行程序进行容器化,以及如何在一些流行容器化 Java 应用程序设置标志。...为了解决这个问题,在当前方案,我们可以通过在容器服务启动命令行设置 -Xmx 或者 MaxRAM 等参数来解决,但就正如上述描述那样,在很多时候此种操作显得不够友好、不够优雅。

1.2K100

.NET周刊【3月第1期 2024-03-03】

何在 C#解析 Excel 公式 https://www.cnblogs.com/powertoolsteam/p/18025530 葡萄城公司 GcExcel 是一个服务端高性能表格组件,能够解析...该组件支持动态数组公式,通过 C#(.NET Core)项目创建工作簿,提取和解析公式,进而修改公式特定参数替换销售代表姓名。...C#系统菜单添加自定义项 - 开源研究系列文章 https://www.cnblogs.com/lzhdim/p/18047745 这篇文章介绍了如何在 C#应用程序系统菜单添加自定义项方法,并提供了示例代码和运行效果截图....NET Framework Windows 窗体进程外设计器(预览版)。...本文讨论了进程外设计器局限性以及加载不兼容项目时进行切换路线图。

16410
领券