Russian Qt Forum
Ноябрь 22, 2024, 13:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: WinAPI MoveWindow не работает в Win 10  (Прочитано 7274 раз)
aekhv
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« : Октябрь 24, 2020, 12:07 »

Здравствуйте.

Почему-то в Win 10 не работает MoveWindow(), пробовал на нескольких дистрибутивах. В Win 7 всё работает прекрасно. В чём может быть причина?

Простейший пример, который двигает окна, в заголовке которых есть слово "Блокнот", прилагаю.
Код:
#include <QCoreApplication>
#include <windows.h>

QString getWindowTitle(HWND hWindow)
{
    wchar_t wtitle[1024];
    int len = GetWindowText(hWindow, LPWSTR(wtitle), sizeof (wtitle) - sizeof (wchar_t));

    if (len <= 0)
        return QString();
    else
        return QString::fromWCharArray(wtitle);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    HWND hRoot = GetDesktopWindow();
    HWND hWindow = GetWindow(hRoot, GW_CHILD);

    int i = 25;
    while (hWindow != nullptr)
    {
        QString win_title = getWindowTitle(hWindow);

        if (win_title.contains("Блокнот")) {
            MoveWindow(hWindow, i, i, 500, 400, true);
            i += 25;
        }

        hWindow = GetWindow(hWindow, GW_HWNDNEXT);
    }

    //    return a.exec();
}

Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #1 : Октябрь 24, 2020, 13:01 »

Так а что вы хочете? Только что проверил - всё работает, в соответсвии с кодом.
Запустил 2 блокнота - всё нашлось и выстроилось "лесенкой". Может вы просто хотели не то, что написано в коде?
Записан

aekhv
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #2 : Октябрь 24, 2020, 13:14 »

Я хочу чтобы окошки двигались Улыбающийся Мой пример упорно не работает в Win 10, GetLastError() сразу после MoveWindow() возвращает 0, а окна не двигаются. Не могу понять куда смотреть, где искать ошибку. Тот же самый код в Windows 7 работает.
Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #3 : Октябрь 24, 2020, 13:21 »

Я хочу чтобы окошки двигались Улыбающийся Мой пример упорно не работает в Win 10, GetLastError() сразу после MoveWindow() возвращает 0, а окна не двигаются. Не могу понять куда смотреть, где искать ошибку. Тот же самый код в Windows 7 работает.
В семерке тот же самый код работает точно так-же, как и в 10. Тоже только что проверил, даже качнуля для этого итальянскую 7-ку. Улыбающийся
С чего они будут двигаться то? Вы находите 1 окно с таким заголовком, двигаете его на 1 позицию, затем находите следующее окно и его двигаете, уже на новую позицию. Всё, как задумывалось в коде.
Записан

aekhv
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #4 : Октябрь 24, 2020, 13:28 »

Вы находите 1 окно с таким заголовком, двигаете его на 1 позицию, затем находите следующее окно и его двигаете, уже на новую позицию. Всё, как задумывалось в коде.

Я прекрасно понимаю как оно работает Подмигивающий Собственно, я просто набросал рабочий пример, чтобы проиллюстрировать то, что у меня не работает в основном проекте. Я понимаю, что ситуация банальная. Всё, на первый взгляд, проще простого и должно работать. Но вот не работает у меня, и именно в Windows 10. Окно не перемещается в заданную позицию, и никаких ошибок нет.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #5 : Октябрь 25, 2020, 13:08 »

делай готовый рабочий пример, со всеми выводами getlasterror, с указанием версии qt
проверь на чистой венде в виртуалке

Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #6 : Октябрь 25, 2020, 14:42 »

Окно не перемещается в заданную позицию, и никаких ошибок нет.
Всё работает. Одинаково. И на 10 и на 7. Тем более, что там нет никаких неоднозначностей в коде, чтобы не работало.
Ищите ошибки в своём коде. Либо приведите другой пример подобного "бага".
Я не издеваюсь, мне просто интересны такие особенности. Мало ли, вдруг у клиента всплывут. Допустим, с разным поведением одного и того же класса в 7 и 10 я уже видел. На тот момент решил костылём.
Записан

aekhv
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #7 : Октябрь 26, 2020, 13:41 »

Господа, уж просите меня, мне так стыдно! Пример я наваял поторопившись, а как раз-таки с блокнотом всё хорошо работает. Не работает с другим софтом. Кому интересно, вот c этим реально НЕ работает: https:// www .acelab. ru /dep.pc/download/PC3000DiskAnalyzer.zip

И проблему я решил, надо было запускать exe от имени администратора. Добавил с сборку манифест и теперь всё хорошо. Вероятно, чтобы двигать чужие окна, запущенные от имени админа, нужно самому иметь права админа.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 23.