На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Вытащить окно на передний план. , Есть HWND окна. Окно закрыто другим окном. Надо его вытащить на передний план.
    Есть окно, известно только его HWND. Окно не мое, чужое. Я запускаю программу и нахожу HWND окна. Окно закрыто другим окном. Из моей программы надо вытащить это окно на передний план, так чтобы моя программа не потеряла фокус ввода. Задача решена в WINDOWS7, а в десятке не работает.Что то у меня не получается, пробовал посылать сообщения, устанавливать фокус ввода на это окно, потом на мое. Ничего не помогает. Смотрел в SPY++, оказалось, что в 7 когда активно мое окно при щелчке по нему сообщение WM_ACTIVATEAPP приходит только один раз, в 10 при каждом щелчке приходит новое такое сообщение. Как побороть?
    Сообщение отредактировано: a_n_y_a -
      ::SetWindowPos(hWnd, HWND_TOP, ...., SWP_NOACTIVATE...) не помогает?
        Цитата Олег М @
        ::SetWindowPos(hWnd, HWND_TOP, ...., SWP_NOACTIVATE...) не помогает?

        Ура! Работает! Я пробовал эту функцию, но без SWP_NOACTIVATE. Огромное спасибо за помощь!
          Новая проблема. Есть код:
          ExpandedWrap disabled
                    if (sw != NULL)
                    {
                        ::GetWindowRect(sw, r1);
                        ::SetWindowPos(sw, HWND_TOP, r1.left, r1.top, r1.Width(), r1.Height(), SWP_NOACTIVATE);
                    };
                    Sleep(100);
                    if(sw1!=NULL)
                    {
                        ::GetWindowRect(sw1, r);
                        ::SetWindowPos(sw1, HWND_TOP, r.left, r.top, r.Width(), r.Height(), SWP_NOACTIVATE);
                    };
                    Sleep(100);

          Вариант для sw1 работает, окошко вытаскивается и показывается, а окошко sw не показывается. Если поменять SWP_NOACTIVATE на что нибудь другое, окошко показывается, но оно блокирует работу с моим окном, опять бесконечная последовательность WN_ACTIVATEAPP.
          Что можно предпринять?
            Цитата a_n_y_a @
            Что можно предпринять?

            SWP_NOACTIVATE - это флаг, его надо не заменять, а комбинировать с другими, например SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE
              Цитата Олег М @
              Цитата a_n_y_a @
              Что можно предпринять?

              SWP_NOACTIVATE - это флаг, его надо не заменять, а комбинировать с другими, например SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE

              Попробовал предложенную комбинацию, результат тот же. Окно не появляется. Вообще то я пробовал некоторые комбинации, но ничего не получилось. Флагов много, вариантов комбинаций очень много, все их не перебрать. Может есть что нибудь еще для решения задачки? Я уже пробовал после этой функции посылать сообщение WM_ACTIVATE. Но ничего не работает.
                Цитата a_n_y_a @
                Флагов много, вариантов комбинаций очень много, все их не перебрать.

                Не надо их перебирать. Попробуй

                ::SetWindowPos(sw1, sw, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE);

                или
                ::SetWindowPos(sw1, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE);

                GetWindowRect там вообще нигде не нужен
                  Цитата Олег М @
                  Не надо их перебирать. Попробуй

                  ::SetWindowPos(sw1, sw, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE);

                  или
                  ::SetWindowPos(sw1, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE);

                  GetWindowRect там вообще нигде не нужен

                  Первый вариант сработал, спасибо за помощь.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0274 ]   [ 16 queries used ]   [ Generated: 28.03.24, 12:47 GMT ]