728x90
반응형
728x170
▶ 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
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] 작업 보기(Task View) 모드 토글하기 (0) | 2021.04.22 |
---|---|
[C#/COMMON] Process 클래스 : StandardOutput 속성을 사용해 PING 실행 결과 출력하기 (0) | 2021.04.16 |
[C#/COMMON] ManagementObject 클래스 : 윈도우즈 서비스 파일 경로 구하기 (0) | 2021.04.15 |
[C#/COMMON] 최소화된 UWP 앱을 일반 상태로 표시하기 (0) | 2021.04.15 |
[C#/COMMON] 화면 보호기 표시하기 (0) | 2021.04.15 |
[C#/COMMON] Process 클래스 : 관리자 권한 실행 여부 구하기 (0) | 2021.04.14 |
[C#/COMMON] WebClient 클래스 : 넥서스 저장소(Nexus Repository)에서 자산(Asset) 정보 구하기 (0) | 2021.04.10 |
[C#/COMMON] Mutex 클래스 : 전역 객체 사용하기 (0) | 2021.04.10 |
[C#/COMMON] ManagementObjectSearcher 클래스 : 프로세스 정보 구하기 (0) | 2021.04.10 |
[C#/COMMON] Process 클래스 : Modules 속성을 사용해 프로세스 모듈 정보 구하기 (0) | 2021.04.10 |
댓글을 달아 주세요