• C# 获取窗口句柄并且关闭应用程序


    原文:http://www.cnblogs.com/oraclejava/articles/1549025.html

    public class User32API

        {

            private static Hashtable processWnd = null;

            public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);

            static User32API()

            {

                if (processWnd == null)

                {

                    processWnd = new Hashtable();

                }

            }

            [DllImport("user32.dll", EntryPoint = "EnumWindows", SetLastError = true)]

            public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam);

            [DllImport("user32.dll", EntryPoint = "GetParent", SetLastError = true)]

            public static extern IntPtr GetParent(IntPtr hWnd);

            [DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId")]

            public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);

            [DllImport("user32.dll", EntryPoint = "IsWindow")]

            public static extern bool IsWindow(IntPtr hWnd);

            [DllImport("kernel32.dll", EntryPoint = "SetLastError")]

            public static extern void SetLastError(uint dwErrCode);

            [DllImport("User32.dll", EntryPoint = "SendMessage")]

            private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

            Process[] processes;

            const int WM_CLOSE = 0x0010;

            public void GetCurrentWindowHandle()

            {

                Microsoft.Win32.RegistryKey oRegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software").OpenSubKey("Amada Software");

                string[] subKeys = oRegistryKey.GetSubKeyNames();

                IntPtr ptrWnd = IntPtr.Zero;

                foreach (string subkey in subKeys)

                {

                    processes = Process.GetProcessesByName(subkey);

                    foreach (Process proc in processes)

                    {

                        uint uiPid = (uint)proc.Id;

                        object objWnd = processWnd[uiPid];

                        if (objWnd != null)

                        {

                            ptrWnd = (IntPtr)objWnd;

                            if (ptrWnd != IntPtr.Zero && IsWindow(ptrWnd))

                            {

                                SendMessage(ptrWnd, WM_CLOSE, 0, 0);

                            }

                            else

                            {

                                ptrWnd = IntPtr.Zero;

                            }

                        }

                        bool bResult = EnumWindows(new WNDENUMPROC(EnumWindowsProc), uiPid);

                        if (!bResult && Marshal.GetLastWin32Error() == 0)

                        {

                            objWnd = processWnd[uiPid];

                            if (objWnd != null)

                            {

                                ptrWnd = (IntPtr)objWnd;

                                SendMessage(ptrWnd, WM_CLOSE, 0, 0);

                            }

                        }

                    }

                }

            }

            private static bool EnumWindowsProc(IntPtr hwnd, uint lParam)

            {

                uint uiPid = 0;

                if (GetParent(hwnd) == IntPtr.Zero)

                {

                    GetWindowThreadProcessId(hwnd, ref uiPid);

                    if (uiPid == lParam)

                    {

                        processWnd[uiPid] = hwnd;

                        SetLastError(0);

                        return false;

                    }

                }

                return true;

            }

        }

  • 相关阅读:
    论文参考文献
    Spatial Transformer Networks
    python实现两个升序链表合并
    ImportError: cannot import name 'PILLOW_VERSION'
    交叉熵与KL散度
    windows环境下面安装neo4j出错记录
    在vue项目中引入JQuery
    Vue在windows的环境配置
    js动态修改Easyui元素不生效,EasyUI动态渲染解析解决方案
    java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException报错的原因
  • 原文地址:https://www.cnblogs.com/lizhigang/p/7158955.html
Copyright © 2020-2023  润新知