아래 시나리오를 가지고 있습니다. 이 앱의 인스턴스 하나만 실행되도록 허용하는 WinForms 앱입니다. 여기서는 뮤텍스를 사용하여 확인합니다. 일부 매개 변수로 시작하는 앱은 실행되지만 숨겨집니다. 누군가가 앱을 다시 클릭하면 뮤텍스는 앱이 이미 실행 중임을 감지하고 기본 메소드 호출을 통해 기본 폼을 '숨기기'합니다 (아래 BringWindowToFront 참조).PInvoke로 양식보기
public static class NativeMethods
{
public enum ShowWindowOptions
{
FORCEMINIMIZE = 11,
HIDE = 0,
MAXIMIZE = 3,
MINIMIZE = 6,
RESTORE = 9,
SHOW = 5,
SHOWDEFAULT = 10,
SHOWMAXIMIZED = 3,
SHOWMINIMIZED = 2,
SHOWMINNOACTIVE = 7,
SHOWNA = 8,
SHOWNOACTIVATE = 4,
SHOWNORMAL = 1
}
[DllImport("user32.dll")]
public static extern int ShowWindow(int hwnd, int cmdShow);
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
public static void BringWindowToFront(string windowTitle)
{
// Get a handle to the application.
IntPtr handle = FindWindow(null, windowTitle);
// Verify that app is a running process.
if (handle == IntPtr.Zero)
{
return;
}
// With this line you have changed window status from example, minimized to normal
ShowWindow((int)handle, (int)ShowWindowOptions.SHOWDEFAULT);
// Make app the foreground application
SetForegroundWindow(handle);
}
}
모든 것이 괜찮습니다하지만 나는 아직 한 기능이 필요 : 여기
찾아 쇼 형태 창하는 코드입니다. 주 양식이 처음 표시 될 때 다른 추가 양식을 보여 드리고자합니다. 일반적으로 양식으로 처리합니다. _ 표시 이벤트. 그러나 PInvoke 메서드를 사용하여 창을 표시하면이 이벤트가 발생하지 않습니다. 기본 폼이이 가능 (이 ShowWindow의 PInvoke 방법을 사용) 표시 될 때
그래서 기본적으로 내가 추가 폼을 표시 하시겠습니까? 그것을 달성하는 다른 아이디어?
미리 감사드립니다.
P/Invoke mec 이 일을하는 것에 대한 허니 스틱? C# 코드 내에서 단일 인스턴스 응용 프로그램을 생성하는 다른 방법이 있습니다. – ChrisF
뮤 텍스 (Mutex)가 단일 인스턴스를 달성했습니다. 이제 public static extern int로 MainWindow를 보여준 후에 추가 Form을 보여 주려고합니다. ShowWindow (int hwnd, int cmdShow); – binball