From f43aa4930ca78d52f95bf373aa3f89aca0a9d26c Mon Sep 17 00:00:00 2001 From: gho tik Date: Thu, 28 May 2015 12:40:51 -0400 Subject: [PATCH] v2_03_23_src Former-commit-id: cecbfca59b1066f5c3b745a7e8bdda9510acd68b --- Include/Vfw.h | 1144 +++++++++++++++++ build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/dxwnd.ini | 5 + build/exports/Age of Wanderer.dxw | 31 + build/exports/Alien Nations (GOG).dxw | 31 + build/exports/Alien Nations.dxw | 31 + build/exports/Atlantis - The Lost Tales.dxw | 31 + build/exports/Battle Realms.dxw | 6 +- .../Close Combat 2 a bridge too far.dxw | 31 + build/exports/Sports Car GT.dxw | 31 + build/exports/WarWind.dxw | 9 +- build/exports/ZPC Zero Population Count.dxw | 9 +- build/exports/dxwnd.ini | 4 +- build/readme-relnotes.txt | 5 + build/registry/dxwnd.close combat 2.REG | 28 + dll/advapi.cpp | 80 +- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 267776 -> 281600 bytes dll/gdi32.cpp | 2 +- dll/hexdump.cpp | 1 + dll/msvfw.cpp | 11 +- dll/user32.cpp | 44 + host/dxwndhost.aps | Bin 157012 -> 130052 bytes host/dxwndhost.rc | Bin 99716 -> 99424 bytes host/dxwndhost.vs2008.suo | Bin 208896 -> 209408 bytes host/host.aps | Bin 47496 -> 47496 bytes host/resource | Bin 34772 -> 34776 bytes 28 files changed, 1499 insertions(+), 43 deletions(-) create mode 100644 Include/Vfw.h create mode 100644 build/dxwnd.ini create mode 100644 build/exports/Age of Wanderer.dxw create mode 100644 build/exports/Alien Nations (GOG).dxw create mode 100644 build/exports/Alien Nations.dxw create mode 100644 build/exports/Atlantis - The Lost Tales.dxw create mode 100644 build/exports/Close Combat 2 a bridge too far.dxw create mode 100644 build/exports/Sports Car GT.dxw create mode 100644 build/registry/dxwnd.close combat 2.REG diff --git a/Include/Vfw.h b/Include/Vfw.h new file mode 100644 index 0000000..8759f90 --- /dev/null +++ b/Include/Vfw.h @@ -0,0 +1,1144 @@ +#ifndef _VFW_H +#define _VFW_H +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#ifndef _WINDOWS_H +#include +#endif +#ifndef _MMSYSTEM_H +#include +#endif +#if !defined (_OLE2_H) && !defined (__OBJC__) +#include +#endif + +#define VFWAPI WINAPI +#define VFWAPIV WINAPIV + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define ICERR_OK 0 +#define ICERR_DONTDRAW 1 +#define ICERR_NEWPALETTE 2 +#define ICERR_GOTOKEYFRAME 3 +#define ICERR_STOPDRAWING 4 +#define ICERR_UNSUPPORTED -1 +#define ICERR_BADFORMAT -2 +#define ICERR_MEMORY -3 +#define ICERR_INTERNAL -4 +#define ICERR_BADFLAGS -5 +#define ICERR_BADPARAM -6 +#define ICERR_BADSIZE -7 +#define ICERR_BADHANDLE -8 +#define ICERR_CANTUPDATE -9 +#define ICERR_ABORT -10 +#define ICERR_ERROR -100 +#define ICERR_BADBITDEPTH -200 +#define ICERR_BADIMAGESIZE -201 +#define ICERR_CUSTOM -400 +#define ICCOMPRESSFRAMES_PADDING 0x01 +#define ICM_USER (DRV_USER+0x0000) +#define ICM_RESERVED_LOW (DRV_USER+0x1000) +#define ICM_RESERVED_HIGH (DRV_USER+0x2000) +#define ICM_RESERVED ICM_RESERVED_LOW +#define ICM_GETSTATE (ICM_RESERVED+0) +#define ICM_SETSTATE (ICM_RESERVED+1) +#define ICM_GETINFO (ICM_RESERVED+2) +#define ICM_CONFIGURE (ICM_RESERVED+10) +#define ICM_ABOUT (ICM_RESERVED+11) +#define ICM_GETDEFAULTQUALITY (ICM_RESERVED+30) +#define ICM_GETQUALITY (ICM_RESERVED+31) +#define ICM_SETQUALITY (ICM_RESERVED+32) +#define ICM_SET (ICM_RESERVED+40) +#define ICM_GET (ICM_RESERVED+41) +#define ICM_FRAMERATE mmioFOURCC('F','r','m','R') +#define ICM_KEYFRAMERATE mmioFOURCC('K','e','y','R') +#define ICM_COMPRESS_GET_FORMAT (ICM_USER+4) +#define ICM_COMPRESS_GET_SIZE (ICM_USER+5) +#define ICM_COMPRESS_QUERY (ICM_USER+6) +#define ICM_COMPRESS_BEGIN (ICM_USER+7) +#define ICM_COMPRESS (ICM_USER+8) +#define ICM_COMPRESS_END (ICM_USER+9) +#define ICM_DECOMPRESS_GET_FORMAT (ICM_USER+10) +#define ICM_DECOMPRESS_QUERY (ICM_USER+11) +#define ICM_DECOMPRESS_BEGIN (ICM_USER+12) +#define ICM_DECOMPRESS (ICM_USER+13) +#define ICM_DECOMPRESS_END (ICM_USER+14) +#define ICM_DECOMPRESS_SET_PALETTE (ICM_USER+29) +#define ICM_DECOMPRESS_GET_PALETTE (ICM_USER+30) +#define ICM_DRAW_QUERY (ICM_USER+31) +#define ICM_DRAW_BEGIN (ICM_USER+15) +#define ICM_DRAW_GET_PALETTE (ICM_USER+16) +#define ICM_DRAW_START (ICM_USER+18) +#define ICM_DRAW_STOP (ICM_USER+19) +#define ICM_DRAW_END (ICM_USER+21) +#define ICM_DRAW_GETTIME (ICM_USER+32) +#define ICM_DRAW (ICM_USER+33) +#define ICM_DRAW_WINDOW (ICM_USER+34) +#define ICM_DRAW_SETTIME (ICM_USER+35) +#define ICM_DRAW_REALIZE (ICM_USER+36) +#define ICM_DRAW_FLUSH (ICM_USER+37) +#define ICM_DRAW_RENDERBUFFER (ICM_USER+38) +#define ICM_DRAW_START_PLAY (ICM_USER+39) +#define ICM_DRAW_STOP_PLAY (ICM_USER+40) +#define ICM_DRAW_SUGGESTFORMAT (ICM_USER+50) +#define ICM_DRAW_CHANGEPALETTE (ICM_USER+51) +#define ICM_GETBUFFERSWANTED (ICM_USER+41) +#define ICM_GETDEFAULTKEYFRAMERATE (ICM_USER+42) +#define ICM_DECOMPRESSEX_BEGIN (ICM_USER+60) +#define ICM_DECOMPRESSEX_QUERY (ICM_USER+61) +#define ICM_DECOMPRESSEX (ICM_USER+62) +#define ICM_DECOMPRESSEX_END (ICM_USER+63) +#define ICM_COMPRESS_FRAMES_INFO (ICM_USER+70) +#define ICM_SET_STATUS_PROC (ICM_USER+72) +#define ICMF_CONFIGURE_QUERY 0x01 +#define ICCOMPRESS_KEYFRAME 0x01 +#define ICSTATUS_START 0 +#define ICSTATUS_STATUS 1 +#define ICSTATUS_END 2 +#define ICSTATUS_ERROR 3 +#define ICSTATUS_YIELD 4 +#define ICMODE_COMPRESS 1 +#define ICMODE_DECOMPRESS 2 +#define ICMODE_FASTDECOMPRESS 3 +#define ICMODE_QUERY 4 +#define ICMODE_FASTCOMPRESS 5 +#define ICMODE_DRAW 8 +#define ICQUALITY_LOW 0 +#define ICQUALITY_HIGH 10000 +#define ICQUALITY_DEFAULT -1 +#define VIDCF_QUALITY 0x01 +#define VIDCF_CRUNCH 0x02 +#define VIDCF_TEMPORAL 0x04 +#define VIDCF_COMPRESSFRAMES 0x08 +#define VIDCF_DRAW 0x10 +#define VIDCF_FASTTEMPORALC 0x20 +#define VIDCF_FASTTEMPORALD 0x80 +#define VIDCF_QUALITYTIME 0x40 +#define VIDCF_FASTTEMPORAL (VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD) +#define ICMF_ABOUT_QUERY 0x01 +#define ICDECOMPRESS_HURRYUP 0x80000000 +#define ICDECOMPRESS_UPDATE 0x40000000 +#define ICDECOMPRESS_PREROLL 0x20000000 +#define ICDECOMPRESS_NULLFRAME 0x10000000 +#define ICDECOMPRESS_NOTKEYFRAME 0x8000000 +#define ICDRAW_QUERY 0x01L +#define ICDRAW_FULLSCREEN 0x02L +#define ICDRAW_HDC 0x04L +#define ICDRAW_ANIMATE 0x08L +#define ICDRAW_CONTINUE 0x10L +#define ICDRAW_MEMORYDC 0x20L +#define ICDRAW_UPDATING 0x40L +#define ICDRAW_RENDER 0x80L +#define ICDRAW_BUFFER 0x100L +#define ICINSTALL_UNICODE 0x8000 +#define ICINSTALL_FUNCTION 0x01 +#define ICINSTALL_DRIVER 0x02 +#define ICINSTALL_HDRV 0x04 +#define ICINSTALL_DRIVERW 0x8002 +#define ICDRAW_HURRYUP 0x80000000L +#define ICDRAW_UPDATE 0x40000000L +#define ICDRAW_PREROLL 0x20000000L +#define ICDRAW_NULLFRAME 0x10000000L +#define ICDRAW_NOTKEYFRAME 0x8000000L +#define ICMF_COMPVARS_VALID 0x01 +#define ICMF_CHOOSE_KEYFRAME 0x01 +#define ICMF_CHOOSE_DATARATE 0x02 +#define ICMF_CHOOSE_PREVIEW 0x04 +#define ICMF_CHOOSE_ALLCOMPRESSORS 0x08 +#define ICTYPE_VIDEO mmioFOURCC('v','i','d','c') +#define ICTYPE_AUDIO mmioFOURCC('a','u','d','c') +#define formtypeAVI mmioFOURCC('A','V','I',' ') +#define listtypeAVIHEADER mmioFOURCC('h','d','r','l') +#define ckidAVIMAINHDR mmioFOURCC('a','v','i','h') +#define listtypeSTREAMHEADER mmioFOURCC('s','t','r','l') +#define ckidSTREAMHEADER mmioFOURCC('s','t','r','h') +#define ckidSTREAMFORMAT mmioFOURCC('s','t','r','f') +#define ckidSTREAMHANDLERDATA mmioFOURCC('s','t','r','d') +#define ckidSTREAMNAME mmioFOURCC('s','t','r','n') +#define listtypeAVIMOVIE mmioFOURCC('m','o','v','i') +#define listtypeAVIRECORD mmioFOURCC('r','e','c',' ') +#define ckidAVINEWINDEX mmioFOURCC('i', 'd', 'x', '1') +#define streamtypeANY 0UL +#define streamtypeVIDEO mmioFOURCC('v','i','d','s') +#define streamtypeAUDIO mmioFOURCC('a','u','d','s') +#define streamtypeMIDI mmioFOURCC('m','i','d','s') +#define streamtypeTEXT mmioFOURCC('t','x','t','s') +#define cktypeDIBbits aviTWOCC('d','b') +#define cktypeDIBcompressed aviTWOCC('d','c') +#define cktypePALchange aviTWOCC('p','c') +#define cktypeWAVEbytes aviTWOCC('w','b') +#define ckidAVIPADDING mmioFOURCC('J','U','N','K') +#define FromHex(n) (((n)>='A')?((n)+10-'A'):((n)-'0')) +#define StreamFromFOURCC(fcc) ((WORD)((FromHex(LOBYTE(LOWORD(fcc)))<<4)+(FromHex(HIBYTE(LOWORD(fcc)))))) +#define TWOCCFromFOURCC(fcc) HIWORD(fcc) +#define ToHex(n) ((BYTE)(((n)>9)?((n)-10+'A'):((n)+'0'))) +#define MAKEAVICKID(tcc, stream) MAKELONG((ToHex((stream)&0x0f)<<8)|(ToHex(((stream)&0xf0)>>4)),tcc) +#define AVIF_HASINDEX 0x10 +#define AVIF_MUSTUSEINDEX 0x20 +#define AVIF_ISINTERLEAVED 0x100 +#define AVIF_TRUSTCKTYPE 0x800 +#define AVIF_WASCAPTUREFILE 0x10000 +#define AVIF_COPYRIGHTED 0x20000 +#define AVI_HEADERSIZE 2048 +#define AVISF_DISABLED 0x01 +#define AVISF_VIDEO_PALCHANGES 0x10000 +#define AVIIF_LIST 0x01 +#define AVIIF_TWOCC 0x02 +#define AVIIF_KEYFRAME 0x10 +#define AVIIF_NOTIME 0x100 +#define AVIIF_COMPUSE 0xfff0000 +#define AVIIF_KEYFRAME 0x10 +#define AVIGETFRAMEF_BESTDISPLAYFMT 1 +#define AVISTREAMINFO_DISABLED 0x01 +#define AVISTREAMINFO_FORMATCHANGES 0x10000 +#define AVIFILEINFO_HASINDEX 0x10 +#define AVIFILEINFO_MUSTUSEINDEX 0x20 +#define AVIFILEINFO_ISINTERLEAVED 0x100 +#define AVIFILEINFO_TRUSTCKTYPE 0x800 +#define AVIFILEINFO_WASCAPTUREFILE 0x10000 +#define AVIFILEINFO_COPYRIGHTED 0x20000 +#define AVIFILECAPS_CANREAD 0x01 +#define AVIFILECAPS_CANWRITE 0x02 +#define AVIFILECAPS_ALLKEYFRAMES 0x10 +#define AVIFILECAPS_NOCOMPRESSION 0x20 +#define AVICOMPRESSF_INTERLEAVE 0x01 +#define AVICOMPRESSF_DATARATE 0x02 +#define AVICOMPRESSF_KEYFRAMES 0x04 +#define AVICOMPRESSF_VALID 0x08 +#define FIND_DIR 0x0000000fL +#define FIND_NEXT 0x00000001L +#define FIND_PREV 0x00000004L +#define FIND_FROM_START 0x00000008L +#define FIND_TYPE 0x000000f0L +#define FIND_KEY 0x00000010L +#define FIND_ANY 0x00000020L +#define FIND_FORMAT 0x00000040L +#define FIND_RET 0x0000f000L +#define FIND_POS 0x00000000L +#define FIND_LENGTH 0x00001000L +#define FIND_OFFSET 0x00002000L +#define FIND_SIZE 0x00003000L +#define FIND_INDEX 0x00004000L +#define AVIERR_OK 0 +#define MAKE_AVIERR(e) MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+e) +#define AVIERR_UNSUPPORTED MAKE_AVIERR(101) +#define AVIERR_BADFORMAT MAKE_AVIERR(102) +#define AVIERR_MEMORY MAKE_AVIERR(103) +#define AVIERR_INTERNAL MAKE_AVIERR(104) +#define AVIERR_BADFLAGS MAKE_AVIERR(105) +#define AVIERR_BADPARAM MAKE_AVIERR(106) +#define AVIERR_BADSIZE MAKE_AVIERR(107) +#define AVIERR_BADHANDLE MAKE_AVIERR(108) +#define AVIERR_FILEREAD MAKE_AVIERR(109) +#define AVIERR_FILEWRITE MAKE_AVIERR(110) +#define AVIERR_FILEOPEN MAKE_AVIERR(111) +#define AVIERR_COMPRESSOR MAKE_AVIERR(112) +#define AVIERR_NOCOMPRESSOR MAKE_AVIERR(113) +#define AVIERR_READONLY MAKE_AVIERR(114) +#define AVIERR_NODATA MAKE_AVIERR(115) +#define AVIERR_BUFFERTOOSMALL MAKE_AVIERR(116) +#define AVIERR_CANTCOMPRESS MAKE_AVIERR(117) +#define AVIERR_USERABORT MAKE_AVIERR(198) +#define AVIERR_ERROR MAKE_AVIERR(199) +#define MCIWNDOPENF_NEW 0x0001 +#define MCIWNDF_NOAUTOSIZEWINDOW 0x0001 +#define MCIWNDF_NOPLAYBAR 0x0002 +#define MCIWNDF_NOAUTOSIZEMOVIE 0x0004 +#define MCIWNDF_NOMENU 0x0008 +#define MCIWNDF_SHOWNAME 0x0010 +#define MCIWNDF_SHOWPOS 0x0020 +#define MCIWNDF_SHOWMODE 0x0040 +#define MCIWNDF_SHOWALL 0x0070 +#define MCIWNDF_NOTIFYMODE 0x0100 +#define MCIWNDF_NOTIFYPOS 0x0200 +#define MCIWNDF_NOTIFYSIZE 0x0400 +#define MCIWNDF_NOTIFYERROR 0x1000 +#define MCIWNDF_NOTIFYALL 0x1F00 +#define MCIWNDF_NOTIFYANSI 0x0080 +#define MCIWNDF_NOTIFYMEDIAA 0x0880 +#define MCIWNDF_NOTIFYMEDIAW 0x0800 +#define MCIWNDF_RECORD 0x2000 +#define MCIWNDF_NOERRORDLG 0x4000 +#define MCIWNDF_NOOPEN 0x8000 +#define MCIWNDM_GETDEVICEID (WM_USER + 100) +#define MCIWNDM_GETSTART (WM_USER + 103) +#define MCIWNDM_GETLENGTH (WM_USER + 104) +#define MCIWNDM_GETEND (WM_USER + 105) +#define MCIWNDM_EJECT (WM_USER + 107) +#define MCIWNDM_SETZOOM (WM_USER + 108) +#define MCIWNDM_GETZOOM (WM_USER + 109) +#define MCIWNDM_SETVOLUME (WM_USER + 110) +#define MCIWNDM_GETVOLUME (WM_USER + 111) +#define MCIWNDM_SETSPEED (WM_USER + 112) +#define MCIWNDM_GETSPEED (WM_USER + 113) +#define MCIWNDM_SETREPEAT (WM_USER + 114) +#define MCIWNDM_GETREPEAT (WM_USER + 115) +#define MCIWNDM_REALIZE (WM_USER + 118) +#define MCIWNDM_VALIDATEMEDIA (WM_USER + 121) +#define MCIWNDM_PLAYFROM (WM_USER + 122) +#define MCIWNDM_PLAYTO (WM_USER + 123) +#define MCIWNDM_GETPALETTE (WM_USER + 126) +#define MCIWNDM_SETPALETTE (WM_USER + 127) +#define MCIWNDM_SETTIMERS (WM_USER + 129) +#define MCIWNDM_SETACTIVETIMER (WM_USER + 130) +#define MCIWNDM_SETINACTIVETIMER (WM_USER + 131) +#define MCIWNDM_GETACTIVETIMER (WM_USER + 132) +#define MCIWNDM_GETINACTIVETIMER (WM_USER + 133) +#define MCIWNDM_CHANGESTYLES (WM_USER + 135) +#define MCIWNDM_GETSTYLES (WM_USER + 136) +#define MCIWNDM_GETALIAS (WM_USER + 137) +#define MCIWNDM_PLAYREVERSE (WM_USER + 139) +#define MCIWNDM_GET_SOURCE (WM_USER + 140) +#define MCIWNDM_PUT_SOURCE (WM_USER + 141) +#define MCIWNDM_GET_DEST (WM_USER + 142) +#define MCIWNDM_PUT_DEST (WM_USER + 143) +#define MCIWNDM_CAN_PLAY (WM_USER + 144) +#define MCIWNDM_CAN_WINDOW (WM_USER + 145) +#define MCIWNDM_CAN_RECORD (WM_USER + 146) +#define MCIWNDM_CAN_SAVE (WM_USER + 147) +#define MCIWNDM_CAN_EJECT (WM_USER + 148) +#define MCIWNDM_CAN_CONFIG (WM_USER + 149) +#define MCIWNDM_PALETTEKICK (WM_USER + 150) +#define MCIWNDM_OPENINTERFACE (WM_USER + 151) +#define MCIWNDM_SETOWNER (WM_USER + 152) +#define MCIWNDM_SENDSTRINGA (WM_USER + 101) +#define MCIWNDM_GETPOSITIONA (WM_USER + 102) +#define MCIWNDM_GETMODEA (WM_USER + 106) +#define MCIWNDM_SETTIMEFORMATA (WM_USER + 119) +#define MCIWNDM_GETTIMEFORMATA (WM_USER + 120) +#define MCIWNDM_GETFILENAMEA (WM_USER + 124) +#define MCIWNDM_GETDEVICEA (WM_USER + 125) +#define MCIWNDM_GETERRORA (WM_USER + 128) +#define MCIWNDM_NEWA (WM_USER + 134) +#define MCIWNDM_RETURNSTRINGA (WM_USER + 138) +#define MCIWNDM_OPENA (WM_USER + 153) +#define MCIWNDM_SENDSTRINGW (WM_USER + 201) +#define MCIWNDM_GETPOSITIONW (WM_USER + 202) +#define MCIWNDM_GETMODEW (WM_USER + 206) +#define MCIWNDM_SETTIMEFORMATW (WM_USER + 219) +#define MCIWNDM_GETTIMEFORMATW (WM_USER + 220) +#define MCIWNDM_GETFILENAMEW (WM_USER + 224) +#define MCIWNDM_GETDEVICEW (WM_USER + 225) +#define MCIWNDM_GETERRORW (WM_USER + 228) +#define MCIWNDM_NEWW (WM_USER + 234) +#define MCIWNDM_RETURNSTRINGW (WM_USER + 238) +#define MCIWNDM_OPENW (WM_USER + 252) +#define MCIWNDM_NOTIFYMODE (WM_USER + 200) +#define MCIWNDM_NOTIFYPOS (WM_USER + 201) +#define MCIWNDM_NOTIFYSIZE (WM_USER + 202) +#define MCIWNDM_NOTIFYMEDIA (WM_USER + 203) +#define MCIWNDM_NOTIFYERROR (WM_USER + 205) +#define MCIWND_START -1 +#define MCIWND_END -2 +#define DDF_UPDATE 0x02 +#define DDF_SAME_HDC 0x04 +#define DDF_SAME_DRAW 0x08 +#define DDF_DONTDRAW 0x10 +#define DDF_ANIMATE 0x20 +#define DDF_BUFFER 0x40 +#define DDF_JUSTDRAWIT 0x80 +#define DDF_FULLSCREEN 0x100 +#define DDF_BACKGROUNDPAL 0x200 +#define DDF_NOTKEYFRAME 0x400 +#define DDF_HURRYUP 0x800 +#define DDF_HALFTONE 0x1000 +#define DDF_PREROLL DDF_DONTDRAW +#define DDF_SAME_DIB DDF_SAME_DRAW +#define DDF_SAME_SIZE DDF_SAME_DRAW +#define PD_CAN_DRAW_DIB 0x01 +#define PD_CAN_STRETCHDIB 0x02 +#define PD_STRETCHDIB_1_1_OK 0x04 +#define PD_STRETCHDIB_1_2_OK 0x08 +#define PD_STRETCHDIB_1_N_OK 0x10 +#ifndef mmioFOURCC +#define mmioFOURCC(c0,c1,c2,c3) ((DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)|((DWORD)(BYTE)(c2)<<16)|((DWORD)(BYTE)(c3)<<24)) +#endif +#ifndef aviTWOCC +#define aviTWOCC(ch0,ch1) ((WORD)(BYTE)(ch0)|((WORD)(BYTE)(ch1)<<8)) +#endif + +#ifndef RC_INVOKED +DECLARE_HANDLE(HIC); +DECLARE_HANDLE(HDRAWDIB); +typedef WORD TWOCC; +typedef BOOL (CALLBACK *AVISAVECALLBACK)(INT); +typedef struct { + DWORD dwSize; + DWORD fccType; + DWORD fccHandler; + DWORD dwVersion; + DWORD dwFlags; + LRESULT dwError; + LPVOID pV1Reserved; + LPVOID pV2Reserved; + DWORD dnDevNode; +} ICOPEN,*LPICOPEN; +typedef struct { + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiOutput; + LPVOID lpOutput; + LPBITMAPINFOHEADER lpbiInput; + LPVOID lpInput; + LPDWORD lpckid; + LPDWORD lpdwFlags; + LONG lFrameNum; + DWORD dwFrameSize; + DWORD dwQuality; + LPBITMAPINFOHEADER lpbiPrev; + LPVOID lpPrev; +} ICCOMPRESS; +typedef struct { + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiOutput; + LPARAM lOutput; + LPBITMAPINFOHEADER lpbiInput; + LPARAM lInput; + LONG lStartFrame; + LONG lFrameCount; + LONG lQuality; + LONG lDataRate; + LONG lKeyRate; + DWORD dwRate; + DWORD dwScale; + DWORD dwOverheadPerFrame; + DWORD dwReserved2; + LONG (CALLBACK *GetData)(LPARAM,LONG,LPVOID,LONG); + LONG (CALLBACK *PutData)(LPARAM,LONG,LPVOID,LONG); +} ICCOMPRESSFRAMES; +typedef struct { + DWORD dwFlags; + LPARAM lParam; + LONG (CALLBACK *Status)(LPARAM,UINT,LONG); +} ICSETSTATUSPROC; +typedef struct { + DWORD dwSize; + DWORD fccType; + DWORD fccHandler; + DWORD dwFlags; + DWORD dwVersion; + DWORD dwVersionICM; + WCHAR szName[16]; + WCHAR szDescription[128]; + WCHAR szDriver[128]; +} ICINFO; +typedef struct { + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiInput; + LPVOID lpInput; + LPBITMAPINFOHEADER lpbiOutput; + LPVOID lpOutput; + DWORD ckid; +} ICDECOMPRESS; +typedef struct { + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiSrc; + LPVOID lpSrc; + LPBITMAPINFOHEADER lpbiDst; + LPVOID lpDst; + INT xDst; + INT yDst; + INT dxDst; + INT dyDst; + INT xSrc; + INT ySrc; + INT dxSrc; + INT dySrc; +} ICDECOMPRESSEX; +typedef struct { + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiIn; + LPBITMAPINFOHEADER lpbiSuggest; + INT dxSrc; + INT dySrc; + INT dxDst; + INT dyDst; + HIC hicDecompressor; +} ICDRAWSUGGEST; +typedef struct { + DWORD dwFlags; + INT iStart; + INT iLen; + LPPALETTEENTRY lppe; +} ICPALETTE; +typedef struct { + DWORD dwFlags; + HPALETTE hpal; + HWND hwnd; + HDC hdc; + INT xDst; + INT yDst; + INT dxDst; + INT dyDst; + LPBITMAPINFOHEADER lpbi; + INT xSrc; + INT ySrc; + INT dxSrc; + INT dySrc; + DWORD dwRate; + DWORD dwScale; +} ICDRAWBEGIN; +typedef struct { + DWORD dwFlags; + LPVOID lpFormat; + LPVOID lpData; + DWORD cbData; + LONG lTime; +} ICDRAW; +typedef struct { + LONG cbSize; + DWORD dwFlags; + HIC hic; + DWORD fccType; + DWORD fccHandler; + LPBITMAPINFO lpbiIn; + LPBITMAPINFO lpbiOut; + LPVOID lpBitsOut; + LPVOID lpBitsPrev; + LONG lFrame; + LONG lKey; + LONG lDataRate; + LONG lQ; + LONG lKeyCount; + LPVOID lpState; + LONG cbState; +} COMPVARS, *PCOMPVARS; +typedef struct _MainAVIHeader +{ + DWORD dwMicroSecPerFrame; + DWORD dwMaxBytesPerSec; + DWORD dwPaddingGranularity; + DWORD dwFlags; + DWORD dwTotalFrames; + DWORD dwInitialFrames; + DWORD dwStreams; + DWORD dwSuggestedBufferSize; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwReserved[4]; +} MainAVIHeader; +typedef struct { + FOURCC fccType; + FOURCC fccHandler; + DWORD dwFlags; + WORD wPriority; + WORD wLanguage; + DWORD dwInitialFrames; + DWORD dwScale; + DWORD dwRate; + DWORD dwStart; + DWORD dwLength; + DWORD dwSuggestedBufferSize; + DWORD dwQuality; + DWORD dwSampleSize; + RECT rcFrame; +} AVIStreamHeader; +typedef struct _AVIINDEXENTRY { + DWORD ckid; + DWORD dwFlags; + DWORD dwChunkOffset; + DWORD dwChunkLength; +} AVIINDEXENTRY; +typedef struct _AVIPALCHANGE { + BYTE bFirstEntry; + BYTE bNumEntries; + WORD wFlags; + PALETTEENTRY peNew[1]; +} AVIPALCHANGE; +typedef struct _AVISTREAMINFOA { + DWORD fccType; + DWORD fccHandler; + DWORD dwFlags; + DWORD dwCaps; + WORD wPriority; + WORD wLanguage; + DWORD dwScale; + DWORD dwRate; + DWORD dwStart; + DWORD dwLength; + DWORD dwInitialFrames; + DWORD dwSuggestedBufferSize; + DWORD dwQuality; + DWORD dwSampleSize; + RECT rcFrame; + DWORD dwEditCount; + DWORD dwFormatChangeCount; + CHAR szName[64]; +} AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA; +typedef struct _AVISTREAMINFOW { + DWORD fccType; + DWORD fccHandler; + DWORD dwFlags; + DWORD dwCaps; + WORD wPriority; + WORD wLanguage; + DWORD dwScale; + DWORD dwRate; + DWORD dwStart; + DWORD dwLength; + DWORD dwInitialFrames; + DWORD dwSuggestedBufferSize; + DWORD dwQuality; + DWORD dwSampleSize; + RECT rcFrame; + DWORD dwEditCount; + DWORD dwFormatChangeCount; + WCHAR szName[64]; +} AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW; +typedef struct _AVIFILEINFOW { + DWORD dwMaxBytesPerSec; + DWORD dwFlags; + DWORD dwCaps; + DWORD dwStreams; + DWORD dwSuggestedBufferSize; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwScale; + DWORD dwRate; + DWORD dwLength; + DWORD dwEditCount; + WCHAR szFileType[64]; +} AVIFILEINFOW, *LPAVIFILEINFOW, *PAVIFILEINFOW; +typedef struct _AVIFILEINFOA { + DWORD dwMaxBytesPerSec; + DWORD dwFlags; + DWORD dwCaps; + DWORD dwStreams; + DWORD dwSuggestedBufferSize; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwScale; + DWORD dwRate; + DWORD dwLength; + DWORD dwEditCount; + CHAR szFileType[64]; +} AVIFILEINFOA, *LPAVIFILEINFOA, *PAVIFILEINFOA; +typedef struct _AVICOMPRESSOPTIONS { + DWORD fccType; + DWORD fccHandler; + DWORD dwKeyFrameEvery; + DWORD dwQuality; + DWORD dwBytesPerSecond; + DWORD dwFlags; + LPVOID lpFormat; + DWORD cbFormat; + LPVOID lpParms; + DWORD cbParms; + DWORD dwInterleaveEvery; +} AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS; + +#if !defined (__OBJC__) +#define DEFINE_AVIGUID(name,l,w1,w2) DEFINE_GUID(name,l,w1,w2,0xC0,0,0,0,0,0,0,0x46) +DEFINE_AVIGUID(IID_IAVIFile,0x00020020,0,0); +DEFINE_AVIGUID(IID_IAVIStream,0x00020021,0,0); +DEFINE_AVIGUID(IID_IAVIStreaming,0x00020022,0,0); +DEFINE_AVIGUID(IID_IGetFrame,0x00020023,0,0); +DEFINE_AVIGUID(IID_IAVIEditStream,0x00020024,0,0); +DEFINE_AVIGUID(CLSID_AVIFile,0x00020000,0,0); + +#undef INTERFACE +#define INTERFACE IAVIStream +DECLARE_INTERFACE_(IAVIStream, IUnknown) +{ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD(Create)(THIS_ LPARAM,LPARAM) PURE; + STDMETHOD(Info)(THIS_ AVISTREAMINFOW*,LONG) PURE; + STDMETHOD_(LONG,FindSample)(THIS_ LONG,LONG) PURE; + STDMETHOD(ReadFormat)(THIS_ LONG,LPVOID,LONG*) PURE; + STDMETHOD(SetFormat)(THIS_ LONG,LPVOID,LONG) PURE; + STDMETHOD(Read)(THIS_ LONG,LONG,LPVOID,LONG,LONG*,LONG*) PURE; + STDMETHOD(Write)(THIS_ LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*) PURE; + STDMETHOD(Delete)(THIS_ LONG,LONG) PURE; + STDMETHOD(ReadData)(THIS_ DWORD,LPVOID,LONG*) PURE; + STDMETHOD(WriteData)(THIS_ DWORD,LPVOID,LONG) PURE; + STDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW*,LONG) PURE; +}; +typedef IAVIStream *PAVISTREAM; + +#undef INTERFACE +#define INTERFACE IAVIStreaming +DECLARE_INTERFACE_(IAVIStreaming, IUnknown) +{ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD(Begin)(THIS_ LONG,LONG,LONG) PURE; + STDMETHOD(End)(THIS) PURE; +}; +typedef IAVIStreaming *PAVISTREAMING; + +#undef INTERFACE +#define INTERFACE IAVIEditStream +DECLARE_INTERFACE_(IAVIEditStream, IUnknown) +{ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD(Cut)(THIS_ LONG*,LONG*,PAVISTREAM*) PURE; + STDMETHOD(Copy)(THIS_ LONG*,LONG*,PAVISTREAM*) PURE; + STDMETHOD(Paste)(THIS_ LONG*,LONG*,PAVISTREAM,LONG,LONG) PURE; + STDMETHOD(Clone)(THIS_ PAVISTREAM*) PURE; + STDMETHOD(SetInfo)(THIS_ LPAVISTREAMINFOW,LONG) PURE; +}; +typedef IAVIEditStream *PAVIEDITSTREAM; + +#undef INTERFACE +#define INTERFACE IAVIFile +DECLARE_INTERFACE_(IAVIFile, IUnknown) +{ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD(Info)(THIS_ AVIFILEINFOW*,LONG) PURE; + STDMETHOD(GetStream)(THIS_ PAVISTREAM*,DWORD,LONG) PURE; + STDMETHOD(CreateStream)(THIS_ PAVISTREAM*,AVISTREAMINFOW*) PURE; + STDMETHOD(WriteData)(THIS_ DWORD,LPVOID,LONG) PURE; + STDMETHOD(ReadData)(THIS_ DWORD,LPVOID,LONG*) PURE; + STDMETHOD(EndRecord)(THIS) PURE; + STDMETHOD(DeleteStream)(THIS_ DWORD,LONG) PURE; +}; +typedef IAVIFile *PAVIFILE; + +#undef INTERFACE +#define INTERFACE IGetFrame +DECLARE_INTERFACE_(IGetFrame, IUnknown) +{ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD_(LPVOID,GetFrame)(THIS_ LONG) PURE; + STDMETHOD(Begin)(THIS_ LONG,LONG,LONG) PURE; + STDMETHOD(End)(THIS) PURE; + STDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER,LPVOID,INT,INT,INT,INT) PURE; +}; +typedef IGetFrame *PGETFRAME; +#endif /* !defined (__OBJC__) */ + +DWORD VFWAPI VideoForWindowsVersion(VOID); +LONG VFWAPI InitVFW(VOID); +LONG VFWAPI TermVFW(VOID); +DWORD VFWAPIV ICCompress(HIC,DWORD,LPBITMAPINFOHEADER,LPVOID,LPBITMAPINFOHEADER,LPVOID,LPDWORD,LPDWORD,LONG,DWORD,DWORD,LPBITMAPINFOHEADER,LPVOID); +DWORD VFWAPIV ICDecompress(HIC,DWORD,LPBITMAPINFOHEADER,LPVOID,LPBITMAPINFOHEADER,LPVOID); +LRESULT VFWAPI ICSendMessage(HIC,UINT,DWORD,DWORD); +HANDLE VFWAPI ICImageCompress(HIC,UINT,LPBITMAPINFO,LPVOID,LPBITMAPINFO,LONG,LONG*); +HANDLE VFWAPI ICImageDecompress(HIC,UINT,LPBITMAPINFO,LPVOID,LPBITMAPINFO); +BOOL VFWAPI ICInfo(DWORD,DWORD,ICINFO*); +BOOL VFWAPI ICInstall(DWORD,DWORD,LPARAM,LPSTR,UINT); +BOOL VFWAPI ICRemove(DWORD,DWORD,UINT); +LRESULT VFWAPI ICGetInfo(HIC,ICINFO*,DWORD); +HIC VFWAPI ICOpen(DWORD,DWORD,UINT); +HIC VFWAPI ICOpenFunction(DWORD,DWORD,UINT,FARPROC); +LRESULT VFWAPI ICClose(HIC hic); +HIC VFWAPI ICLocate(DWORD,DWORD,LPBITMAPINFOHEADER,LPBITMAPINFOHEADER,WORD); +HIC VFWAPI ICGetDisplayFormat(HIC,LPBITMAPINFOHEADER,LPBITMAPINFOHEADER,INT,INT,INT); +DWORD VFWAPIV ICDrawBegin(HIC,DWORD,HPALETTE,HWND,HDC,INT,INT,INT,INT,LPBITMAPINFOHEADER,INT,INT,INT,INT,DWORD,DWORD); +DWORD VFWAPIV ICDraw(HIC,DWORD,LPVOID,LPVOID,DWORD,LONG); +BOOL VFWAPI ICCompressorChoose(HWND,UINT,LPVOID,LPVOID,PCOMPVARS,LPSTR); +BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS,LPBITMAPINFO); +void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS); +LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS,UINT,LPVOID,BOOL*,LONG*); +void VFWAPI ICCompressorFree(PCOMPVARS); +#if !defined (__OBJC__) +ULONG WINAPI AVIStreamAddRef(PAVISTREAM); +ULONG WINAPI AVIStreamRelease(PAVISTREAM); +HRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*); +HRESULT WINAPI AVIStreamInfoA(PAVISTREAM,AVISTREAMINFOA*,LONG); +HRESULT WINAPI AVIStreamInfoW(PAVISTREAM,AVISTREAMINFOW*,LONG); +HRESULT WINAPI AVIStreamFindSample(PAVISTREAM,LONG,DWORD); +HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM,LONG,LPVOID,LONG*); +HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM,LONG,LPVOID,LONG); +HRESULT WINAPI AVIStreamRead(PAVISTREAM,LONG,LONG,LPVOID,LONG,LONG*,LONG*); +HRESULT WINAPI AVIStreamWrite(PAVISTREAM,LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*); +HRESULT WINAPI AVIStreamReadData(PAVISTREAM,DWORD,LPVOID,LONG*); +HRESULT WINAPI AVIStreamWriteData(PAVISTREAM,DWORD,LPVOID,LONG); +PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM,LPBITMAPINFOHEADER); +LPVOID WINAPI AVIStreamGetFrame(PGETFRAME,LONG); +HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME); +HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*,PAVISTREAM,AVICOMPRESSOPTIONS*,CLSID*); +HRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE*,INT,PAVISTREAM*); +HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM*,LPCSTR,DWORD,LONG,UINT,CLSID*); +HRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM*,LPCWSTR,DWORD,LONG,UINT,CLSID*); +HRESULT WINAPI AVIBuildFilterA(LPSTR,LONG,BOOL); +HRESULT WINAPI AVIBuildFilterW(LPWSTR,LONG,BOOL); +BOOL WINAPI AVISaveOptions(HWND,UINT,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*); +HRESULT WINAPI AVISaveOptionsFree(INT,LPAVICOMPRESSOPTIONS*); +HRESULT WINAPI AVISaveVA(LPCSTR,CLSID*,AVISAVECALLBACK,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*); +HRESULT WINAPI AVISaveVW(LPCWSTR,CLSID*,AVISAVECALLBACK,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*); +LONG WINAPI AVIStreamStart(PAVISTREAM); +LONG WINAPI AVIStreamLength(PAVISTREAM); +LONG WINAPI AVIStreamSampleToTime(PAVISTREAM,LONG); +LONG WINAPI AVIStreamTimeToSample(PAVISTREAM,LONG); +HRESULT WINAPI CreateEditableStream(PAVISTREAM*,PAVISTREAM); +HRESULT WINAPI EditStreamClone(PAVISTREAM,PAVISTREAM*); +HRESULT WINAPI EditStreamCopy(PAVISTREAM,LONG*,LONG*,PAVISTREAM*); +HRESULT WINAPI EditStreamCut(PAVISTREAM,LONG*,LONG*,PAVISTREAM*); +HRESULT WINAPI EditStreamPaste(PAVISTREAM,LONG*,LONG*,PAVISTREAM,LONG,LONG); +HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM,LPAVISTREAMINFOA,LONG); +HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM,LPAVISTREAMINFOW,LONG); +HRESULT WINAPI EditStreamSetNameA(PAVISTREAM,LPCSTR); +HRESULT WINAPI EditStreamSetNameW(PAVISTREAM,LPCWSTR); +HRESULT WINAPI CreateEditableStream(PAVISTREAM*,PAVISTREAM); +HRESULT WINAPI EditStreamClone(PAVISTREAM,PAVISTREAM*); +HRESULT WINAPI EditStreamCopy(PAVISTREAM,LONG*,LONG*,PAVISTREAM*); +HRESULT WINAPI EditStreamCut(PAVISTREAM,LONG*,LONG*,PAVISTREAM*); +HRESULT WINAPI EditStreamPaste(PAVISTREAM,LONG*,LONG*,PAVISTREAM,LONG,LONG); +HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM,LPAVISTREAMINFOA,LONG); +HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM,LPAVISTREAMINFOW,LONG); +HRESULT WINAPI EditStreamSetNameA(PAVISTREAM,LPCSTR); +HRESULT WINAPI EditStreamSetNameW(PAVISTREAM,LPCWSTR); +VOID WINAPI AVIFileInit(void); +VOID WINAPI AVIFileExit(void); +HRESULT WINAPI AVIFileOpenA(PAVIFILE*,LPCSTR,UINT,LPCLSID); +HRESULT WINAPI AVIFileOpenW(PAVIFILE*,LPCWSTR,UINT,LPCLSID); +ULONG WINAPI AVIFileAddRef(PAVIFILE); +ULONG WINAPI AVIFileRelease(PAVIFILE); +HRESULT WINAPI AVIFileInfoA(PAVIFILE,PAVIFILEINFOA,LONG); +HRESULT WINAPI AVIFileInfoW(PAVIFILE,PAVIFILEINFOW,LONG); +HRESULT WINAPI AVIFileGetStream(PAVIFILE,PAVISTREAM*,DWORD,LONG); +HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE,PAVISTREAM*,AVISTREAMINFOA*); +HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE,PAVISTREAM*,AVISTREAMINFOW*); +HRESULT WINAPI AVIFileWriteData(PAVIFILE,DWORD,LPVOID,LONG); +HRESULT WINAPI AVIFileReadData(PAVIFILE,DWORD,LPVOID,LPLONG); +HRESULT WINAPI AVIFileEndRecord(PAVIFILE); +HRESULT WINAPI AVIClearClipboard(VOID); +HRESULT WINAPI AVIGetFromClipboard(PAVIFILE*); +HRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE); +#endif /* __OBJC__ */ +#ifdef OFN_READONLY +BOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA); +BOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW); +BOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA); +BOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW); +#endif +HWND VFWAPIV MCIWndCreateA(HWND,HINSTANCE,DWORD,LPCSTR); +HWND VFWAPIV MCIWndCreateW(HWND,HINSTANCE,DWORD,LPCWSTR); +HDRAWDIB VFWAPI DrawDibOpen(VOID); +UINT VFWAPI DrawDibRealize(HDRAWDIB,HDC,BOOL); +BOOL VFWAPI DrawDibBegin(HDRAWDIB,HDC,INT,INT,LPBITMAPINFOHEADER,INT,INT,UINT); +BOOL VFWAPI DrawDibDraw(HDRAWDIB,HDC,INT,INT,INT,INT,LPBITMAPINFOHEADER,LPVOID,INT,INT,INT,INT,UINT); +BOOL VFWAPI DrawDibSetPalette(HDRAWDIB,HPALETTE); +HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB); +BOOL VFWAPI DrawDibChangePalette(HDRAWDIB,int,int,LPPALETTEENTRY); +LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB,LPBITMAPINFOHEADER,DWORD,DWORD); +BOOL VFWAPI DrawDibStart(HDRAWDIB,DWORD); +BOOL VFWAPI DrawDibStop(HDRAWDIB); +BOOL VFWAPI DrawDibEnd(HDRAWDIB); +BOOL VFWAPI DrawDibClose(HDRAWDIB); +DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER); + +#define ICCompressGetFormat(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_GET_FORMAT,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) +#define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL) +#define ICCompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_BEGIN,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) +#define ICCompressGetSize(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_GET_SIZE,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) +#define ICCompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_QUERY,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) +#define ICCompressEnd(hic) ICSendMessage(hic,ICM_COMPRESS_END,0,0) +#define ICQueryAbout(hic) (ICSendMessage(hic,ICM_ABOUT,(DWORD)-1,ICMF_ABOUT_QUERY)==ICERR_OK) +#define ICAbout(hic,hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD)(hwnd),0) +#define ICQueryConfigure(hic) (ICSendMessage(hic,ICM_CONFIGURE,(DWORD)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK) +#define ICConfigure(hic,hwnd) ICSendMessage(hic,ICM_CONFIGURE,(DWORD)(hwnd),0) +#define ICDecompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_BEGIN,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) +#define ICDecompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_QUERY,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) +#define ICDecompressGetFormat(hic,lpbiInput,lpbiOutput) (LONG)ICSendMessage(hic,ICM_DECOMPRESS_GET_FORMAT,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) +#define ICDecompressGetFormatSize(hic,lpbi) ICDecompressGetFormat(hic, lpbi, NULL) +#define ICDecompressGetPalette(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_GET_PALETTE,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) +#define ICDecompressSetPalette(hic,lpbiPalette) ICSendMessage(hic,ICM_DECOMPRESS_SET_PALETTE,(DWORD)(lpbiPalette),0) +#define ICDecompressEnd(hic) ICSendMessage(hic,ICM_DECOMPRESS_END,0,0) +#define ICDecompressExEnd(hic) ICSendMessage(hic,ICM_DECOMPRESSEX_END,0,0) +#define ICDecompressOpen(fccType,fccHandler,lpbiIn,lpbiOut) ICLocate(fccType,fccHandler,lpbiIn,lpbiOut,ICMODE_DECOMPRESS) +#define ICDrawOpen(fccType,fccHandler,lpbiIn) ICLocate(fccType,fccHandler,lpbiIn,NULL,ICMODE_DRAW) +#define ICGetState(hic,pv,cb) ICSendMessage(hic,ICM_GETSTATE,(DWORD)(pv),(DWORD)(cb)) +#define ICSetState(hic,pv,cb) ICSendMessage(hic,ICM_SETSTATE,(DWORD)(pv),(DWORD)(cb)) +#define ICGetStateSize(hic) ICGetState(hic,NULL,0) +#define ICDrawWindow(hic,prc) ICSendMessage(hic,ICM_DRAW_WINDOW,(DWORD)(prc),sizeof(RECT)) +#define ICDrawQuery(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_QUERY,(DWORD)(lpbiInput),0) +#define ICDrawChangePalette(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_CHANGEPALETTE,(DWORD)(lpbiInput),0) +#define ICGetBuffersWanted(hic,lpdwBuffers) ICSendMessage(hic,ICM_GETBUFFERSWANTED,(DWORD)(lpdwBuffers),0) +#define ICDrawEnd(hic) ICSendMessage(hic,ICM_DRAW_END,0,0) +#define ICDrawStart(hic) ICSendMessage(hic,ICM_DRAW_START,0,0) +#define ICDrawStartPlay(hic,lFrom,lTo) ICSendMessage(hic,ICM_DRAW_START_PLAY,(DWORD)(lFrom),(DWORD)(lTo)) +#define ICDrawStop(hic) ICSendMessage(hic,ICM_DRAW_STOP,0,0) +#define ICDrawStopPlay(hic) ICSendMessage(hic,ICM_DRAW_STOP_PLAY,0,0) +#define ICDrawGetTime(hic,lplTime) ICSendMessage(hic,ICM_DRAW_GETTIME,(DWORD)(lplTime),0) +#define ICDrawSetTime(hic,lTime) ICSendMessage(hic,ICM_DRAW_SETTIME,(DWORD)lTime,0) +#define ICDrawRealize(hic,hdc,fBackground) ICSendMessage(hic,ICM_DRAW_REALIZE,(DWORD)(hdc),(DWORD)(fBackground)) +#define ICDrawFlush(hic) ICSendMessage(hic,ICM_DRAW_FLUSH,0,0) +#define ICDrawRenderBuffer(hic) ICSendMessage(hic,ICM_DRAW_RENDERBUFFER,0,0) +#define AVIFileClose(pavi) AVIFileRelease(pavi) +#define AVIStreamClose(pavi) AVIStreamRelease(pavi); +#define AVIStreamEnd(pavi) (AVIStreamStart(pavi)+AVIStreamLength(pavi)) +#define AVIStreamEndTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamEnd(pavi)) +#define AVIStreamFormatSize(pavi,lPos,plSize) AVIStreamReadFormat(pavi,lPos,NULL,plSize) +#define AVIStreamLengthTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamLength(pavi)) +#define AVIStreamSampleSize(pavi,pos,psize) AVIStreamRead(pavi,pos,1,NULL,0,psize,NULL) +#define AVIStreamSampleToSample(pavi1,pavi2,samp2) AVIStreamTimeToSample(pavi1,AVIStreamSampleToTime(pavi2,samp2)) +#define AVIStreamStartTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamStart(pavi)) +#define AVIStreamNextSample(pavi,pos) AVIStreamFindSample(pavi,pos+1,FIND_NEXT|FIND_ANY) +#define AVIStreamPrevSample(pavi,pos) AVIStreamFindSample(pavi,pos-1,FIND_PREV|FIND_ANY) +#define AVIStreamNearestSample(pavi, pos) AVIStreamFindSample(pavi,pos,FIND_PREV|FIND_ANY) +#define AVStreamNextKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos+1,FIND_NEXT|FIND_KEY) +#define AVStreamPrevKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos-1,FIND_NEXT|FIND_KEY) +#define AVIStreamNearestKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos,FIND_PREV|FIND_KEY) +#define AVIStreamIsKeyFrame(pavi, pos) (AVIStreamNearestKeyFrame(pavi,pos) == pos) +#ifdef __cplusplus +#define MCIWndSM ::SendMessage +#else +#define MCIWndSM SendMessage +#endif +#define MCIWndCanPlay(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_PLAY,0,0) +#define MCIWndCanRecord(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_RECORD,0,0) +#define MCIWndCanSave(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_SAVE,0,0) +#define MCIWndCanWindow(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_WINDOW,0,0) +#define MCIWndCanEject(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_EJECT,0,0) +#define MCIWndCanConfig(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_CONFIG,0,0) +#define MCIWndPaletteKick(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_PALETTEKICK,0,0) +#define MCIWndSave(hWnd,szFile) (LONG)MCIWndSM(hWnd,MCI_SAVE,0,(LPARAM)(LPVOID)(szFile)) +#define MCIWndSaveDialog(hWnd) MCIWndSave(hWnd,-1) +#define MCIWndNew(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_NEW,0,(LPARAM)(LPVOID)(lp)) +#define MCIWndRecord(hWnd) (LONG)MCIWndSM(hWnd,MCI_RECORD,0,0) +#define MCIWndOpen(hWnd,sz,f) (LONG)MCIWndSM(hWnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz)) +#define MCIWndOpenDialog(hWnd) MCIWndOpen(hWnd,-1,0) +#define MCIWndClose(hWnd) (LONG)MCIWndSM(hWnd,MCI_CLOSE,0,0) +#define MCIWndPlay(hWnd) (LONG)MCIWndSM(hWnd,MCI_PLAY,0,0) +#define MCIWndStop(hWnd) (LONG)MCIWndSM(hWnd,MCI_STOP,0,0) +#define MCIWndPause(hWnd) (LONG)MCIWndSM(hWnd,MCI_PAUSE,0,0) +#define MCIWndResume(hWnd) (LONG)MCIWndSM(hWnd,MCI_RESUME,0,0) +#define MCIWndSeek(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCI_SEEK,0,(LPARAM)(LONG)(lPos)) +#define MCIWndEject(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_EJECT,0,0) +#define MCIWndHome(hWnd) MCIWndSeek(hWnd,MCIWND_START) +#define MCIWndEnd(hWnd) MCIWndSeek(hWnd,MCIWND_END) +#define MCIWndGetSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_SOURCE,0,(LPARAM)(LPRECT)(prc)) +#define MCIWndPutSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_SOURCE,0,(LPARAM)(LPRECT)(prc)) +#define MCIWndGetDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_DEST,0,(LPARAM)(LPRECT)(prc)) +#define MCIWndPutDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_DEST,0,(LPARAM)(LPRECT)(prc)) +#define MCIWndPlayReverse(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYREVERSE,0,0) +#define MCIWndPlayFrom(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYFROM,0,(LPARAM)(LONG)(lPos)) +#define MCIWndPlayTo(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYTO, 0,(LPARAM)(LONG)(lPos)) +#define MCIWndPlayFromTo(hWnd,lStart,lEnd) (MCIWndSeek(hWnd,lStart),MCIWndPlayTo(hWnd,lEnd)) +#define MCIWndGetDeviceID(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETDEVICEID,0,0) +#define MCIWndGetAlias(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETALIAS,0,0) +#define MCIWndGetMode(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp)) +#define MCIWndGetPosition(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,0,0) +#define MCIWndGetPositionString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp)) +#define MCIWndGetStart(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSTART,0,0) +#define MCIWndGetLength(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETLENGTH,0,0) +#define MCIWndGetEnd(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETEND,0,0) +#define MCIWndStep(hWnd,n) (LONG)MCIWndSM(hWnd,MCI_STEP,0,(LPARAM)(long)(n)) +#define MCIWndDestroy(hWnd) (VOID)MCIWndSM(hWnd,WM_CLOSE,0,0) +#define MCIWndSetZoom(hWnd,iZoom) (VOID)MCIWndSM(hWnd,MCIWNDM_SETZOOM,0,(LPARAM)(UINT)(iZoom)) +#define MCIWndGetZoom(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETZOOM,0,0) +#define MCIWndSetVolume(hWnd,iVol) (LONG)MCIWndSM(hWnd,MCIWNDM_SETVOLUME,0,(LPARAM)(UINT)(iVol)) +#define MCIWndGetVolume(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETVOLUME,0,0) +#define MCIWndSetSpeed(hWnd,iSpeed) (LONG)MCIWndSM(hWnd,MCIWNDM_SETSPEED,0,(LPARAM)(UINT)(iSpeed)) +#define MCIWndGetSpeed(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSPEED,0,0) +#define MCIWndSetTimeFormat(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_SETTIMEFORMAT,0,(LPARAM)(LPTSTR)(lp)) +#define MCIWndGetTimeFormat(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp)) +#define MCIWndValidateMedia(hWnd) (VOID)MCIWndSM(hWnd,MCIWNDM_VALIDATEMEDIA,0,0) +#define MCIWndSetRepeat(hWnd,f) (void)MCIWndSM(hWnd,MCIWNDM_SETREPEAT,0,(LPARAM)(BOOL)(f)) +#define MCIWndGetRepeat(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_GETREPEAT,0,0) +#define MCIWndUseFrames(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("frames")) +#define MCIWndUseTime(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("ms")) +#define MCIWndSetActiveTimer(hWnd,active) (VOID)MCIWndSM(hWnd,MCIWNDM_SETACTIVETIMER,(WPARAM)(UINT)(active),0L) +#define MCIWndSetInactiveTimer(hWnd,inactive) (VOID)MCIWndSM(hWnd,MCIWNDM_SETINACTIVETIMER,(WPARAM)(UINT)(inactive),0L) +#define MCIWndSetTimers(hWnd,active,inactive) (VOID)MCIWndSM(hWnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),(LPARAM)(UINT)(inactive)) +#define MCIWndGetActiveTimer(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETACTIVETIMER,0,0L); +#define MCIWndGetInactiveTimer(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETINACTIVETIMER,0,0L); +#define MCIWndRealize(hWnd,fBkgnd) (LONG)MCIWndSM(hWnd,MCIWNDM_REALIZE,(WPARAM)(BOOL)(fBkgnd),0) +#define MCIWndSendString(hWnd,sz) (LONG)MCIWndSM(hWnd,MCIWNDM_SENDSTRING,0,(LPARAM)(LPTSTR)(sz)) +#define MCIWndReturnString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) +#define MCIWndGetError(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) +#define MCIWndGetPalette(hWnd) (HPALETTE)MCIWndSM(hWnd,MCIWNDM_GETPALETTE,0,0) +#define MCIWndSetPalette(hWnd,hpal) (LONG)MCIWndSM(hWnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),0) +#define MCIWndGetFileName(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) +#define MCIWndGetDevice(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) +#define MCIWndGetStyles(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETSTYLES,0,0L) +#define MCIWndChangeStyles(hWnd,mask,value) (LONG)MCIWndSM(hWnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value)) +#define MCIWndOpenInterface(hWnd,pUnk) (LONG)MCIWndSM(hWnd,MCIWNDM_OPENINTERFACE,0,(LPARAM)(LPUNKNOWN)(pUnk)) +#define MCIWndSetOwner(hWnd,hWndP) (LONG)MCIWndSM(hWnd,MCIWNDM_SETOWNER,(WPARAM)(hWndP),0) +#define DrawDibUpdate(hdd,hdc,x,y) DrawDibDraw(hdd,hdc,x,y,0,0,NULL,NULL,0,0,0,0,DDF_UPDATE) +static __inline DWORD +ICGetDefaultQuality(HIC hic) +{ + DWORD dwICValue; + ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD)); + return dwICValue; +} +static __inline DWORD +ICGetDefaultKeyFrameRate(HIC hic) +{ + DWORD dwICValue; + ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD)); + return dwICValue; +} +static __inline LRESULT +ICDrawSuggestFormat(HIC hic,LPBITMAPINFOHEADER lpbiIn,LPBITMAPINFOHEADER lpbiOut,INT dxSrc,INT dySrc,INT dxDst,INT dyDst,HIC hicDecomp) +{ + ICDRAWSUGGEST ic; + ic.lpbiIn = lpbiIn; + ic.lpbiSuggest = lpbiOut; + ic.dxSrc = dxSrc; + ic.dySrc = dySrc; + ic.dxDst = dxDst; + ic.dyDst = dyDst; + ic.hicDecompressor = hicDecomp; + return ICSendMessage(hic,ICM_DRAW_SUGGESTFORMAT,(DWORD)&ic,sizeof(ic)); +} +static __inline LRESULT +ICSetStatusProc(HIC hic,DWORD dwFlags,LRESULT lParam,LONG (CALLBACK *fpfnStatus)(LPARAM,UINT,LONG)) +{ + ICSETSTATUSPROC ic; + ic.dwFlags = dwFlags; + ic.lParam = lParam; + ic.Status = fpfnStatus; + return ICSendMessage(hic,ICM_SET_STATUS_PROC,(DWORD)&ic,sizeof(ic)); +} +static __inline LRESULT +ICDecompressEx(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst) +{ + ICDECOMPRESSEX ic; + ic.dwFlags = dwFlags; + ic.lpbiSrc = lpbiSrc; + ic.lpSrc = lpSrc; + ic.xSrc = xSrc; + ic.ySrc = ySrc; + ic.dxSrc = dxSrc; + ic.dySrc = dySrc; + ic.lpbiDst = lpbiDst; + ic.lpDst = lpDst; + ic.xDst = xDst; + ic.yDst = yDst; + ic.dxDst = dxDst; + ic.dyDst = dyDst; + return ICSendMessage(hic,ICM_DECOMPRESSEX,(DWORD)&ic,sizeof(ic)); +} +static __inline LRESULT +ICDecompressExBegin(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst) +{ + ICDECOMPRESSEX ic; + ic.dwFlags = dwFlags; + ic.lpbiSrc = lpbiSrc; + ic.lpSrc = lpSrc; + ic.xSrc = xSrc; + ic.ySrc = ySrc; + ic.dxSrc = dxSrc; + ic.dySrc = dySrc; + ic.lpbiDst = lpbiDst; + ic.lpDst = lpDst; + ic.xDst = xDst; + ic.yDst = yDst; + ic.dxDst = dxDst; + ic.dyDst = dyDst; + return ICSendMessage(hic,ICM_DECOMPRESSEX_BEGIN,(DWORD)&ic,sizeof(ic)); +} +static __inline LRESULT +ICDecompressExQuery(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst) +{ + ICDECOMPRESSEX ic; + ic.dwFlags = dwFlags; + ic.lpbiSrc = lpbiSrc; + ic.lpSrc = lpSrc; + ic.xSrc = xSrc; + ic.ySrc = ySrc; + ic.dxSrc = dxSrc; + ic.dySrc = dySrc; + ic.lpbiDst = lpbiDst; + ic.lpDst = lpDst; + ic.xDst = xDst; + ic.yDst = yDst; + ic.dxDst = dxDst; + ic.dyDst = dyDst; + return ICSendMessage(hic,ICM_DECOMPRESSEX_QUERY,(DWORD)&ic,sizeof(ic)); +} + +/* AVICAP32 exports */ +HWND VFWAPI capCreateCaptureWindowA (LPCSTR,DWORD,int,int,int,int,HWND,int); +HWND VFWAPI capCreateCaptureWindowW (LPCWSTR,DWORD,int,int,int,int,HWND,int); +BOOL VFWAPI capGetDriverDescriptionA (UINT,LPSTR,int,LPSTR,int); +BOOL VFWAPI capGetDriverDescriptionW (UINT,LPWSTR,int,LPWSTR,int); + +#ifdef UNICODE +#define AVISTREAMINFO AVISTREAMINFOW +#define LPAVISTREAMINFO LPAVISTREAMINFOW +#define PAVISTREAMINFO PAVISTREAMINFOW +#define AVIFILEINFO AVIFILEINFOW +#define PAVIFILEINFO PAVIFILEINFOW +#define LPAVIFILEINFO LPAVIFILEINFOW +#define AVIStreamInfo AVIStreamInfoW +#define AVIStreamOpenFromFile AVIStreamOpenFromFileW +#define AVIBuildFilter AVIBuildFilterW +#define AVISaveV AVISaveVW +#define EditStreamSetInfo EditStreamSetInfoW +#define EditStreamSetName EditStreamSetNameW +#define AVIFileOpen AVIFileOpenW +#define AVIFileInfo AVIFileInfoW +#define AVIFileCreateStream AVIFileCreateStreamW +#define GetOpenFileNamePreview GetOpenFileNamePreviewW +#define GetSaveFileNamePreview GetSaveFileNamePreviewW +#define MCIWndCreate MCIWndCreateW +#define MCIWNDF_NOTIFYMEDIA MCIWNDF_NOTIFYMEDIAW +#define MCIWNDM_SENDSTRING MCIWNDM_SENDSTRINGW +#define MCIWNDM_GETPOSITION MCIWNDM_GETPOSITIONW +#define MCIWNDM_GETMODE MCIWNDM_GETMODEW +#define MCIWNDM_SETTIMEFORMAT MCIWNDM_SETTIMEFORMATW +#define MCIWNDM_GETTIMEFORMAT MCIWNDM_GETTIMEFORMATW +#define MCIWNDM_GETFILENAME MCIWNDM_GETFILENAMEW +#define MCIWNDM_GETDEVICE MCIWNDM_GETDEVICEW +#define MCIWNDM_GETERROR MCIWNDM_GETERRORW +#define MCIWNDM_NEW MCIWNDM_NEWW +#define MCIWNDM_RETURNSTRING MCIWNDM_RETURNSTRINGW +#define MCIWNDM_OPEN MCIWNDM_OPENW + +#define capCreateCaptureWindow capCreateCaptureWindowW +#define capGetDriverDescription capGetDriverDescriptionW + +#else +#define AVISTREAMINFO AVISTREAMINFOA +#define LPAVISTREAMINFO LPAVISTREAMINFOA +#define PAVISTREAMINFO PAVISTREAMINFOA +#define AVIFILEINFO AVIFILEINFOA +#define PAVIFILEINFO PAVIFILEINFOA +#define LPAVIFILEINFO LPAVIFILEINFOA +#define AVIStreamInfo AVIStreamInfoA +#define AVIStreamOpenFromFile AVIStreamOpenFromFileA +#define AVIBuildFilter AVIBuildFilterA +#define AVISaveV AVISaveVA +#define EditStreamSetInfo EditStreamSetInfoA +#define EditStreamSetName EditStreamSetNameA +#define AVIFileOpen AVIFileOpenA +#define AVIFileInfo AVIFileInfoA +#define AVIFileCreateStream AVIFileCreateStreamA +#define GetOpenFileNamePreview GetOpenFileNamePreviewA +#define GetSaveFileNamePreview GetSaveFileNamePreviewA +#define MCIWndCreate MCIWndCreateA +#define MCIWNDF_NOTIFYMEDIA MCIWNDF_NOTIFYMEDIAA +#define MCIWNDM_SENDSTRING MCIWNDM_SENDSTRINGA +#define MCIWNDM_GETPOSITION MCIWNDM_GETPOSITIONA +#define MCIWNDM_GETMODE MCIWNDM_GETMODEA +#define MCIWNDM_SETTIMEFORMAT MCIWNDM_SETTIMEFORMATA +#define MCIWNDM_GETTIMEFORMAT MCIWNDM_GETTIMEFORMATA +#define MCIWNDM_GETFILENAME MCIWNDM_GETFILENAMEA +#define MCIWNDM_GETDEVICE MCIWNDM_GETDEVICEA +#define MCIWNDM_GETERROR MCIWNDM_GETERRORA +#define MCIWNDM_NEW MCIWNDM_NEWA +#define MCIWNDM_RETURNSTRING MCIWNDM_RETURNSTRINGA +#define MCIWNDM_OPEN MCIWNDM_OPENA + +#define capCreateCaptureWindow capCreateCaptureWindowA +#define capGetDriverDescription capGetDriverDescriptionA + +#endif + +#endif /* RC_INVOKED */ + +#ifdef __cplusplus +} +#endif +#include +#endif /* _VFW_H */ diff --git a/build/dxwnd.dll b/build/dxwnd.dll index b0d49e7..241fab3 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:685801c38436f785e2d29010e560c7eb98e07adb83ae0bf0593f089a2d2ed043 -size 572928 +oid sha256:b8a67c242eed842488275368e2e9ce0eca579d7694ac9b1d60081a1a9bddc6e9 +size 573952 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index e98f13e..091cd05 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea58d479ffbb81c24c0282a35b7e8203848d66799bf047ad7d662e4fc53d0470 +oid sha256:276600bf95e4a2b4e02780dff3bc64d0c7760781f22d3e17c797e7eb05355cae size 539648 diff --git a/build/dxwnd.ini b/build/dxwnd.ini new file mode 100644 index 0000000..841c56c --- /dev/null +++ b/build/dxwnd.ini @@ -0,0 +1,5 @@ +[window] +posx=1433 +posy=301 +sizx=320 +sizy=749 diff --git a/build/exports/Age of Wanderer.dxw b/build/exports/Age of Wanderer.dxw new file mode 100644 index 0000000..bc3d0dc --- /dev/null +++ b/build/exports/Age of Wanderer.dxw @@ -0,0 +1,31 @@ +[target] +title0=Age of Wanderer +path0=D:\Games\Age of Wanderer\Yain.exe +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Alien Nations (GOG).dxw b/build/exports/Alien Nations (GOG).dxw new file mode 100644 index 0000000..a5f5704 --- /dev/null +++ b/build/exports/Alien Nations (GOG).dxw @@ -0,0 +1,31 @@ +[target] +title0=Alien Nations (GOG) +path0=D:\Games\Alien Nations (GOG)\Bin\AN.exe +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Alien Nations.dxw b/build/exports/Alien Nations.dxw new file mode 100644 index 0000000..90744e4 --- /dev/null +++ b/build/exports/Alien Nations.dxw @@ -0,0 +1,31 @@ +[target] +title0=Alien Nations +path0=D:\Games\Alien Nations\Bin\AN.exe +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Atlantis - The Lost Tales.dxw b/build/exports/Atlantis - The Lost Tales.dxw new file mode 100644 index 0000000..2702d15 --- /dev/null +++ b/build/exports/Atlantis - The Lost Tales.dxw @@ -0,0 +1,31 @@ +[target] +title0=Atlantis - The Lost Tales +path0=D:\Games\Atlantis - The Lost Tales\Atlantis.exe +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=134217762 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Battle Realms.dxw b/build/exports/Battle Realms.dxw index 2ab1589..37ca095 100644 --- a/build/exports/Battle Realms.dxw +++ b/build/exports/Battle Realms.dxw @@ -6,7 +6,7 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=150994976 +flag0=134234150 flagg0=1207959552 flagh0=20 flagi0=138412036 @@ -25,3 +25,7 @@ maxfps0=0 initts0=0 winver0=0 maxres0=-1 +notes0= +flagj0=128 +flagk0=0 +swapeffect0=0 diff --git a/build/exports/Close Combat 2 a bridge too far.dxw b/build/exports/Close Combat 2 a bridge too far.dxw new file mode 100644 index 0000000..77fedfe --- /dev/null +++ b/build/exports/Close Combat 2 a bridge too far.dxw @@ -0,0 +1,31 @@ +[target] +title0=Close Combat 2: a bridge too far +path0=D:\Games\Close Combat 2\CC2.EXE +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=134225954 +flagg0=1744830464 +flagh0=1044 +flagi0=1212153860 +flagj0=4224 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Sports Car GT.dxw b/build/exports/Sports Car GT.dxw new file mode 100644 index 0000000..9c3ac90 --- /dev/null +++ b/build/exports/Sports Car GT.dxw @@ -0,0 +1,31 @@ +[target] +title0=Sports Car GT +path0=D:\Games\Sports Car GT\Spcar.exe +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=134234146 +flagg0=1207959552 +flagh0=20 +flagi0=138543108 +flagj0=20608 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/WarWind.dxw b/build/exports/WarWind.dxw index c16dc11..5f7a83d 100644 --- a/build/exports/WarWind.dxw +++ b/build/exports/WarWind.dxw @@ -5,10 +5,10 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=134234656 +flag0=134234146 flagg0=1207959552 flagh0=20 -flagi0=4 +flagi0=4194308 tflag0=0 initx0=0 inity0=0 @@ -24,3 +24,8 @@ maxfps0=0 initts0=0 winver0=0 maxres0=-1 +launchpath0= +notes0= +flagj0=128 +flagk0=0 +swapeffect0=0 diff --git a/build/exports/ZPC Zero Population Count.dxw b/build/exports/ZPC Zero Population Count.dxw index 21ecbf3..55efbd7 100644 --- a/build/exports/ZPC Zero Population Count.dxw +++ b/build/exports/ZPC Zero Population Count.dxw @@ -8,7 +8,7 @@ coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 -flagi0=4 +flagi0=4194308 tflag0=0 initx0=0 inity0=0 @@ -22,3 +22,10 @@ sizx0=800 sizy0=600 maxfps0=0 initts0=0 +launchpath0= +notes0= +flagj0=128 +flagk0=0 +winver0=0 +maxres0=0 +swapeffect0=0 diff --git a/build/exports/dxwnd.ini b/build/exports/dxwnd.ini index cfac93f..0c8fd2c 100644 --- a/build/exports/dxwnd.ini +++ b/build/exports/dxwnd.ini @@ -1,5 +1,5 @@ [window] -posx=1477 -posy=150 +posx=1431 +posy=41 sizx=320 sizy=749 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 8d8e939..8b39c6d 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -813,3 +813,8 @@ eliminated GDI over directdraw emulation (MAPGDITOPRIMARY flag) add: support for texture D3DFMT_L8 dump ("Turok") fix: eliminate a possible divide by zero error fix: avoid intercepting WindowProc routines when set to special values 0xFFFFxxxx - makes "The Hulk" demo working + +v2.03.23: +fix: implemented the correct interface of registry query calls that can be used to know the key data length +fix: hexdump routine with NULL input used in registry operation log was causing crash +add: preliminary hooking for user32.dll desktop routines, like CreateDesktop() - makes "STCC Swedish TouringCar Championship" working diff --git a/build/registry/dxwnd.close combat 2.REG b/build/registry/dxwnd.close combat 2.REG new file mode 100644 index 0000000..9ded368 --- /dev/null +++ b/build/registry/dxwnd.close combat 2.REG @@ -0,0 +1,28 @@ +// Close Combat 2 a bridge too far + +[HKEY_LOCAL_MACHINE\SOFTWARE] +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft] +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games] +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat] +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat\2.00] +"PID"="00000-000-0000000-00000" +"InstalledTo"=".\\" +"ScreenX"="800" +"ScreenY"="600" +"Version"="2.0" +"IType"=hex:01,00,00,00 +"GameSpeed"=hex:01,00,00,00 +"ShowDSAlert"=hex:01,00,00,00 +"ShowQuickHelp"=hex:01,00,00,00 +"PlaySounds"=hex:01,00,00,00 +"PlayMusic"=hex:01,00,00,00 +"PlayVideos"=hex:00,00,00,00 +"FCopy"=hex:00,00,00,00 +"SMethod"=hex:00,00,00,00 +"Save"=hex:00,00,00,00 +"ShowTrees"=hex:01,00,00,00 +"StaticFPS"=hex:0a,00,00,00 +"InstalledFrom"=".\\" +"Launched"="1" +"VersionType"="RetailVersion" + diff --git a/dll/advapi.cpp b/dll/advapi.cpp index c8e3b0e..27a19a3 100644 --- a/dll/advapi.cpp +++ b/dll/advapi.cpp @@ -7,6 +7,10 @@ #include "dxhook.h" #include "dxhelper.h" +typedef LONG (WINAPI *RegFlushKey_Type)(HKEY); +LONG WINAPI extRegFlushKey(HKEY); +RegFlushKey_Type pRegFlushKey = NULL; + static HookEntry_Type Hooks[]={ {HOOK_IAT_CANDIDATE, "RegOpenKeyExA", NULL, (FARPROC *)&pRegOpenKeyEx, (FARPROC)extRegOpenKeyEx}, {HOOK_IAT_CANDIDATE, "RegCloseKey", NULL, (FARPROC *)&pRegCloseKey, (FARPROC)extRegCloseKey}, @@ -14,6 +18,7 @@ static HookEntry_Type Hooks[]={ {HOOK_IAT_CANDIDATE, "RegCreateKeyA", NULL, (FARPROC *)&pRegCreateKey, (FARPROC)extRegCreateKey}, {HOOK_IAT_CANDIDATE, "RegCreateKeyExA", NULL, (FARPROC *)&pRegCreateKeyEx, (FARPROC)extRegCreateKeyEx}, {HOOK_IAT_CANDIDATE, "RegSetValueExA", NULL, (FARPROC *)&pRegSetValueEx, (FARPROC)extRegSetValueEx}, + {HOOK_IAT_CANDIDATE, "RegFlushKey", NULL, (FARPROC *)&pRegFlushKey, (FARPROC)extRegFlushKey}, {HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator }; @@ -165,7 +170,8 @@ LONG WINAPI extRegQueryValueEx( { LONG res; - OutTraceR("RegQueryValueEx: hKey=%x(\"%s\") ValueName=\"%s\" Reserved=%x\n", hKey, hKey2String(hKey), lpValueName, lpReserved); + OutTraceR("RegQueryValueEx: hKey=%x(\"%s\") ValueName=\"%s\" Reserved=%x lpType=%x lpData=%x lpcbData=%x\n", + hKey, hKey2String(hKey), lpValueName, lpReserved, lpType, lpData, lpcbData); if (!IsFake(hKey)){ res=(*pRegQueryValueEx)(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData); if(IsTraceR){ @@ -202,6 +208,7 @@ LONG WINAPI extRegQueryValueEx( char RegBuf[MAX_PATH+1]; char *pData; HKEY hCurKey=HKEY_FAKE+1; + DWORD cbData=0; regf=OpenFakeRegistry(); if(regf==NULL) return res; if(!lpValueName)lpValueName=""; @@ -221,20 +228,24 @@ LONG WINAPI extRegQueryValueEx( res=ERROR_FILE_NOT_FOUND; pData=&RegBuf[strlen(lpValueName)+3]; lpb = lpData; + if(lpcbData) { + cbData = *lpcbData; + *lpcbData=0; + } if(*pData=='"'){ // string value if(lpType) *lpType=REG_SZ; - if(lpData){ - *lpcbData=0; + pData++; + while(*pData && (*pData != '"')){ + if(*pData=='\\') pData++; + if(lpData && lpcbData) if(*lpcbData < cbData) *lpb++=*pData; pData++; - while(*pData && (*pData != '"')){ - if(*pData=='\\') pData++; - *lpb++=*pData++; - if(lpcbData) *lpcbData++; - } - *lpb = 0; // string terminator + if(lpcbData) (*lpcbData)++; } - OutTraceR("RegQueryValueEx: type=REG_SZ Data=\"%s\"\n", lpData ? (char *)lpData : "(NULL)"); - res=ERROR_SUCCESS; + if(lpcbData) (*lpcbData)++; // extra space for string terminator ? + if(lpData && lpcbData) if(*lpcbData < cbData) *lpb = 0; // string terminator + OutTraceR("RegQueryValueEx: type=REG_SZ cbData=%x Data=\"%s\"\n", + lpcbData ? *lpcbData : 0, lpData ? (char *)lpData : "(NULL)"); + res=(*lpcbData > cbData) ? ERROR_MORE_DATA : ERROR_SUCCESS; break; } if(!strncmp(pData,"dword:",strlen("dword:"))){ //dword value @@ -242,10 +253,17 @@ LONG WINAPI extRegQueryValueEx( if(lpType) *lpType=REG_DWORD; pData+=strlen("dword:"); sscanf(pData, "%x", &val); - if(lpData) memcpy(lpData, &val, sizeof(DWORD)); - if(lpcbData) *lpcbData=sizeof(DWORD); - OutTraceR("RegQueryValueEx: type=REG_DWORD Data=0x%x\n", val); - res=ERROR_SUCCESS; + if(lpData) { + if (cbData >= sizeof(DWORD)) { + memcpy(lpData, &val, sizeof(DWORD)); + res=ERROR_SUCCESS; + } + else + res=ERROR_MORE_DATA; + } + if (lpcbData) *lpcbData=sizeof(DWORD); + OutTraceR("RegQueryValueEx: type=REG_DWORD cbData=%x Data=0x%x\n", + lpcbData ? *lpcbData : 0, val); break; } if(!strncmp(pData,"hex:",strlen("hex:"))){ //hex value @@ -253,28 +271,27 @@ LONG WINAPI extRegQueryValueEx( if(lpType) *lpType=REG_BINARY; p = (BYTE *)pData; p+=strlen("hex:"); - if(lpcbData) *lpcbData=0; while(TRUE){ - p[strlen((char *)p)-1]=0; // eliminates \n - if(lpData){ - while(strlen((char *)p)>1){ + p[strlen((char *)p)-1]=0; // eliminates \n at the end of line + while(strlen((char *)p)>1){ + if((*lpcbData < cbData) && lpData){ sscanf((char *)p, "%x,", (char *)lpb); - p+=3; lpb++; - if(lpcbData) (*lpcbData)++; } - if(p[strlen((char *)p)-1]=='\\'){ - fgets(RegBuf, 256, regf); - pData = RegBuf; - p = (BYTE *)pData; - } - else break; + p+=3; + if(lpcbData) (*lpcbData)++; } + if(p[strlen((char *)p)-1]=='\\'){ + fgets(RegBuf, 256, regf); + pData = RegBuf; + p = (BYTE *)pData; + } + else break; } OutTraceR("RegQueryValueEx: type=REG_BINARY cbData=%d Data=%s\n", lpcbData ? *lpcbData : 0, lpData ? "(NULL)" : hexdump(lpData, *lpcbData)); - res=ERROR_SUCCESS; + res=(*lpcbData > cbData) ? ERROR_MORE_DATA : ERROR_SUCCESS; break; } } @@ -294,6 +311,13 @@ LONG WINAPI extRegCloseKey(HKEY hKey) return (*pRegCloseKey)(hKey); } +LONG WINAPI extRegFlushKey(HKEY hKey) +{ + OutTraceR("RegFlushKey: hKey=%x\n", hKey); + if (IsFake(hKey)) return ERROR_SUCCESS; + return (*pRegFlushKey)(hKey); +} + LONG WINAPI extRegSetValueEx(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData) { if (IsTraceR){ diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 64cb186..2688a5c 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.22" +#define VERSION "2.03.23" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index bd368767c0dbfa70a895a76bfaae518f187a5163..99e0ef0c12780a7f80922b5141d45c5323a6d8c0 100644 GIT binary patch delta 12684 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 diff --git a/dll/gdi32.cpp b/dll/gdi32.cpp index c4f4ff0..c8a0884 100644 --- a/dll/gdi32.cpp +++ b/dll/gdi32.cpp @@ -1096,7 +1096,7 @@ int WINAPI extSetDIBitsToDevice(HDC hdc, int XDest, int YDest, DWORD dwWidth, DW } //else if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){ - // blitting toprimary surface !!! + // blitting to primary surface !!! DWORD OrigWidth, OrigHeight; int OrigXDest, OrigYDest; OrigWidth=dwWidth; diff --git a/dll/hexdump.cpp b/dll/hexdump.cpp index 79037d5..1b33e05 100644 --- a/dll/hexdump.cpp +++ b/dll/hexdump.cpp @@ -9,6 +9,7 @@ char *hexdump(unsigned char *Buffer, int len) static char sHexBuffer[3*MAX_HEXDUMP+12]; char *s; int iMaxI; + if(!Buffer) return "(NULL)"; s=sHexBuffer; iMaxI = len; if(iMaxI > MAX_HEXDUMP) iMaxI = MAX_HEXDUMP; diff --git a/dll/msvfw.cpp b/dll/msvfw.cpp index b439cc9..fba3fd2 100644 --- a/dll/msvfw.cpp +++ b/dll/msvfw.cpp @@ -9,8 +9,8 @@ #undef DXWDECLARATIONS static HookEntry_Type Hooks[]={ - //{"ICSendMessage", (FARPROC)NULL, (FARPROC *)&pICSendMessage, (FARPROC)extICSendMessage}, - //{"ICOpen", (FARPROC)NULL, (FARPROC *)&pICOpen, (FARPROC)extICOpen}, + //{HOOK_HOT_CANDIDATE, "ICSendMessage", (FARPROC)NULL, (FARPROC *)&pICSendMessage, (FARPROC)extICSendMessage}, + //{HOOK_HOT_CANDIDATE, "ICOpen", (FARPROC)NULL, (FARPROC *)&pICOpen, (FARPROC)extICOpen}, {HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator }; @@ -31,15 +31,18 @@ LRESULT WINAPI extICSendMessage(HIC hic, UINT wMsg, DWORD_PTR dw1, DWORD_PTR dw2 { LRESULT res; OutTraceDW("ICSendMessage: hic=%x wMsg=%x dw1=%x dw2=%x\n", hic, wMsg, dw1, dw2); - return 0; res=(*pICSendMessage)(hic, wMsg, dw1, dw2); + OutTraceDW("ICSendMessage: ret=%x\n", res); return res; } HIC WINAPI extICOpen(DWORD fccType, DWORD fccHandler, UINT wMode) { + HIC res; OutTraceDW("ICOpen: fccType=%x fccHandler=%x wMode=%x\n", fccType, fccHandler, wMode); - return (HIC)0; + res=(*pICOpen)(fccType, fccHandler, wMode); + OutTraceDW("ICOpen: ret=%x\n", res); + return res; } /* diff --git a/dll/user32.cpp b/dll/user32.cpp index 108e228..300173d 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -48,6 +48,18 @@ HRESULT WINAPI extMessageBoxTimeoutW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD); typedef BOOL (WINAPI *IsIconic_Type)(HWND); IsIconic_Type pIsIconic = NULL; BOOL WINAPI extIsIconic(HWND); +typedef HDESK (WINAPI *CreateDesktop_Type)(LPCTSTR, LPCTSTR, DEVMODE *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES); +CreateDesktop_Type pCreateDesktop = NULL; +HDESK WINAPI extCreateDesktop(LPCTSTR, LPCTSTR, DEVMODE *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES); +typedef BOOL (WINAPI *SwitchDesktop_Type)(HDESK); +SwitchDesktop_Type pSwitchDesktop = NULL; +BOOL WINAPI extSwitchDesktop(HDESK); +typedef HDESK (WINAPI *OpenDesktop_Type)(LPTSTR, DWORD, BOOL, ACCESS_MASK); +OpenDesktop_Type pOpenDesktop = NULL; +HDESK WINAPI extOpenDesktop(LPTSTR, DWORD, BOOL, ACCESS_MASK); +typedef BOOL (WINAPI *CloseDesktop_Type)(HDESK); +CloseDesktop_Type pCloseDesktop = NULL; +BOOL WINAPI extCloseDesktop(HDESK); #ifdef TRACEPALETTE typedef UINT (WINAPI *GetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *); @@ -116,6 +128,11 @@ static HookEntry_Type Hooks[]={ //{HOOK_HOT_CANDIDATE, "IsIconic", (FARPROC)IsIconic, (FARPROC *)&pIsIconic, (FARPROC)extIsIconic}, + {HOOK_IAT_CANDIDATE, "CreateDesktopA", (FARPROC)CreateDesktopA, (FARPROC *)&pCreateDesktop, (FARPROC)extCreateDesktop}, + {HOOK_IAT_CANDIDATE, "SwitchDesktop", (FARPROC)SwitchDesktop, (FARPROC *)&pSwitchDesktop, (FARPROC)extSwitchDesktop}, + {HOOK_IAT_CANDIDATE, "OpenDesktopA", (FARPROC)OpenDesktopA, (FARPROC *)&pOpenDesktop, (FARPROC)extOpenDesktop}, + {HOOK_IAT_CANDIDATE, "CloseDesktop", (FARPROC)CloseDesktop, (FARPROC *)&pCloseDesktop, (FARPROC)extCloseDesktop}, + {HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator }; @@ -2897,4 +2914,31 @@ BOOL WINAPI extIsIconic(HWND hWnd) OutTrace("IsIconic: hwnd=%x ret=%x\n", hWnd, ret); //return FALSE; return ret; +} + +HDESK WINAPI extCreateDesktop( LPCTSTR lpszDesktop, LPCTSTR lpszDevice, DEVMODE *pDevmode, DWORD dwFlags, ACCESS_MASK dwDesiredAccess, LPSECURITY_ATTRIBUTES lpsa) +{ + //OutTrace("CreateDesktop: SUPPRESS Desktop=%s Device=%s flags=%x access=%x\n", lpszDesktop, lpszDevice, dwFlags, dwDesiredAccess); + OutTraceDW("CreateDesktop: SUPPRESS flags=%x access=%x\n", dwFlags, dwDesiredAccess); + return (HDESK)0xDEADBEEF; // fake handle + //return (HDESK)NULL; // fake handle +} + +BOOL WINAPI extSwitchDesktop(HDESK hDesktop) +{ + OutTraceDW("SwitchDesktop: SUPPRESS hDesktop=%x\n", hDesktop); + return TRUE; +} + +HDESK WINAPI extOpenDesktop(LPTSTR lpszDesktop, DWORD dwFlags, BOOL fInherit, ACCESS_MASK dwDesiredAccess) +{ + OutTraceDW("CreateDesktop: SUPPRESS flags=%x access=%x\n", dwFlags, dwDesiredAccess); + return (HDESK)0xDEADBEEF; // fake handle + //return (HDESK)NULL; // fake handle +} + +BOOL WINAPI extCloseDesktop(HDESK hDesktop) +{ + OutTraceDW("CloseDesktop: SUPPRESS hDesktop=%x\n", hDesktop); + return TRUE; } \ No newline at end of file diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 85265e4e1766c8eb635e85e57e0f03c8a4f4b462..247c8118f47b82ff44b0d8ba2ba1ccd5044f245d 100644 GIT binary patch delta 3450 zcmZu!X>3&26+ZWk7i=7dZ9L;yZT7{$Y_?|t7@p@n+YgUtUS`27JlmLr0A(pj1u==i z5EKQzE&*^4(eT1 zq#}C||F-L5HF4^{tRjVszg$IT<9PZ}71@$a`t(f_nNKF3KF$VREhIUoXV;K_rU;yN zA0;=PIDY#Pc{&cqhnL7>Hhy!*82|jh82|Xx81EMfT>rvtjKB97<1JCpinFJ50!-C+ zvt^R6aDa%J}t78JsT41VzGLrl*8Z^VIE%rK$HXB(GsiGl#iAj-PRxmRKi#zD;15z!u2h&xFp9}W)KPtK^7BgES^kcEJN@d z-D9=e3Jp2YD5{#IB*J1`!aTnho~Hv=vjxwEZ5x-vF}0a#ei%<5Sgp1RBea@`qRLH7 zEr*GOwx1~yCK0;rjIGCPL`CFUG2ARhust6OtArvZXt+;GO*8m?m6cwwa7vORa#H4$ z5Afc#%517exdfaB7JA;Q{j>f9;yb#PBB8S!x^mt$v z?HMo^&*mcTQmr;Z^}!rE-fp&*ag}$giuk~wW6)C$b7_^`N#@ZuyH%dgLs&U2krb0D z)@{%e0uSeV zF_jAeDCYv(!^}no@gb_T6{oGMNJx=Q(X8~Evi0AyiYL&O>3&9d( zCKHiHKDCi*y1{7)hPkQn&e0l_sM4Uc@D}lLkVb0QeA2kML4O6v^sLh=)DZfIt2SFL z0jY^?c3g?pYD%;w1{EHU#|L$^z*THhM#+sL?mUwNu#_%#IZXBVGC2SJNx6)xfC$~{ zax82Zm69pVB7zVdrA3rPGNno)ZU&P>5Tn;!R-)3cT@Lq)qe2t7xh$LodVLTlwDG#j zl)&4rxF_JdAEZ!(J$R@(oCPZ zok9zt8*VsBD_v0HAZ@g%#8I+*lt(fyHrI$sggN*EumW4yv7he%o~A~BifQfia*304 z(639JLMNf!H|?gC81``gB-W|l16_oEa??Rp(e_dod5QLvnwP(96iJHJcv~fzpMpOC ztA}YNs;2n*@pNAqrX?kgzXwgM9X#7LBLu(1$x2vDAC_7y>xL!%8ej<__zrbXHhb3( zYvEXfD)Kr3FKig*CAm6P%M1fP*obe5TNbj3zA@Q3|GUF6(O6PW@R)MgOh6OWgyxsD za4edP$07;v!d5~%-gS}J>D^CDNH@)!;>_~GHbRfhh8`|q5o8;M=$}D(J#8}M4aU%k=sFwj;#Oeg*&M%ijs-@WM5ar7Gq`~s>kX&*R{Es3#=!L6 z&K%mYb6Q$)(Y~EC(%4P!@0^{+GwHNl8GaUhX$a4z@9mnNj+sOMv@7FNMyJ1(!E@=V zAv}+s$Y9#Odo2CtExVCTkL}K(Gj_8pz`hN=v}1QB-`C%_dr!XOKpuXS;jO8IMySSd zaL~9!9vGLUtF1y=PCj0V!=Sgc2`*v4q`%I_%USxnIGR4s2L0nU!D;Hs0sRgF;Y_}M zHk;UT-$t(!V?nnsM>SFa`T_*P$wK}8JYviF3Oz3t=~u>MZ zcUoyHC;G9BasVe<2QI3q2Aw+D>JZ%R6uhQ;2()U!uFqR36q&5Gd^R_CFPf`3>0XJ! zPY@hops9}NA2VoOCmGAdX%P zbS1ErD9YQhR6z>;7<&rAV+O{wpx-J47gwO)DvV?QnS7;@gWb;D8|(#mfzbV(&fKyx Od^SEK`fpkV=YIj1_ox8? delta 21445 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 diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 5652e3843a96e7d7a544409b400f465e32b1c7cc..bace9939a1af9a9b9b870e5bfa821d9a5dd12298 100644 GIT binary patch delta 2746 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 diff --git a/host/host.aps b/host/host.aps index 6612bec2fa00c55ab0f4ded405ddaf8026c07b0b..b6d78306c7ef52a545a0c66dbefb15325b0c07b8 100644 GIT binary patch delta 45 ycmeD9%+&FjX@UZy#zaLk5hLUHlA=n(n2h}55-_1xl)N#!avh__=BMixa{&N>%@Mi) delta 45 ycmeD9%+&FjX@UZy`b0%D5krIc;-ci3jQrvfFrinJ%&;-Lavh`k=BMixa{&Nq^&00>9`