zoukankan      html  css  js  c++  java
  • 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;

            }

        }

  • 相关阅读:
    Java 过滤器的作用
    TreeView的绑定
    设计模式(一)工厂模式Factory(创建型)
    【剑指offer】员工年龄排序
    Spring3.0 AOP 具体解释
    IT行业新名词--透明手机/OCR(光学字符识别)/夹背电池
    MYSQL C API 记录
    Hibernate的介绍
    数据绑定(八)使用Binding的RelativeSource
    一、ExtJS下载使用
  • 原文地址:https://www.cnblogs.com/lizhigang/p/7158955.html
Copyright © 2011-2022 走看看