易语言系统服务源码
系统结构:ServiceMain,ServiceCtrlHandler,SetStatus,OnStart,OnStop,OnPause,OnContinue,OnShutdown,ServiceWorkerThread,ShowMessageBox,CreateProcess,InstallService,UninstallService,strstr,SuperSleepEx,StartServiceCtrlDispatcher,SetServiceStatus,RegisterServiceCtrlHandler,OutputDebugString,CreateThread,WTSQueryUserToken,DuplicateTokenEx,CreateEnvironmentBlock,CreateProcessAsUserA,CloseHandle,DestroyEnvironmentBlock,GetLastError,WTSGetActiveConsoleSessionId,WTSSendMessage,WaitForSingleObject,GetModuleFileName,OpenSCManagerA,CreateServiceA,OpenServiceA,QueryServiceStatus,DeleteServiceA,ControlService,StartServiceA,CloseServiceHandle,GetCommandLineA,ShellExecuteA,PathFileExistsA,CreateWaitableTimerA,SetWaitableTimer,MsgWaitForMultipleObjects,
======程序集1
| |
| |------ _启动子程序
| |
| |------ ServiceMain
| |
| |------ ServiceCtrlHandler
| |
| |------ SetStatus
| |
| |------ OnStart
| |
| |------ OnStop
| |
| |------ OnPause
| |
| |------ OnContinue
| |
| |------ OnShutdown
| |
| |------ ServiceWorkerThread
| |
| |
======Utils
| |
| |------ ShowMessageBox
| |
| |------ CreateProcess
| |
| |------ InstallService
| |
| |------ UninstallService
| |
| |------ strstr
| |
| |------ SuperSleepEx
| |
| |
======调用的Dll
| |
| |---[dll]------ StartServiceCtrlDispatcher
| |
| |---[dll]------ SetServiceStatus
| |
| |---[dll]------ RegisterServiceCtrlHandler
| |
| |---[dll]------ OutputDebugString
| |
| |---[dll]------ CreateThread
| |
| |---[dll]------ WTSQueryUserToken
| |
| |---[dll]------ DuplicateTokenEx
| |
| |---[dll]------ CreateEnvironmentBlock
| |
| |---[dll]------ CreateProcessAsUserA
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ DestroyEnvironmentBlock
| |
| |---[dll]------ GetLastError
| |
| |---[dll]------ WTSGetActiveConsoleSessionId
| |
| |---[dll]------ WTSSendMessage
| |
| |---[dll]------ WaitForSingleObject
| |
| |---[dll]------ GetModuleFileName
| |
| |---[dll]------ OpenSCManagerA
| |
| |---[dll]------ CreateServiceA
| |
| |---[dll]------ OpenServiceA
| |
| |---[dll]------ QueryServiceStatus
| |
| |---[dll]------ DeleteServiceA
| |
| |---[dll]------ ControlService
| |
| |---[dll]------ StartServiceA
| |
| |---[dll]------ CloseServiceHandle
| |
| |---[dll]------ GetCommandLineA
| |
| |---[dll]------ ShellExecuteA
| |
| |---[dll]------ PathFileExistsA
| |
| |---[dll]------ CreateWaitableTimerA
| |
| |---[dll]------ SetWaitableTimer
| |
| |---[dll]------ MsgWaitForMultipleObjects
调用的DLL命令:
.DLL命令 StartServiceCtrlDispatcher, 逻辑型, "advapi32.dll", "StartServiceCtrlDispatcherA", , 连接线索
.参数 lpServiceStartTable, SERVICE_TABLE_ENTRY, 数组
.DLL命令 SetServiceStatus, 逻辑型, "advapi32.dll", "SetServiceStatus"
.参数 hServiceStatus, 整数型
.参数 lpServiceStatus, SERVICE_STATUS
.DLL命令 RegisterServiceCtrlHandler, 整数型, "advapi32.dll", "RegisterServiceCtrlHandlerA", , 登记服务控制请求句柄
.参数 lpServiceName, 文本型
.参数 lpHandlerProc, 整数型
.DLL命令 OutputDebugString, , "kernel32", "OutputDebugStringA", , 向调试发送字符串
.参数 lpOutputString, 文本型
.DLL命令 CreateThread, 整数型, "kernel32.dll", "CreateThread"
.参数 lpThreadAttributes, 整数型, , 默认SECURITY_ATTRIBUTES结构
.参数 dwStackSize, 整数型, , 设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小
.参数 lpStartAddress, 子程序指针, , 指向线程函数的指针,形式:@函数名,函数名称没有限制,但是必须以下列形式声明
.参数 lpParameter, 整数型, , 向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL
.参数 dwCreationFlags, 整数型, , 线程标志,0立即激活
.参数 lpThreadId, 整数型, , 保存新线程的id
.DLL命令 WTSQueryUserToken, 逻辑型, "wtsapi32.dll", "WTSQueryUserToken", 公开, BOOL WINAPI WTSQueryUserToken
.参数 SessionId, 整数型, , _In_ ULONG SessionId,
.参数 phToken, 整数型, 传址, _Out_ PHANDLE phToken,
.DLL命令 DuplicateTokenEx, 逻辑型, "advapi32.dll", "DuplicateTokenEx"
.参数 hExistingToken, 整数型
.参数 dwDesiredAccess, 整数型
.参数 lpTokenAttributes, 整数型
.参数 ImpersonationLevel, 整数型
.参数 TokenType, 整数型
.参数 phNewToken, 整数型, 传址
.DLL命令 CreateEnvironmentBlock, 逻辑型, "userenv.dll", "CreateEnvironmentBlock", 公开, BOOL WINAPI CreateEnvironmentBlock
.参数 lpEnvironment, 整数型, 传址, _Out_ LPVOID lpEnvironment,
.参数 hToken, 整数型, , _In_opt_ HANDLE hToken,
.参数 bInherit, 逻辑型, , _In_ BOOL bInherit,
.DLL命令 CreateProcessAsUserA, 逻辑型, "Advapi32.dll", "CreateProcessAsUserA", 公开, BOOL WINAPI CreateProcessAsUser
.参数 hToken, 整数型, , _In_opt_ HANDLE hToken,
.参数 lpApplicationName, 文本型, , _In_opt_ LPCTSTR lpApplicationName,
.参数 lpCommandLine, 文本型, , _Inout_opt_ LPTSTR lpCommandLine,
.参数 lpProcessAttributes, 整数型, , _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
.参数 lpThreadAttributes, 整数型, , _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
.参数 bInheritHandles, 逻辑型, , _In_ BOOL bInheritHandles,
.参数 dwCreationFlags, 整数型, , _In_ DWORD dwCreationFlags,
.参数 lpEnvironment, 整数型, , _In_opt_ LPVOID lpEnvironment,
.参数 lpCurrentDirectory, 文本型, , _In_opt_ LPCTSTR lpCurrentDirectory,
.参数 lpStartupInfo, STARTUPINFO, 传址, _In_ LPSTARTUPINFO lpStartupInfo,
.参数 lpProcessInformation, PROCESS_INFORMATION, 传址, _Out_ LPPROCESS_INFORMATION lpProcessInformation,
.DLL命令 CloseHandle, 整数型, "kernel32", "CloseHandle", , 关闭一个内核对象。其中包括文件、文件映射、进程、线程、security和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 非零表示成功,零表示失败。会设置GetLastError
.参数 hObject, 整数型, , 欲关闭的一个对象的句柄;
.DLL命令 DestroyEnvironmentBlock, 整数型, "userenv.dll", "DestroyEnvironmentBlock"
.参数 lpEnvironment, 整数型
.DLL命令 GetLastError, 整数型, "kernel32", "GetLastError", , 针对之前调用的api函数,用这个函数取得扩展错误信息(在vb里使用:在vb中,用Err对象的GetLastError属性获取GetLastError的值。这样做是必要的,因为在api调用返回以及vb调用继续执行期间,vb有时会重设GetLastError的值) 由api函数决定。请参考api32.txt文件,其中列出了一系列错误常数;都以ERROR_前缀起头。常用的错误代码见下表
.DLL命令 WTSGetActiveConsoleSessionId, 整数型, "Kernel32.dll", "WTSGetActiveConsoleSessionId", 公开
.DLL命令 WTSSendMessage, 逻辑型, "wtsapi32.dll", "WTSSendMessageA"
.参数 hServer, 整数型
.参数 SessionId, 整数型
.参数 pTitle, 文本型
.参数 TitleLength, 整数型
.参数 pMessage, 文本型
.参数 MessageLength, 整数型
.参数 Style, 整数型
.参数 timeout, 整数型
.参数 pResponse, 整数型, 传址
.参数 bWait, 逻辑型
.DLL命令 WaitForSingleObject, 整数型, "kernel32", "WaitForSingleObject", , 监测一个对象
.参数 hHandle, 整数型
.参数 dwMilliseconds, 整数型
.DLL命令 GetModuleFileName, 整数型, "kernel32", "GetModuleFileNameA", , 获取一个已装载模板的完整路径名称 如执行成功,返回复制到lpFileName的实际字符数量;零表示失败。会设置GetLastError
.参数 hModule, 整数型, , 一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄
.参数 lpFileName, 文本型, , 指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的
.参数 nSize, 整数型, , 装载到缓冲区lpFileName的最大字符数量;
.DLL命令 OpenSCManagerA, 整数型, "advapi32.dll", "OpenSCManagerA", 公开
.参数 lpMachineName, 整数型
.参数 lpDatabaseName, 整数型
.参数 dwDesiredAccess, 整数型
.DLL命令 CreateServiceA, 整数型, "advapi32.dll", "CreateServiceA", 公开
.参数 hSCManager, 整数型
.参数 lpServiceName, 文本型
.参数 lpDisplayName, 文本型
.参数 dwDesiredAccess, 整数型
.参数 dwServiceType, 整数型
.参数 dwStartType, 整数型
.参数 dwErrorControl, 整数型
.参数 lpBinaryPathName, 文本型
.参数 lpLoadOrderGroup, 文本型
.参数 lpdwTagId, 整数型
.参数 lpDependencies, 文本型
.参数 lpServiceStartName, 整数型
.参数 lpPassword, 文本型
.DLL命令 OpenServiceA, 整数型, "advapi32.dll", "OpenServiceA", , 打开服务
.参数 hSCManager, 整数型
.参数 lpServiceName, 文本型
.参数 dwDesiredAccess, 整数型
.DLL命令 QueryServiceStatus, 逻辑型, "advapi32", "QueryServiceStatus", 公开
.参数 hService, 整数型
.参数 lpServiceStatus, SERVICE_STATUS
.DLL命令 DeleteServiceA, 逻辑型, "advapi32", "DeleteService", 公开
.参数 hService, 整数型
.DLL命令 ControlService, 逻辑型, "advapi32", "ControlService", 公开
.参数 hService, 整数型
.参数 dwControl, 整数型
.参数 lpServiceStatus, SERVICE_STATUS, 传址
.DLL命令 StartServiceA, 整数型, "advapi32.dll", "StartServiceA", 公开
.参数 服务句柄, 整数型
.参数 dwNumServiceArgs, 整数型
.参数 lpServiceArgVectors, 整数型
.DLL命令 CloseServiceHandle, 逻辑型, "advapi32", "CloseServiceHandle", 公开
.参数 hSCObject, 整数型
.DLL命令 GetCommandLineA, 文本型, "kernel32", "GetCommandLineA", , 获得指向当前命令行缓冲区的一个指针 命令行缓冲区在内存中的地址
.DLL命令 ShellExecuteA, 整数型, "shell32.dll", "ShellExecuteA", , ; 查找与指定文件关联在一起的程序的文件名 非零表示成功,零表示失败。会设置GetLastError
.参数 hwnd, 整数型, , 指定一个窗口的句柄,有时候,windows程序有必要在创建自己的主窗口前显示一个消息框
.参数 lpOperation, 文本型, , 指定字串“open”来打开lpFlie文档,或指定“Print”来打印它
.参数 lpFile, 文本型, , 想用关联程序打印或打开一个程序名或文件名
.参数 lpParameters, 文本型, , 如lpszFlie是可执行文件,则这个字串包含传递给执行程序的参数
.参数 lpDirectory, 文本型, , 想使用的完整路径
.参数 nShowCmd, 整数型, , 定义了如何显示启动程序的常数值。参考ShowWindow函数的nCmdShow参数;
.DLL命令 PathFileExistsA, 逻辑型, "shlwapi.dll", "PathFileExistsA"
.参数 pszPath, 文本型
.DLL命令 CreateWaitableTimerA, 整数型, "kernel32.dll", "CreateWaitableTimerA"
.参数 lpTimerAttributes, 整数型
.参数 bManualReset, 逻辑型
.参数 lpTimerName, 整数型
.DLL命令 SetWaitableTimer, 整数型, "kernel32.dll", "SetWaitableTimer"
.参数 hTimer, 整数型
.参数 pDueTime, LARGE_INTEGER
.参数 lPeriod, 整数型
.参数 pfnCompletionRoutine, 整数型
.参数 lpArgToCompletionRoutine, 整数型
.参数 fResume, 逻辑型
.DLL命令 MsgWaitForMultipleObjects, 整数型, "user32.dll", "MsgWaitForMultipleObjects"
.参数 nCount, 整数型
.参数 pHandles, 整数型, 传址
.参数 fWaitAll, 逻辑型
.参数 dwMilliseconds, 整数型
.参数 dwWakeMask, 整数型
易语言糊模查找窗口标题并弹出源码,枚举系统所有窗口,GetWindow,GetWindowText,GetWindowTextLength,FindWindow,ShowWindow...
易语言其它简易换肤13种源码,配色...
易语言简单的验证码识别加界面源码,主识别程序,是否符合,说明,程序初始化,显示验证码,分割图片,对应识别,替换杂色,全部替换色,除指定色外全部除去,读入图片...
易语言笔划输入法一整套文件源码,子程序1,数清,清,按钮1,按钮2,按钮3,按钮4,按钮5,注,投递文本,解码火星文,计1,笔画字刷新,操作,字刷新,计,填,GetGUIThreadInfo,ClientToScreen,屏幕截图,拖动屏幕...
易语言窗口渐变源码,CreateSolidBrush,DeleteObject,FillRect,GetDC...
易语言窗体拉动源码,设置系统菜单,API_设置窗口区域,创建椭圆区域,取窗口风格,置窗口风格...
易语言突破灰色按钮和水波特效,突破灰色按钮和水波特效源码,装载图片,水周期,水波特效,装载图片_,接收装载图返回的整数,水周期_,窗口绘图,水波特效_,突破灰色按钮,激活按钮,取得当...
易语言突破灰色按钮和水波特效源码,装载图片,水周期,水波特效,突破灰色按钮,激活按钮,取得当前活动窗口句柄,枚举所有子窗体,是否活动窗口,激活窗口...
易语言科大讯飞语音库调用例程源码,刷新窗口,取错误码,初始化,反初始化,连接语音服务器,断开语音服务器,置合成参数,取合成参数,字符串合成到音频文件,文本文件合成到音频文件,播放...