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;

            }

        }

  • 相关阅读:
    null in ABAP and nullpointer in Java
    SAP ABAP SM50事务码和Hybris Commerce的线程管理器
    Hybris service layer和SAP CRM WebClient UI架构的横向比较
    SAP ABAP和Linux系统里如何检查网络传输的数据量
    SAP CRM WebClient UI和Hybris的controller是如何被调用的
    SAP CRM和Cloud for Customer订单中的业务伙伴的自动决定机制
    SAP CRM WebClient UI和Hybris CommerceUI tag的渲染逻辑
    SAP BSP和JSP页面里UI元素的ID生成逻辑
    微信jsapi支付
    微信jsapi退款操作
  • 原文地址:https://www.cnblogs.com/lizhigang/p/7158955.html
Copyright © 2011-2022 走看看