У меня (XP-pro-sp2) врет WINDOWINFO.dwExStyle (с остальными параметрами WINDOWINFO вроде ОК). В аттаче микротестер, просьба сообщить - как там на вашей ОС... Для ленивых: Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib WINDOWINFO struct cbSize DWORD ? rcWindow RECT <> rcClient RECT <> dwStyle DWORD ? dwExStyle DWORD ? dwWindowStatus DWORD ? cxWindowBorders UINT ? cyWindowBorders UINT ? atomWindowType ATOM ? wCreatorVersion WORD ? WINDOWINFO ends .data ft db "%8.8lX ""%s""",13,10,13,10 db "%8.8lX GetWindowLong (GWL_EXSTYLE)",13,10 db "%8.8lX WINDOWINFO.dwExStyle",0 .data? hw dd ? bu db 128 dup(?) buf db 256 dup(?) wi WINDOWINFO <> .code start: invoke GetDesktopWindow invoke GetWindow,eax,GW_CHILD invoke GetWindow,eax,GW_HWNDLAST mov hw,eax invoke GetClassName,hw,addr bu,127 mov wi.cbSize,sizeof wi invoke GetWindowInfo,hw,addr wi invoke GetWindowLong,hw,GWL_EXSTYLE invoke wsprintf,addr buf,addr ft,hw,addr bu,eax,wi.dwExStyle invoke MessageBox,0,addr buf,0,MB_TOPMOST invoke ExitProcess,0 end start --- Updated, по совету G13: в тестер добавлено вычисление версии винды. А также напоминание о Ctrl+C для MessageBox, на радость лентяям.
SL7549 Интересно, спасибо Зато в Wine не работает мой замечательный Undocumented EditBox. --- А кстати: в Wine последнее top-level окно не "Progman", а "Shell_TrayWnd" => т.е. Wine заведомо небрежный имитатор...
Спасибо G13 за и за совет добавить OSVERSIONINFO. ------ Итого от добрых людей на данный момент: [ошибка] - XP sp2/sp3, Server 2003 sp1, Vista sp1 (под вопросом), ... [нет ошибки] - Win98 SE, ...
Код (Text): 6.0.6001 Service Pack 1 ; win server 2k8 sp1 x64 0003024C "Progman" 00000080 GetWindowLong (GWL_EXSTYLE) E0000880 WINDOWINFO.dwExStyle Беглый поиск в win2k даёт некоторое представление о значении лишней восьмёрки: Код (Text): \win2k\private\ntos\w32\ntuser\inc\user.h <..> /* * Window Style and State Masks - * * High byte of word is byte index from the start of the state field * in the WND structure, low byte is the mask to use on the byte. * These masks assume the order of the state and style fields of a * window instance structure. * * This is how the Test/Set/Clr/MaskWF value ranges map to the corresponding * fields in the window structure. * * offset WND field * 0 - 3 state - private * 4 - 7 state2 - private * 8 - B ExStyle - public, exposed in SetWindowLong(GWL_EXSTYLE) * C - F style - public, exposed in SetWindowLong(GWL_STYLE) * C-D are reserved for window class designer. * E-F are reserved for WS_ styles. * * NOTE: Be sure to add the flag to the wFlags array in kd\userexts.c!!! */ <..> /* * Window Extended Style, from 0x0800 to 0x0B80. */ #define WEFDLGMODALFRAME 0x0801 // WS_EX_DLGMODALFRAME #define WEFDRAGOBJECT 0x0802 // ??? #define WEFNOPARENTNOTIFY 0x0804 // WS_EX_NOPARENTNOTIFY #define WEFTOPMOST 0x0808 // WS_EX_TOPMOST #define WEFACCEPTFILES 0x0810 // WS_EX_ACCEPTFILES #define WEFTRANSPARENT 0x0820 // WS_EX_TRANSPARENT #define WEFMDICHILD 0x0840 // WS_EX_MDICHILD #define WEFTOOLWINDOW 0x0880 // WS_EX_TOOLWINDOW #define WEFWINDOWEDGE 0x0901 // WS_EX_WINDOWEDGE #define WEFCLIENTEDGE 0x0902 // WS_EX_CLIENTEDGE #define WEFEDGEMASK 0x0903 // WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE #define WEFCONTEXTHELP 0x0904 // WS_EX_CONTEXTHELP <..>
--------------------------- Ctrl+C --------------------------- 6.0.6001 Service Pack 1 000200A6 "Progman" 00000080 GetWindowLong (GWL_EXSTYLE) C0000080 WINDOWINFO.dwExStyle --------------------------- OK ---------------------------
Sol_Ksacap, djmans, и вам спасибо Т.о., от добрых людей на данный момент: [ошибка] - XP sp2/sp3, Server 2k3 sp1, Server 2k8 sp1 x64, ... [нет ошибки] - Win98 SE, ... [под вопросом] - Vista, Win7, ... ---- P.S. О битовых масках попозже: кажется, будет, что сказать.
--------------------------- Ctrl+C --------------------------- 5.1.2600 Service Pack 3 000100B4 "Progman" 00000080 GetWindowLong (GWL_EXSTYLE) 00000880 WINDOWINFO.dwExStyle --------------------------- ОК ---------------------------
Server2008 x64 --------------------------- Ctrl+C --------------------------- 5.1.2600 Service Pack 2 000101BA "Progman" 00000080 GetWindowLong (GWL_EXSTYLE) E0000880 WINDOWINFO.dwExStyle --------------------------- OK ---------------------------