WINDOWINFO.dwExStyle error

Тема в разделе "WASM.WIN32", создана пользователем kero, 16 апр 2009.

  1. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    У меня (XP-pro-sp2) врет WINDOWINFO.dwExStyle (с остальными параметрами WINDOWINFO вроде ОК).
    В аттаче микротестер, просьба сообщить - как там на вашей ОС...

    [​IMG]

    Для ленивых:
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\user32.inc
    7. include \masm32\include\kernel32.inc
    8. includelib \masm32\lib\user32.lib
    9. includelib \masm32\lib\kernel32.lib
    10.  
    11. WINDOWINFO struct
    12.   cbSize           DWORD ?
    13.   rcWindow         RECT <>
    14.   rcClient         RECT <>
    15.   dwStyle          DWORD ?
    16.   dwExStyle        DWORD ?
    17.   dwWindowStatus   DWORD ?
    18.   cxWindowBorders  UINT  ?
    19.   cyWindowBorders  UINT  ?
    20.   atomWindowType   ATOM  ?
    21.   wCreatorVersion  WORD  ?
    22. WINDOWINFO ends
    23.  
    24. .data
    25.   ft   db "%8.8lX   ""%s""",13,10,13,10
    26.        db "%8.8lX   GetWindowLong (GWL_EXSTYLE)",13,10
    27.        db "%8.8lX   WINDOWINFO.dwExStyle",0
    28. .data?
    29.   hw   dd ?
    30.   bu   db 128 dup(?)
    31.   buf  db 256 dup(?)
    32.   wi   WINDOWINFO <>
    33. .code
    34. start:
    35.   invoke GetDesktopWindow
    36.   invoke GetWindow,eax,GW_CHILD
    37.   invoke GetWindow,eax,GW_HWNDLAST
    38.   mov hw,eax
    39.   invoke GetClassName,hw,addr bu,127
    40.   mov wi.cbSize,sizeof wi
    41.   invoke GetWindowInfo,hw,addr wi
    42.   invoke GetWindowLong,hw,GWL_EXSTYLE
    43.   invoke wsprintf,addr buf,addr ft,hw,addr bu,eax,wi.dwExStyle
    44.   invoke MessageBox,0,addr buf,0,MB_TOPMOST
    45.   invoke ExitProcess,0
    46. end start
    ---
    Updated, по совету G13:
    в тестер добавлено вычисление версии винды.
    А также напоминание о Ctrl+C для MessageBox, на радость лентяям.
     
  2. SL7549

    SL7549 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    17
    [​IMG]
    Wine 1.1.19
    просто если интересно как в wine это делается
     
  3. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    SL7549
    Интересно, спасибо :)
    Зато в Wine не работает мой замечательный Undocumented EditBox.
    ---
    А кстати:
    в Wine последнее top-level окно не "Progman", а "Shell_TrayWnd" =>
    т.е. Wine заведомо небрежный имитатор...
     
  4. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Спасибо G13 за
    и за совет добавить OSVERSIONINFO.
    ------
    Итого от добрых людей на данный момент:
    [ошибка] - XP sp2/sp3, Server 2003 sp1, Vista sp1 (под вопросом), ...
    [нет ошибки] - Win98 SE, ...
     
  5. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Код (Text):
    1. 6.0.6001   Service Pack 1    ; win server 2k8 sp1 x64
    2.  
    3. 0003024C   "Progman"
    4.  
    5. 00000080   GetWindowLong (GWL_EXSTYLE)  
    6. E0000880   WINDOWINFO.dwExStyle
    Беглый поиск в win2k даёт некоторое представление о значении лишней восьмёрки:
    Код (Text):
    1. \win2k\private\ntos\w32\ntuser\inc\user.h
    2.  
    3. <..>
    4. /*
    5.  * Window Style and State Masks -
    6.  *
    7.  * High byte of word is byte index from the start of the state field
    8.  * in the WND structure, low byte is the mask to use on the byte.
    9.  * These masks assume the order of the state and style fields of a
    10.  * window instance structure.
    11.  *
    12.  * This is how the Test/Set/Clr/MaskWF value ranges map to the corresponding
    13.  * fields in the window structure.
    14.  *
    15.  *   offset                 WND field
    16.  *   0 - 3                  state        - private
    17.  *   4 - 7                  state2       - private
    18.  *   8 - B                  ExStyle      - public, exposed in SetWindowLong(GWL_EXSTYLE)
    19.  *   C - F                  style        - public, exposed in SetWindowLong(GWL_STYLE)
    20.  *                                         C-D are reserved for window class designer.
    21.  *                                         E-F are reserved for WS_ styles.
    22.  *
    23.  * NOTE: Be sure to add the flag to the wFlags array in kd\userexts.c!!!
    24.  */
    25.  
    26.  
    27. <..>
    28. /*
    29.  * Window Extended Style, from 0x0800 to 0x0B80.
    30.  */
    31. #define WEFDLGMODALFRAME        0x0801  // WS_EX_DLGMODALFRAME
    32. #define WEFDRAGOBJECT           0x0802  // ???
    33. #define WEFNOPARENTNOTIFY       0x0804  // WS_EX_NOPARENTNOTIFY
    34. #define WEFTOPMOST              0x0808  // WS_EX_TOPMOST
    35. #define WEFACCEPTFILES          0x0810  // WS_EX_ACCEPTFILES
    36. #define WEFTRANSPARENT          0x0820  // WS_EX_TRANSPARENT
    37. #define WEFMDICHILD             0x0840  // WS_EX_MDICHILD
    38. #define WEFTOOLWINDOW           0x0880  // WS_EX_TOOLWINDOW
    39. #define WEFWINDOWEDGE           0x0901  // WS_EX_WINDOWEDGE
    40. #define WEFCLIENTEDGE           0x0902  // WS_EX_CLIENTEDGE
    41. #define WEFEDGEMASK             0x0903  // WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE
    42. #define WEFCONTEXTHELP          0x0904  // WS_EX_CONTEXTHELP
    43. <..>
     
  6. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    ---------------------------
    Ctrl+C
    ---------------------------
    6.0.6001 Service Pack 1



    000200A6 "Progman"



    00000080 GetWindowLong (GWL_EXSTYLE)

    C0000080 WINDOWINFO.dwExStyle
    ---------------------------
    OK
    ---------------------------
     
  7. kero

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

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

    Т.о., от добрых людей на данный момент:

    [ошибка] - XP sp2/sp3, Server 2k3 sp1, Server 2k8 sp1 x64, ...
    [нет ошибки] - Win98 SE, ...
    [под вопросом] - Vista, Win7, ...
    ----
    P.S. О битовых масках попозже: кажется, будет, что сказать.
     
  8. kero

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

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

    P.S. А сервер-то не 2k8, а 2k3...
     
  9. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    ---------------------------
    Ctrl+C
    ---------------------------
    5.1.2600 Service Pack 3



    000100B4 "Progman"



    00000080 GetWindowLong (GWL_EXSTYLE)

    00000880 WINDOWINFO.dwExStyle
    ---------------------------
    ОК
    ---------------------------
     
  10. GroundHog

    GroundHog New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2005
    Сообщения:
    35
    Server2008 x64
    ---------------------------
    Ctrl+C
    ---------------------------
    5.1.2600 Service Pack 2



    000101BA "Progman"



    00000080 GetWindowLong (GWL_EXSTYLE)

    E0000880 WINDOWINFO.dwExStyle
    ---------------------------
    OK
    ---------------------------
     
  11. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Windows 7 32b
    -OK-
     
  12. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    TermoSINteZ
    Ничего себе "OK" ! :) Значит, и в 7...
    Спасибо.