Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find process id by window's handle

Tags:

c#

i have a problem with getting a specific PID of a process, the problem with this process is that it's a hidden process, it's not showing on task manager / powershell, completely hidden.

what i have do far is the main window handle of this process, the question is, how can i get the pid of it.

what i'm trying to do is to read the memory of this process and edit it, but can't do so without the PID i guess (since i need to get it's base address in memory).

So, if anyone has any workaround or something for me, it will be great.

P.S: this process does not show in Process.GetProcesses().

ty!

like image 438
Amit Shadadi Avatar asked Aug 12 '13 10:08

Amit Shadadi


People also ask

How do I find process ID?

Task Manager can be opened in a number of ways, but the simplest is to select Ctrl+Alt+Delete, and then select Task Manager. In Windows, first click More details to expand the information displayed. From the Processes tab, select Details to see the process ID listed in the PID column. Click on any column name to sort.

How can I get process ID handle?

If you have a process identifier, you can get the process handle by calling the OpenProcess function. OpenProcess enables you to specify the handle's access rights and whether it can be inherited.

How do I find my process ID in CMD?

Use the Command PromptIn the Start menu search bar, search for command prompt and select Run as administrator. Type tasklist. Press Enter. Command Prompt will now display the PID for the running processes.

How do I find the process ID in Linux?

A process is nothing but running instance of a program and each process has a unique PID on a Unix-like system. The easiest way to find out if process is running is run ps aux command and grep process name.


2 Answers

You can use the following Windows API:

[DllImport("user32.dll", SetLastError=true)] static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId); 

You pass in the HWND and use the out parameter to return the PID.

You can read more on this function here on MSDN.

like image 129
Lloyd Avatar answered Sep 20 '22 09:09

Lloyd


You will need to use P/invoke with the Windows API.

Declare a function in your class like

 [DllImport("User32.dll")]  static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); 

and then call it in your class.

See PInvoke.

like image 27
bash.d Avatar answered Sep 21 '22 09:09

bash.d