uxtheme.dll :: правильная загрузка

Тема в разделе "WASM.WIN32", создана пользователем UTeX, 12 мар 2008.

  1. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Вобщем интересует как правильно загрузить эту библиотеку, чтобы стиль и клиентской и неклиентской части окна был подхвачен
    Пока что, как видно, верный стиль лишь у неклиентской части окна

    [​IMG]
     
  2. BLiTZ

    BLiTZ Member

    Публикаций:
    0
    Регистрация:
    4 июл 2006
    Сообщения:
    54
    Эм ... Манифест?
     
  3. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Манифест на месте.
    Собственно это обычный калькулятор - т е все внутренности сохранены и манифест в том числе в ресурсах присутствует в нормальном виде.

    Возможно что необходимо UXTHEME.DLL использовать именно так как он и используется при программной установке стилей.
    Но хотелось бы эо сделать верно, тобишь также как это делает и система.

    Если есть идеи - выражайтесь.

    Спасибо
     
  4. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Для того чтобы стиль подхватился сразу думаю, что достаточно будет привязать User32.dll к загрузчику через его импорт, но если это сделать наблюдается странное поведение:
    при упоминании в импорте о User32.dll, при загрузке появляется какая то левая область памяти в карте памяти процесса
    именно в том месте куда необходимо в последствие грузить файл из памяти. При ее освобождении - все сразу же рушится - видать это что то необходимое для правильной работы User32.dll.
    Может кто то в курсе что это за бока?
    Либо может есть идеи по поводу того как правильно зарузить UXTHEME.DLL?

    Было бы неплохо услышать хоть какие-то мысли по теме.
     
  5. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Может я что-то не так формулирую?
    Не думаю, что с этим никто не сталкивался.
     
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Никто вручную не подгружает. Есть манифест, его достаточно. Можно в инете поискать установку тем вручную, вроде бы видел такие приблуды.
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    UTeX
    Небойсь процесс сам создаешь ? Вручную как в неббете ??
    Тогда это гемор со стилями. На этом форуме затрагивалась эта тем. Правда уже не помню нашли ответ или нет.
     
  8. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    TermoSINteZ
    Я гружу ПЕ из дампа в памяти процесса загрузчика.
    думаю просто какая то глупость ускользнула
    я не нашел ее почему-то
     
  9. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    вобщем были какие-то идеи по поводу EnableTheming(), но это развеялось сразу же после теста
    как оказалось она влияет на работу uxtheme.dll во всей системе, а не в процессе, и к тому же получилось только отключить с ее помощью стили - включить увы не удалось

    Код (Text):
    1. HRESULT Result = ((HRESULT(__stdcall *)(BOOL fEnable))GetProcAddress(LoadLibrary(L"uxtheme.dll"), "EnableTheming"))(FALSE);
     
  10. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Правда где-то бродит рядом, но не совсем ясно где.

    Что из библиотеки uxtheme.dll оказывает влияние на все контролы созданные в процессе, а не в системе в общем?
    Может кто-то в курсе?
     
  11. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Я ничего не понял; Но когда я хотел, чтобы кнопки отображались со стилями, приходилось не только добавлять манифест, но и вызывать InitCommonControls(Ex) перед созданием первого окна. Или перед регистрацией класса? Нет, скорее всё же перед созданием первого окна.
     
  12. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    MSDN -> WM_THEMECHANGED Notification:
    Так что в аттаче - пример, как низя!

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. inclib macro x
    6.  include x.inc
    7.  includelib x.lib
    8. endm
    9.  
    10. include windows.inc
    11. inclib user32
    12. inclib kernel32
    13. inclib gdi32
    14. ;inclib comctl32
    15. inclib uxtheme
    16.  
    17. .const
    18.  id equ 2000
    19.  STAP_ALLOW_NONCLIENT  equ 1
    20.  STAP_ALLOW_CONTROLS   equ 2
    21.  STAP_ALLOW_WEBCONTENT equ 4
    22.  WM_THEMECHANGED       equ 031Ah
    23.  
    24. .data
    25.  _button db "button",0
    26.  _1      db "#1",0
    27.  _2      db "#2",0
    28.  _3      db " Nizzia !",0
    29. .data?
    30. .code
    31.  
    32. DlgProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    33.  
    34.   .if uMsg==WM_CLOSE
    35.     invoke EndDialog,hWnd,0
    36.    
    37.   .elseif uMsg==WM_INITDIALOG
    38.     invoke CreateWindowEx,0,addr _button,addr _1,WS_CHILD OR WS_VISIBLE OR WS_TABSTOP,                   10, 20,200,30,hWnd,id+1,lParam,0
    39.     invoke CreateWindowEx,0,addr _button,addr _2,WS_CHILD OR WS_VISIBLE OR WS_TABSTOP,                   10, 60,200,30,hWnd,id+2,lParam,0    
    40.     invoke CreateWindowEx,0,addr _button,addr _3,WS_CHILD OR WS_VISIBLE OR WS_TABSTOP OR BS_AUTOCHECKBOX,10,100,200,30,hWnd,id+3,lParam,0
    41.    
    42.   .elseif uMsg==WM_COMMAND && wParam==id+3
    43.     invoke SendDlgItemMessage,hWnd,id+3,BM_GETCHECK,0,0
    44.     xor ecx,ecx
    45.     .if eax==BST_UNCHECKED
    46.       mov ecx,STAP_ALLOW_NONCLIENT or STAP_ALLOW_CONTROLS or STAP_ALLOW_WEBCONTENT
    47.     .endif
    48.     invoke SetThemeAppProperties,ecx
    49.     invoke SendDlgItemMessage,hWnd,id+1,WM_THEMECHANGED,0,0  ; Nizzia!
    50. ;    invoke SendDlgItemMessage,hWnd,id+2,WM_THEMECHANGED,0,0  ; Nizzia!
    51.     invoke SendDlgItemMessage,hWnd,id+3,WM_THEMECHANGED,0,0  ; Nizzia!
    52.     .else
    53.     mov eax,FALSE
    54.     ret
    55.   .endif
    56.   mov eax,TRUE
    57.   ret
    58. DlgProc endp
    59.  
    60. start:
    61.   invoke GetModuleHandle,0
    62.   invoke DialogBoxParam,eax,100,0,offset DlgProc,eax
    63.   invoke ExitProcess,eax
    64. ;  invoke InitCommonControls
    65. end start
    66.  
    67. // .rc
    68. 100 DIALOGEX 0,0,260,100
    69. STYLE DS_CENTER | WS_OVERLAPPEDWINDOW
    70. EXSTYLE WS_EX_TOPMOST | WS_EX_CLIENTEDGE
    71. CAPTION "Forbidden  WM_THEMECHANGED  usage"
    72. FONT 8, "Tahoma"
    73. {}
    74. 1 24 "manifest"
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    http://www.wasm.ru/forum/viewtopic.php?id=25101
    Тут чето затрагивалось вроде...

    Я сам пробовал подключить theames ручками, улучшив пример из Неббета, но все попытки завершились неудачей (смотрел что делает CreateProccess в подробностях, но так и не нашел момент нужный) и я забил на это, так как конечную цель переформулировал и переделал (в общем отпала надобность запускать процесс в ручную).
    Если что найдешь - напиши. Ибо чисто интересно, хотя в практической точки зрения - бессмысленно так гемороится.
     
  14. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    если разберемся то конечно все будет тут
    странно слышать такое. дело в том что загруженный мной ПЕ файл не должен отличаться в поведении от загруженного системой - если не касаться внутренностей - то визуальные стили сразу выдают какое-либо нестандартное поведение.
     
  15. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    UTeX
    Дело не в поведении. Прога будет работать как надо. Просто видимо ей нехватает каких то данных в структурах процесса и окружения, чтоб понять стили
     
  16. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    TermoSINteZ
    Я догадываюсь об этом, правда ).
     
  17. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    kero
    Прокомментируй немного пожалуйста свой пост. А то я что-то не могу понять о чем ты.
    Имел наверное ввиду, что это дело система контролирует а в ручную нельзя? или что-то еще?
     
  18. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
  19. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    UTeX
    Комментирую:

    Что имел в виду -
    то в аттач полОжил,
    А "низзя" и "нельзя" -
    не одно и то же.

    Аттач при "неклассической" теме запускали? Чекбокс нажимали? Визуальные стили контролов #1 и #3 этого диалога от состояния чекбокса зависели?

    Если да - значит, аттач таки осуществляет запрошенное вами
    и даже сверх того: не на все контролы диалога, а только на часть из них. Способом, которым "низзя".

    Если же нет... Аттач отгружен с XP. У вас же, судя по картинке, Vista. Значит, Vista пилюйот на мой пример, противная.
     
  20. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    У меня XP

    Контролы вообще не отображаются увы.