Created
July 18, 2019 01:45
-
-
Save jymcheong/30a53e8810d06c9a33918ab468e624ef to your computer and use it in GitHub Desktop.
Get Real Process, related to ApplicationFrameHost
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class WinAPIFunctions | |
{ | |
//Used to get Handle for Foreground Window | |
[DllImport("user32.dll", CharSet = CharSet.Auto)] | |
private static extern IntPtr GetForegroundWindow(); | |
//Used to get ID of any Window | |
[DllImport("user32.dll", CharSet = CharSet.Auto)] | |
private static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId); | |
public delegate bool WindowEnumProc(IntPtr hwnd, IntPtr lparam); | |
[DllImport("user32.dll")] | |
[return: MarshalAs(UnmanagedType.Bool)] | |
public static extern bool EnumChildWindows(IntPtr hwnd, WindowEnumProc callback, IntPtr lParam); | |
public static int GetWindowProcessId(IntPtr hwnd) | |
{ | |
int pid; | |
GetWindowThreadProcessId(hwnd, out pid); | |
return pid; | |
} | |
public static IntPtr GetforegroundWindow() | |
{ | |
return GetForegroundWindow(); | |
} | |
} | |
class FindHostedProcess | |
{ | |
public Timer MyTimer { get; set; } | |
private Process _realProcess; | |
public FindHostedProcess() | |
{ | |
MyTimer = new Timer(TimerCallback, null, 0, 1000); | |
Console.ReadKey(); | |
} | |
private void TimerCallback(object state) | |
{ | |
var foregroundProcess = Process.GetProcessById(WinAPIFunctions.GetWindowProcessId(WinAPIFunctions.GetforegroundWindow())); | |
if (foregroundProcess.ProcessName == "ApplicationFrameHost") | |
{ | |
foregroundProcess = GetRealProcess(foregroundProcess); | |
} | |
Console.WriteLine(foregroundProcess.ProcessName); | |
} | |
private Process GetRealProcess(Process foregroundProcess) | |
{ | |
WinAPIFunctions.EnumChildWindows(foregroundProcess.MainWindowHandle, ChildWindowCallback, IntPtr.Zero); | |
return _realProcess; | |
} | |
private bool ChildWindowCallback(IntPtr hwnd, IntPtr lparam) | |
{ | |
var process = Process.GetProcessById(WinAPIFunctions.GetWindowProcessId(hwnd)); | |
if (process.ProcessName != "ApplicationFrameHost") | |
{ | |
_realProcess = process; | |
} | |
return true; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://stackoverflow.com/questions/39702704/connecting-uwp-apps-hosted-by-applicationframehost-to-their-real-processes