Come posso determinare l'attuale nome e versione del processo focalizzato in C #
Domanda
Ad esempio, se lavoro su Visual Studio 2008, desidero i valori devenv e 2008 o 9.
Il numero di versione è molto importante ...
Soluzione
Questa sarà la città di PInvoke ...
Dovrai PInvoke le seguenti API in User32.dll
Win32 :: GetForegroundWindow () in restituisce l'HWND della finestra attualmente attiva.
/// <summary>
/// The GetForegroundWindow function returns a handle to the foreground window.
/// </summary>
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
Win32 :: GetWindowThreadProcessId (HWND, LPDWORD) restituisce il PID di un determinato HWND
[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
In C #
Process.GetProcessByID () accetta il PID per creare un oggetto processo C #
processInstance.MainModule restituisce un ProcessModule con FileVersionInfo allegato.
Altri suggerimenti
Questo progetto dimostra le due funzioni necessarie: EnumWindows e GetWindowtext
Puoi chiarire la tua domanda? Vuoi dire che vuoi un programma in esecuzione, che ti dirà i dati sul programma nella finestra attiva? O che desideri che il tuo programma riporti la propria versione?
Quello che stai cercando per ottenere le informazioni in entrambi i modi è System.Reflection.Assembly . (Vedi esempi di codice nel link.)
Come ottenere l'assembly da un programma esterno? Quello di cui non sono sicuro ...