Уважаемые программисты! Эта тема является логичным продолжением этой: http://www.wasm.ru/forum/viewtopic.php?id=21522 Я пытаюсь создать диалог: edit для ввода буквы диска и три button'а - для открытия лотка сидюка, закрытия его и для выхода из программы. Привожу исходники: .asm Код (Text): format PE GUI 4.0 include 'win32axp.inc' ID_OPEN = 101h ID_CLOSE = 102h ID_EXIT = 103h ID_EDIT = 104h FILE_GENERIC_READ = 1 FILE_DEVICE_MASS_STORAGE = 2Dh METHOD_BUFFERED = 0 FILE_ANY_ACCESS = 0 FILE_READ_ACCESS = 1 FILE_WRITE_ACCESS = 2 IOCTL_STORAGE_EJECT_MEDIA = (FILE_DEVICE_MASS_STORAGE shl 16) or (FILE_READ_ACCESS shl 14) or (202h shl 2) or METHOD_BUFFERED IOCTL_STORAGE_LOAD_MEDIA = (FILE_DEVICE_MASS_STORAGE shl 16) or (FILE_READ_ACCESS shl 14) or (203h shl 2) or METHOD_BUFFERED .data bukva rb 1 handl dd ? xren db '\\.\',0,0 dvoet db ':',0 byr dd ? .code fuck: invoke GetModuleHandle,0 invoke DialogBoxParam,eax,69,HWND_DESKTOP,ProceduraDialoga,0 invoke ExitProcess,0 proc ProceduraDialoga,hwnddlg,msg,wparam,lparam push ebx push esi push edi cmp [msg],WM_INITDIALOG je Initialization cmp [msg],WM_COMMAND je Command cmp [msg],WM_CLOSE je Exit xor eax,eax jmp Finish Command: cmp [wparam],BN_CLICKED shl 16 + ID_EXIT je Exit mov eax,[handl] test eax,eax jnz knopki invoke GetDlgItemText,[hwnddlg],ID_EDIT,bukva,2 test eax,eax jz Initialization invoke lstrcat,xren,bukva invoke lstrcat,xren,dvoet invoke CreateFile,xren,FILE_GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0 cmp eax,-1 je Initialization mov [handl],eax jmp Command knopki: cmp [wparam],BN_CLICKED shl 16 + ID_CLOSE je Close cmp [wparam],BN_CLICKED shl 16 + ID_OPEN je Open Initialization: xor eax,eax inc eax Finish: pop edi pop esi pop ebx ret Exit: invoke EndDialog,[hwnddlg],-1 jmp Finish Open: invoke DeviceIoControl,[handl],IOCTL_STORAGE_EJECT_MEDIA,0,0,0,0,byr,0 invoke CloseHandle,[handl] invoke RtlZeroMemory,handl,4 jmp Initialization Close: invoke DeviceIoControl,[handl],IOCTL_STORAGE_LOAD_MEDIA,0,0,0,0,byr,0 invoke CloseHandle,[handl] invoke RtlZeroMemory,handl,4 jmp Initialization endp .end fuck section '.rsrc' resource from 'CDzap.res' data readable discardable .rc Код (Text): #define LANG_ENGLISH 0x9 #define LANG_RUSSIAN 0x19 #define DS_MODALFRAME 0x0080L #define WS_POPUP 0x80000000L #define WS_CAPTION 0x0C00000L #define WS_SYSMENU 0x80000L #define BS_DEFPUSHBUTTON 0x1 #define WS_CHILD 0x40000000L #define WS_VISIBLE 0x10000000L #define WS_TABSTOP 0x10000L #define BS_PUSHBUTTON 0x0 #define SS_LEFT 0x0 #define ES_LEFT 0x0 #define WS_BORDER 0x800000L #define ID_OPEN 0x101L #define ID_CLOSE 0x102L #define ID_EXIT 0x103L #define ID_EDIT 0x104L 69 DIALOG 70, 70, 160, 50 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Владыка CD-ROM'à ver. 0.0.0.1" LANGUAGE LANG_ENGLISH, LANG_RUSSIAN FONT 8, "MS Sans Serif" { CONTROL "Владыка CD-ROM'à:", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE, 10, 10, 100, 8 CONTROL "", ID_EDIT, EDIT, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 110, 10, 30, 13 CONTROL "Открыть",ID_OPEN, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 30, 45, 15 CONTROL "Закрыть",ID_CLOSE, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 60, 30, 45, 15 CONTROL "Выход",ID_EXIT,BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP,110, 30, 45, 15 } Проблема такова: диалог отрабатывает только одно нажатие на кнопку, после чего можно кликать мышью до посинения - реакции никакой. Перепробовал уже сотни вариантов, тасовал код и в хвост и в гриву - ничего не получается... Прошу помощи у знатоков. Поделитесь советом и кодом
Никто мне не хочет помочь... Негодяи Ладно, сам въехал, с подачи q_q Исходник нужно было писать так: Код (Text): format PE GUI 4.0 include 'win32axp.inc' ID_OPEN = 101h ID_CLOSE = 102h ID_EXIT = 103h ID_EDIT = 104h FILE_GENERIC_READ = 1 FILE_DEVICE_MASS_STORAGE = 2Dh METHOD_BUFFERED = 0 FILE_ANY_ACCESS = 0 FILE_READ_ACCESS = 1 FILE_WRITE_ACCESS = 2 IOCTL_STORAGE_EJECT_MEDIA = (FILE_DEVICE_MASS_STORAGE shl 16) or (FILE_READ_ACCESS shl 14) or (202h shl 2) or METHOD_BUFFERED IOCTL_STORAGE_LOAD_MEDIA = (FILE_DEVICE_MASS_STORAGE shl 16) or (FILE_READ_ACCESS shl 14) or (203h shl 2) or METHOD_BUFFERED .data bukva rb 1 handl dd ? xren rb 7 dvoet db ':',0 byr dd ? .code fuck: invoke GetModuleHandle,0 invoke DialogBoxParam,eax,69,HWND_DESKTOP,ProceduraDialoga,0 invoke ExitProcess,0 proc ProceduraDialoga,hwnddlg,msg,wparam,lparam push ebx push esi push edi cmp [msg],WM_INITDIALOG je Initialization cmp [msg],WM_COMMAND je Command cmp [msg],WM_CLOSE je Exit xor eax,eax jmp Finish Command: cmp [wparam],BN_CLICKED shl 16 + ID_EXIT je Exit cmp [wparam],BN_CLICKED shl 16 + ID_CLOSE je Close cmp [wparam],BN_CLICKED shl 16 + ID_OPEN je Open Initialization: xor eax,eax inc eax Finish: pop edi pop esi pop ebx ret Exit: invoke EndDialog,[hwnddlg],-1 jmp Finish Open: call Edit invoke DeviceIoControl,[handl],IOCTL_STORAGE_EJECT_MEDIA,0,0,0,0,byr,0 jmp Initialization Close: call Edit invoke DeviceIoControl,[handl],IOCTL_STORAGE_LOAD_MEDIA,0,0,0,0,byr,0 jmp Initialization Edit: invoke RtlZeroMemory,xren,6 invoke lstrcpy,xren,'\\.\' invoke CloseHandle,[handl] invoke GetDlgItemText,[hwnddlg],ID_EDIT,bukva,2 invoke lstrcat,xren,bukva invoke lstrcat,xren,dvoet invoke CreateFile,xren,FILE_GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0 mov [handl],eax retn endp .end fuck section '.rsrc' resource from 'CDzap.res' data readable discardable Вдруг, кто будет по этой же теме мучаться - авось, пригодится...