Member 11095926 Ответов: 1

Как открыть несколько экземпляров браузеров chrome в приложении c# windows form


я новичок в этой технике, так что любезно игнорируйте, если я сделаю какую-нибудь ошибку. Я разрабатываю приложение, в котором пользователи могут входить в разные учетные записи в разных экземплярах Chrome. Я уже написал кусок кода и открыл несколько окон chrome в режиме инкогнито, но когда я помещаю их в свое приложение C#, он говорит, что процесс вышел, поэтому запрошенная информация недоступна...
Мой код таков

Что я уже пробовал:

try
            {
                Process process = new Process();
                process.StartInfo.FileName = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";
                process.StartInfo.Arguments = "http://www.google.com/" + " --new-window --incognito ";
                process.Start(); 
                if (!process.HasExited)
                {
                    Thread.Sleep(5000);
                    SetParent(process.MainWindowHandle, panel2.Handle);
                    MoveWindow(process.MainWindowHandle, -3, -70, panel2.Width + 3, panel2.Height + 70, false);
                }
 }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }


    [DllImport("user32.dll")]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

    [DllImport("USER32.dll")]
    private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);

Richard MacCutchan

У вас есть звонок, чтобы process.Kill(); что, скорее всего, и является проблемой.

Member 11095926

Спасибо Ричарду, я обновил свой код, у него все еще есть проблема... он прекрасно открывает первый экземпляр chrome и помещает его внутрь панели, он также открывает второй экземпляр, но не помещает его внутрь другой панели.

F-ES Sitecore

Если вы хотите, чтобы второй экземпляр находился в другой панели, то вам нужно дать дескриптор этой панели. Ваш код жестко закодирован, чтобы всегда использовать panel2

Member 11095926

Я сделал то же самое, но он говорит, что процесс вышел, поэтому запрошенная информация недоступна..

Member 11095926

если процесс будет убит, окно chrome также будет удалено, это не требуется.

Richard MacCutchan

Вот что я тебе говорил.

Richard Deeming

Вместо того чтобы пытаться взломать Chrome в вашем процессе, почему бы не попробовать CefSharp[^Это позволит вам встроить элемент управления браузером Chromium непосредственно в ваше приложение.

Member 11095926

я пробовал это раньше, но это не позволило мне открыть два браузера chromium с отдельными кэшами... каждый раз после входа в систему я пытался удалить кэш, и система говорила, что файл используется, поэтому он не может быть удален.

1 Ответов

Рейтинг:
1

Wessel Beulink

После того, как вы начнете его создание потока с идентификатором процесса.

Вам нужно сначала получить текущий процесс, прежде чем вы сможете получить информацию об этом процессе.

if (!process.HasExited) { 
 Process currentProcess = Process.GetCurrentProcess();
}


Статья Msdn: [GetProcesses]


Member 11095926

конечно.. вы правы, но мне нужно открыть оба процесса внутри моего приложения, я уже написал кусок кода, чтобы проверить, существует ли какой-либо процесс с таким же именем, если он уже запущен, то убейте их, а затем откройте два новых процесса для моего приложения.

Wessel Beulink

Не видел этой части в решении. Похоже, странное поведение приложения. Есть ли причина не использовать браузер или расширение для winforms ?

Member 11095926

пришлите мне электронное письмо по адресу sibghat.bsse@gmail.com поэтому я могу отправить вам полный проект для лучшего понимания...