2016-12-12 5 views
0

기본적으로 타사 프로그램의 워치 독 기능을 수행하는 C# 프로그램을 작성 중입니다. 트래픽이 특정 값 이하로 떨어지면 프로세스가 종료 된 후 다시 시작됩니다. 간단 taskkill /im].
한 가지 예외는 있습니다. 프로그램이 시스템 트레이로 최소화되면 taskkill /im에 응답하지 않고 taskkill /f /im으로 강제 종료해야합니다.C# 시스템 트레이의 타사 프로그램 제어

이것은 추측 할 수 있듯이 프로그램을 종료하는 가장 좋은 방법은 아닙니다. 그래서 현재 Windows 시스템 트레이에 액세스하고 기본적으로 프로그램 클릭/메서드를 호출하여 정상적으로 다시 최대화하는 방법을 찾고 있습니다.
문자 그대로 트레이에서 클릭을 시뮬레이트하려고 생각했지만이 방법이 부정확하고 예측 불가능한 방법이라고 생각했습니다.
[시스템 api를 사용하여]이를 수행하는 또 다른 방법이 있습니까?

감사합니다.

+0

타사 프로그램에 확인 대화 상자가 없다면 실행중인 exe에 'Process' 개체를 첨부하고 ['CloseMainWindow()'] (https://msdn.microsoft.com /en-us/library/system.diagnostics.process.closemainwindow(v=vs.110).aspx) 내가 이해하는 것으로 ~ 메인 윈도우에서'X'를 클릭하는 것과 같습니다. – Quantic

답변

1

user32.dll을 사용하여 프로세스 창을 최대화 할 수 있습니다.

// Pinvoke declaration for ShowWindow 
private const int SW_SHOWMAXIMIZED = 3; 

[DllImport("user32.dll")] 
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

// Sample usage 
ShowWindow(proc.MainWindowHandle, SW_SHOWMAXIMIZED); 

는 SO 대답 this에서 촬영. 윈도우 상태의 전체 목록 당신은 프로세스가 여전히 윈도우가있는 경우에만 작동이 비록이

var processes = Process.GetProcessesByName("nameOfYourProcess"); 

foreach(var process in processes) 
{ 
    var windowHandle = process.getMainWindowHandle; 
} 

같은 것을 수행하여 WindowHandle을 얻을 수있는이 MSDN Page

방문하십시오.

0

Windows에서 다른 응용 프로그램의 트레이 아이콘으로 반복 할 수있는 유일한 방법은 마우스 클릭에 의한 시뮬레이션입니다. 이것은 사용자가 마우스와 동시에 상호 작용하는 경우 "강철"이 커서가되어 작업 할 수 없다는 시장의 결함이 있습니다.

당신이 메모리 리크 (당신이 얻은 관리 형 앱인 경우)로 끝나지 않을 것이고 프로세스를 종료 할 때 살해하고있는 애플리케이션이 중요한 것을하지 않는다면 더 좋은 옵션입니다 .