На главную Наши проекты:
Журнал   ·   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.
  
> MenuItemID
    Как получить ID "Обновить" меню, всплывающего на Актив десктопе.
      Было бы неплохо уточнить для чего этот ID понадобился, тогда была бы возможность дать более конкретный ответ. У меня на машине это ID равен 28931, это можно узнать с помощью Spy++ отследив комманды от меню окну ""SHELLDLL_DefView окна "Program Manager" Progman в момент нажатия на этот пункт, или найти в ресурсах shell32.dll меню(215) и получить ID из него.
        Хочу послать его в WM_COMMAND, для обновления десктопа.
          Простенький пример в котором я порчу и обновляю десктоп
          ExpandedWrap disabled
            <br>  HWND test=FindWindow("Progman","Program Manager");<br>  //или если надо обновить все окна HWND test=GetDesktopWindow();<br><br>  //Портим изображение<br>  HDC dc=GetWindowDC(test);<br>  BitBlt(dc, 0, 0, 444, 444, dc, 10, 10, SRCCOPY);<br>  ReleaseDC(test,dc);<br><br>  //Востанавливаем<br>  RedrawWindow(test,NULL,NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN);<br>

          Так что если надо всего лишь обновить десктоп то проще послать ему не WM_COMMAND а  просто дать комманду перерисоватся.
          Сообщение отредактировано: Flip -
            К сожалению "просто" не получается. :'(
            И твой пример не подходит, нет портит он хорошо ;D(правда не актив десктоп)
            А вот восстановить...
            Может,конечно, он что-то восстанавливает,но не заметно.
            Реально - только "Обновить" из меню.
              Может не совсем в тему, но есть такое понятие как HWND_DESKTOP.
              #define HWND_DESKTOP        ((HWND)0) /*определен в winuser.h*/
              и соответственно HDC hDC = GetDC( HWND_DESKTOP );// или BeginPaint... если есть желание ченьть попортить...
              т.е. можно послать WM_PAINT или InvalidateRect или еще чего...
                А.. понял надо перечитать страницу для активного десктопа а не обновить его - тогда следущий код
                ExpandedWrap disabled
                  <br>#include <wininet.h><br>#include <ShlObj.h><br><br> ...<br><br> CoInitialize(NULL);<br> IActiveDesktop* pIActiveDesktop = NULL;<br> HRESULT hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,IID_IActiveDesktop, (void**) &pIActiveDesktop);<br> if (FAILED(hr))      pIActiveDesktop = NULL;<br>      if (pIActiveDesktop != NULL)      {<br>  pIActiveDesktop->ApplyChanges(AD_APPLY_ALL| AD_APPLY_SAVE | AD_APPLY_REFRESH | AD_APPLY_FORCE );<br>            pIActiveDesktop->Release();<br>            pIActiveDesktop = NULL;<br>      }<br> CoUninitialize();<br><br> ...<br>

                Я конечно догадываюсь как можно програмно вычислить этот несчастный ID для WM_COMMAND но это будет настолько фаршно и некорректно, что как мне кажется лучше использовать варианты предоставленные самой системой.
                Сообщение отредактировано: Flip -
                  Боюсь,для ВБ, это слишком круто. ???
                    Цитата Alexei, 03.04.03, 17:23:51
                    Боюсь,для ВБ, это слишком круто. ???

                    Боюсь тогда любой предложенный мной способ на эту тему будет слишком крут для VB. Я сам в VB слишком плохо разбираюсь чтобы давать советы по переносу этого кода с C++, но может быть в VB если поискать найдутся анологичные интерфейсы для взаимодействия с шелом.
                      А по-простому, как у людей, АПИшными функциями незя?
                      С некоторым скрипом, я их пристраиваю к ВБ, и при СИшном описании.
                        Приведенный код испульзует АПИ CoInitialize, CoCreateInstance, CoUninitialize. Или я не прав?
                          Цитата Vasya2000, 05.04.03, 08:04:20
                          Приведенный код испульзует АПИ CoInitialize, CoCreateInstance, CoUninitialize. Или я не прав?

                          Только не Win, a Com.Или я не прав? :D
                          Эти функции зовутся из ВБ, но хотелось бы получить подробное описание того, что делается в примере.Типа: трудно искать черную кошку в темной комнате, в особенности, если ее в глаза не видел ! :(
                            Я конечно понимаю что VB это круто и всё такое но может скомпилить и поместить C++ код в DLL и вызвать его оттуда(полагаю в VB это-то хоть можно).
                              Да. Если понимать с-суть, то может и все возможно сделать на ВБ.
                              Самая большая проблема - указатели на указатели,наверно.
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0620 ]   [ 16 queries used ]   [ Generated: 2.05.24, 06:24 GMT ]