Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 1 |

 

  Вопрос: MMPlayer LITE Добавлено: 05.06.05 02:54  

Автор вопроса:  ZagZag | ICQ: 295002202 

Торкнуло както меня оптимизировать и ужать сэмпловый медиаплеер с wasm.ru
Ужал. Если както еще можно ужать, то подскажите.
А так плеер сам по себе рульный, хоть половину авишек не играет, но размер =
3 584 байт!
Я оставил меню только открытия файла и полноэкранного просмотра.

.386
.model Flat, StdCall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include comdlg32.inc

includelib kernel32.lib
includelib user32.lib
includelib comdlg32.lib

WndProc   PROTO :dword, :dword, :dword, :dword

.const
MENU_FILE   equ 1000h
MENU_FULLSCREEN  equ 1001h

MCIWNDM_OPEN  equ 1177
MCIWNDM_SENDSTRING equ 1125

.const
Library_Name  db "msvfw32.dll",0
f_MCIWndCreate  db "MCIWndCreate",0
szSplitter   db "-",0
szFile    db "Открыть...",0
szFullScreen  db "Полный экран",0

LoadFileFilte  db "Все файлы (*.*)",0,"*.*",0,0
LoadFileTitle  db "Выберите файл",0
szPlay    db "PLAY",0
szStop    db "STOP",0
szClose    db "CLOSE",0
szPlayfullscreen db "PLAY FULLSCREEN NOTIFY",0

.data
ofn     OPENFILENAME <sizeof OPENFILENAME,,,offset
LoadFileFilte,0,0,0,offset LoadFileBuffer, 260, 0, 0, 0, offset
LoadFileTitle, OFN_LONGNAMES or OFN_EXPLORER or OFN_FILEMUSTEXIST or
OFN_PATHMUSTEXIST or OFN_HIDEREADONLY, 0, 0, 0, 0, 0, 0>

.data?
hInstance   HINSTANCE ?
hLibrary   dd ?
p_MCIWndCreate  dd ?
mcihWnd    dd ?
handleMenu   dd ?
handleFile   dd ?
pFName    dd ?
prevWindow   dd ?
LoadFileBuffer  db 260 dup(?)
msg     MSG <>

.code
Start:
 xor ebx, ebx
 invoke GetModuleHandle, ebx
 mov hInstance,eax
 invoke LoadLibrary, ADDR Library_Name
 mov hLibrary, eax
 invoke GetProcAddress, eax, ADDR f_MCIWndCreate
 jz Exit

 mov p_MCIWndCreate, eax
 push pFName
 push 14CFE7F0h
 push hInstance
 push ebx
 call p_MCIWndCreate
 mov mcihWnd, eax
 pop eax
 pop eax
 pop eax
 pop eax

 invoke GetSystemMenu, mcihWnd, ebx
 mov handleMenu, eax
 invoke AppendMenu, handleMenu, MF_SEPARATOR, ebx, ADDR szSplitter
 invoke AppendMenu, handleMenu, ebx, MENU_FILE, ADDR szFile ; ebx =
MF_STRING
 invoke AppendMenu, handleMenu, ebx, MENU_FULLSCREEN, ADDR szFullScreen
 invoke SetWindowLong, mcihWnd, GWL_EXSTYLE, WS_EX_WINDOWEDGE
 invoke SetWindowLong, mcihWnd, GWL_WNDPROC, ADDR WndProc
 mov prevWindow, eax

 .While TRUE
  invoke GetMessage, ADDR msg, ebx, ebx, ebx
  .BREAK .IF (!eax)
  invoke TranslateMessage, ADDR msg
  invoke DispatchMessage, ADDR msg
 .ENDW

 invoke FreeLibrary, hLibrary
 mov eax, msg.wParam

Exit:
 invoke ExitProcess, eax

WndProc proc uses esi, hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
 xor ebx,ebx
 mov eax, uMsg
 .IF eax==WM_DESTROY
  invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szStop
  invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szClose
  invoke PostQuitMessage, ebx
 .ELSEIF eax==WM_CLOSE
  invoke SendMessage, hWnd, WM_DESTROY, ebx, ebx
  .ELSEIF eax==WM_SYSCOMMAND
  mov eax, wParam
  .IF ax==MENU_FILE
   push hWnd
   pop ofn.hWndOwner
   push hInstance
   pop ofn.hInstance
   invoke GetOpenFileName, ADDR ofn
   mov handleFile, eax
   movzx esi, ofn.nFileExtension
   add esi, ofn.lpstrFile
   lodsd
   or eax, 020202020h
   invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szStop
   invoke SendMessage, hWnd, MCIWNDM_OPEN, ebx, ADDR LoadFileBuffer
   .if eax == ebx
    invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szPlay
   .endif
  .ELSEIF ax==MENU_FULLSCREEN
   invoke SendMessage,hWnd, WM_SHOWWINDOW, SW_SHOWMAXIMIZED, ebx
   invoke SendMessage,hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szPlayfullscreen
  .endif
 .ELSEIF eax==MM_MCINOTIFY
  invoke ShowWindow, hWnd, SW_SHOWNORMAL
  invoke SendMessage, hWnd, MCIWNDM_CHANGESTYLES, MCIWNDF_NOMENU, ebx
  invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szPlay
 .endif
 invoke CallWindowProc, prevWindow, hWnd, uMsg, wParam, lParam
 ret
WndProc endp
end Start


Копирайт остается wasm.ru - я делал только для себя... ну ежели не пару
компашек с фильмами записать :)

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #1
Добавлено: 11.06.05 14:06
Рульная вешь! Только ошибочка где-то закралась, сообщает об ошибке при закрытии программы.

Ответить

Номер ответа: 2
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #2 Добавлено: 12.06.05 07:14
Да... бывает при просмотре некоторых авишек :(
И файлы он играет только со стандартными кодеками :(
Зато какой размер :) Я кстати придумал как его еще килобайт на 500 ужать :)

Ответить

Номер ответа: 3
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #3
Добавлено: 15.06.05 15:02
Прикольно... ну, давай, показывай свой сжатый код? Мне кажется, плееру не хватает командной строки (связать с ним audio и video расширения заплаткой к реестру), а GetOpenFileName можно или оставить или убрать.

Ответить

Номер ответа: 4
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #4
Добавлено: 15.06.05 15:18
Неоднократно посещала мысля: как бы так сделать, чтобы мультимедийный файл писался в ресурс этого плеера или просто в конец файла. Тогда диалог открытия бы не понадобился, просто было бы по плееру к каждому фильму/клипу/треку :)

Ответить

Номер ответа: 5
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #5 Добавлено: 22.06.05 05:13
В плеером-фильмом идея неплоха, но EXE размером мегов в 700 - Любой
антивирус загнется :)
Сжатый код?

.386
.model Flat, StdCall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include comdlg32.inc

includelib kernel32.lib
includelib user32.lib
includelib comdlg32.lib

WndProc   PROTO :dword, :dword, :dword, :dword

.const
MENU_FILE   equ 1000h
MENU_FULLSCREEN  equ 1001h

MCIWNDM_OPEN  equ 1177
MCIWNDM_SENDSTRING equ 1125

.const
Library_Name  db "msvfw32.dll",0
f_MCIWndCreate  db "MCIWndCreate",0
szSplitter   db "-",0
szFile    db "?в?алвм...",0
szFullScreen  db "?R<-л© н?а -",0

LoadFileFilte  db "'б? д ©<л (*.*)",0,"*.*",0,0
LoadFileTitle  db "'л??аЁв? д ©<",0
szPlay    db "PLAY",0
szStop    db "STOP",0
szClose    db "CLOSE",0
szPlayfullscreen db "PLAY FULLSCREEN NOTIFY",0

.data
ofn     OPENFILENAME <sizeof OPENFILENAME,,,offset
LoadFileFilte,0,0,0,offset LoadFileBuffer, 260, 0, 0, 0, offset
LoadFileTitle, OFN_LONGNAMES or OFN_EXPLORER or OFN_FILEMUSTEXIST or
OFN_PATHMUSTEXIST or OFN_HIDEREADONLY, 0, 0, 0, 0, 0, 0>

.data?
hInstance   HINSTANCE ?
hLibrary   dd ?
p_MCIWndCreate  dd ?
mcihWnd    dd ?
handleMenu   dd ?
handleFile   dd ?
pFName    dd ?
prevWindow   dd ?
LoadFileBuffer  db 260 dup(?)
msg     MSG <>

.code
Start:
 xor ebx, ebx
 invoke GetModuleHandle, ebx
 mov hInstance,eax
 invoke LoadLibrary, ADDR Library_Name
 mov hLibrary, eax
 invoke GetProcAddress, eax, ADDR f_MCIWndCreate
 jz Exit

 mov p_MCIWndCreate, eax
 push pFName
 push 14CFE7F0h
 push hInstance
 push ebx
 call p_MCIWndCreate
 mov mcihWnd, eax
 pop eax
 pop eax
 pop eax
 pop eax

 invoke GetSystemMenu, mcihWnd, ebx
 mov handleMenu, eax
 invoke AppendMenu, handleMenu, MF_SEPARATOR, ebx, ADDR szSplitter
 invoke AppendMenu, handleMenu, ebx, MENU_FILE, ADDR szFile ; ebx =
MF_STRING
 invoke AppendMenu, handleMenu, ebx, MENU_FULLSCREEN, ADDR szFullScreen
 invoke SetWindowLong, mcihWnd, GWL_EXSTYLE, WS_EX_WINDOWEDGE
 invoke SetWindowLong, mcihWnd, GWL_WNDPROC, ADDR WndProc
 mov prevWindow, eax

 .While TRUE
  invoke GetMessage, ADDR msg, ebx, ebx, ebx
  .BREAK .IF (!eax)
  invoke TranslateMessage, ADDR msg
  invoke DispatchMessage, ADDR msg
 .ENDW

 invoke FreeLibrary, hLibrary
 mov eax, msg.wParam

Exit:
 invoke ExitProcess, eax

WndProc proc uses esi, hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
 xor ebx,ebx
 mov eax, uMsg
 .IF eax==WM_DESTROY
  invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szStop
  invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szClose
  invoke PostQuitMessage, ebx
 .ELSEIF eax==WM_CLOSE
  invoke SendMessage, hWnd, WM_DESTROY, ebx, ebx
  .ELSEIF eax==WM_SYSCOMMAND
  mov eax, wParam
  .IF ax==MENU_FILE
   push hWnd
   pop ofn.hWndOwner
   push hInstance
   pop ofn.hInstance
   invoke GetOpenFileName, ADDR ofn
   mov handleFile, eax
   movzx esi, ofn.nFileExtension
   add esi, ofn.lpstrFile
   lodsd
   or eax, 020202020h
   invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szStop
   invoke SendMessage, hWnd, MCIWNDM_OPEN, ebx, ADDR LoadFileBuffer
   .if eax == ebx
    invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szPlay
   .endif
  .ELSEIF ax==MENU_FULLSCREEN
   invoke SendMessage,hWnd, WM_SHOWWINDOW, SW_SHOWMAXIMIZED, ebx
   invoke SendMessage,hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szPlayfullscreen
  .endif
 .ELSEIF eax==MM_MCINOTIFY
  invoke ShowWindow, hWnd, SW_SHOWNORMAL
  invoke SendMessage, hWnd, MCIWNDM_CHANGESTYLES, MCIWNDF_NOMENU, ebx
  invoke SendMessage, hWnd, MCIWNDM_SENDSTRING, ebx, ADDR szPlay
 .endif
 invoke CallWindowProc, prevWindow, hWnd, uMsg, wParam, lParam
 ret
WndProc endp
end Start


Ги-ги! Я его скоро еще на полкилобайта сократю! :)

Ответить

Номер ответа: 6
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #6 Добавлено: 22.06.05 05:15
Ууу! Как я спать хочу!
Я это уже все отсылал! :)

Ответить

Номер ответа: 7
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #7 Добавлено: 22.06.05 05:24
Кароче надо стуб-программу подменять.
Есть недокументированная команда компилятора /STUB

LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /STUB:"stub.exe" /VERSION:4.0

Это стуб-программа.

4D 5A 00 00 01 00 00 00 01 00 00 00 50 45 00 00
4C 01 07 00 08 00 00 00 B0 21 CD 29 B4 4C CD 21
E0 00 0E 01 0B 01 04 14 20 00 00 00 00 2E 00 00
18 00 00 00 00 E0 00 00 00 10 00 00 0C 00 00 00


Стуб-программа - досовская программа, выводящая что "этот вайл не может быть запущен"

Ответить

Номер ответа: 8
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #8 Добавлено: 22.06.05 05:30
Про командную строку: Сначала не понял о чем ты, потом дошло. Обязательно
сделаю, сам хотел както, но забыл...

А присоединить видео к плееру - дело ведь не очень сложное, только это
фильмов не касается :) Клип - другое дело, или маленький ролик какой...
Можно в ресурс дописать (благо что на форуме этому недавно научились ;) )

Ответить

Номер ответа: 9
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #9
Добавлено: 14.07.05 13:28
Что-то я ничего не понял: в каком таком месте ты чего-то ужал, у меня откомпиленный exe ровно столько же байт.. :( Ты ничего не перепутал? А то может просто ужался размер исходника, а ты обрадовался? :)

Сам хочу доработать кое в чем этот плеер, правда знаний и умений маловато.. Зато есть энтузиазм! :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам