На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: ElcnU
  
> Программно закрыть "чужое" окно, API во всей красе
    Ребята, помогите, чувствую, что должно быть простое и очевидное решение, а я брожу по буеракам вокруг да около(((

    user posted image

    Итак. Имеется сторонняя софтинка. Стоит в автозапуске. И всё бы хорошо, но будучи запущенной, она осчастливливает нас своим назойливым окном, которое работающим с устройством людям видеть совершенно бесполезно и даже вредно.
    Мне надо его как-то закрыть из своего кода, по сути программно сделав то, что можно сделать стилусом, нажав вверху ОК или внизу Меню -> Скрыть.
    Пробую:

    SetForegroundWindow(GetDesktopWindow()) - не работает. Почему-то вместо окна Home отображается всё та же форма.

    Ну что ж... Говорю ей:
    PostMessage(CurrWnd, WM_CLOSE, 0, 0);

    или даже
    PostMessage(CurrWnd, WM_QUIT, 0, 0);

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

    пробую искать эту заменяющую крестик кнопку <ок> через FindWindow - закономерно не нахожу, не кнопка это...
    мысль эмулировать нажатие стилусом на область экрана, где в данный момент кнопка очень-очень не нравится - предполагаются разные разрешения устройств, разные версии Windows Mobile, эта кнопка может гулять по экрану, и выискивать ей как-то муторно, некрасиво и ненадёжно...

    неужели нет простого, красивого и правильного способа сделать это в одну строчку? какой-нибудь PostMessage некоего сообщения форме, которое она воспримет как нажтие ОК в верхнем углу?

    помогите, кто знает...
      Думаю тебе надо не закрывать окно, а минимизировать его. Использовать что-то типа WM_SYSCOMMAND и SC_MINIMIZE.

      Не уверен, что у мобильный винды тут все так же как у обычной, но попробуй в эту сторону покопать.
      // Когда у оппонента кончаются аргументы, он начинает уточнять национальность.
        Сделай свою прогу на весь экран и TOPMOST :)
        - Завтра или послезавтра придет фруктовый пароход из Мобила, - сказал Джонни. - А до той поры нам делать нечего.
        - Но что вы намерены делать? Создать спрос?
        - Много вы понимаете в политической экономии, - ответил консул довольно невежливо. - Спроса создать нельзя. Но можно создать условия, которые вызовут спрос.
          PostMessage(FindWindow('YourProgramTitle', nil), sw_hide, 0, 0);
          или
          ShowWindow(FindWindow('YourProgramTitle', nil), sw_hide);
            после
            ShowWindow(FindWindow('YourProgramTitle', nil), sw_hide);
            получается вот такая картина:
            user posted image

            окно становится неактивным, но не уходит. причём GetDesktopWindow() возвращает хэндл на именно это окно, а не на Home...
              в общем, проблема решилась. в RemoteSpy посмотрел последовательность сообщений окну при нажатии <ОК> в форме, затем повторил её самостоятельно, используя SendMessage - сработало. спасибо всем откликнувшимся!
                Цитата fedorez @
                ...в RemoteSpy посмотрел последовательность сообщений окну...

                Добрый день, fedorez.
                Вижу что тема стара, но всё же, можете подробнее рассказать об этой программе? У меня подобная проблема, только с меню, а простой поиск выдал кучу хлама на запрос "RemoteSpy"...
                Заранее благодарю.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script Execution time: 0,0833 ]   [ 18 queries used ]   [ Generated: 23.07.19, 17:49 GMT ]