cshap调用API函数开启摄像头源代码

cshap调用API函数开启摄像头源代码
cshap调用API函数开启摄像头源代码

摄像头的编程使用 avicap32.dll

2013-10-29 15:41:01| 分类:c# 编程|举报|字号订阅

Video For Windows API DLL

avicap32.dll是Windows API应用程序接口相关模块,用于对摄像头和其它视频硬件进行AVI电影和视频的截取。

WM_CAP_START= WM_USER=1024; // start of unicode messages

WM_CAP_UNICODE_START= WM_USER+100; //开始

WM_CAP_GET_CAPSTREAMPTR= (WM_CAP_START+ 1); //获得 CAPSTR EAMPTR

WM_CAP_SET_CALLBACK_ERROR= (WM_CAP_START+ 2); //设置回调错误

WM_CAP_SET_CALLBACK_STATUS= (WM_CAP_START+ 3); //设置回调状态

WM_CAP_SET_CALLBACK_YIELD= (WM_CAP_START+ 4); //设置回调出产

WM_CAP_SET_CALLBACK_FRAME= (WM_CAP_START+ 5); //设置回调结构

WM_CAP_SET_CALLBACK_ⅥDEOSTREAM= (WM_CAP_START+ 6); //设置回调视频

流WM_CAP_SET_CALLBACK_WAVESTREAM= (WM_CAP_START+ 7); //设置回调视频波

流WM_CAP_GET_USER_DATA =(WM_CAP_START+ 8); //获得使用者数据

WM_CAP_SET_USER_DATA =(WM_CAP_START+ 9) ; //设置使用者数据

WM_CAP_DRⅣER_CONNECT =(WM_CAP_START+ 10); //驱动程序连接

WM_CAP_DRⅣER_DISCONNECT =(WM_CAP_START+ 11); //断开启动程序连接

WM_CAP_DRⅣER_GET_NAME =(WM_CAP_START+ 12); //获得驱动程序名字

WM_CAP_DRⅣER_GET_VERSION =(WM_CAP_START+ 13); //获得驱动程序版本

WM_CAP_DRⅣER_GET_CAPS =(WM_CAP_START+ 14); //获得驱动程序性能

WM_CAP_FILE_SET_CAPTURE_FILE =(WM_CAP_START+ 20); //设置捕获文件的文件名

WM_CAP_FILE_GET_CAPTURE_FILE =(WM_CAP_START+ 21); //获得捕获文件的文件

名WM_CAP_FILE_SAVEAS =(WM_CAP_START+ 23); //另存文件为

WM_CAP_FILE_SAVEDIB =(WM_CAP_START+ 25); //保存文件

// out of order to save on ifdefs

WM_CAP_FILE_ALLOCATE =(WM_CAP_START+ 22); //分派文件,为捕获文件建一个指定大小的文

件 WM_CAP_FILE_SET_INFOCHUNK =(WM_CAP_START+ 24); //设置开始文件

WM_CAP_EDIT_COPY =(WM_CAP_START+ 30); //编辑复制,把图象考入剪贴

板WM_CAP_SET_AUDIOFORMAT =(WM_CAP_START+ 35); //设置音频格式

WM_CAP_GET_AUDIOFORMAT =(WM_CAP_START+ 36); //捕获音频格式

WM_CAP_DLG_ⅥDEOFORMAT =(WM_CAP_START+ 41); //1065 打开视频格式设置对话框,选择数字视频的框架大小和视频图像的色深,以及捕获视频图像的压缩格式。

WM_CAP_DLG_ⅥDEOSOURCE =(WM_CAP_START+ 42); //1066 打开属性设置对话框,设置对比度、亮度等。(视频源对话框)选择视频输入通道和视频图像的动态参数。

WM_CAP_DLG_ⅥDEODISPLAY =(WM_CAP_START+ 43); //1067 打开视频显示对话框

WM_CAP_GET_ⅥDEOFORMAT =(WM_CAP_START+ 44); //1068 获得视频格式

WM_CAP_SET_ⅥDEOFORMAT =(WM_CAP_START+ 45); //1069 设置视频格式

WM_CAP_DLG_ⅥDEOCOMPRESSION =(WM_CAP_START+ 46); //1070 打开压缩设置对话

框WM_CAP_SET_PREⅥEW =(WM_CAP_START+ 50); //设置预览模式

WM_CAP_SET_OVERLAY =(WM_CAP_START+ 51); //设置覆盖

WM_CAP_SET_PREⅥEWRATE =(WM_CAP_START+ 52); //设置预览模式下图像的帧速

度WM_CAP_SET_SCALE =(WM_CAP_START+ 53); //设置预览视频的缩放比例

WM_CAP_GET_STATUS =(WM_CAP_START+ 54); //获得状态

WM_CAP_SET_SCROLL =(WM_CAP_START+ 55); //设置卷

WM_CAP_GRAB_FRame =(WM_CAP_START+ 60); //逮捕结构

WM_CAP_GRAB_FRame_NOSTOP =(WM_CAP_START+ 61); //停止逮捕结构,截取当前图

象WM_CAP_SEQUENCE =(WM_CAP_START+ 62); //次序,捕捉到文件

WM_CAP_SEQUENCE_NOFILE =(WM_CAP_START+ 63); //没有文件

WM_CAP_SET_SEQUENCE_SETUP =(WM_CAP_START+ 64); //设置当前捕获的帧频

率WM_CAP_GET_SEQUENCE_SETUP =(WM_CAP_START+ 65); //获得当前捕获的帧频

率WM_CAP_SET_MCI_DEⅥCE =(WM_CAP_START+ 66); //设置媒体控制接口

WM_CAP_GET_MCI_DEⅥCE =(WM_CAP_START+ 67); //获得媒体控制接口

WM_CAP_STOP =(WM_CAP_START+ 68); //停止捕捉

WM_CAP_ABORT =(WM_CAP_START+ 69); //异常中断

WM_CAP_SINGLE_FRame_OPEN =(WM_CAP_START+ 70); //打开单一的结

构WM_CAP_SINGLE_FRame_CLOSE =(WM_CAP_START+ 71); //关闭单一的结

构WM_CAP_SINGLE_FRame =(WM_CAP_START+ 72); //单一的结构

WM_CAP_PAL_OPEN =(WM_CAP_START+ 80); //打开视频

WM_CAP_PAL_SAVE =(WM_CAP_START+ 81); //保存视频

WM_CAP_PAL_PASTE =(WM_CAP_START+ 82); //粘贴视频

WM_CAP_PAL_AUTOCREATE =(WM_CAP_START+ 83); //自动创造

WM_CAP_PAL_MANUALCREATE =(WM_CAP_START+ 84); //手动创造

// Following added post VFW 1.1

WM_CAP_SET_CALLBACK_CAPCONTROL =(WM_CAP_START+ 85); // 设置收回的错误

WM_CAP_END =WM_CAP_SET_CALLBACK_CAPCONTROL;

C#中的使用:

1、首先定义一个底层类AviCapture.cs

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

using System.Drawing;

namespace CamaraMonitor

{

public class AviCapture

{

[DllImport("avicap32.dll")]//包含了执行视频捕获的函数,它给AVI文件I/O和视频、音频设备驱动程序提供一个高级接口

public static extern IntPtr capCreateCaptureWindow(string lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hwndParent, int nID);

[DllImport("AVICAP32.dll", CharSet = CharSet.Unicode)]

public static extern bool capGetDriverDescription(int wDriverIndex, StringBuilder lpszName, int cbName, StringBuilder lpszVer, int cbVer);

[DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);

[DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, int lParam);

[DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam); [DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, FrameEventHandler lParam);

[DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref BITMAPINFO lParam);

[DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPDRIVERCAPS lParam);

[DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPTUREPARMS lParam);

[DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPSTATUS lParam);

[DllImport("User32.dll")]

public static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);

[DllImport("avicap32.dll")]

public static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);

#region 消息常量(向窗口发送消息的指令)

//消息常量 --------------------------------------------

public const int WM_START = 0x400; //此并非摄像头消息0x400表示的就是1024 public const int WS_CHILD = 0x40000000;

public const int WS_VISIBLE = 0x10000000;

public const int SWP_NOMOVE = 0x2;

public const int SWP_NOZORDER = 0x4;

public const int WM_CAP_GET_CAPSTREAMPTR = WM_START + 1;

public const int WM_CAP_SET_CALLBACK_ERROR = WM_START + 2;//设置收回错误

public const int WM_CAP_SET_CALLBACK_STATUS = WM_START + 3;//设置收回状态

public const int WM_CAP_SET_CALLBACK_YIELD = WM_START + 4;//设置收回出产 public const int WM_CAP_SET_CALLBACK_FRAME = WM_START + 5;//设置收回结构 public const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_START + 6;//设置收回视频流

public const int WM_CAP_SET_CALLBACK_WAVESTREAM = WM_START + 7;//设置收回视频波流

public const int WM_CAP_GET_USER_DATA = WM_START + 8;//获得使用者数据

public const int WM_CAP_SET_USER_DATA = WM_START + 9;//设置使用者数据

public const int WM_CAP_DRIVER_CONNECT = WM_START + 10;//驱动程序连接

public const int WM_CAP_DRIVER_DISCONNECT = WM_START + 11;//断开启动程序连接

public const int WM_CAP_DRIVER_GET_NAME = WM_START + 12;//获得驱动程序名字

public const int WM_CAP_DRIVER_GET_VERSION = WM_START + 13;//获得驱动程序版本

public const int WM_CAP_DRIVER_GET_CAPS = WM_START + 14;//获得驱动程序帽子

public const int WM_CAP_FILE_SET_CAPTURE_FILE = WM_START + 20;//设置捕获文件

public const int WM_CAP_FILE_GET_CAPTURE_FILE = WM_START + 21;//获得捕获文件

public const int WM_CAP_FILE_ALLOCATE = WM_START + 22;//分派文件

public const int WM_CAP_FILE_SAVEAS = WM_START + 23;//另存文件为

public const int WM_CAP_FILE_SET_INFOCHUNK = WM_START + 24;//设置开始文件 public const int WM_CAP_FILE_SAVEDIB = WM_START + 25;//保存文件

public const int WM_CAP_EDIT_COPY = WM_START + 30;//编辑复制

public const int WM_CAP_SET_AUDIOFORMAT = WM_START + 35;//设置音频格式

public const int WM_CAP_GET_AUDIOFORMAT = WM_START + 36;//捕获音频格式 public const int WM_CAP_DLG_VIDEOFORMAT = WM_START + 41;//1065 打开视频格式设置对话框

public const int WM_CAP_DLG_VIDEOSOURCE = WM_START + 42;//1066 打开属性设置对话框,设置对比度亮度等

public const int WM_CAP_DLG_VIDEODISPLAY = WM_START + 43;//1067 打开视频显示

public const int WM_CAP_GET_VIDEOFORMAT = WM_START + 44;//1068 获得视频格式

public const int WM_CAP_SET_VIDEOFORMAT = WM_START + 45;//1069 设置视频格式

public const int WM_CAP_DLG_VIDEOCOMPRESSION = WM_START + 46;//1070 打开压缩设置对话框

public const int WM_CAP_SET_PREVIEW = WM_START + 50;//设置预览

public const int WM_CAP_SET_OVERLAY = WM_START + 51;//设置覆盖

public const int WM_CAP_SET_PREVIEWRATE = WM_START + 52;//设置预览比例

public const int WM_CAP_SET_SCALE = WM_START + 53;//设置刻度

public const int WM_CAP_GET_STATUS = WM_START + 54;//获得状态

public const int WM_CAP_SET_SCROLL = WM_START + 55;//设置卷

public const int WM_CAP_GRAB_FRAME = WM_START + 60;//逮捕结构

public const int WM_CAP_GRAB_FRAME_NOSTOP = WM_START + 61;//停止逮捕结构

public const int WM_CAP_SEQUENCE = WM_START + 62;//次序

public const int WM_CAP_SEQUENCE_NOFILE = WM_START + 63;//使用

WM_CAP_SEUENCE_NOFILE消息(capCaptureSequenceNoFile宏),可以不向磁盘文件写入数据。该消息仅在配合回调函数时有用,它允许你的应用程序直接使用音视频数据。

public const int WM_CAP_SET_SEQUENCE_SETUP = WM_START + 64;//设置安装次序

public const int WM_CAP_GET_SEQUENCE_SETUP = WM_START + 65;//获得安装次

public const int WM_CAP_SET_MCI_DEVICE = WM_START + 66;//设置媒体控制接口 public const int WM_CAP_GET_MCI_DEVICE = WM_START + 67;//获得媒体控制接口 public const int WM_CAP_STOP = WM_START + 68;//停止

public const int WM_CAP_ABORT = WM_START + 69;//异常中断

public const int WM_CAP_SINGLE_FRAME_OPEN = WM_START + 70;//打开单一的结构

public const int WM_CAP_SINGLE_FRAME_CLOSE = WM_START + 71;//关闭单一的结构

public const int WM_CAP_SINGLE_FRAME = WM_START + 72;//单一的结构

public const int WM_CAP_PAL_OPEN = WM_START + 80;//打开视频

public const int WM_CAP_PAL_SAVE = WM_START + 81;//保存视频

public const int WM_CAP_PAL_PASTE = WM_START + 82;//粘贴视频

public const int WM_CAP_PAL_AUTOCREATE = WM_START + 83; //自动创造

public const int WM_CAP_PAL_MANUALCREATE = WM_START + 84;//手动创造

public const int WM_CAP_SET_CALLBACK_CAPCONTROL = WM_START + 85;// 设置收回的错误

#endregion 消息常量

#region 结构

VIDEOHDR|BITMAPINFOHEADER|BITMAPINFO|CAPTUREPARMS|CAPDRIVERCAPS|C APSTATUS

//========================================================VideoHdr 结构

===================================================================== //VideoHdr 结构定义了视频数据块的头信息,在编写回调函数时常用到其数据成员lpData(指向数据缓存的指针)和dwBufferLength(数据缓存的大小)。

//视频帧到缓存的捕获则需要应用回调函数和相应的数据块结构 VIDEOHDR

[StructLayout(LayoutKind.Sequential)]

public struct VIDEOHDR

{

public IntPtr lpData; /* 指向数据缓存的指针 */

public int dwBufferLength; /* 数据缓存的大小 */

public int dwBytesUsed; /* Bytes actually used */

public int dwTimeCaptured; /* Milliseconds from start of stream */

public int dwUser; /* for client's use */

public int dwFlags; /* assorted flags (see defines) */

public int dwReserved; /* reserved for driver */

}

//================================================================= ====================================================================== ==

//=======================================================BitmapInfoHe ader结构

===================================================================

//BitmapInfoHeader定义了位图的头部信息

[StructLayout(LayoutKind.Sequential)]

public struct BITMAPINFOHEADER

{

public int biSize;

public int biWidth;

public int biHeight;

public short biPlanes;

public short biBitCount;

public int biCompression;

public int biSizeImage;

public int biXPelsPerMeter;

public int biYPelsPerMeter;

public int biClrUsed;

public int biClrImportant;

}

//================================================================= ====================================================================== ==

//======================================================BitmapInfo结构

===================================================================== //BitmapInfo 位图信息

[StructLayout(LayoutKind.Sequential)]

public struct BITMAPINFO

{

public BITMAPINFOHEADER bmiHeader;

public int bmiColors;

}

//================================================================= ====================================================================== ==

//=====================================================CAPTUREPAR MS结构

====================================================================== //CAPTUREPARMS 包含控制视频流捕获过程的参数,如捕获帧频、指定键盘或鼠标键以终止捕获、捕获时间限制等;

[StructLayout(LayoutKind.Sequential)]

public struct CAPTUREPARMS

{

public int dwRequestMicroSecPerFrame; // 期望的桢播放率,以毫秒为单位,默认为66667,相当于15桢每秒。

public bool fMakeUserHitOKToCapture; // Show "Hit OK to cap" dlg?开始捕获标志位,如果值为真,则在开始捕获前要产生一个询问对话框,默认为假。

public uint wPercentDropForError; //所允许的最大丢桢百分比,可以从0变化到100,默认值为10。

public bool fYield; /*另起线程标志位,如果为真,则程序重新启动一个线程用于视频流的捕获,默认值是假。

但是如果你是为了真,你必须要在程序中处理一些潜在的操

作,因为当视频捕获时,其他操作并没有被屏蔽。*/

public int dwIndexSize; // 在AVI文件中所允许的最大数目的索引项(32K) public uint wChunkGranularity; // AVI文件的逻辑尺寸,以字节为单位。如果值是0,则说明该尺寸渐增在 Win32程序中无用。(2K)

public bool fUsingDOSMemory; // Use DOS buffers?

public uint wNumVideoRequested; // 所被允许分配的最大视频缓存

public bool fCaptureAudio; // 音频标志位,如果音频流正在捕获,则该值为真。

public uint wNumAudioRequested; // 最大数量的音频缓存,默认值为10。

public uint vKeyAbort; // 终止流捕获的虚拟键盘码,默认值为VK_ESCAPE [MarshalAs(UnmanagedType.Bool)]

public bool fAbortLeftMouse; // 终止鼠标左键标志位,如果该值为真,则在流捕获过程中如果点击鼠标左键则该捕获终止,默认值为真。

public bool fAbortRightMouse; // Abort on right mouse?

public bool fLimitEnabled; // 捕获操作时间限制,如果为真,则时间到了以后捕获操作终止,默认为假

public uint wTimeLimit; // 具体终止时间,只有 fLimitEnabled是真时.该位才有效

public bool fMCIControl; // Use MCI video source?

public bool fStepMCIDevice; // Step MCI device?MCI 设备标志。

public int dwMCIStartTime; // Time to start in MS

public int dwMCIStopTime; // Time to stop in MS

public bool fStepCaptureAt2x; // Perform spatial averaging 2x

public int wStepCaptureAverageFrames; // 当基于平均采样来创建桢时,桢的采样时间,典型值是5

public int dwAudioBufferSize; // 音频缓存的尺寸,如果用默认值0,缓存尺寸是

最大0.5秒,或10k字节。

public int fDisableWriteCache; // Attempt to disable write cache

public int AVStreamMaster; //音视频同步标志。

}

//================================================================= ====================================================================== ==

//=================================================CAPDRIVERCAPS

结构

======================================================================

=

//CAPDRIVERCAPS定义了捕获驱动器的能力,如有无视频叠加能力、有无控制视频源、视频格式的对话框等;

[StructLayout(LayoutKind.Sequential)]

public struct CAPDRIVERCAPS

{

[MarshalAs(UnmanagedType.U2)]

public UInt16 wDeviceIndex; //捕获驱动器的索引值,该值可以由0到9变化。

[MarshalAs(UnmanagedType.Bool)]

public bool fHasOverlay; // 视频叠加标志,如果设备支持视频叠加这该位是真。 [MarshalAs(UnmanagedType.Bool)]

public bool fHasDlgVideoSource; //视频资源对话框标志位,如果设备支持视频选择、控制对话框,该值为真。

[MarshalAs(UnmanagedType.Bool)]

public bool fHasDlgVideoFormat; //视频格式对话框标志位,如果设备支持对视频格

式对话框的选择,该位真。

[MarshalAs(UnmanagedType.Bool)]

public bool fHasDlgVideoDisplay; //视频展示对话框标志位,如果设备支持对视频捕

获缓存区的重新播放,该位是真。

[MarshalAs(UnmanagedType.Bool)]

public bool fCaptureInitialized; //捕获安装标志位,如果捕获驱动器已经成功连接,

该值为真。

//[MarshalAs(UnmanagedType.Bool)]

public bool fDriverSuppliesPalettes; //驱动器调色板标志位,如果驱动器能创建调色板,则该位是真。

[MarshalAs(UnmanagedType.I4)]

public int hVideoIn;

[MarshalAs(UnmanagedType.I4)]

public int hVideoOut;

[MarshalAs(UnmanagedType.I4)]

public int hVideoExtIn;

[MarshalAs(UnmanagedType.I4)]

public int hVideoExtOut;

}

//================================================================= ====================================================================== ==

//=====================================================CAPSTATUS结构

====================================================================== ==

//CAPSTATUS定义了捕获窗口的当前状态,如图像的宽、高等;

[StructLayout(LayoutKind.Sequential)]

public struct CAPSTATUS

{

public int uiImageWidth; //图像宽度

public int uiImageHeight; //图像高度

public bool fLiveWindow; //活动窗口标记,如果窗口正以预览的方式展示图像,那么该值为真

public bool fOverlayWindow; //叠加窗口标志位,如果正在使用硬件叠加,则该位是真。

public bool fScale; //输入所放标志位,如果窗口是正在缩放视频到客户区,那么该位是真。当使用硬件叠加时,改位无效。

public Point ptScroll; //被展示在窗口客户区左上角的那个象素的x、y坐标偏移量。

public bool fUsingDefaultPalette; //默认调色板标志位,如果捕获窗口正在使用当前默认调色板,该值为真

public bool fAudioHardware; // 音频硬件标志位,如果系统已经安装了音频硬件,该值为真。

public bool fCapFileExists; //捕获文件标志位,如果一个捕获文件已经被创建,该值为真

public int dwCurrentVideoFrame; // 当前或最近流捕获过程中,所处理的桢的数目。包括丢弃的桢。

public int dwCurrentVideoFramesDropped;//当前流捕获过程中丢弃的桢的数目。

public int dwCurrentWaveSamples; // # of wave samples cap'td

public int dwCurrentTimeElapsedMS; // 从当前流捕获开始计算,程序所用的时间,

以毫秒为单位。

public IntPtr hPalCurrent; // 当前剪切板的句柄。

public bool fCapturingNow; // 捕获标志位,当捕获是正在进行时,改位是真

public int dwReturn; // 错误返回值,当你的应用程序不支持错误回调函数时可

以应用改位

public int wNumVideoAllocated; // 被分配的视频缓存的数目。

public int wNumAudioAllocated; // 被分配的音频缓存的数目。

}

//=================================================================

======================================================================

==

#endregion 结构

VIDEOHDR|BITMAPINFOHEADER|BITMAPINFO|CAPTUREPARMS|CAPDRIVERCAPS|C APSTATUS

public delegate void FrameEventHandler(IntPtr lwnd, IntPtr lpVHdr);

#region 公共函数

//公共函数

public static object GetStructure(IntPtr ptr, ValueType structure)

{

return Marshal.PtrToStructure(ptr, structure.GetType());

}

public static object GetStructure(int ptr, ValueType structure) {

return GetStructure(new IntPtr(ptr), structure);

}

public static void Copy(IntPtr ptr, byte[] data)

{

Marshal.Copy(ptr, data, 0, data.Length);

}

public static void Copy(int ptr, byte[] data)

{

Copy(new IntPtr(ptr), data);

}

public static int SizeOf(object structure)

{

return Marshal.SizeOf(structure);

}

#endregion 公共函数

}

}

2、然后在AviCapture类基础上建立的Video类Video.cs

using System;

using System.Collections;

using System.Drawing;

using System.Runtime.InteropServices;

using System.Text;

using System.IO;

namespace CamaraMonitor

{

public class Video

{

public bool flag = true;

public delegate void RecievedFrameEventHandler(byte[] data);

public event RecievedFrameEventHandler RecievedFrame;

public static ArrayList allDriver = new ArrayList();//所有视频硬件信息

public AviCapture.CAPDRIVERCAPS CapDriverCAPS;//捕获驱动器的能力,如有无视频叠加能力、有无控制视频源、视频格式的对话框等;

public AviCapture.CAPSTATUS CapStatus;//该结构用于保存视频设备捕获窗口的当前状态,如图像的宽、高等

public AviCapture.CAPTUREPARMS Capparms;

private IntPtr mControlPtr;//显示设备句柄

public IntPtr lwndC;

private int mWidth;//视频宽度

private int mHeight;//视频高度

public Bitmap ba;

///

/// 构造函数

///

///

///

///

public Video(IntPtr handle, int width, int height)

{

CapDriverCAPS = new AviCapture.CAPDRIVERCAPS();//捕获驱动器的能力,如有无视频叠加能力、有无控制视频源、视频格式的对话框等;

CapStatus = new AviCapture.CAPSTATUS();//该结构用于保存视频设备捕获窗口的当前状态,如图像的宽、高等

mControlPtr = handle;

mWidth = width;

mHeight = height;

//---------------------------------------------------以下为获得机器上所有视频设备

}

///

/// 方法说明:获得本机器上的所有视频设备

///

//public static void GetAllDriver()

//{

// for (int i = 0; i < 6; i++)

// {

// StringBuilder name = new StringBuilder(128);

// StringBuilder version = new StringBuilder(128);

// if (AviCapture.capGetDriverDescription(i, name, 128, version, 128))//获得已经安装的捕获的设备名称和版本信息

// {

// AviCapture.VideoCaptureDevice vcd = new VideoCaptureDevice(i,

name.ToString(), version.ToString());

// allDriver.Add(vcd);

// }

// }

//}

public void get()

{

AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_GET_SEQUENCE_SETUP, AviCapture.SizeOf(Capparms), ref Capparms);

}

public void set()

{

AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_SET_SEQUENCE_SETUP, AviCapture.SizeOf(Capparms), ref

Capparms);

}

///

/// 关闭摄像头

///

public void CloseWebcam(int index) //关闭摄像头

{

CapDriverCAPS.fCaptureInitialized = false;

AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_DRIVER_DISCONNECT, index, 0);

}

///

/// 开启摄像头

///

public void StartWebCam() //开启摄像头

{

this.lwndC = AviCapture.capCreateCaptureWindow("", AviCapture.WS_CHILD | AviCapture.WS_VISIBLE, 0, 0, mWidth, mHeight, mControlPtr, 0);//AVICap类的捕捉窗口

//AviCapture.FrameEventHandler FrameEventHandler = new

AviCapture.FrameEventHandler(framecallback);

//AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_SET_CALLBACK_ERROR, 0, 0);//注册错误回调函数

//AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_SET_CALLBACK_STATUS, 0, 0);//注册状态回调函数

//AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);//注册视频流回调函数

//AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_SET_CALLBACK_FRAME, 0, FrameEventHandler);//注册帧回调函数 //if (!CapDriverCAPS.fCaptureInitialized)//判断当前设备是否被其他设备连接已经连接 //{

if (AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_DRIVER_CONNECT, 0, 0))

{

//-----------------------------------------------------------------------

AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_DRIVER_GET_CAPS, AviCapture.SizeOf(CapDriverCAPS), ref CapDriverCAPS);//获得当前视频 CAPDRIVERCAPS定义了捕获驱动器的能力,如有无视频

叠加能力、有无控制视频源、视频格式的对话框等;

AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_GET_STATUS, AviCapture.SizeOf(CapStatus), ref CapStatus);//获得当前视频流的尺寸存入CapStatus结构

AviCapture.BITMAPINFO bitmapInfo = new AviCapture.BITMAPINFO();//设置视频格式 (height and width in pixels, bits per frame).

bitmapInfo.bmiHeader = new AviCapture.BITMAPINFOHEADER();

bitmapInfo.bmiHeader.biSize = AviCapture.SizeOf(bitmapInfo.bmiHeader);

bitmapInfo.bmiHeader.biWidth = mWidth;

bitmapInfo.bmiHeader.biHeight = mHeight;

bitmapInfo.bmiHeader.biPlanes = 1;

bitmapInfo.bmiHeader.biBitCount = 24;

AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_SET_PREVIEWRATE, 34, 0);//设置在PREVIEW模式下设定视频窗口的刷新率设置每34毫秒显示一帧,即显示帧速为每秒29帧

AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_SET_SCALE, 1, 0);//打开预览视频的缩放比例

AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_SET_VIDEOFORMAT, AviCapture.SizeOf(bitmapInfo), ref bitmapInfo);

AviCapture.CAPTUREPARMS captureparms = new

AviCapture.CAPTUREPARMS();

AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_GET_SEQUENCE_SETUP, AviCapture.SizeOf(captureparms), ref captureparms);

if (CapDriverCAPS.fHasOverlay)

{

AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_SET_OVERLAY, 1, 0);//启用叠加注:据说启用此项可以加快渲染速度

}

AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_SET_PREVIEW, 1, 0);//设置显示图像启动预览模式 PREVIEW

AviCapture.SetWindowPos(this.lwndC, 0, 0, 0, mWidth, mHeight,

AviCapture.SWP_NOZORDER | AviCapture.SWP_NOMOVE);//使捕获窗口与进来的视频流尺寸保持一致

}

else

{

System.Windows.Forms.MessageBox.Show("未能连接设备,请检查设备连接及是否有其他程序占用!");

flag = false;

}

//}

//else

//{

// System.Windows.Forms.MessageBox.Show("未能连接设备,请检查设备连接及是否有其他程序占用!");

//}

}

///

/// 抓图到制定的路径

///

///

public void grabImage(string path)

{

IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);

AviCapture.SendMessage(lwndC, AviCapture.WM_CAP_FILE_SAVEDIB, 0, hBmp.ToInt32());

}

///

/// 弹出视频格式设置对话框

///

public void setCaptureFormat()

{

AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_DLG_VIDEOFORMAT, 0, 0);

// 是否由新的图像尺寸?

// 如果有,发送通知给父窗口,告诉它尺寸改变了

AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_GET_STATUS, AviCapture.SizeOf(CapStatus), ref CapStatus);//获得当前视频流的尺寸存入CapStatus结构 }

///

/// 开始录像

///

/// 要保存录像的路径

public void StarKinescope(string path)

{

IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);

AviCapture.SendMessage(this.lwndC,

AviCapture.WM_CAP_FILE_SET_CAPTURE_FILE, 0, hBmp.ToInt32());

AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_SEQUENCE, 0, 0);

}

///

/// 停止录像

///

public void StopKinescope()

{

Delphi Api

auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API 删除打印机缓冲文件AbortSystemShutdown API 停止系统工作 AccessCheck API 检验客户访问权限AccessCheckAndAuditAlarm API 检验访问,产生声音或警报ActivateKeyboardLayout API 激活一个新的键盘设备AddAccessAllowedAce API 将ACCESS_ALLOWED_ACE加入ACL AddAccessDeniedAce API 将ACCESS_DENIED_ACE加入ACL AddAce API 将ACE加入一个已存在的ACL AddAtom API 将一个字符串加入本地原子表AddAuditAccessAce API 将SYSTEM_AUDIT_ACE加入ACL AddFontResource API 将一种字体加入字体表 AddForm API 加入一个打印机窗体 AddJob API 启动一个打印作业 AddMonitor API 加入一个打印机管理器 AddPort API 加入一个打印机端口 AddPrintProcessor API 将打印处理器复制到打印机服务器中AddPrintProvidor API 加入一个打印机支持器 AddPrinter API 在打印机服务器上建立一个打印机AddPrinterConnection API 为当前用户建立与打印机的联系AddPrinterDriver API 将打印机驱动程序复制到打印机服务器中AdjustTokenGroups API 使能/取消令牌中的群AdjustTokenPrivileges API 使能/取消令牌特权AdjustWindowRect API 计算所需窗口矩形的大小AdjustWindowRectEx API 计算所需窗口矩形的大小AdvancedDocumentProperties API 进行打印机高级设置AllocConsole API 为当前进程建立控制台AllocateAndInitializeSid API 分配和初始化SID AllocateLocallyUniqueId API 分配LUID AngleArc API 按指定角度画弧 AnimatePalette API 替换逻辑调色板中的项目 AnyPopup API 标识弹出式窗口是否存在 AppendMenu API 在菜单中加入新的项目 Arc API 画弧 ArcTo API 画椭圆弧 AreAllAccessesGranted API 检查所有要求的访问AreAnyAccessesGranted API 检查任何要求的访问ArrangeIconicWindows API 排列最小化的子窗口

DELPHI常用组件

Delphi常用组件的使用 目录 1.按钮类组件 1.1Button组件

Button组件位于Standard页。 Button组件的常用属性表 属性描述 Cation用于在按钮上显示文本内容 Cancel用来指定按钮是否为取消按钮 Default用于指定按钮是否为默认按钮,在按Enter键时也选中命令按钮Hint设置鼠标在组件上短暂停时在组件旁显示的提示小窗口的内容ShowHint确定是否显示提示文本,默认值是FALSE 1.2Bitbtn组件 Bitbtn组件(位图组件)位于Additional,与Button很相似,只是多了一个位图符号在按钮上(如带有对号的OK,问好的Help等),其某些属性与Button类似,下表为其独有的的特性。(注:此组件不需编写代码) Bitbtn组件的常用属性表 属性描述 Kind Kind属性的值就是位图按钮上显示的图标。Kind属性后的下拉列表中有一组默认图标的属性值,有bkCancel(取消)、bkAbort(终止)、bkAll(所有)、 bkClose(关闭)等。 Glyph用于在位图按钮上显示加载后的位图图形 NumGlyphs用于指明位图按钮所能使用位图的个数。在delphi中,最多允许向一个位图按钮提供4个图像文件,用于表示4中不停状态 Layout用于指出位图图形在位图组件上的放置位置 1.3SpeedButton组件 SpeedButton组件(加速按钮)位于Additional,常放置在Panel组件上,用于设计工具栏。它与Bitbtn相似,也可以显示图像和文本,但通常只用于显示图像。 SpeedButton组件的常用属性表 属性描述 AllowAllUp用于设置同一组的加速按钮是否具有同时弹起的状态。若设置为FALSE,则当同一组加速按钮中的一个被按下时,其他加速按钮都处于弹起状态,即这 组按钮必须有且只有一个处于按下状态 Down用于设置该加速按钮是否处于按下状态,若设置为TRUE,则表示按钮处于按下状态 Flat用于设置在鼠标移动到该按钮上时,按钮是否显示三维效果。为FLASE则不出现 GroupIndex用于将数个加速按钮设置成一组,只需将其值设置成不等于0的数值即可1.4RadioButton组件

(DELPHI)API函数大全

(DELPHI)API函数大全 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称WNetGetLastError 获取网络错误的扩展错误信息WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC (统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime 取得消息队列中上一条消息处理完毕时的时间PostMessage 将一条消息投递到指定窗口的消息队列PostThreadMessage 将一条消息投递给应用程序RegisterWindowMessage 获取分配给一个字串标识符的消息编号ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件

delphi常用函数大全

delphi常用函数大全(转) Abort函数引起放弃的意外处理 Abs函数绝对值函数 AddExitProc函数将一过程添加到运行时库的结束过程表中 Addr函数返回指定对象的地址 AdjustLineBreaks函数将给定字符串的行分隔符调整为CR/LF序列Align属性使控件位于窗口某部分 Alignment属性控件标签的文字位置 AllocMem函数在堆栈上分配给定大小的块 AllowGrayed属性允许一个灰度选择 AnsiCompareStr函数比较字符串(区分大小写) AnsiCompareText函数比较字符串(不区分大小写) AnsiLowerCase函数将字符转换为小写 AnsiUpperCase函数将字符转换为大写 Append函数以附加的方式打开已有的文件 ArcTan函数余切函数 AssignFile函数给文件变量赋一外部文件名 Assigned函数测试函数或过程变量是否为空 AutoSize属性自动控制标签的大小 BackgroundColor属性背景色 BeginThread函数以适当的方式建立用于内存管理的线程 BevelInner属性控件方框的内框方式 BevelOuter属性控件方框的外框方式 BevelWidth属性控件方框的外框宽度 BlockRead函数读一个或多个记录到变量中 BlockWrite函数从变量中写一个或多个记录 BorderStyle属性边界类型 BorderWidth属性边界宽度 Break命令终止for、while、repeat循环语句 Brush属性画刷 Caption属性标签文字的内容 ChangeFileExt函数改变文件的后缀 ChDir函数改变当前目录 Checked属性确定复选框选中状态 Chr函数返回指定序数的字符 CloseFile命令关闭打开的文件 Color属性标签的颜色 Columns属性显示的列数 CompareStr函数比较字符串(区分大小写) Concat函数合并字符串 Continue命令继续for、while、repeat的下一个循环 Copy函数返回一字符串的子串 Cos函数余弦函数 Ctl3D属性是否具有3D效果 Cursor属性鼠标指针移入后的形状 Date函数返回当前的日期 DateTimeToFileDate函数将DELPHI的日期格式转换为DOS的日期格式DateTimeToStr函数将日期时间格式转换为字符串DateTimeToString函数将日期时间格式转换为字符串 DateToStr函数将日期格式转换为字符串

Delphi 文件操作集锦

Delphi 文件操作集锦 Delphi 文件操作集锦 时间:2011-5-26来源:yang 作者: peng点击: 11次Delphi 文件操作集锦 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses activex,comobj,shlobj; {$R *.dfm} function ResolveLink(const ALinkfile: String): String; var

link: IShellLink; storage: IPersistFile; filedata: TWin32FindData; buf: Array[0..MAX_PATH] of Char; widepath: WideString; begin OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, link)); OleCheck(link.QueryInterface(IPersistFile, storage)); widepath := ALinkFile; Result := ‘unable to resolve link‘; If Succeeded(storage.Load(@widepath[1], STGM_READ)) Then If Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) Then If Succeeded(link.GetPath(buf, sizeof(buf), filedata, SLGP_UNCPRIORITY)) Then Result := buf; storage := nil; link:= nil; end; // 用法: procedure TForm1.Button1Click(Sender: TObject);

常用API函数参数

常用API函数参数5 ImmIsIME 函数功能: 判断指定的句柄是否为IME; 函数原型: BOOL ImmIsIME( HKL hKL ); 参数hKL: 待检查的键盘布局句柄; 返回值: 函数调用成功返回1,失败返回0. 速查信息: Windows NT: 要求4.0或更高版本 Windows: 要求Windows 95 或更高. Windows CE:不支持. Header: 声明在imm.h. Import Library: imm32.lib. Windows XP没有自带五笔型输入法,这对五笔型用户而言无疑是个大大的遗憾。网上的五笔型输入法虽然种类很多,也不乏优秀的版本,但一方面有些版本是共享软件需要注册,另一方面也许很多五笔型输入法的老用户最习惯用的还是老牌的“王码五笔型输入法86/98版”。 微软的Office XP软件中包含了这个老牌的五笔型输入法,但如果用户并不使用Office XP中的任何组件,仅仅是为了使用“王码五笔型输入法”而运行Office XP安装程序,就显的有些小题大做了,更不用说是某些零时在外面用公用电脑而又想用五笔型输入法的情况。于是网上出现了很多简化的安装方法,大体上可以分为三个步骤: 拷贝输入法文件(从Of还是9x/ME。示例代码fice XP光盘中或已经安装了“王码五笔型输入法”的电脑中提取) 增加注册表项 重启后通过控制面板添加输入法

整个过程中拷贝输入法文件和增加注册表项可以用批处理和导入注册表文件来简化操作,但必须重启计算机才能在控制面板里添加输入法,这同样让使用者觉得比较烦琐。那么作为一个编程爱好者能不能通过写个小程序来实现在不重新启动计算机的情况下全自动的安装“王码五笔型输入法”呢(也就是即装即用)?答案是肯定的!因为微软的Office XP 安装程序做到了,这就表示微软肯定留有一个专门用来安装输入法的接口,一般来说应该是一系列API函数。 经过一番摸索,笔者在MSDN里找到了这个可以用来安装输入法的API:ImmInstallIME()。Ok,现在我们就开始利用这个API来实现自己的“王码五笔型输入法”全自动安装程序。 一、准备素材 我们先试着从Office XP光盘中提取“王码五笔型输入法”的输入法文件。通过Windows 的查找功能在Office XP的第一张安装盘中查找与“WINWB”相关的文件,在OFFICE1.CAB 中找到了一下14个文件:WINWB86.CHM.*、https://www.360docs.net/doc/3c15253534.html,T.*、WINWB86.HLP.*、WINWB86A.IME.*、WINWB86A.MB.*、WINWB86W.IME.*、WINWB86W.MB.*、WINWB98.CHM.*、https://www.360docs.net/doc/3c15253534.html,T.*、WINWB98.HLP.*、WINWB98A.IME.*、WINWB98A.MB.*、WINWB98W.IME.*、WINWB98W.MB.*,其中*是很长的一串由字母、数字和下滑线组成的序列(个人认为应该是微软为了校验文件内容的正确性而加上的内容为该文件效验码的后缀吧)。去掉这个长长的后缀,可以看到5 种类型的文件。很明显,*.CHM、*.CNT和*.HLP是五笔型输入法的帮助文件,*.MB是码表文件,而*.IME是主要的输入法文件。其中*.IME和*.MB有文件名部分以A结尾和以W结尾两个版本,经过笔者试验证实了它们分别是ANSI和UNICODE两种版本的输入法文件。文件名部分以A结尾的文件适用于Windows 9x,以W结尾的文件适用于NT系列Windows系统。 提取了输入法文件后必须让安装程序针对不同版本的操作系统将它们拷贝到正确的目录,以便调用API来进行输入法安装。笔者分别在安装了Office XP中自带的“王码五笔型输入法”的Windows 98SE和Windows XP操作系统中查找以上文件,发现帮助文件都存放在WINDOWSHELP目录中(这里假设Windows系统都安装在WINDOWS目录)。而主要的输入法文件(*.IME)和码表文件(*.MB)在Windows 9x下存放于WINDOWSSYSTEM目录中,在NT系列Windows系统中存放于WINDOWSSYSTEM32目录中。 二、相关API函数 素材的准备工作已经完成,现在我们来看一下代码编写过程中需要用到的4个主要的API函数。 2.1 GetVersion 函数原型:

Delphi函数大全 (2)

Delphi函数大全 function Int(X:Extended):Extended;//取整 function Round(X:Extended):Int64;//四舍五入function Trunc(X:Extended):Int64;//将小数无条件舍去信息来源:邪恶八进制信息安全团队 名称类型说明 ---------------------------------------------------------------------------------- Abort函数引起放弃的意外处理 Abs函数绝对值函数 AddExitProc函数将一过程添加到运行时库的结束过程表中Addr函数返回指定对象的地址 AdjustLineBreaks函数将给定字符串的行分隔符调整为CR/LF序列Align属性使控件位于窗口某部分 Alignment属性控件标签的文字位置 AllocMem函数在堆栈上分配给定大小的块AllowGrayed属性允许一个灰度选择 AnsiCompareStr函数比较字符串(区分大小写)AnsiCompareText函数比较字符串(不区分大小写)AnsiLowerCase函数将字符转换为小写 AnsiUpperCase函数将字符转换为大写 Append函数以附加的方式打开已有的文件 ArcTan函数余切函数 AssignFile函数给文件变量赋一外部文件名 Assigned函数测试函数或过程变量是否为空 AutoSize属性自动控制标签的大小 BackgroundColor属性背景色 BeginThread函数以适当的方式建立用于内存管理的线程BevelInner属性控件方框的内框方式 BevelOuter属性控件方框的外框方式 BevelWidth属性控件方框的外框宽度 BlockRead函数读一个或多个记录到变量中 BlockWrite函数从变量中写一个或多个记录 BorderStyle属性边界类型 BorderWidth属性边界宽度 Break命令终止for、while、repeat循环语句 Brush属性画刷 Caption属性标签文字的内容 ChangeFileExt函数改变文件的后缀 ChDir函数改变当前目录

API函数手册

POSTEK PPLⅠAPI函数手册 G Series 条码标签打印机 Version 2.00 深圳市博思得通信发展有限公司 二○○四年

API函数库文件说明 名称:CDFPSK.dll 中文版本编号:1.X.X.X 英文版本编号:2.X.X.X 版权所有:?2004深圳市博思得通信发展有限公司。保留所有权利。 用途 本API函数库为深圳市博思得通信发展有限公司条码标签打印机的用户提供一组命令,为他们编写基于Windows9X,NT,2000,XP等操作系统的应用程序提供便利。 本API函数库仅支持本公司产品。 缩略语对照 PPLⅠ:深圳市博思得通信发展有限公司的第一套打印机编程语言(Printer Porgram Language Ⅰ)。 API:应用程序编程接口(Application Program Interface)。 Dots:像素(pixel)是一种计算机科学技术尺寸单位,原指电视图像成像的最小单位,在打印机领域表示打印机的最小打印成像单位:1dot等于一英寸除以打印机的最大分辨率。 - 对于203DPI的打印机来说, 1dot = 25.4mm/203 = 0.125mm(1dot = 1000 / 203 = 5mil); - 对于300DPI的打印机来说, 1dot = 25.4mm/300 = 0.085mm(1dot = 1000 / 300 = 3mil)。 TrueType Font:是基于Windows操作系统使用,可装卸的字体。 - 已经安装的TrueType Font,都可以被本函数使用。 使用前须知 字符串 * 字符串以双引号(“)作为起始和结束标记; *

DELPHI中如何调用API,可举例说明

DELPHI中如何调用API,可举例说明 第一部分Delphi知识1. 如果一个元件希望放到IDE的元件面板上,它必须从________类派生,如果一个元件能作为其它元件的容器,它必须从_____________类派生,如果一个元件在运行时可见,它必须从___________________类派生(A)TGraphicControl (B)TWinContr 1、rtl70.bpl是什么?有什么用? 2、delphi的Package相对dll有什么优点? 3、以下的记录(结构)变量在内存占多少字节?type a = packed record v1: Byte; v2: Word; v3: string[16]; v4: Double; v5: string; v6: TForm; end; 4、以下的写法是否正确?type a 1.您为什么选择软件开发这个行业?(30字左右简写); 2.如果有您解决不了的软件问题您会采取什么样的解决措施; 3.a.请您写出Object Pascal所支持的数据类型;b.请您写出Shl、Shr、Xor、Not 的数学表示法; 4.请您写出VCL结构层次(以TObject开始,最少五层);5 二.是非题(共20道)1.从主菜单上选择Project|Syntax Check 菜单选项,Delphi将编译从上次编译后有改动的任何单元,并报出遇到的错误。()2.Delphi的VCL对象有些是指针,从堆栈中分配空间,有些则不是。()3.粘贴时,如果作为容器的组件已被选择,

剪贴 一.选择题(共40道)1.用户开发程序时需要经常在窗体和编辑器窗口之间来回切换,可使用快捷键()。A、F12和F11 B、F12和F13 C、F12和Ctrl+F12 D、F12和Alt+F12 E、F12和Shift+F12 2.某函数如下:Function check(n,k:Integer):Integer; Var m:Integer; Beg 编程语言:delphi7.0或Vc++6.0 时间:4小时内环境:可参考帮助文档,但不能上网查资料1、编程查找指定目录下所有EXE 文件,并将其全路径存入Result.txt中,要求用递归。2、采用SOCKET(可用SOCKET API或delphi Socket控件)实现点对点传输大文件,要求不能掉

API函数大全

? 1. API之网络函数 ? ?WNetAddConnection 创建同一个网络资源的永久性连接 ? ?WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接 WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称 WNetGetLastError 获取网络错误的扩展错误信息 WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC (统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 ? ? 2. API之消息函数 ?BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条消息投递给应用程序 RegisterWindowMessage 获取分配给一个字串标识符的消息编号 ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口 SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 ? 3. API之文件处理函数 ?CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件 DeviceIoControl 对设备执行指定的操作

delphi 三种常用的延时方法

在Delphi中,通常可以用以下三种方法来实现程序的延时,即TTtimer控件,Sleep函数,GetTickCount函数。但是其精度是各不相同的。 1)TTtimer控件 TTtimer控件的实质是调用Windows API定时函数SetTimer和KillTimer来实现的,并简化了对WM_TIMER 消息的处理过程。通过设置OnTimer事件和Interval属性,我们可以很方便的产生一些简单的定时事件。 2)Sleep函数 Sleep函数用来使程序的执行延时给定的时间值。Sleep的调用形式为 Sleep(milliseconds),暂停当前的进程milliseconds毫秒。Sleep的实现方法其实也是调用Windows API的Sleep函数。例如: sleep(1000); //延迟1000毫秒 Sleep会引起程序停滞,如果你延迟的时间较长的话,你的程序将不能够响应延时期间的发生的其他消息,所以程序看起来好像暂时死机。 3)GetTickCount函数 在主程序中延时,为了达到延时和响应消息这两个目的,GetTickCount()构成的循环就是一种广为流传的方法。例如: 1.procedure Delay(MSecs: Longint); 2.//延时函数,MSecs单位为毫秒(千分之1秒) 3.var 4.FirstTickCount, Now: Longint; 5.begin 6.FirstTickCount := GetTickCount(); 7.repeat 8. Application.ProcessMessages; 9. Now := GetTickCount(); 10.until (Now - FirstTickCount >= MSecs) or (Now

API函数大全

waveInAddBuffer 向波形输入设备添加一个输入缓冲区 WaveInClose 关闭指定的波形输入设置 waveInGetDevCaps 查询指定的波形输入设备以确定其性能 waveInGetErrorText 检取由指定的错误代码标识的文本说明 waveInGetID 获取指定的波形输入设备的标识符 waveInGetNumDevs 返回系统中存在的波形输入设备的数量 waveInGetPosition 检取指定波形输入设备的当前位置 waveInMessage 发送一条消息给波形输入设备的驱动器 waveInOpen 为录音而打开一个波形输入设备 waveInPrepareHeader 为波形输入准备一个输入缓冲区 waveInReset 停止给定的波形输入设备的输入,且将当前位置清零 waveInStart 启动在指定的波形输入设备的输入 waveInStop 停止在指定的波形输入设备上的输入 waveInUnprepareHeader 清除由waveInPrepareHeader函数实现的准备 waveOutBreakLoop 中断给定的波形输出设备上一个循环,并允许播放驱动器列表中的下一个块waveOutClose 关闭指定的波形输出设备 waveOutGetDevCaps 查询一个指定的波形输出设备以确定其性能 waveOutGetErrorText 检取由指定的错误代码标识的文本说明 waveOutGetID 检取指定的波形输出设备的标识符 waveOutGetNumDevs 检取系统中存在的波形输出设备的数量 waveOutGetPitch 查询一个波形输出设备的当前音调设置 waveOutGetPlaybackRate 查询一个波形输出设备当前播放的速度 waveOutGetPosition 检取指定波形输出设备的当前播放位置 waveOutGetV olume 查询指定波形输出设备的当前音量设置 waveOutMessage 发送一条消息给一个波形输出设备的驱动器 waveOutOpen 为播放打开一个波形输出设备 waveOutPause 暂停指定波形输出设备上的播放 waveOutPrepareHeader 为播放准备一个波形缓冲区 waveOutRestart 重新启动一个被暂停的波形输出设备 waveOutSetPitch 设置一个波形输出设备的音调 waveOutSetPlaybackRate 设置指定波形输出设备的速度 waveOutSetV olume 设置指定的波形输出设备的音量 waveOutUnprepareHeader 清除由waveOutPrepareHeader函数实现的准备 waveOutWrite 向指定的波形输出设备发送一个数据块

Delphi调用API函数操作串口

再贴上一段用API操作串口的代码,还是API好,一目了然,呵呵。 unit main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; Memo2: TMemo; Label1: TLabel; Label2: TLabel; RadioGroup1: TRadioGroup; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure OpenSerialPort; procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; hSerialPort:Cardinal; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin OpenSerialPort; end; procedure tform1.OpenSerialPort;

API函数参考手册

《API函数参考手册》 收集:小红帽 https://www.360docs.net/doc/3c15253534.html, Copyright by vortex 1999.1 ================================================================================= ============== Api函数名函数说明WIN16可用WIN95可用WINNT可用 --------------------------------------------------------------------------------------------------------------- AbortDoc 终止一项打印作业是是是 AbortPath 终止或取消DC中的一切路径否是是 AbortPrinter 删除打印机缓冲文件否是是 AbortSystemShutdowna 停止系统工作否是是 AccessCheck 检验客户访问权限否是是 AccessCheckAndAuditAlarm 检验访问,产生声音或警报否是是 ActivateKeyboardLayout 激活一个新的键盘设备否是是 AddAccessAllowedAce 将ACCESS_ALLOWED_ACE加入ACL 否是是 AddAccessDeniedAce 将ACCESS_DENIED_ACE加入ACL 否是是 AddAce 将ACE加入一个已存在的ACL 否是是 AddAtom 将一个字符串加入本地原子表是是是 AddAuditAccessAce 将SYSTEM_AUDIT_ACE加入ACL 否是是 AddFontResource 将一种字体加入字体表是是是 AddForm 加入一个打印机窗体否是是 AddJob 启动一个打印作业否是是 AddMonitor 加入一个打印机管理器否是是 AddPort 加入一个打印机端口否是是 AddPrintProcessor 将打印处理器复制到打印机服务器中否是是 AddPrintProvidor 加入一个打印机支持器否是是 AddPrinter 在打印机服务器上建立一个打印机否是是 AddPrinterConnection 为当前用户建立与打印机的联系否是是 AddPrinterDriver 将打印机驱动程序复制到打印机服务器中否是是 AdjustTokenGroups 使能/取消令牌中的群否是是 AdjustTokenPrivileges 使能/取消令牌特权否是是 AdjustWindowRect 计算所需窗口矩形的大小是是是 AdjustWindowRectEx 计算所需窗口矩形的大小是是是 AdvancedDocumentProperties 进行打印机高级设置否是是 AllocConsole 为当前进程建立控制台否是是 AllocateAndInitializeSid 分配和初始化SID 否是是 AllocateLocallyUniqueId 分配LUID 否是是 AngleArc 按指定角度画弧否是是 AnimatePalette 替换逻辑调色板中的项目是是是 AnyPopup 标识弹出式窗口是否存在是是是 AppendMenu 在菜单中加入新的项目是是是

Delphi直接用Windows API编程

Delphi程序员往往习惯了用VCL元件编程,其实Delphi也能进行基于WINDOWS API SDK的编程。而且用Delphi在某些方面效果似乎比用Visual C++效果还要好。比如本例程,用Delphi 6编译出来只有9216字节(9k)而 同样的Visual C++程序却有16896字节(17k)。(此例程是笔者从网上下载的 c++源码例程,其中有c源程序,和编译好的.exe文件。源代码经笔者改写成Delphi代码。)这证明Delphi编译器的优化效果非常好。 API是(Application Programming Interface)的缩写,意为应用编程 界面,它包含了编写Windows所有函数、数据类型。VCL就是以它为基础进行 封装的,它是应用程序在Windows 上运行的基础。通过熟悉使用WINDOWS API SDK直接编制WINDOWS程序,程序员将对WINDOWS的执行机制有更深入的了解, 从而编写出更高效、实用的程序。 下面是我们用API函数建立的第一个程序: 1 : program HELLOWIN; 2 : 3 : uses 4 : windows, Messages ,mmsystem; 5 : 6 : 7 : 8 : var 9 : sz_appname:array [0..8] of char='HelloWin'#0; 10 : Win_Class: WNDCLASSEX; //窗口类 11 : w_Handle,inst:HWND;//w_Handle窗口句柄、程序句柄 12 : w_msg:TMSG; //消息数据 13 : 14 : function WindowProc(h_Wnd,u_Msg,w_Param,l_Param: LONGINT):LRESULT;stdcall; 15 : //回调函数 16 : var p_hdc:hdc; 17 : p_rect:trect; 18 : ps : PAINTSTRUCT ; 19 : begin 20 : 21 : 22 : case u_msg of 23 : WM_DESTROY : PostQuitMessage (0); 24 : WM_CREATE : PlaySound (pchar('hellowin.wav'#0), 0, SND_FILENAME or SND_ASYNC) ; 25 : WM_PAINT :begin 26 : p_hdc := BeginPaint (h_wnd, ps) ;

API函数速查

控件与消息函数:共六页。第一页,第二页第三页第四页第五页第六页 AdjustWindowRect给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup判断屏幕上是否存在任何弹出式窗口 ArrangeIconicWindows排列一个父窗口的最小化子窗口 AttachThreadInput连接线程输入函数 BeginDeferWindowPos启动构建一系列新窗口位置的过程 BringWindowToTop将指定的窗口带至窗口列表顶部 CascadeWindows以层叠方式排列窗口 ChildWindowFromPoint返回父窗口中包含了指定点的第一个子窗口的句柄 ClientToScreen判断窗口内以客户区坐标表示的一个点的屏幕坐标 CloseWindow最小化指定的窗口 CopyRect矩形内容复制 DeferWindowPos该函数为特定的窗口指定一个新窗口位置 DestroyWindow清除指定的窗口以及它的所有子窗口 DrawAnimatedRects描绘一系列动态矩形 EnableWindow指定的窗口里允许或禁止所有鼠标及键盘输入 EndDeferWindowPos同时更新DeferWindowPos调用时指定的所有窗口的位置及状态 控件与消息函数:共六页。第一页第三页第四页第五页第六页 EnumChildWindows为指定的父窗口枚举子窗口 EnumThreadWindows枚举与指定任务相关的窗口 EnumWindows枚举窗口列表中的所有父窗口 EqualRect判断两个矩形结构是否相同 FindWindow寻找窗口列表中第一个符合指定条件的顶级窗口 FindWindowEx在窗口列表中寻找与指定条件相符的第一个子窗口 FlashWindow闪烁显示指定窗口 GetActiveWindow获得活动窗口的句柄 获得一个窗口的句柄,这个窗口位于当前输入线程,且拥有鼠标捕获(鼠标活GetCapture 动由它接收) GetClassInfo取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本,结构中包含了与指定

API函数说明

FR100 IC卡读写器 API 编程说明 版本 1.00

Table of Contents 1概述4 1.1API文件说明: 4 1.2适用操作系统:4 1.3适用开发语言:4 2API 函数5 2.1设备通用函数5 2.1.1int _stdcall IFD_GetDLL_Ver(char *rVER) 5 2.1.2int _stdcall IFD_SetDLL_CommKEY(unsigned char *key) 5 2.1.3int _stdcall IFD_SetDLL_CommMode(unsigned char mode) 5 2.1.4int _stdcall IFD_InitComm(char *portname, unsigned long baud) 5 2.1.5int _stdcall IFD_ExitComm() 6 2.1.6int _stdcall IFD_GetDevice_Ver(unsigned char *rData, unsigned char *rLen) 6 2.1.7int _stdcall IFD_ResetDevice() 6 2.1.8int _stdcall IFD_Control_LED(unsigned char LedCtrlMode, unsigned char LED1, unsigned char LED2) 6 2.1.9int _stdcall IFD_Control_Buzzer(unsigned char *cBeepData, unsigned char cLen) 7 2.1.10int _stdcall IFD_SetDevice_Baud(unsigned char baud) 7 2.1.11int _stdcall IFD_SetDevice_CommKEY(unsigned char *key) 8 2.2卡座通用函数8 2.2.1int _stdcall IFD_Select_ICC(unsigned char IccNumber) 8 2.2.2int _stdcall IFD_PowerON_ICC() 8 2.2.3int _stdcall IFD_PowerDown_ICC() 8 2.2.4int _stdcall IFD_Get_CardStatus(unsigned char *rCardStatus, unsigned char *rLen) 8 2.2.5int _stdcall IFD_Get_CardStatus(unsigned char *rCardStatus, unsigned char *rLen) 9 2.2.6int _stdcall IFD_AutoPowerON(unsigned char mode) 9 2.3CPU卡专用函数9 2.3.1int _stdcall IFD_CPUCARD_Reset(unsigned char *rData, unsigned char *rLen) 9 2.3.2int _stdcall IFD_CPUCARD_ExchangeAPDU(unsigned char *cData, unsigned char cLen, unsigned char *rData, unsigned char *rLen) 9

相关主题
相关文档
最新文档