zoukankan      html  css  js  c++  java
  • 通过窗口句柄获取程序路径

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    
    namespace WpfApplication1
    {
        class WindowListItem : DragItem
        {
            private TaskBarWindow taskBarWindow;
            public WindowListItem(TaskBarWindow taskBarWindow)
            {
                InitializeComponent();
                this.Content.Content = taskBarWindow.title;
                this.taskBarWindow = taskBarWindow;
                BitmapImage image = new BitmapImage(new Uri(@"F:	emp.png", UriKind.Absolute));
                this.Icon.Source = GetIcon();
                
            }
    
            public override void onItemClick()
            {
                MainWindow.mainWindow.Hide();
                Win32.ShowWindow(this.taskBarWindow.hwnd.ToInt32(), 9);
                Win32.SetForegroundWindow(this.taskBarWindow.hwnd.ToInt32());
            }
    
            [DllImport("psapi.dll")]
            static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In] [MarshalAs(UnmanagedType.U4)] int nSize);
    
            [System.Runtime.InteropServices.DllImport("shell32.dll")]
            private static extern int ExtractIconEx(string lpszFile, int niconIndex, IntPtr[] phiconLarge, IntPtr[] phiconSmall, int nIcons);  
    
            public static IntPtr getAppIconFromWindowHandle(IntPtr hwnd)
            {
                int pId = 0;
                IntPtr pHandle = IntPtr.Zero;
                Win32.GetWindowThreadProcessId(hwnd, ref pId);
                pHandle = Win32.OpenProcess(1040, 0, pId);
                StringBuilder sb = new StringBuilder(512);
                GetModuleFileNameEx(pHandle, IntPtr.Zero, sb, 512);
                Win32.CloseHandle(pHandle);
    
                IntPtr[] largeIcons, smallIcons ;
                int IconCount = ExtractIconEx(sb.ToString(), -1, null, null, 0);   
                largeIcons = new IntPtr[IconCount];
                smallIcons = new IntPtr[IconCount];
                ExtractIconEx(sb.ToString(), 0, largeIcons, smallIcons, IconCount);
    
                if (largeIcons.Length > 0)
                {
                    return largeIcons[0];
                }
                else
                {
                    return IntPtr.Zero;
                }
            }
    
            public ImageSource GetIcon()
            {
                IntPtr icon = new IntPtr(0);
                icon = getAppIconFromWindowHandle(this.taskBarWindow.hwnd);
                if (icon != IntPtr.Zero)
                {
                    return System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
                                icon,
                                new Int32Rect(0, 0, 32, 32),
                                BitmapSizeOptions.FromEmptyOptions());
                }
                else
                {
                    return null;
                }
            }
    
    
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WpfApplication1
    {
        public class Win32
        {
            [DllImport("user32.dll", EntryPoint = "GetClassName")]
            public static extern int GetClassName(int hwnd, StringBuilder lpClassName, int nMaxCount);
    
            [DllImport("user32.dll", EntryPoint = "GetWindow")]
            public static extern int GetWindow(int hwnd, int uCmd);
    
            [DllImport("user32.dll", EntryPoint = "GetWindowLong")]
            public static extern long GetWindowLong(int hwnd, int nIndex);
    
            [DllImport("user32.dll", EntryPoint = "IsWindowVisible")]
            public static extern bool IsWindowVisible(int hwnd);
    
            [DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
            public static extern bool SetForegroundWindow(int hwnd);
    
            [DllImport("user32.dll", EntryPoint = "ShowWindow")]
            public static extern bool ShowWindow(int hwnd, int nCmdShow);     
            
            [DllImport("user32.dll", EntryPoint = "GetWindowText")]
            public static extern int GetWindowText(int hwnd, StringBuilder lpString, int cch);
    
            public delegate bool EnumWindowsProc(int hWnd, int lParam);
    
            [DllImport("user32.dll")]
            public static extern int EnumWindows(EnumWindowsProc ewp, int lParam);
    
    
    
    
            public const int PROCESS_ALL_ACCESS = 0x000F0000 | 0x00100000 | 0xFFF;
            [DllImport("User32.dll")]
            public extern static int GetWindowThreadProcessId(IntPtr hWnd, ref int lpdwProcessId);
            [DllImport("Kernel32.dll")]
            public extern static IntPtr OpenProcess(int fdwAccess, int fInherit, int IDProcess);
            [DllImport("Kernel32.dll")]
            public extern static bool TerminateProcess(IntPtr hProcess, int uExitCode);
            [DllImport("Kernel32.dll")]
            public extern static bool CloseHandle(IntPtr hObject);
            [DllImport("Kernel32.dll", EntryPoint = "GetModuleFileName")]
            public static extern uint GetModuleFileName(IntPtr hModule, [Out] StringBuilder lpszFileName, int nSize);
            [DllImport("SHELL32.DLL", CharSet = CharSet.Auto)]
            public static extern int ExtractIconEx(string lpszFile, int nIconIndex, IntPtr phiconLarge, IntPtr phiconSmall, int nIcons);
    
        }
    }
  • 相关阅读:
    LeetCode 326. Power of Three
    LeetCode 324. Wiggle Sort II
    LeetCode 322. Coin Change
    LeetCode 321. Create Maximum Number
    LeetCode 319. Bulb Switcher
    LeetCode 318. Maximum Product of Word Lengths
    LeetCode 310. Minimum Height Trees (DFS)
    个人站点大开发!--起始篇
    LeetCode 313. Super Ugly Number
    LeetCode 309. Best Time to Buy and Sell Stock with Cooldown (DP)
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/3251710.html
Copyright © 2011-2022 走看看