Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Диалоговые окна, вызов .exe 
V
    Опции темы
Hopelessness
Дата 3.12.2007, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.12.2007

Репутация: нет
Всего: нет



Создать окно с четырехуровневым меню. Один из пунктов меню завершает приложение, другой - вызывает программу Калькулятор.

проблема с вызовом калькулятора, как это осуществить?


Код


.386
.model flat,stdcall
option casemap:none
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
include windows.inc
include gdi32.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib gdi32.lib
includelib kernel32.lib


.data
ClassName db "SimpleWinClass",0
AppName  db "Simple Window",0
MenuName db "FirstMenu",0
Test_string db "author: Hopelessness, TR-61",0
tst DWORD 100 



.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hMenu HMENU ?

.const
IDM_ABOUT equ 1
IDM_CALC equ 2
IDM_EXIT equ 4


.code
start:
    invoke GetModuleHandle, NULL ;вызов ф-ии
    mov    hInstance,eax
    invoke GetCommandLine
    mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    LOCAL hwnd:HWND
    mov   wc.cbSize,SIZEOF WNDCLASSEX
    mov   wc.style, CS_HREDRAW or CS_VREDRAW
    mov   wc.lpfnWndProc, OFFSET WndProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,NULL
    push  hInst
    pop   wc.hInstance
    invoke CreateSolidBrush, 00FF80FFh
    mov   wc.hbrBackground,eax
    mov   wc.lpszMenuName,NULL
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,0
    invoke LoadCursor,NULL,IDC_NO
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    invoke LoadMenu, hInst, OFFSET MenuName
    mov    hMenu,eax
    INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,100,\                
           100,400,300,NULL,hMenu,\
           hInst,NULL
    mov   hwnd,eax
    INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
    INVOKE UpdateWindow, hwnd
    .WHILE TRUE
                INVOKE GetMessage, ADDR msg,NULL,0,0
                .BREAK .IF (!eax)
                INVOKE DispatchMessage, ADDR msg
    .ENDW
    mov     eax,msg.wParam
    ret
WinMain endp

WndProc proc hWin:DWORD, hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    .IF uMsg == WM_CLOSE
        invoke ShowWindow,hWin,SW_MINIMIZE 
    .ELSEIF uMsg==WM_COMMAND
        mov eax,wParam
        
        .IF ax==IDM_ABOUT
            invoke MessageBox,NULL,ADDR Test_string,OFFSET AppName,MB_OK
        .ELSEIF ax==IDM_CALC
            
            ;?????????

        .ELSEIF ax==IDM_EXIT
            invoke EndDialog,hWin,0
        .ENDIF
    .ELSE
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
    .ENDIF
    xor    eax,eax
    ret
WndProc endp
end start


Это сообщение отредактировал(а) Hopelessness - 4.12.2007, 02:06
PM MAIL   Вверх
MAKCim
Дата 3.12.2007, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Hopelessness, 

M
MAKCim
Модератор: Читайте внимательно правила раздела!



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Hopelessness
Дата 4.12.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.12.2007

Репутация: нет
Всего: нет



сделано... может, кому-то понадобится...

Код

.386
.model flat,stdcall
option casemap:none
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
include windows.inc
include gdi32.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib gdi32.lib
includelib kernel32.lib


.data
ClassName db "SimpleWinClass",0
AppName  db "Simple Window",0
MenuName db "FirstMenu",0
Test_string db "author: Hopelessness, TR-61",0
Calc_string db "calc.exe",0

tst DWORD 100 


.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hMenu HMENU ?

.const
IDM_ABOUT equ 1
IDM_CALC equ 2
IDM_EXIT equ 4


.code
start:
    invoke GetModuleHandle, NULL ;вызов ф-ии
    mov    hInstance,eax
    invoke GetCommandLine
    mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    LOCAL hwnd:HWND
    mov   wc.cbSize,SIZEOF WNDCLASSEX
    mov   wc.style, CS_HREDRAW or CS_VREDRAW
    mov   wc.lpfnWndProc, OFFSET WndProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,NULL
    push  hInst
    pop   wc.hInstance
    invoke CreateSolidBrush, 00FF80FFh
    mov   wc.hbrBackground,eax
    mov   wc.lpszMenuName,NULL
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,0
    invoke LoadCursor,NULL,IDC_NO
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    invoke LoadMenu, hInst, OFFSET MenuName
    mov    hMenu,eax
    INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,100,\                
           100,400,300,NULL,hMenu,\
           hInst,NULL
    mov   hwnd,eax
    INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
    INVOKE UpdateWindow, hwnd
    .WHILE TRUE
                INVOKE GetMessage, ADDR msg,NULL,0,0
                .BREAK .IF (!eax)
                INVOKE DispatchMessage, ADDR msg
    .ENDW
    mov     eax,msg.wParam
    ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY
        invoke PostQuitMessage,NULL
    .ELSEIF uMsg==WM_COMMAND
        mov eax,wParam
        .IF ax==IDM_ABOUT
            invoke MessageBox,NULL,ADDR Test_string,OFFSET AppName,MB_OK
        .ELSEIF ax==IDM_CALC                    
                        invoke WinExec, ADDR Calc_string , SW_SHOW 

          

        .ELSEIF ax==IDM_EXIT
            invoke DestroyWindow,hWnd
        .ENDIF
    .ELSE
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
    .ENDIF
    xor    eax,eax
    ret
WndProc endp
end start

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0865 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.