Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: bybaal en 17 Abril 2023, 05:37 am



Título: Obtener EXEpath de la ventana activa
Publicado por: bybaal en 17 Abril 2023, 05:37 am
He estado buscando y no logro encontrar la forma de obtener la ruta de la aplicación de la ventana activa, alguien tiene alguna idea de como sería


Título: Re: Obtener EXEpath de la ventana activa
Publicado por: MCKSys Argentina en 17 Abril 2023, 07:07 am
Hola!

El primer ejemplo que armé sacado de consultas de Google (notepad debe estar corriendo):

Código
  1. using System;
  2. using System.Diagnostics;
  3. using System.Runtime.InteropServices;
  4.  
  5. namespace test {
  6.    internal class Program {
  7.  
  8.        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  9.        private static extern int GetWindowThreadProcessId(IntPtr handle, out uint processId);
  10.  
  11.        public static string GetProcessPath(IntPtr hwnd) {
  12.            uint pid = 0;
  13.            GetWindowThreadProcessId(hwnd, out pid);
  14.            Process proc = Process.GetProcessById((int)pid);
  15.            return proc.MainModule.FileName.ToString();
  16.        }
  17.  
  18.        static void Main(string[] args) {
  19.            Process[] processes = Process.GetProcessesByName("notepad");
  20.  
  21.            foreach (Process p in processes) {
  22.                IntPtr windowHandle = p.MainWindowHandle;
  23.                Console.WriteLine(GetProcessPath(windowHandle));
  24.            }
  25.            Console.ReadKey();
  26.        }
  27.    }
  28. }
  29.  

Algo a tener en cuenta es lo bits de tu ejecutable con los bits del ejecutable que quieres localizar. Si creas el tuyo como x86 y el target es x64, no funcionará. Deberás crear el tuyo como x64 para poder acceder a los de procesos de 64 bits.

Saludos!


Título: Re: Obtener EXEpath de la ventana activa
Publicado por: bybaal en 17 Abril 2023, 07:40 am
Creo que con el pedazo de código que tengo me puedo explicar mejor

Código
  1. Imports System.Runtime.InteropServices
  2.  
  3. Public Class Form1
  4.  
  5.    Private WithEvents tmr As New Timer With {.Interval = 100, .Enabled = True}
  6.  
  7.    <DllImport("user32.dll")>
  8.    Private Shared Function GetForegroundWindow() As IntPtr
  9.    End Function
  10.  
  11.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  12.  
  13.    End Sub
  14.  
  15.    Private Sub tmr_Tick(sender As Object, e As EventArgs) Handles tmr.Tick
  16.        Dim hWnd As IntPtr = GetForegroundWindow()
  17.        Text = hWnd
  18.  
  19.        'Aquí necesito obtener la ruta de la aplicación que tiene la ventana activa
  20.        'usando el hWnd que me devuelve la API GetForegroundWindow
  21.        'o de alguna otra manera
  22.        'Lo importante es que se obtenga la ruta de la aplicación que tiene la ventana activa
  23.  
  24.    End Sub
  25.  
  26. End Class
  27.  


Título: Re: Obtener EXEpath de la ventana activa
Publicado por: MCKSys Argentina en 17 Abril 2023, 15:43 pm
Hola!

En mi ejemplo, deberías usar la funcion GetProcessPath (fijate que recibe un hWnd y devuelve un string con el path).

Saludos!