첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
0.00MB

▶ ProcessSpecificAccess.cs

using System;

namespace TestProject
{
    /// <summary>
    /// 프로세스 특정 액세스
    /// </summary>
    [Flags]
    public enum ProcessSpecificAccess : uint
    {
        /// <summary>
        /// PROCESS_VM_READ
        /// </summary>
        PROCESS_VM_READ = 0x0010,

        /// <summary>
        /// PROCESS_VM_WRITE
        /// </summary>
        PROCESS_VM_WRITE = 0x0020
    }
}

 

728x90

 

▶ WIN32Helper.cs

using System;
using System.Diagnostics;
using System.Text;
using System.Runtime.InteropServices;

namespace TestProject
{
    /// <summary>
    /// WIN32 헬퍼
    /// </summary>
    public static class WIN32Helper
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Import
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 모듈 파일명 구하기 (확장) - GetModuleFileNameEx(processHandle, moduleHandle, stringBuilder, size)

        /// <summary>
        /// 모듈 파일명 구하기 (확장)
        /// </summary>
        /// <param name="processHandle">프로세스 핸들</param>
        /// <param name="moduleHandle">모듈 핸들</param>
        /// <param name="stringBuilder">문자열 빌더</param>
        /// <param name="size">크기</param>
        /// <returns>처리 결과</returns>
        [DllImport("psapi.dll")]
        private static extern uint GetModuleFileNameEx(IntPtr processHandle, IntPtr moduleHandle, [Out] StringBuilder stringBuilder, [In][MarshalAs(UnmanagedType.U4)] int size);

        #endregion
        #region 윈도우 스레드 프로세스 ID 구하기 - GetWindowThreadProcessId(windowHandle, processID)

        /// <summary>
        /// 윈도우 스레드 프로세스 ID 구하기
        /// </summary>
        /// <param name="windowHandle">윈도우 핸들</param>
        /// <param name="processID">프로세스 ID</param>
        /// <returns>처리 결과</returns>
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern int GetWindowThreadProcessId(IntPtr windowHandle, out uint processID);

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 프로세스 경로 구하기 - GetProcessPath(windowHandle)

        /// <summary>
        /// 프로세스 경로 구하기
        /// </summary>
        /// <param name="windowHandle">윈도우 핸들</param>
        /// <returns>프로세스 경로</returns>
        public static string GetProcessPath(IntPtr windowHandle)
        {
            try
            {
                uint processID = 0;

                GetWindowThreadProcessId(windowHandle, out processID);

                Process process = Process.GetProcessById((int)processID);

                return process.MainModule.FileName.ToString();
            }
            catch
            {
                return null;
            }
        }

        #endregion
    }
}

 

300x250

 

▶ Program.cs

using System;
using System.Runtime.InteropServices;
using System.Threading;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Import
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 전경 윈도우 구하기 - GetForegroundWindow()

        /// <summary>
        /// 전경 윈도우 구하기
        /// </summary>
        /// <returns>윈도우 핸들</returns>
        [DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 프로그램 시작하기 - Main()

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            Console.WriteLine("아무 키나 누르면 5초 후 전경 윈도우 핸들을 구합니다.");

            Console.ReadKey(false);

            Thread.Sleep(5000);

            IntPtr windowHandle = GetForegroundWindow();

            string processPath = WIN32Helper.GetProcessPath(windowHandle);

            Console.WriteLine(processPath);
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요