Как получить доступ к ActiveQt веб-браузер с помощью C++

Я создал Web-браузер, используя Active-qt в одном виджете, а во втором - виртуальную клавиатуру, созданную мной. Я должен написать в текстовом поле браузера (например, окно поиска Google) с виртуальной клавиатурой. Я использую метод отправки события с клавиатуры для отправки событий нажатия клавиши в браузер, но он не записывается в веб-браузер. Когда я создал строку редактирования в первом виджете и пытался писать с помощью той же виртуальной клавиатуры, тогда он пишет отлично, но в браузере это не пишет. Поэтому я хотел получить доступ к HTML-содержимому браузера, чтобы получить идентификатор окна поиска веб-сайта. Поэтому я установил фокус на этот конкретный идентификатор. Я беспомощен, пожалуйста, помогите. Заранее спасибо. Технологический стек QT: активный компонент Qt, Qt 5.7.0, IDE создателя Qt с Min Gw и C++.

Редактировать: фрагмент кода тестового примера отправляет событие нажатия одной кнопки в веб-браузер, присоединяя дизайнерскую привязку, а также фрагмент кода. введите описание изображения здесь

    UseKeyBoardDialog::UseKeyBoardDialog(QWidget *parent) : QDialog(parent)

{
    setupUi(this);
    WebBrowser->setControl("8856F961-340A-11D0-A96B-00C04FD705A2");


    QString htmlDoc = WebBrowser->generateDocumentation();
    QString outputFilename = "Results.html";
    QFile outputFile(outputFilename);
    outputFile.open(QIODevice::WriteOnly);
    /* Check it opened OK */
        if(!outputFile.isOpen()){
           qDebug() << "- Error, unable to open" << outputFilename << "for output";
        }
        /* Point a QTextStream object at the file */
        QTextStream outStream(&outputFile);
        /* Write the line to the file */
        outStream << htmlDoc;
        /* Close the file */
        outputFile.close();
    //qDebug()<<"htmlDoc "<<htmlDoc;

}

void UseKeyBoardDialog::navigate(const QString &url)
{
    WebBrowser->dynamicCall("Navigate(const QString&)", url);
}

void UseKeyBoardDialog::on_pushButton_clicked()
{
     // lineEdit->setFocus();
    WebBrowser->setFocus();

           keybd_event( 0,
                        0x1E,
                        KEYEVENTF_SCANCODE| 0,
                        0 );

        // Simulate a key release
           keybd_event( 0,
                        0x1E,
                        KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE,
                        0);



}

1 ответ

Для записи в веб-браузере используйте метод SendInput, чтобы отправить искусственное нажатие клавиши в браузер по событию clickclick, и это будет работать для любого браузера. Перед отправкой нажатия клавиш вы должны поддерживать веб-браузер на верхнем уровне каждый раз при нажатии кнопки. Фрагмент кода для записи в браузер при нажатии виртуальной клавиши:

void Widget::on_pushButton_clicked() {
ui->axWidget->setFocus(); //setting focus of webbrowser
ui->pushButton->setFocusPolicy(Qt::NoFocus);//focus policy of virtual key 
//webbrowser on top every time 
ui->axWidget->setWindowFlags(Qt::WindowStaysOnTopHint);

   INPUT ip;
        ip.type = INPUT_KEYBOARD;
        ip.ki.wVk = 0x41;
        ip.ki.wScan = 0;
        ip.ki.dwFlags = 0;
        ip.ki.time = 0;
        ip.ki.dwExtraInfo = 0;
        // Send the keyboard event to the specified window
        SendInput(1, &ip, sizeof(INPUT)); }

этот код является примером кода, отображающим одно виртуальное нажатие клавиши в веб-браузере.

Другие вопросы по тегам