如何在C#中声明QueryFullProcessImageName() API (Windows 7 x64)?

3

我需要使用它,但在PInvoke中,我无法获得该API的声明。

那么...有没有一种方法可以声明它呢?

如果您有一个使用示例,那就太完美了,因为这是我第一次使用该API。


不要使用这个,WMI 可以让你更轻松地获取这些信息,而且不依赖于 Vista+。使用 WMI Code Creator,它可以让你进行实验并生成所需的 C# 代码。http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e - Hans Passant
1个回答

2
using System;
using System.Runtime.InteropServices;
using System.Text;

//...

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool QueryFullProcessImageName(IntPtr hProcess, uint dwFlags,
    [Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpExeName,
    ref uint lpdwSize);

关于使用方法,请参考文档


谢谢!我会测试它,但是...不过我想知道一些东西...你是怎么做到的?...有手册或者什么吗? - Krähne
@Krahne:我学了C语言。 :) 我建议你也学一下,它并不难,但是当你学会了,你就能看到发生了什么。 :) - user541686
你花了多少时间学习C语言?你知道有什么具体的书吗?如果你知道一本西班牙语的书,我会非常感激,因为我不怎么会说英语。谢谢你的一切,我还在测试API。 - Krähne
在我的LINQPad中,“MarshalAs(UnmanagedType.LPTStr)”部分会导致结果中出现奇怪的中文字符,删除该属性后,路径中的拉丁字母是正确的。有任何想法为什么会出现这个错误?LINQPad是32位的,在64位Win7下运行,但这不应该有影响。 - Roland Pihlakas
@RolandPihlakas:嗯,我忘记了是否需要“CharSet = CharSet.Auto”,尝试将其放置在“DllImport”内部试试? - user541686
@Mehrdad 谢谢,是的,CharSet = CharSet.Auto 有帮助。 - Roland Pihlakas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接