john1990_1 Ответов: 1

Как получить все ручки процесса?


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

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

private void button1_Click(object sender, EventArgs e)
{
    var prs = new ProcessStartInfo("chrome.exe");
    prs.Arguments = "http://translate.google.com" + " --new-window";
    Process p = Process.Start(prs);
    Program.setFocusToProcess(p);


    //setFocusToThisProcessChromeName("chrome");
}






public static void setFocusToThisProcessChromeName(string name)
{
    Process[] Processes = Process.GetProcessesByName(name);

    //if (Processes.Length == 0)
    //{
    //    MessageBox.Show("The program: '" + name + "' isn't running and can't be focused on.", "TranslateProgram");
    //    return;
    //}



    foreach (Process process in Processes)
    {
        setFocusToProcess(process);
    }
}


static public void setFocusToProcess(Process process)
{
    //if (process.MainWindowHandle == (IntPtr)0x00000000)
    setFocusToHandleAndUnmaximize(process.MainWindowHandle);
    setFocusToHandleAndUnmaximize(process.Handle);

}

private static void setFocusToHandleAndUnmaximize(IntPtr i)
{
    if (i == IntPtr.Zero)
    {
        return;
    }

    int SWP_SHOWWINDOW = 0x0040;

    const int SW_RESTORE = 9;

    int HWND_TOPMOST = -1;

    //const int SW_SHOWNORMAL = 1;


    //if (IsIconic(process.MainWindowHandle) != 0)
    //{
    //    ShowWindow(process.MainWindowHandle, SW_RESTORE);
    //}

    ShowWindow(i, SW_RESTORE);

    SetForegroundWindow(i);

    BringWindowToTop(i);

    SetFocus(new HandleRef(null, i));

    SetWindowPos(i, 0, Cursor.Position.X - 100, Cursor.Position.Y - 100, 0, 0, SWP_SHOWWINDOW | HWND_TOPMOST| SW_RESTORE);
}

[DllImport("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);

[DllImport("user32.dll")]
private static extern int IsIconic(IntPtr hWnd);

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr SetFocus(HandleRef hWnd);


[DllImport("user32.dll")]
private static extern int ShowWindow(IntPtr hWnd, int nCmdShow);


[DllImport("user32.dll")]
private static extern int BringWindowToTop(IntPtr hWnd);


[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

Dave Kreskowiak

Зачем вам нужны ручки всех процессов?

Кроме того, как вы собираетесь выяснить, что именно chrome.exe процесс - это тот, кому вы можете отправить сообщение? Просто запуск Chrome запускает девять процессов.

john1990_1

Я открываю новое окно Chrome, Как видно из моего кода, я хочу, чтобы только это окно было выведено вперед, и только это окно было размаксимизировано и приближено к положению мыши, чтобы пользователь мог печатать на нем. Как отличить процессы только что открытого окна и сделать его немаксимизированным? (и не все хромированные окна)

Dave Kreskowiak

Вы искали недвижимость Стильокна на изменение панели объект, который вы создали? Установите его в нормальное состояние перед запуском процесса.

john1990_1

Спасибо, извини, я пытался, это должно было сработать, но не сработало!

mehr.ah

Подумайте о лучших сценариях : вы можете использовать google translator для получения результатов базы запросов. вам нужно отправлять запросы по url-адресу и извлекать их из url-адреса . в этом случае вы можете сделать это с помощью ajax на главной странице или открыть новую страницу и делать то, что хотите.

john1990_1

Это сайт моей программы, я скоро загружу новую версию.
http://sites.google.com/site/windowsprogramfortranslation/

Я не хочу, чтобы HTTP - запрос и отправка фразы были переведены, я хочу полный браузер Google Translate...

Dave Kreskowiak

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

Получайте Удовольствие!

john1990_1

Я почти закончил его, мне просто нужен способ демаксимизации окна другой программы из Winforms.

john1990_1

Я встроил Chromium в свое приложение WinForms, но оно не было стабильным и постоянно становилось меньше окна при прокрутке и даже когда иногда не прокручивалось...

1 Ответов

Рейтинг:
1

RickZeeland

Смотрите статью здесь и перестаньте делать все по-плохому: Переводчик Google[^]