Как объявить API QueryFullProcessImageName() C# (Windows 7 x64)

Мне нужно его использовать, но в pinvoke я не могу получить объявление этого API.

Итак... есть ли способ объявить это?

И если у вас есть пример для использования, это было бы идеально, потому что я впервые буду использовать этот API.


person Krähne    schedule 30.05.2011    source источник
comment
Не используйте это, WMI также может предоставить вам эту информацию с гораздо меньшими затратами и без зависимости от Vista+. Используйте WMI Code Creator, он позволит вам поэкспериментировать и сгенерирует нужный вам код C#. microsoft.com/downloads/en/   -  person Hans Passant    schedule 31.05.2011


Ответы (1)


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);

Чтобы узнать об использовании, см. документацию.

person user541686    schedule 30.05.2011
comment
Спасибо!. Я проверю это, но... тем не менее, я хочу кое-что узнать... Как вы это сделали?... есть инструкция или что-то в этом роде? - person Krähne; 31.05.2011
comment
@Krahne: я выучил C. :) Я предлагаю вам сделать то же самое, это не так сложно, но когда вы это сделаете, вы увидите, что происходит. :) - person user541686; 31.05.2011
comment
Сколько времени вы потратили на изучение C? .. Знаете ли вы какую-нибудь конкретную книгу? Если вы знаете книгу на испанском языке, я буду вам очень признателен, потому что я не очень хорошо говорю по-английски. Спасибо за все, я все еще тестирую API. - person Krähne; 31.05.2011
comment
В моем LINQPad часть MarshalAs(UnmanagedType.LPTStr) вызывает странные китайские буквы в результате, удаление атрибута дает правильный путь с латинскими буквами. Любая идея, почему эта ошибка возникает? LINQPad 32-битный, работает под 64-битной Win7, но это не имеет значения. - person Roland Pihlakas; 27.07.2014
comment
@RolandPihlakas: Хм, я забыл, если вам нужно CharSet = CharSet.Auto, попробуйте поместить это внутрь DllImport? - person user541686; 28.07.2014
comment
@Mehrdad Спасибо, да, CharSet = CharSet.Auto помогло. - person Roland Pihlakas; 28.07.2014