728x90
반응형
728x170
▶ WindowHandleHelper.cs
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace TestProject
{
/// <summary>
/// 윈도우 핸들 헬퍼
/// </summary>
public static class WindowHandleHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Delegate
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 윈도우 열거하기 대리자 - EnumWindowsProc(windowHandle, longParameter)
/// <summary>
/// 윈도우 열거하기 대리자
/// </summary>
/// <param name="windowHandle">윈도우 핸들</param>
/// <param name="longParameter">LONG 매개 변수</param>
/// <returns>처리 결과</returns>
private delegate bool EnumWindowsProc(IntPtr windowHandle, int longParameter);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Import
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 쉘 윈도우 구하기 - GetShellWindow()
/// <summary>
/// 쉘 윈도우 구하기
/// </summary>
/// <returns>쉘 윈도우 핸들</returns>
[DllImport("user32.dll")]
private static extern IntPtr GetShellWindow();
#endregion
#region 윈도우 열거하기 - EnumWindows(enumWindowsProc, longParameter)
/// <summary>
/// 윈도우 열거하기
/// </summary>
/// <param name="enumWindowsProc">윈도우 열거하기 대리자</param>
/// <param name="longParameter">LONG 매개 변수</param>
/// <returns>처리 결과</returns>
[DllImport("user32.dll")]
private static extern bool EnumWindows(EnumWindowsProc enumWindowsProc, int longParameter);
#endregion
#region 윈도우 표시 여부 구하기 - IsWindowVisible(windowHandle)
/// <summary>
/// 윈도우 표시 여부 구하기
/// </summary>
/// <param name="windowHandle">윈도우 핸들</param>
/// <returns>윈도우 표시 여부</returns>
[DllImport("user32.dll")]
private static extern bool IsWindowVisible(IntPtr windowHandle);
#endregion
#region 윈도우 텍스트 길이 구하기 - GetWindowTextLength(windowHandle)
/// <summary>
/// 윈도우 텍스트 길이 구하기
/// </summary>
/// <param name="windowHandle">윈도우 핸들</param>
/// <returns>윈도우 텍스트 길이</returns>
[DllImport("user32.dll")]
private static extern int GetWindowTextLength(IntPtr windowHandle);
#endregion
#region 윈도우 텍스트 구하기 - GetWindowText(windowHandle, stringBuilder, maximumCount)
/// <summary>
/// 윈도우 텍스트 구하기
/// </summary>
/// <param name="windowHandle">윈도우 핸들</param>
/// <param name="stringBuilder">문자열 빌더</param>
/// <param name="maximumCount">최대 카운트</param>
/// <returns>윈도우 텍스트</returns>
[DllImport("user32.dll")]
private static extern int GetWindowText(IntPtr windowHandle, StringBuilder stringBuilder, int maximumCount);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 오픈 윈도우 핸들 딕셔너리 구하기 - GetOpenWindowHandleDictionary()
/// <summary>
/// 오픈 윈도우 핸들 딕셔너리 구하기
/// </summary>
/// <returns>윈도우 핸들 딕셔너리</returns>
public static Dictionary<IntPtr, string> GetOpenWindowHandleDictionary()
{
IntPtr shellWindowHandle = GetShellWindow();
Dictionary<IntPtr, string> windowHandleDictionary = new Dictionary<IntPtr, string>();
EnumWindows
(
delegate(IntPtr windowHandle, int longParameter)
{
if(windowHandle == shellWindowHandle)
{
return true;
}
if(!IsWindowVisible(windowHandle))
{
return true;
}
int windowTextLength = GetWindowTextLength(windowHandle);
if(windowTextLength == 0)
{
return true;
}
StringBuilder stringBuilder = new StringBuilder(windowTextLength);
GetWindowText(windowHandle, stringBuilder, windowTextLength + 1);
windowHandleDictionary[windowHandle] = stringBuilder.ToString();
return true;
},
0
);
return windowHandleDictionary;
}
#endregion
}
}
728x90
▶ Program.cs
using System;
using System.Collections.Generic;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
Dictionary<IntPtr, string> dictionary = WindowHandleHelper.GetOpenWindowHandleDictionary();
foreach(KeyValuePair<IntPtr, string> keyValuePair in dictionary)
{
IntPtr windowHandle = keyValuePair.Key;
string windowText = keyValuePair.Value;
Console.WriteLine($"{windowText} : {windowHandle}");
}
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] Process 클래스 : Threads 속성을 사용해 프로세스 스레드 정보 구하기 (0) | 2021.04.10 |
---|---|
[C#/COMMON] Process 클래스 : GetProcessById 정적 메소드를 사용해 전경 프로세스 구하기 (0) | 2021.04.07 |
[C#/COMMON] 너비가 0인 공백 문자 제거하기 (0) | 2021.04.05 |
[C#/COMMON] 작업 보기 모드 여부 구하기 (0) | 2021.04.03 |
[C#/COMMON] 모든 UWP 애플리케이션의 윈도우 최소화하기 (0) | 2021.04.03 |
[C#/COMMON] 오픈 윈도우 핸들 딕셔너리 구하기 (0) | 2021.04.03 |
[C#/COMMON] 한글 윈도우즈 10에서 계산기 UWP 앱 윈도우 최소화하기 (0) | 2021.04.02 |
[C#/COMMON] 프로세스 ID를 사용해 윈도우 핸들 리스트 구하기 (0) | 2021.04.02 |
[C#/COMMON] 누겟 설치 : InputSimulator (0) | 2021.03.27 |
[C#/COMMON] NetworkInterface 클래스 : GetAllNetworkInterfaces 정적 메소드를 사용해 VPN 네트워크 인터페이스 리스트 구하기 (0) | 2021.03.23 |
[C#/COMMON] 정적 로컬 함수(Static Local Function) 사용하기 (0) | 2021.03.09 |
댓글을 달아 주세요