繁体   English   中英

使用 C# 在 Windows 10 中获取当前活动的应用程序名称

[英]Get current active application name in Windows 10 using C#

我尝试获取当前活动的应用程序名称(或进程名称),但在 Microsoft Edge 等某些应用程序中,结果为 ApplicationFrameHost。 有没有办法在任务管理器中获取应用程序名称?

我的实际代码:

    [DllImport("user32.dll")]
    static extern IntPtr GetForegroundWindow();
    [DllImport("user32.dll")]
    static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
    [DllImport("user32.dll")]
    public static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out uint processId);

            private string GetActiveProcess()
    {

        const int nChars = 256;
        uint processId;
        StringBuilder Buff = new StringBuilder(nChars);
        IntPtr handle = GetForegroundWindow();

        if (GetWindowText(handle, Buff, nChars) > 0)
        {
            GetWindowThreadProcessId(handle, out processId);
            return Process.GetProcessById((int)processId).ProcessName;
        }
        return null;
    }

该解决方案在表单应用程序中看起来对我有用:

       //aktivneOknoProces
        string aktivneOknoProces = GetActiveProcess();
        private Process _realProcess;

        private string GetActiveProcess()
        {
            string app = "";
            var foregroundProcess = Process.GetProcessById(WinAPIFunctions.GetWindowProcessId(WinAPIFunctions.GetforegroundWindow()));
            if (foregroundProcess.ProcessName == "ApplicationFrameHost")
            {
                foregroundProcess = GetRealProcess(foregroundProcess);
            }
            if(foregroundProcess != null)
            {
                app = foregroundProcess.ProcessName;
            }
            return app;
        }

        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;
        }

        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();
            }
        }

我相信您正在寻找的是:

Process.GetCurrentProcess().ProcessName

获取当前进程

进程名称

那应该给你当前进程的名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM