📄 extendmain.cpp
字号:
DirExist(Sfile)?szHash="0":szHash="1";
if (nArgs > 2) //如果有设置的返回值的保存项 如 参数,返回值 output
{
srv_paramsetoutput(pSrvProc, 3, szHash, strlen(szHash), FALSE);
}
else // don't send row if output buffer provided 如果只有一个参数则返回默认字段名
{
srv_describe(pSrvProc, 1, "RdDir", SRV_NULLTERM, bType,
cbMaxLen, bType, strlen(szHash), szHash);
srv_sendrow(pSrvProc);
}
srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
return 0;
}
//Pcanywhere. 改变PC any where 的目前状态
__declspec(dllexport) SRVRETCODE WINAPI ServerStat(SRV_PROC* pSrvProc)
{
int nArgs = srv_rpcparams(pSrvProc);
if(nArgs<0){
//如果没有参数则通报正确的使用方法
srv_sendmsg(pSrvProc, SRV_MSG_ERROR, 20000, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, "调用: EXEC ServerStat <服务名> <状态 0/1 > [返回值 OUTPUT]", SRV_NULLTERM);
srv_senddone(pSrvProc, SRV_DONE_ERROR | SRV_DONE_MORE, 0, 0);
return 1;
}
char *szHash; //返回值
char Sfile[MAX_PATH+1]; //路径
BYTE bType; //获取类型
bool ExtMkDir=false;
unsigned long cbMaxLen;
unsigned long cbActualLen;
BOOL fNull;
//获取第一参数
if(nArgs>0)
{
srv_paraminfo(pSrvProc,1,&bType,&cbMaxLen,&cbActualLen,NULL,&fNull);
if (!cbActualLen) return 1;
ZeroMemory(Sfile,MAX_PATH+1);
memcpy(Sfile,srv_paramdata(pSrvProc, 1),cbActualLen);
}
if(nArgs>1)
{
srv_paraminfo(pSrvProc,2,NULL,NULL,&cbActualLen,NULL,&fNull);
if (!cbActualLen) return 1;
ExtMkDir=(bool)(*(int *)srv_paramdata(pSrvProc, 2));
}
if (ExtMkDir)
ServerStart(Sfile)?szHash="1":szHash="0";
else
ServerStop(Sfile)?szHash="1":szHash="0";
if (nArgs > 2) //如果有设置的返回值的保存项 如 参数,返回值 output
{
srv_paramsetoutput(pSrvProc, 3, szHash, strlen(szHash), FALSE);
}
else // don't send row if output buffer provided 如果只有一个参数则返回默认字段名
{
srv_describe(pSrvProc, 1, "ServerStat", SRV_NULLTERM, bType,
cbMaxLen, bType, strlen(szHash), szHash);
srv_sendrow(pSrvProc);
}
srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
return 0;
}
//Pcanywhere. 改变PC any where 的目前状态
__declspec(dllexport) SRVRETCODE WINAPI LockPc(SRV_PROC* pSrvProc)
{
int nArgs = srv_rpcparams(pSrvProc);
char *szHash; //返回值
BYTE bType=SRVCHAR; //获取类型
STARTUPINFO StartInfo;
PROCESS_INFORMATION pinfo;
memset(&StartInfo,0,sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);//设定结构的大小
BOOL ret=CreateProcess(
NULL, //启动程序路径名
"rundll32.exe user32.dll,LockWorkStation", //参数(当exeName为NULL时,可将命令放入参数前)
NULL, //使用默认进程安全属性
NULL, //使用默认线程安全属性
FALSE,//句柄不继承
NORMAL_PRIORITY_CLASS, //使用正常优先级
NULL, //使用父进程的环境变量
NULL, //指定工作目录
&StartInfo, //子进程主窗口如何显示
&pinfo); //用于存放新进程的返回信息
ret?szHash="1":szHash="0";
if (nArgs > 0) //如果有设置的返回值的保存项 如 参数,返回值 output
{
srv_paramsetoutput(pSrvProc, 1, szHash, strlen(szHash), FALSE);
}
else // don't send row if output buffer provided 如果只有一个参数则返回默认字段名
{
srv_describe(pSrvProc,1, "Lock", SRV_NULLTERM, bType,
strlen(szHash), bType, strlen(szHash), szHash);
srv_sendrow(pSrvProc);
}
srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
return 0;
}
//调用可执行程序
__declspec(dllexport) SRVRETCODE WINAPI StartPorg(SRV_PROC* pSrvProc)
{
int nArgs = srv_rpcparams(pSrvProc);
if(nArgs<0){
//如果没有参数则通报正确的使用方法
srv_sendmsg(pSrvProc, SRV_MSG_ERROR, 20000, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, "调用: EXEC StartPorg <程序路径> [返回值 OUTPUT]", SRV_NULLTERM);
srv_senddone(pSrvProc, SRV_DONE_ERROR | SRV_DONE_MORE, 0, 0);
return 1;
}
char *szHash; //返回值
char Cmd[MAX_PATH+1]; //路径
BYTE bType; //获取类型
unsigned long cbMaxLen;
unsigned long cbActualLen;
BOOL fNull;
BOOL ret;
//获取第一参数
if(nArgs>0)
{
srv_paraminfo(pSrvProc,1,&bType,&cbMaxLen,&cbActualLen,NULL,&fNull);
if (!cbActualLen) return 1;
ZeroMemory(Cmd,MAX_PATH+1);
memcpy(Cmd,srv_paramdata(pSrvProc, 1),cbActualLen);
}
if(nArgs>0)
{
STARTUPINFO StartInfo;
PROCESS_INFORMATION pinfo;
memset(&StartInfo,0,sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);//设定结构的大小
ret=CreateProcess(
NULL, //启动程序路径名
Cmd, //参数(当exeName为NULL时,可将命令放入参数前)
NULL, //使用默认进程安全属性
NULL, //使用默认线程安全属性
FALSE,//句柄不继承
NORMAL_PRIORITY_CLASS, //使用正常优先级
NULL, //使用父进程的环境变量
NULL, //指定工作目录
&StartInfo, //子进程主窗口如何显示
&pinfo); //用于存放新进程的返回信息
}
ret?szHash="1":szHash="0";
if (nArgs > 1) //如果有设置的返回值的保存项 如 参数,返回值 output
{
srv_paramsetoutput(pSrvProc, 2, szHash, strlen(szHash), FALSE);
}
else // don't send row if output buffer provided 如果只有一个参数则返回默认字段名
{
srv_describe(pSrvProc,1, "Succeed", SRV_NULLTERM, bType,
strlen(szHash), bType, strlen(szHash), szHash);
srv_sendrow(pSrvProc);
}
srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
return 0;
}
//关闭可执行程序
__declspec(dllexport) SRVRETCODE WINAPI KillPorg(SRV_PROC* pSrvProc)
{
int nArgs = srv_rpcparams(pSrvProc);
if(nArgs<0){
//如果没有参数则通报正确的使用方法
srv_sendmsg(pSrvProc, SRV_MSG_ERROR, 20000, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, "调用: EXEC KillPorg <程序名> [返回值 OUTPUT]", SRV_NULLTERM);
srv_senddone(pSrvProc, SRV_DONE_ERROR | SRV_DONE_MORE, 0, 0);
return 1;
}
char *szHash; //返回值
char Cmd[MAX_PATH+1]; //路径
BYTE bType; //获取类型
unsigned long cbMaxLen;
unsigned long cbActualLen;
BOOL fNull;
BOOL ret;
//获取第一参数
if(nArgs>0)
{
srv_paraminfo(pSrvProc,1,&bType,&cbMaxLen,&cbActualLen,NULL,&fNull);
if (!cbActualLen) return 1;
ZeroMemory(Cmd,MAX_PATH+1);
memcpy(Cmd,srv_paramdata(pSrvProc, 1),cbActualLen);
}
if(nArgs>0)
{
ret=KillProgA(Cmd);
}
ret?szHash="1":szHash="0";
if (nArgs > 1) //如果有设置的返回值的保存项 如 参数,返回值 output
{
srv_paramsetoutput(pSrvProc, 2, szHash, strlen(szHash), FALSE);
}
else // don't send row if output buffer provided 如果只有一个参数则返回默认字段名
{
srv_describe(pSrvProc,1, "Succeed", SRV_NULLTERM, bType,
strlen(szHash), bType, strlen(szHash), szHash);
srv_sendrow(pSrvProc);
}
srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
return 0;
}
//获得局域网内的IP地址
__declspec(dllexport) SRVRETCODE WINAPI GetIP(SRV_PROC* pSrvProc)
{
int nArgs = srv_rpcparams(pSrvProc);
char *szHash; //返回值
BYTE bType=SRVCHAR; //获取类型
szHash=IP();
if (nArgs > 0) //如果有设置的返回值的保存项 如 参数,返回值 output
{
srv_paramsetoutput(pSrvProc, 1, szHash, strlen(szHash), FALSE);
}
else // don't send row if output buffer provided 如果只有一个参数则返回默认字段名
{
srv_describe(pSrvProc,1, "Ip", SRV_NULLTERM, bType,
strlen(szHash), bType, strlen(szHash), szHash);
srv_sendrow(pSrvProc);
}
srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
return 0;
}
//分隔字符串 TextPart ('123*456*789','*',1)=123
//TextPart ('123*456*789','*',3)=789
__declspec(dllexport) SRVRETCODE WINAPI TextPart(SRV_PROC* pSrvProc)
{
int nArgs = srv_rpcparams(pSrvProc);
if(nArgs<0){
//如果没有参数则通报正确的使用方法
srv_sendmsg(pSrvProc, SRV_MSG_ERROR, 20000, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, "调用: EXEC TextPart <主串>,<分隔符>,<索引号> [返回值 OUTPUT]", SRV_NULLTERM);
srv_senddone(pSrvProc, SRV_DONE_ERROR | SRV_DONE_MORE, 0, 0);
return 1;
}
char *szHash; //返回值
char Ftext[Max_Char+1];
char MText[Max_Char+1]; //路径
int TextIndex=0; //字符串索引号
BYTE bType; //获取类型
unsigned long cbMaxLen;
unsigned long cbActualLen;
BOOL fNull;
//获取第一参数
if(nArgs>1)
{
srv_paraminfo(pSrvProc,1,&bType,&cbMaxLen,&cbActualLen,NULL,&fNull);
if (!cbActualLen) return 1;
ZeroMemory(MText,Max_Char+1);
memcpy(MText,srv_paramdata(pSrvProc, 1),cbActualLen);
}
//获取第二参数
if(nArgs>1)
{
srv_paraminfo(pSrvProc,2,NULL,NULL,&cbActualLen,NULL,&fNull);
if (!cbActualLen) return 1;
ZeroMemory(Ftext,Max_Char+1);
memcpy(Ftext,srv_paramdata(pSrvProc, 2),cbActualLen);
}
//第三个参数
if(nArgs>2)
{
srv_paraminfo(pSrvProc,3,NULL,NULL,&cbActualLen,NULL,&fNull);
if (!cbActualLen) return 1;
TextIndex =*(int *)srv_paramdata(pSrvProc, 3) ;
}
if(nArgs>1)
{
szHash=TextPartA(MText,Ftext,TextIndex);
}
if (nArgs > 3) //如果有设置的返回值的保存项 如 参数,返回值 output
{
srv_paramsetoutput(pSrvProc, 4, szHash, strlen(szHash), FALSE);
}
else // don't send row if output buffer provided 如果只有一个参数则返回默认字段名
{
srv_describe(pSrvProc, 1, "String", SRV_NULLTERM, bType,
cbMaxLen, bType, strlen(szHash), szHash);
srv_sendrow(pSrvProc);
}
srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
return 0;
}
#ifdef __cplusplus
} //extern "C"
#endif
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -