Chemin de l'application associé à une fenêtre

Contenu du snippet

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


private const int MAX_PATH = 260;
private const int PROCESS_QUERY_INFORMATION = 0x400;
private const int PROCESS_VM_READ = 0x10;
[DllImport("user32", SetLastError = true)]
private static extern int GetWindowThreadProcessId(IntPtr hWnd, ref int lpdwProcessId);
[DllImport("kernel32", SetLastError = true)]
private static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32", SetLastError = true)]
private static extern bool CloseHandle(IntPtr hObject);
[DllImport("psapi", SetLastError = true)]
private static extern int GetModuleFileNameEx(IntPtr hProcess, IntPtr hModules, StringBuilder lpFileName, int nSize);

private static string GetExeFilePathFromHandle(IntPtr Handle) {
  StringBuilder Buffer = new StringBuilder(MAX_PATH);
  int Pid = 0x0;
  IntPtr hProcess = IntPtr.Zero;
  GetWindowThreadProcessId(Handle, ref Pid);
  hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, Pid);
  Buffer.Length = GetModuleFileNameEx(hProcess, IntPtr.Zero, Buffer, MAX_PATH);
  CloseHandle(hProcess);
  return Buffer.ToString();
}

Compatibilité : C# 1.x, C# 2.x, C# 3.x

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.