본문 바로가기

C#/WindowsAPI

C# 프로그램 최상위 활성화 ForegroundWindow

프로그램 최상위 활성화

http://story0111.tistory.com/44

 

④ C# 프로젝트 -1 프로그램명으로 프로그램 최상위로 활성화시키기(윈도우 전역) == Activate the top

프로그램명으로 최소화나 다른 프로그램이 활성화 되어있을때 최상위로 활성화 시켜주는 소스입니다. 예로 버튼을 만들어서 버튼을 누를때 최상위로 올라오도록했습니다. 다른 방법으로 단축�

story0111.tistory.com

 

1. 프로그램 이름을 사용하는 방법

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //폼 최상위로 띄우기
        [DllImport("user32.dll")]
        private static extern IntPtr FindWindow(string SClassName, string SWindowName);
        [DllImport("user32.dll")]
        private static extern bool SetForegroundWindow(IntPtr findname);
        [DllImport("user32.dll")]
        private static extern bool ShowWindowAsync(IntPtr findname, int howShow);
        private const int showNORMAL = 1;
        private const int showMINIMIZED = 2;
        private const int showMAXIMIZED = 3;
 
        private void button1_Click(object sender, EventArgs e)
        {
            // 프로그램명으로 핸들을 찾음
            IntPtr findname = FindWindow(null, "윈도우 최상위로");
            if (!findname.Equals(IntPtr.Zero))
            {
                // 프로그램이 최소화 되어 있다면 활성화 시킴 
                ShowWindowAsync(findname, showNORMAL);
                // 윈도우에 포커스를 줘서 최상위로 만듬
                SetForegroundWindow(findname);
            }
 
        }
    }
}

 

 

2. 프로세스 이름으로 사용하는 방법

[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
private const int SW_SHOWNORMAL = 1;
private const int SW_SHOWMINIMIZED = 2;
private const int SW_SHOWMAXIMIZED = 3;
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
static extern bool AllowSetForegroundWindow(int dwProcessId);
 
void ActivateApp(string processName)
{
    Process[] p = Process.GetProcessesByName(processName);
 
    // Activate the first application we find with this name
    if (p.Count() > 0)
 
        try
        {
            ShowWindowAsync(p[0].MainWindowHandle, SW_SHOWNORMAL);
            AllowSetForegroundWindow(p[0].Id);
            SetForegroundWindow(p[0].MainWindowHandle);
        }
        catch(Exception ex)
        {
            Debug.WriteLine(ex.Message);
        }
}

 

 

프로세스 이름은 작업 관리자에서 해당 앱 우클릭 - 속성에 들어가서 이름(.exe빼고)을 사용합니다. 

 

 

 

 

'C# > WindowsAPI' 카테고리의 다른 글

C# 절전모드 / 최대 절전모드  (0) 2020.08.19
C# 키보드 인풋  (0) 2020.08.19
C# 마우스 인풋 API  (0) 2020.08.19
C# 마우스 커서 Cursor Show / Hide  (0) 2020.08.19
C# Windows API 참고사이트  (0) 2020.08.19