📄 unitmain.pas
字号:
unit UnitMain;
////////////////////////////////////////////////////////////////////////////////
//
// 要增加一个全局命令,请:
// 1.编写命令的实现函数,原形为pFN_EXECUTE_CMD;
// 2.设置常量CommandsCount值加一;
// 3.在InitImpCommands函数中,初始化数组成员InitImpCommands[CommandsCount-1];
// 4.在InitArgumentsInfo函数中,增加一个CASE(即初始化数组成员ArgumentsInfo[CommandsCount-1][]);
// 5.在InitCommandsInfo函数中,增加一个CASE(即初始化数组成员CommandsInfo[CommandsCount-1]);
// 6.在InitLibInfo函数中,修改库的版本号(本步可省略)。
//
// 要增加一个常量,请:
// 1.在InitConstInfo函数中,增加一个CASE(初始化数组成员ConstsInfo[InitConstInfo-1];
// 2.设置常量ConstsCount值加一;
// 3.在InitLibInfo函数中,修改库的版本号(本步可省略)。
//
////////////////////////////////////////////////////////////////////////////////
interface
uses Windows,
SysUtils,
elibTypes,
HotKey,
Messages,
Clp,
AntiCrack,
{$IFDEF __ELIB_FNR}{$ELSE}WMConst,{$ENDIF}
SubClass
;
const
//****
CommandsCount = 24; //!!! 命令个数
{$IFDEF __ELIB_FNR}
{$ELSE}
OtherConstsCount=4+26; //除了窗口消息(WM_??)之外的常量数
ConstsCount = WMConstCount+OtherConstsCount; //!!! 常量个数(如果为0,请把常量信息数组ConstsInfo的定义行注释掉,同时把函数InitConstInfo中的代码清除)
//易语言IDE菜单项“编辑”->“粘贴”的ID
IDE_PASTE = 57637;
{$ENDIF}
//自定义数据类型个数
DataTypeCount=0;
type
//SearchDir CallBack function
pSDCallBack=^SDCallBack;
//SDCallBack=procedure(pFileName,pShortName:integer);stdcall;
SDCallBack=function(addFileName:PChar;lbDir:LongBool):LongBool;stdcall;
var
CallBack:SDCallBack;
LibInfo : LIB_INFO;
hRes: Cardinal; //资源句柄
ResSize: Integer; //资源大小(字节)
CommandsInfo : array[0..CommandsCount-1] of CMD_INFO; // 命令信息
ArgumentsInfo: array[0..CommandsCount-1] of array of ARG_INFO; // 参数信息
ImpCommands : array[0..CommandsCount-1] of pFN_EXECUTE_CMD; // 命令实现
{$IFDEF __ELIB_FNR}
{$ELSE}
ConstsInfo : array[0..ConstsCount-1] of LIB_CONST_INFO; // 常量信息
{$ENDIF}
//****************
//DataTypeInfo : array[0..DataTypeCount-1] of LIB_DATA_TYPE_INFO;//自定义数据类型信息
DTPointMember: array[0..1] of LIB_DATA_TYPE_ELEMENT;
CmdsIndex:integer;
function ProsessNotify (nMsg:Integer; dwParam1:LongWord=0; dwParam2:LongWord=0) :Integer; stdcall;
{$IFDEF __ELIB_FNR}
{$ELSE}
function AddInFunction (nAddInFnIndex:Integer) :Integer; stdcall;
{$ENDIF}
{$IFDEF __DEBUG}procedure PrintDebug();{$ELSE} {$ENDIF}
//----------------------------------------------------------------------------
// 唯一的输出函数 GetNewInf() 的声明
function GetNewInf () : pLIB_INFO; stdcall; export;
//----------------------------------------------------------------------------
// 命令实现函数的声明(所有函数的原形都是相同的,即pFN_EXECUTE_CMD)
procedure UnInterceptMsg (pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure InterceptMsg(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure mHiWord(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure mLoWord(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure mMakeWParam(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure GetData (pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure GetAdd (pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure mSendMessage(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure mPostMessage(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure RegWndMsg(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure SearchDir(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure ShiftL(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure ShiftR(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
procedure ExecuteSub(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
//自定义数据类型“点”的成员方法
procedure fnMakePoint(pRetData: pMDATA_INF; nArgCount: Integer;
pArgInf: pMDATA_INF); cdecl;
//----------------------------------------------------------------------------
function mSearchDir(pDir:PChar;lbSubDir:LongBool):LongBool;stdcall;
// 内部初始化函数的声明
procedure InitLibInfo; // 初始化库信息
{$IFDEF __ELIB_FNR}
{$ELSE}
procedure InitArgumentsInfo; // 初始化参数信息
procedure InitConstInfo; // 初始化常量信息
procedure InitResource;
{$ENDIF}
procedure InitImpCommands; // 初始化命令实现信息
procedure InitCommandsInfo; // 初始化命令信息
{// 初始化自定义数据类型信息
procedure InitDataTypeInfo;}
////////////////////////////////////////////////////////////////////////////////
implementation
// 这是本库唯一的输出函数GetNewInf的定义
function GetNewInf () : pLIB_INFO; stdcall; export;
begin
Result:=@LibInfo;
end;
////////////////////////////////////////////////////////////////////////////////
// 初始化库信息
procedure InitLibInfo;
begin
LibInfo.m_dwLibFormatVer:=LIB_FORMAT_VER;
LibInfo.m_szGuid:=PChar('ECFB3D10541A422b8B73779AF00B4D0C'); // 在Delphi中按下[Ctrl+Shift+G]即可得到一个唯一的GUID字串 ——liigo注
LibInfo.m_nMajorVersion:=1; // 主版本号
LibInfo.m_nMinorVersion:=2; // 次版本号
LibInfo.m_nBuildNumber:=0; // 构建版本号
{2004-2-26 1.2.0版}
LibInfo.m_nRqSysMajorVer:=3;
LibInfo.m_nRqSysMinorVer:=0;
LibInfo.m_nRqSysKrnlLibMajorVer:=3;
LibInfo.m_nRqSysKrnlLibMinorVer:=0;
LibInfo.m_szName:=PChar('eLIB++'); // 支持库名称
LibInfo.m_nLanguage:=LT_CHINESE;
LibInfo.m_szExplain:=
{$IFDEF __ELIB_FNR}
nil
{$ELSE}
PChar('让我们心爱的《易语言》更好用,功能更强大!!')
{$ENDIF};
LibInfo.m_dwState:={$IFDEF __ELIB_FNR}LBS_NO_EDIT_INFO{$ELSE}0{$ENDIF};
LibInfo.m_szAuthor:={$IFDEF __ELIB_FNR}nil{$ELSE} PChar('袁晓辉'){$ENDIF}; // 作者
LibInfo.m_szZipCode:={$IFDEF __ELIB_FNR} nil{$ELSE}nil{$ENDIF};
LibInfo.m_szAddress:={$IFDEF __ELIB_FNR} nil{$ELSE}nil{$ENDIF};
LibInfo.m_szPhone:={$IFDEF __ELIB_FNR} nil{$ELSE}nil{$ENDIF};
LibInfo.m_szFax:={$IFDEF __ELIB_FNR} nil{$ELSE}nil{$ENDIF};
LibInfo.m_szEmail:={$IFDEF __ELIB_FNR} nil{$ELSE}PChar('EtfStudio@vip.sina.com'){$ENDIF};
LibInfo.m_szHomePage:={$IFDEF __ELIB_FNR} nil{$ELSE}nil{$ENDIF};
LibInfo.m_szOther:=
{$IFDEF __ELIB_FNR}
nil
{$ELSE}
'★该支持库由 袁晓辉(海洋) 在《Delphi 6》下开发。'+#13+'特别感谢Liigo提供Pascal框架!(2003-12-03)★'
{$ENDIF};
//*********************************
LibInfo.m_nDataTypeCount:=0;
LibInfo.m_pDataType:=nil;
//*********************************
{$IFDEF __ELIB_FNR}
LibInfo.m_nCategoryCount:=0;
LibInfo.m_szzCategory:=nil;
LibInfo.m_nCmdCount:=0;
LibInfo.m_pBeginCmdInfo:=nil;
{$ELSE}
LibInfo.m_nCategoryCount:=6;
LibInfo.m_szzCategory:=PChar('0000消息操作'+#0+
'0000内存操作'+#0+
'0000数值操作'+#0+
'0000系统相关'+#0+
'0000剪辑板操作'+#0+
'0000底层操作'+#0);
LibInfo.m_nCmdCount:=CommandsCount;
LibInfo.m_pBeginCmdInfo:=@CommandsInfo;
{$ENDIF}
LibInfo.m_pCmdsFunc:=@ImpCommands;
LibInfo.m_pfnRunAddInFn:={$IFDEF __ELIB_FNR}nil{$ELSE}AddInFunction{$ENDIF};
LibInfo.m_szzAddInFnInfo:=
{$IFDEF __ELIB_FNR}
nil
{$ELSE}
PChar('插入“消息处理子程序”'+#0+'感谢使用《eLIB++》'+#0)
{$ENDIF};
LibInfo.m_pfnNotify:=ProsessNotify;
LibInfo.m_pfnSuperTemplate:=nil;
LibInfo.m_szzSuperTemplateInfo:=nil;
{$IFDEF __ELIB_FNR}
LibInfo.m_nLibConstCount:=0;
LibInfo.m_pLibConst:=nil;
{$ELSE}
LibInfo.m_nLibConstCount:=ConstsCount;
LibInfo.m_pLibConst:=@ConstsInfo;
{$ENDIF}
LibInfo.m_szzDependFiles:=nil;
end;
////////////////////////////////////////////////////////////////////////////////
// 初始化命令信息
procedure InitCommandsInfo;
var i:Integer;
begin
// 采用for+case的结构,可使新增一个命令或常量时,在复制、粘贴之后,尽可能减少修改代码的次数。下同。
for i:=0 to High(CommandsInfo) do case i+1 of
1:// 第一个命令的信息---------------------------------------------------------
with CommandsInfo[i] do begin
{$IFDEF __ELIB_FNR}
m_szName:=nil;
m_szEGName:=nil;
m_szExplain:=nil;
{$ELSE}
m_szName:=PChar('截获消息');
m_szEGName:=PChar('InterceptMsg');
m_szExplain:=PChar('截获指定窗口的指定消息,并用相应的子程序加以处理。成功返回真,失败返回假。用该命令成功建立的消息截获将在其所属窗口正常销毁时被系统自动撤消,也可以在运行期间用“撤销消息截获”命令强制撤销。*注意:该命令只能用于调用该命令的程序中的窗口');
{$ENDIF}
m_shtCategory:=1;
m_wState:=0;
m_dtRetType:=SDT_BOOL;
m_wReserved:=0;
m_shtUserLevel:=LVL_HIGH;
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_nArgCount:=High(ArgumentsInfo[i])+1;
m_pBeginArgInfo:=pARG_INFO(ArgumentsInfo[i]);
end;
2:// 第2个命令的信息---------------------------------------------------------
with CommandsInfo[i] do begin
{$IFDEF __ELIB_FNR}
m_szName:=nil;
m_szEGName:=nil;
m_szExplain:=nil;
{$ELSE}
m_szName:=PChar('撤消消息截获');
m_szEGName:=PChar('UnInterceptMsg');
m_szExplain:=PChar('撤消对指定窗口的消息截获。成功返回真,失败返回假。该命令和“截获消息”命令配合使用。');
{$ENDIF}
m_shtCategory:=1;
m_wState:=0;
m_dtRetType:=SDT_BOOL;
m_wReserved:=0;
m_shtUserLevel:=LVL_HIGH;
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_nArgCount:=High(ArgumentsInfo[i])+1;
m_pBeginArgInfo:=pARG_INFO(ArgumentsInfo[i]);
end;
3:// 第3个命令的信息---------------------------------------------------------
with CommandsInfo[i] do begin
{$IFDEF __ELIB_FNR}
m_szName:=nil;
m_szEGName:=nil;
m_szExplain:=nil;
{$ELSE}
m_szName:=PChar('取地址');
m_szEGName:=PChar('GetAdd');
m_szExplain:=PChar('返回指定容器的内存地址,返回0代表失败。');
{$ENDIF}
m_shtCategory:=2;
m_wState:=0;
m_dtRetType:=SDT_INT;
m_wReserved:=0;
m_shtUserLevel:=LVL_HIGH;
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_nArgCount:=High(ArgumentsInfo[i])+1;
m_pBeginArgInfo:=pARG_INFO(ArgumentsInfo[i]);
end;
4:// 第4个命令的信息---------------------------------------------------------
with CommandsInfo[i] do begin
{$IFDEF __ELIB_FNR}
m_szName:=nil;
m_szEGName:=nil;
m_szExplain:=nil;
{$ELSE}
m_szName:=PChar('取数据');
m_szEGName:=PChar('GetData');
m_szExplain:=PChar('从指定的内存地址取回数据,成功返回真,失败返回假。');
{$ENDIF}
m_shtCategory:=2;
m_wState:=0;
m_dtRetType:=SDT_BOOL;
m_wReserved:=0;
m_shtUserLevel:=LVL_HIGH;
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_nArgCount:=High(ArgumentsInfo[i])+1;
m_pBeginArgInfo:=pARG_INFO(ArgumentsInfo[i]);
end;
5:// 第5个命令的信息---------------------------------------------------------
with CommandsInfo[i] do begin
{$IFDEF __ELIB_FNR}
m_szName:=nil;
m_szEGName:=nil;
m_szExplain:=nil;
{$ELSE}
m_szName:=PChar('取高字值');
m_szEGName:=PChar('HiWord');
m_szExplain:=PChar('取一个整数的高16位字节所代表的值。');
{$ENDIF}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -