Re[3]: Передать фокус приложению и выдвинуть на передний пла
От: efprog  
Дата: 11.02.06 12:51
Оценка:
Здравствуйте, Miem, Вы писали:

M>Здравствуйте, ABCDEFG, Вы писали:


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


M>У меня вот так уже давно работает:

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

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

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

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

M>        }

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

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


M>Особых глюков не замечено

M>Вместо SW_MAXIMIZED можно использовать другие константы.

А не подскажете как свое же окно активировать???(После драг дропа в ворд необходимо при навединии мыши на свое окно активиролвать его для следующих операций). Пытаюсь активировать — либо мигает в панели задач либо не рабоатет. Пробовал многими способами — одно и то же. SW_MAXIMIZED — активирует всё как надо — но раскрывать его не нужно, SW_NORMAL,SW_SHOW,SW_RESTORE — не работают — опять моргания...
Help me if you can!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.