Другие языки программирования и технологии
C#, запуск второй копии программы
Объясните как сделать: запущено приложение (свернуто в трей) , пользователь пытается открыть ярлык программы (запустить вторую копию программы) вместо этого должно всплыть первое запущенное приложение, а вторая копия программы не запускалась.
static class Program {
[STAThread]
[System.Runtime.InteropServices.DllImport("user32.dll")]
[return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
[return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void Main() {
bool isNotRunning = true;
using (var mutex = new System.Threading.Mutex(true, "МояПрограмма", out isNotRunning)) {
if (isNotRunning) {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
} else {
var curr = System.Diagnostics.Process.GetCurrentProcess();
foreach (var proc in System.Diagnostics.Process.GetProcessesByName(curr.ProcessName)) {
if (proc.Id != curr.Id) {
ShowWindow(proc.MainWindowHandle, 9);
ShowWindow(proc.MainWindowHandle, 5);
SetForegroundWindow(proc.MainWindowHandle);
}
}
}
}
}
}
[STAThread]
[System.Runtime.InteropServices.DllImport("user32.dll")]
[return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
[return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void Main() {
bool isNotRunning = true;
using (var mutex = new System.Threading.Mutex(true, "МояПрограмма", out isNotRunning)) {
if (isNotRunning) {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
} else {
var curr = System.Diagnostics.Process.GetCurrentProcess();
foreach (var proc in System.Diagnostics.Process.GetProcessesByName(curr.ProcessName)) {
if (proc.Id != curr.Id) {
ShowWindow(proc.MainWindowHandle, 9);
ShowWindow(proc.MainWindowHandle, 5);
SetForegroundWindow(proc.MainWindowHandle);
}
}
}
}
}
}
При запуске проверять, есть ли уже процесс с таким же именем, если есть то делать его активным и выход из текущего приложения.
Похожие вопросы
- C#. Как сделать, чтобы программа проверяла тип введённой переменной?
- Как правильно создать и использовать radiobutton-ы на win api c++ ?Можно ли из программы узнать версию Windows ?
- C++ не работает часть программы
- C++, цикл for. Написать программу.
- Как быстро изучить c++? Чтобы быстро писать программы под Windows. Знаю только Pascal.
- c++ цикл: for Написать программу, которая выводит на экран все числа в диапазоне указанном пользователем.
- Только начал изучать c++, подскажите как в программе указать % ?
- Как запретить второй запуск программы?
- как запретить второй запуск программы (Делфи) Добрый день всем, как запретить второй запуск своей программы
- Отслеживаем запуск программы...?(Vb. net )