Re[2]: Передать фокус приложению и выдвинуть на передний пла
От: Miem Россия  
Дата: 29.10.03 10:32
Оценка: 8 (2)
Здравствуйте, ABCDEFG, Вы писали:

ABC> Я проверил, действительно SetForegroundWindow не поднимает окно если вызов из другого процесса, неужели остается только Remoting?


У меня вот так уже давно работает:
.......
......
            bool createdNew;
            System.Threading.Mutex mutex = new System.Threading.Mutex(false, "My mutex", out createdNew);
            if (!createdNew)
            {
                //получаем имя нашего процесса (название файла без расширения '.exe')
                string processName = System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName;
                processName = processName.Substring(0, processName.IndexOf(".exe"));

                System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();

                //перебираем все процессы с искомым именем
                foreach(System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName(processName))
                {
                    //текущий экземпляр нас не интересует
                    if (process.Id == currentProcess.Id)
                        continue;

                    //могут быть разные приложения с одинаковым именем
                    //исполняемого файла. Проверяем что-бы это был 'наш' файл
                    if (process.MainModule.FileName != currentProcess.MainModule.FileName)
                        continue;
                
                    //Активизируем основное окно приложения
                    SetForegroundWindow(process.MainWindowHandle);
                    ShowWindow(process.MainWindowHandle, SW_MAXIMIZED);
                    return;
                }
            }
            ......
            ......

        }

        [System.Runtime.InteropServices.DllImport("User32.dll")]
        static extern int SetForegroundWindow(IntPtr hWnd);

        const int SW_MAXIMIZED = 3;
        [System.Runtime.InteropServices.DllImport("User32.dll")]
        static extern int ShowWindow(IntPtr hWnd, Int32 Mode);


Особых глюков не замечено
Вместо SW_MAXIMIZED можно использовать другие константы.
... << RSDN@Home 1.1 beta 2 >>
ICQ: 446240
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.