add flat assembler toolchain
This commit is contained in:
142
toolchain/fasmw17332/EXAMPLES/USECOM/USECOM.ASM
Normal file
142
toolchain/fasmw17332/EXAMPLES/USECOM/USECOM.ASM
Normal file
@ -0,0 +1,142 @@
|
||||
|
||||
; Component Object Model usage demonstration
|
||||
|
||||
format PE GUI 4.0
|
||||
entry start
|
||||
|
||||
include 'win32a.inc'
|
||||
|
||||
struc GUID def
|
||||
{
|
||||
match d1-d2-d3-d4-d5, def
|
||||
\{
|
||||
.Data1 dd 0x\#d1
|
||||
.Data2 dw 0x\#d2
|
||||
.Data3 dw 0x\#d3
|
||||
.Data4 db 0x\#d4 shr 8,0x\#d4 and 0FFh
|
||||
.Data5 db 0x\#d5 shr 40,0x\#d5 shr 32 and 0FFh,0x\#d5 shr 24 and 0FFh,0x\#d5 shr 16 and 0FFh,0x\#d5 shr 8 and 0FFh,0x\#d5 and 0FFh
|
||||
\}
|
||||
}
|
||||
|
||||
interface ITaskBarList,\
|
||||
QueryInterface,\
|
||||
AddRef,\
|
||||
Release,\
|
||||
HrInit,\
|
||||
AddTab,\
|
||||
DeleteTab,\
|
||||
ActivateTab,\
|
||||
SetActiveAlt
|
||||
|
||||
CLSCTX_INPROC_SERVER = 0x1
|
||||
CLSCTX_INPROC_HANDLER = 0x2
|
||||
CLSCTX_LOCAL_SERVER = 0x4
|
||||
CLSCTX_INPROC_SERVER16 = 0x8
|
||||
CLSCTX_REMOTE_SERVER = 0x10
|
||||
CLSCTX_INPROC_HANDLER16 = 0x20
|
||||
CLSCTX_INPROC_SERVERX86 = 0x40
|
||||
CLSCTX_INPROC_HANDLERX86 = 0x80
|
||||
CLSCTX_ESERVER_HANDLER = 0x100
|
||||
CLSCTX_NO_CODE_DOWNLOAD = 0x400
|
||||
CLSCTX_NO_CUSTOM_MARSHAL = 0x1000
|
||||
CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000
|
||||
CLSCTX_NO_FAILURE_LOG = 0x4000
|
||||
CLSCTX_DISABLE_AAA = 0x8000
|
||||
CLSCTX_ENABLE_AAA = 0x10000
|
||||
CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
|
||||
|
||||
ID_EXIT = IDCANCEL
|
||||
ID_SHOW = 100
|
||||
ID_HIDE = 101
|
||||
|
||||
IDD_COMDEMO = 1
|
||||
|
||||
section '.text' code readable executable
|
||||
|
||||
start:
|
||||
|
||||
invoke CoInitialize,NULL
|
||||
invoke CoCreateInstance,CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,ShellTaskBar
|
||||
|
||||
invoke GetModuleHandle,0
|
||||
invoke DialogBoxParam,eax,IDD_COMDEMO,HWND_DESKTOP,COMDemo,0
|
||||
|
||||
cominvk ShellTaskBar,Release
|
||||
|
||||
invoke ExitProcess,0
|
||||
|
||||
proc COMDemo hwnd,msg,wparam,lparam
|
||||
push ebx esi edi
|
||||
cmp [msg],WM_INITDIALOG
|
||||
je .wminitdialog
|
||||
cmp [msg],WM_COMMAND
|
||||
je .wmcommand
|
||||
cmp [msg],WM_CLOSE
|
||||
je .wmclose
|
||||
xor eax,eax
|
||||
jmp .finish
|
||||
.wminitdialog:
|
||||
jmp .processed
|
||||
.wmcommand:
|
||||
cmp [wparam],BN_CLICKED shl 16 + ID_EXIT
|
||||
je .wmclose
|
||||
cmp [wparam],BN_CLICKED shl 16 + ID_SHOW
|
||||
je .show
|
||||
cmp [wparam],BN_CLICKED shl 16 + ID_HIDE
|
||||
jne .processed
|
||||
.hide:
|
||||
cominvk ShellTaskBar,HrInit
|
||||
cominvk ShellTaskBar,DeleteTab,[hwnd]
|
||||
jmp .processed
|
||||
.show:
|
||||
mov ebx,[ShellTaskBar]
|
||||
comcall ebx,ITaskBarList,HrInit
|
||||
comcall ebx,ITaskBarList,AddTab,[hwnd]
|
||||
comcall ebx,ITaskBarList,ActivateTab,[hwnd]
|
||||
jmp .processed
|
||||
.wmclose:
|
||||
invoke EndDialog,[hwnd],0
|
||||
.processed:
|
||||
mov eax,1
|
||||
.finish:
|
||||
pop edi esi ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
section '.data' data readable writeable
|
||||
|
||||
CLSID_TaskbarList GUID 56FDF344-FD6D-11D0-958A-006097C9A090
|
||||
IID_ITaskbarList GUID 56FDF342-FD6D-11D0-958A-006097C9A090
|
||||
|
||||
ShellTaskBar ITaskBarList
|
||||
|
||||
section '.idata' import data readable
|
||||
|
||||
library kernel,'KERNEL32.DLL',\
|
||||
user,'USER32.DLL',\
|
||||
ole,'OLE32.DLL'
|
||||
|
||||
import kernel,\
|
||||
GetModuleHandle,'GetModuleHandleA',\
|
||||
ExitProcess,'ExitProcess'
|
||||
|
||||
import user,\
|
||||
DialogBoxParam,'DialogBoxParamA',\
|
||||
EndDialog,'EndDialog'
|
||||
|
||||
import ole,\
|
||||
CoInitialize,'CoInitialize',\
|
||||
CoCreateInstance,'CoCreateInstance'
|
||||
|
||||
section '.rsrc' resource data readable
|
||||
|
||||
directory RT_DIALOG,dialogs
|
||||
|
||||
resource dialogs,\
|
||||
IDD_COMDEMO,LANG_ENGLISH+SUBLANG_DEFAULT,comdemo
|
||||
|
||||
dialog comdemo,'Taskbar item control',70,70,170,24,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME
|
||||
dialogitem 'BUTTON','Show',ID_SHOW,4,4,45,15,WS_VISIBLE+WS_TABSTOP
|
||||
dialogitem 'BUTTON','Hide',ID_HIDE,54,4,45,15,WS_VISIBLE+WS_TABSTOP
|
||||
dialogitem 'BUTTON','Exit',ID_EXIT,120,4,45,15,WS_VISIBLE+WS_TABSTOP
|
||||
enddialog
|
Reference in New Issue
Block a user