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);
    
        }
    }
  • 相关阅读:
    Linux_搭建NFS服务(基础)
    Linux_配置主DNS服务(基础)
    Linux_配置辅助DNS服务(基础)
    Linux_配置本地YUM源(RHEL8)
    9. Mybatis plugins标签 实现分页
    27. SpringBoot 切换内嵌Servlet容器
    8. Mybatis typeHandlers标签
    63. VUEX Getters基本使用
    62. State单一状态树概念
    61 . VUEX state 和 mutations
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/3251710.html
Copyright © 2011-2022 走看看