中断服务程序怎么写

c怎么写服务程序

1.用C语言编写Windows服务程序的五个步骤大神们帮帮忙

Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。

为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。

最后,你可以用所学知识编写自己的 Windows 服务。 当初我写第一个 NT 服务时,我到 MSDN 上找例子。

在那里我找到了一篇 Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C++”,这篇文章附带一个 C++ 例子。虽然这篇文章很好地解释了服务的开发过程,但是,我仍然感觉缺少我需要的重要信息。

我想理解通过什么框架,调用什么函数,以及何时调用,但 C++ 在这方面没有让我轻松多少。面向对象的方法固然方便,但由于用类对底层 Win32 函数调用进行了封装,它不利于学习服务程序的基本知识。

这就是为什么我觉得 C 更加适合于编写初级服务程序或者实现简单后台任务的服务。在你对服务程序有了充分透彻的理解之后,用 C++ 编写才能游刃有余。

当我离开原来的工作岗位,不得不向另一个人转移我的知识的时候,利用我用 C 所写的例子就非常容易解释 NT 服务之所以然。

2.用C语言编写Windows服务程序的五个步骤

Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。最后,你可以用所学知识编写自己的 Windows 服务。 当初我写第一个 NT 服务时,我到 MSDN 上找例子。在那里我找到了一篇 Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C++”,这篇文章附带一个 C++ 例子。虽然这篇文章很好地解释了服务的开发过程,但是,我仍然感觉缺少我需要的重要信息。我想理解通过什么框架,调用什么函数,以及何时调用,但 C++ 在这方面没有让我轻松多少。面向对象的方法固然方便,但由于用类对底层 Win32 函数调用进行了封装,它不利于学习服务程序的基本知识。这就是为什么我觉得 C 更加适合于编写初级服务程序或者实现简单后台任务的服务。在你对服务程序有了充分透彻的理解之后,用 C++ 编写才能游刃有余。当我离开原来的工作岗位,不得不向另一个人转移我的知识的时候,利用我用 C 所写的例子就非常容易解释 NT 服务之所以然。

3.如何用C语言来编写一个管理系统服务的程序

这个是删除服务的函数。。不过动的API,,你还是补习补习吧

BOOL Uninstall()

{

if ( !IsInstalled() )

return TRUE;

SC_HANDLE hSCM = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );

if ( hSCM == NULL )

{

//MessageBox( NULL, _T( "打开服务管理器失败!" ), szServiceName, MB_OK );

return FALSE;

}

SC_HANDLE hService = OpenService( hSCM, szServiceName, SERVICE_STOP | DELETE );

if ( hService == NULL )

{

CloseServiceHandle( hSCM );

MessageBox( NULL, _T( "服务不存在!" ), szServiceName, MB_OK );

return FALSE;

}

SERVICE_STATUS status;

ControlService( hService, SERVICE_CONTROL_STOP, &status );

BOOL bDelete = DeleteService( hService );

CloseServiceHandle( hService );

CloseServiceHandle( hSCM );

if ( bDelete )

{

MessageBox( NULL, _T( "删除服务成功!" ), szServiceName, MB_OK );

return TRUE;

}

MessageBox( NULL, _T( "删除服务失败!" ), szServiceName, MB_OK );

//LogEvent(_T("Service could not be deleted"));

return FALSE;

}

调用API函数OpenSCManager()和连接SCM(服务控制管理器)

调用API函数OpenService()打开服务,有2个参数,一个为服务名,一个为执行权限;返回服务句柄

启动服务StartService();第一个参数就是服务句柄

停止服务ControlService()和上面的一样

QueryServiceStatus()查询服务当前状态,这个函数填充一个SERVICE_STATUS类型结构,获取服务当前的一些信息

4.怎么把一个程序写入服务

要把应用程序添加为服务,你需要两个小软件:Instsrv.exe和Srvany.exe。Instsrv.exe可以给系统安装和删除服务, Srvany.exe可以让程序以服务的方式运行。这两个软件都包含在Windows NT Resource Kit里,如果你没有,自己下载

把这两个程序保存在一个方便的位置,例如C盘根目录下。举例来说明,把OE作为一个服务添加进Windows XP Professional操作系统中,并把这个服务命名为“Mail”。在运行中输入“CMD”,回车,打开命令行窗口,在提示符后面直接输入:“c:\ instsrv.exe Mail c:\srvany.exe”然后回车,其中的“c:\instsrv.exe”和“c:\srvany.exe”表示这两个程序保存的位置,而Mail 则是你想添加的服务名称。

运行Regedit打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 下,找到刚才添加的Mail,点击右键,新建一个键,命名为“Parameters”,点击新建的Parameters,并再次新建一个名称为 “Application”的子键,数据类型为“REG_SZ”,数值为希望作为服务运行的程序的所在位置,如果你的Windows系统安装在C盘下,那么OE的程序位置就是C:\Program Files\Outlook Express\msimn.exe ,把这个路径添入数值中。到现在,这个服务已经成功的添加并且设置好了。如果你希望做的更加专业,可以在Mail服务下建立一个名为 Description的子键,数据类型同样为REG_SZ,数值可以写一些你对这个服务的描述

接下来需要对服务做一些额外的设置,在运行中输入“Services.msc”并回车,在列表中找到我们刚添加的Mail服务,双击打开,来做详细的设置。在“General”选项卡上,我们需要设置这个服务的运行方式,在图二中可以看见,作为一个服务,有“自动(Automatic)”,“手动(Manual)”和“禁止(Disabled)”三种启动类型,按照需要,我们一般设置成自动就可以了。而在“Logon”选项卡下可以设置以什么身份运行这个服务,一般可以不用理会,按照默认的设置。“Recovery”选项卡下则是进行恢复设置的,你可以指定,在服务第一次,第二次和第三次出错之后分别采取什么措施。“Dependencies”则显示了服务之间的依存关系,可以让你察看这个服务的运行依赖哪些其它服务,以及还有什么服务依赖于这个服务。这后面几个对我们一般用户没有什么意义。经过这些设置,你的服务已经完全可以正常工作了。

注销一下看看。为了让你看清除,先打开OE,这时在任务管理器里,有两个msimn进程,用户名为“.com.cn”的是打开的OE,而用户名为“SYSTEM”的就是添加的服务。

如果你不想再运行这个服务,可以直接禁止它在启动的时候运行,或者使用Instsrv.exe程序删除。方法是在命令行下输入“c:\ instsrv.exe Mail remove”,然后回车就可以了。需要注意的是Instsrv.exe这个程序也可以删除某些系统服务,所以使用的时候一定要小心,对于系统服务,安全起见千万不要删除,哪怕你觉得它对你没有用。

5.怎么把一个程序写入服务

要把应用程序添加为服务,你需要两个小软件:Instsrv.exe和Srvany.exe。Instsrv.exe可以给系统安装和删除服务, Srvany.exe可以让程序以服务的方式运行。这两个软件都包含在Windows NT Resource Kit里,如果你没有,自己下载

把这两个程序保存在一个方便的位置,例如C盘根目录下。举例来说明,把OE作为一个服务添加进Windows XP Professional操作系统中,并把这个服务命名为“Mail”。在运行中输入“CMD”,回车,打开命令行窗口,在提示符后面直接输入:“c:\ instsrv.exe Mail c:\srvany.exe”然后回车,其中的“c:\instsrv.exe”和“c:\srvany.exe”表示这两个程序保存的位置,而Mail 则是你想添加的服务名称。

运行Regedit打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 下,找到刚才添加的Mail,点击右键,新建一个键,命名为“Parameters”,点击新建的Parameters,并再次新建一个名称为 “Application”的子键,数据类型为“REG_SZ”,数值为希望作为服务运行的程序的所在位置,如果你的Windows系统安装在C盘下,那么OE的程序位置就是C:\Program Files\Outlook Express\msimn.exe ,把这个路径添入数值中。到现在,这个服务已经成功的添加并且设置好了。如果你希望做的更加专业,可以在Mail服务下建立一个名为 Description的子键,数据类型同样为REG_SZ,数值可以写一些你对这个服务的描述

接下来需要对服务做一些额外的设置,在运行中输入“Services.msc”并回车,在列表中找到我们刚添加的Mail服务,双击打开,来做详细的设置。在“General”选项卡上,我们需要设置这个服务的运行方式,在图二中可以看见,作为一个服务,有“自动(Automatic)”,“手动(Manual)”和“禁止(Disabled)”三种启动类型,按照需要,我们一般设置成自动就可以了。而在“Logon”选项卡下可以设置以什么身份运行这个服务,一般可以不用理会,按照默认的设置。“Recovery”选项卡下则是进行恢复设置的,你可以指定,在服务第一次,第二次和第三次出错之后分别采取什么措施。“Dependencies”则显示了服务之间的依存关系,可以让你察看这个服务的运行依赖哪些其它服务,以及还有什么服务依赖于这个服务。这后面几个对我们一般用户没有什么意义。经过这些设置,你的服务已经完全可以正常工作了。

注销一下看看。为了让你看清除,先打开OE,这时在任务管理器里,有两个msimn进程,用户名为“.com.cn”的是打开的OE,而用户名为“SYSTEM”的就是添加的服务。

如果你不想再运行这个服务,可以直接禁止它在启动的时候运行,或者使用Instsrv.exe程序删除。方法是在命令行下输入“c:\ instsrv.exe Mail remove”,然后回车就可以了。需要注意的是Instsrv.exe这个程序也可以删除某些系统服务,所以使用的时候一定要小心,对于系统服务,安全起见千万不要删除,哪怕你觉得它对你没有用。

6.如何编写windows服务程序

看了一篇文章《用C 语言编写Windows 服务程序的五个步骤》。

但可能由于译者的疏忽,忘记了将关键代码放入该文档,导致初学者可能会看不懂。所以又查阅了相关资料。

自己完成了《用C 语言编写Windows 服务程序的五个步骤》中的样例程序。在本文中我希望能给初学者一些帮助,大致讲一下编写windows服务程序需要的知识。

首先Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。

这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。

服务是有状态的,当我们使用windows自带的服务管理程序sc.exe查看服务状态时可以显示服务的当前状态,这个状态是由我们在程序代码中进行控制的。你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。

这个状态信息你会在sc.exe中看到。在编写windows服务程序过程中你需要关注的函数有:1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main 而不是WinMain()。

在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY 分派表结构体,然后调用();这将把调用进程的主线程转换为控制分派器。该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。

ServiceMain()函数将在下面提到。此过程示例代码如下:SERVICE_TABLE_ENTRY entrytable[2]; entrytable[0].lpServiceName="testservice"; entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain; entrytable[1].lpServiceName=NULL; entrytable[1].lpServiceProc=NULL;(entrytable);在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。

2.ServiceMain函数为void WINAPI ServiceMain(int argc, char** argv)格式的函数,函数名字可以任意定义。它的作用就是:将你需要执行的任务放到该函数中循环执行即可。

这就是服务程序的工作函数。在ServiceMain执行你的任务前,需要给SERVICE_TABLE_ENTRY 分派表结构体进行赋值,注意由于此时服务还没有开始执行你的任务所以我们将服务的状态设置为SERVICE_START_PENDING,即正在初始化。

我们进行如下赋值:servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING; servicestatus.dwControlsAccepted=SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令 servicestatus.dwWin32ExitCode = 0; servicestatus. = 0; servicestatus.dwCheckPoint = 0; servicestatus.dwWaitHint = 0; hstatus = ::("testservice", CtrlHandler);CtrlHandler为void WINAPI CtrlHandler(DWORD request)型的函数,函数名字可以任意设定。将在下一点讲到。

Hstatus为SERVICE_STATUS_HANDLE类型的全局变量。当需要改变服务状态时SetServiceStatus()函数需要它做为参数来标识一个服务。

3. void WINAPI CtrlHandler(DWORD request),函数的主要功能是,接收系统传递的控制命令,比如当你通过sc.exe关闭服务时,该函数会收到SERVICE_CONTROL_STOP消息,你就可以对服务进行必要的管理。在本例子程序中就只接收SERVICE_ACCEPT_SHUTDOWN和SERVICE_ACCEPT_STOP消息,这是通过前面给servicestatus赋值设定的。

这样一个基本的服务程序就完成了。下面贴出我的示例代码仅供参考。

#include #include #define SLEEP_TIME 5000 //间隔时间#define FILE_PATH "C:\\log.txt" //信息输出文件bool brun=false;SERVICE_STATUS servicestatus;SERVICE_STATUS_HANDLE hstatus; int WriteToLog(char* str);void WINAPI ServiceMain(int argc, char** argv);void WINAPI CtrlHandler(DWORD request);int InitService(); int WriteToLog(char* str){ FILE* pfile; fopen_s(&pfile,FILE_PATH,"a+"); if (pfile==NULL) { return -1; } fprintf_s(pfile,"%s\n",str); fclose(pfile); return 0;} void WINAPI ServiceMain(int argc, char** argv){ servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING; servicestatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令 servicestatus.dwWin32Exit。

7.如何边写windows服务程序

这两天想学习关于如何编写windows服务程序的知识,就上网查了些资料。

看了一篇文章《用C 语言编写Windows 服务程序的五个步骤》。但可能由于译者的疏忽,忘记了将关键代码放入该文档,导致初学者可能会看不懂。

所以又查阅了相关资料。自己完成了《用C 语言编写Windows 服务程序的五个步骤》中的样例程序。

在本文中我希望能给初学者一些帮助,大致讲一下编写windows服务程序需要的知识。首先Microsoft Windows 服务(即,以前的NT 服务)使您能够创建在它们自己的Windows 会话中可长时间运行的可执行应用程序。

这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。

还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。服务是有状态的,当我们使用windows自带的服务管理程序sc.exe查看服务状态时可以显示服务的当前状态,这个状态是由我们在程序代码中进行控制的。

你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。这个状态信息你会在sc.exe中看到。

在编写windows服务程序过程中你需要关注的函数有:1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main 而不是WinMain()。在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY 分派表结构体,然后调用();这将把调用进程的主线程转换为控制分派器。

该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。ServiceMain()函数将在下面提到。

此过程示例代码如下:SERVICE_TABLE_ENTRY entrytable[2]; entrytable[0].lpServiceName="testservice"; entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain; entrytable[1].lpServiceName=NULL; entrytable[1].lpServiceProc=NULL;(entrytable);在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。2.ServiceMain函数为void WINAPI ServiceMain(int argc, char** argv)格式的函数,函数名字可以任意定义。

它的作用就是:将你需要执行的任务放到该函数中循环执行即可。这就是服务程序的工作函数。

在ServiceMain执行你的任务前,需要给SERVICE_TABLE_ENTRY 分派表结构体进行赋值,注意由于此时服务还没有开始执行你的任务所以我们将服务的状态设置为SERVICE_START_PENDING,即正在初始化。我们进行如下赋值:servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING;servicestatus.dwControlsAccepted=SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令 servicestatus.dwWin32ExitCode = 0; servicestatus. = 0; servicestatus.dwCheckPoint = 0; servicestatus.dwWaitHint = 0;hstatus = ::("testservice", CtrlHandler);CtrlHandler为void WINAPI CtrlHandler(DWORD request)型的函数,函数名字可以任意设定。

将在下一点讲到。Hstatus为SERVICE_STATUS_HANDLE类型的全局变量。

当需要改变服务状态时SetServiceStatus()函数需要它做为参数来标识一个服务。3. void WINAPI CtrlHandler(DWORD request),函数的主要功能是,接收系统传递的控制命令,比如当你通过sc.exe关闭服务时,该函数会收到SERVICE_CONTROL_STOP消息,你就可以对服务进行必要的管理。

在本例子程序中就只接收SERVICE_ACCEPT_SHUTDOWN和SERVICE_ACCEPT_STOP消息,这是通过前面给servicestatus赋值设定的。这样一个基本的服务程序就完成了。

下面贴出我的示例代码仅供参考。该代码在vs2008中调试通过。

本文结束的时候会附上如何安装服务。#include #include #define SLEEP_TIME 5000 //间隔时间#define FILE_PATH "C:\\log.txt" //信息输出文件bool brun=false;SERVICE_STATUS servicestatus;SERVICE_STATUS_HANDLE hstatus;int WriteToLog(char* str);void WINAPI ServiceMain(int argc, char** argv);void WINAPI CtrlHandler(DWORD request);int InitService();int WriteToLog(char* str){ FILE* pfile; fopen_s(&pfile,FILE_PATH,"a+"); if (pfile==NULL) { return -1; } fprintf_s(pfile,"%s\n",str); fclose(pfile); return 0;}void WINAPI ServiceMain(int argc, char** argv){ servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING; servicestatus.dwControlsAccepted = SER。

c怎么写服务程序

怎么写服务程序

1. 怎么把一个程序写入服务

要把应用程序添加为服务,你需要两个小软件:Instsrv.exe和Srvany.exe。Instsrv.exe可以给系统安装和删除服务, Srvany.exe可以让程序以服务的方式运行。这两个软件都包含在Windows NT Resource Kit里,如果你没有,自己下载

把这两个程序保存在一个方便的位置,例如C盘根目录下。举例来说明,把OE作为一个服务添加进Windows XP Professional操作系统中,并把这个服务命名为“Mail”。在运行中输入“CMD”,回车,打开命令行窗口,在提示符后面直接输入:“c:\ instsrv.exe Mail c:\srvany.exe”然后回车,其中的“c:\instsrv.exe”和“c:\srvany.exe”表示这两个程序保存的位置,而Mail 则是你想添加的服务名称。

运行Regedit打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 下,找到刚才添加的Mail,点击右键,新建一个键,命名为“Parameters”,点击新建的Parameters,并再次新建一个名称为 “Application”的子键,数据类型为“REG_SZ”,数值为希望作为服务运行的程序的所在位置,如果你的Windows系统安装在C盘下,那么OE的程序位置就是C:\Program Files\Outlook Express\msimn.exe ,把这个路径添入数值中。到现在,这个服务已经成功的添加并且设置好了。如果你希望做的更加专业,可以在Mail服务下建立一个名为 Description的子键,数据类型同样为REG_SZ,数值可以写一些你对这个服务的描述

接下来需要对服务做一些额外的设置,在运行中输入“Services.msc”并回车,在列表中找到我们刚添加的Mail服务,双击打开,来做详细的设置。在“General”选项卡上,我们需要设置这个服务的运行方式,在图二中可以看见,作为一个服务,有“自动(Automatic)”,“手动(Manual)”和“禁止(Disabled)”三种启动类型,按照需要,我们一般设置成自动就可以了。而在“Logon”选项卡下可以设置以什么身份运行这个服务,一般可以不用理会,按照默认的设置。“Recovery”选项卡下则是进行恢复设置的,你可以指定,在服务第一次,第二次和第三次出错之后分别采取什么措施。“Dependencies”则显示了服务之间的依存关系,可以让你察看这个服务的运行依赖哪些其它服务,以及还有什么服务依赖于这个服务。这后面几个对我们一般用户没有什么意义。经过这些设置,你的服务已经完全可以正常工作了。

注销一下看看。为了让你看清除,先打开OE,这时在任务管理器里,有两个msimn进程,用户名为“.com.cn”的是打开的OE,而用户名为“SYSTEM”的就是添加的服务。

如果你不想再运行这个服务,可以直接禁止它在启动的时候运行,或者使用Instsrv.exe程序删除。方法是在命令行下输入“c:\ instsrv.exe Mail remove”,然后回车就可以了。需要注意的是Instsrv.exe这个程序也可以删除某些系统服务,所以使用的时候一定要小心,对于系统服务,安全起见千万不要删除,哪怕你觉得它对你没有用。

2. 如何编写windows服务程序

这两天想学习关于如何编写windows服务程序的知识,就上网查了些资料。

看了一篇文章《用C 语言编写Windows 服务程序的五个步骤》。但可能由于译者的疏忽,忘记了将关键代码放入该文档,导致初学者可能会看不懂。

所以又查阅了相关资料。自己完成了《用C 语言编写Windows 服务程序的五个步骤》中的样例程序。

在本文中我希望能给初学者一些帮助,大致讲一下编写windows服务程序需要的知识。首先Microsoft Windows 服务(即,以前的NT 服务)使您能够创建在它们自己的Windows 会话中可长时间运行的可执行应用程序。

这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。

还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。服务是有状态的,当我们使用windows自带的服务管理程序sc.exe查看服务状态时可以显示服务的当前状态,这个状态是由我们在程序代码中进行控制的。

你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。这个状态信息你会在sc.exe中看到。

在编写windows服务程序过程中你需要关注的函数有:1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main 而不是WinMain()。在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY 分派表结构体,然后调用StartServiceCtrlDispatcher();这将把调用进程的主线程转换为控制分派器。

该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。ServiceMain()函数将在下面提到。

此过程示例代码如下:SERVICE_TABLE_ENTRY entrytable[2]; entrytable[0].lpServiceName="testservice"; entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain; entrytable[1].lpServiceName=NULL; entrytable[1].lpServiceProc=NULL;StartServiceCtrlDispatcher(entrytable);在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。2.ServiceMain函数为void WINAPI ServiceMain(int argc, char** argv)格式的函数,函数名字可以任意定义。

它的作用就是:将你需要执行的任务放到该函数中循环执行即可。这就是服务程序的工作函数。

在ServiceMain执行你的任务前,需要给SERVICE_TABLE_ENTRY 分派表结构体进行赋值,注意由于此时服务还没有开始执行你的任务所以我们将服务的状态设置为SERVICE_START_PENDING,即正在初始化。我们进行如下赋值:servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING;servicestatus.dwControlsAccepted=SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令 servicestatus.dwWin32ExitCode = 0; servicestatus.dwServiceSpecificExitCode = 0; servicestatus.dwCheckPoint = 0; servicestatus.dwWaitHint = 0;hstatus = ::RegisterServiceCtrlHandler("testservice", CtrlHandler);CtrlHandler为void WINAPI CtrlHandler(DWORD request)型的函数,函数名字可以任意设定。

将在下一点讲到。Hstatus为SERVICE_STATUS_HANDLE类型的全局变量。

当需要改变服务状态时SetServiceStatus()函数需要它做为参数来标识一个服务。3. void WINAPI CtrlHandler(DWORD request),函数的主要功能是,接收系统传递的控制命令,比如当你通过sc.exe关闭服务时,该函数会收到SERVICE_CONTROL_STOP消息,你就可以对服务进行必要的管理。

在本例子程序中就只接收SERVICE_ACCEPT_SHUTDOWN和SERVICE_ACCEPT_STOP消息,这是通过前面给servicestatus赋值设定的。这样一个基本的服务程序就完成了。

下面贴出我的示例代码仅供参考。该代码在vs2008中调试通过。

本文结束的时候会附上如何安装服务。#include #include #define SLEEP_TIME 5000 //间隔时间#define FILE_PATH "C:\\log.txt" //信息输出文件bool brun=false;SERVICE_STATUS servicestatus;SERVICE_STATUS_HANDLE hstatus;int WriteToLog(char* str);void WINAPI ServiceMain(int argc, char** argv);void WINAPI CtrlHandler(DWORD request);int InitService();int WriteToLog(char* str){ FILE* pfile; fopen_s(&pfile,FILE_PATH,"a+"); if (pfile==NULL) { return -1; } fprintf_s(pfile,"%s\n",str); fclose(pfile); return 0;}void WINAPI ServiceMain(int argc, char** argv){ servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING; servicestatus.dwControlsAccepted = SER。

3. 如何编写windows服务程序

首先Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。

这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。

还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。服务是有状态的,当我们使用windows自带的服务管理程序sc.exe查看服务状态时可以显示服务的当前状态,这个状态是由我们在程序代码中进行控制的。

你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。这个状态信息你会在sc.exe中看到。

在编写windows服务程序过程中你需要关注的函数有:1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main 而不是WinMain()。在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY 分派表结构体,然后调用StartServiceCtrlDispatcher();这将把调用进程的主线程转换为控制分派器。

该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。ServiceMain()函数将在下面提到。

此过程示例代码如下:SERVICE_TABLE_ENTRY entrytable[2]; entrytable[0].lpServiceName="testservice"; entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain; entrytable[1].lpServiceName=NULL; entrytable[1].lpServiceProc=NULL;StartServiceCtrlDispatcher(entrytable);在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。2.ServiceMain函数为void WINAPI ServiceMain(int argc, char** argv)格式的函数,函数名字可以任意定义。

它的作用就是:将你需要执行的任务放到该函数中循环执行即可。这就是服务程序的工作函数。

在ServiceMain执行你的任务前,需要给SERVICE_TABLE_ENTRY 分派表结构体进行赋值,注意由于此时服务还没有开始执行你的任务所以我们将服务的状态设置为SERVICE_START_PENDING,即正在初始化。我们进行如下赋值:servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING;servicestatus.dwControlsAccepted=SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令 servicestatus.dwWin32ExitCode = 0; servicestatus.dwServiceSpecificExitCode = 0; servicestatus.dwCheckPoint = 0; servicestatus.dwWaitHint = 0;hstatus = ::RegisterServiceCtrlHandler("testservice", CtrlHandler);CtrlHandler为void WINAPI CtrlHandler(DWORD request)型的函数,函数名字可以任意设定。

将在下一点讲到。Hstatus为SERVICE_STATUS_HANDLE类型的全局变量。

当需要改变服务状态时SetServiceStatus()函数需要它做为参数来标识一个服务。3. void WINAPI CtrlHandler(DWORD request),函数的主要功能是,接收系统传递的控制命令,比如当你通过sc.exe关闭服务时,该函数会收到SERVICE_CONTROL_STOP消息,你就可以对服务进行必要的管理。

在本例子程序中就只接收SERVICE_ACCEPT_SHUTDOWN和SERVICE_ACCEPT_STOP消息,这是通过前面给servicestatus赋值设定的。这样一个基本的服务程序就完成了。

下面贴出我的示例代码仅供参考。该代码在vs2008中调试通过。

本文结束的时候会附上如何安装服务。#include #include #define SLEEP_TIME 5000 //间隔时间#define FILE_PATH "C:\\log.txt" //信息输出文件bool brun=false;SERVICE_STATUS servicestatus;SERVICE_STATUS_HANDLE hstatus;int WriteToLog(char* str);void WINAPI ServiceMain(int argc, char** argv);void WINAPI CtrlHandler(DWORD request);int InitService();int WriteToLog(char* str){ FILE* pfile; fopen_s(&pfile,FILE_PATH,"a+"); if (pfile==NULL) { return -1; } fprintf_s(pfile,"%s\n",str); fclose(pfile); return 0;}void WINAPI ServiceMain(int argc, char** argv){ servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING; servicestatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令 servicestatus.dwWin32ExitCode = 0; servicestatus.dwServiceSpecificExitCode = 0; servicestatus.dwCheckPoint = 0; servicestatus.dwWaitHint = 0; hstatus = ::RegisterServiceCtrlHandler("testservice", CtrlHandler); if (hstatus==0) { WriteToLog("RegisterServiceCtrlHandler failed"); return; } WriteToLog("RegisterServiceCtrlHandler success"); //向SCM 报告运行状态 。

4. vb如何写服务程序

使用Line 方法在对象上画直线和矩形。

语法object.Line [Step] (x1, 1) [Step] (x2, y2), [color], [B][F]Line 方法的语法有以下对象限定符和部分:部分 描述 object 可选的。 对象表达式,其值为“应用于”列表中的对象。

如果object 省略,具有焦点的窗体作为object。 Step 可选的。

关键字,指定起点坐标,它们相对于由 CurrentX 和 CurrentY 属性提供的当前图形位置。 (x1, y1) 可选的。

Single (单精度浮点数),直线或矩形的起点坐标。ScaleMode 属性决定了使用的度量单位。

如果省略,线起始于由 CurrentX 和 CurrentY 指示的位置。 Step 可选的。

关键字,指定相对于线的起点的终点坐标。 (x2, y2) 必需的。

Single (单精度浮点数),直线或矩形的终点坐标。 color 可选的。

Long (长整型数),画线时用的 RGB 颜色。如果它被省略,则使用 ForeColor 属性值。

可用 RGB 函数或 QBColor 函数指定颜色。 B 可选的。

如果包括,则利用对角坐标画出矩形。 F 可选的。

如果使用了 B 选项,则 F 选项规定矩形以矩形边框的颜色填充。不能不用 B 而用 F。

如果不用 F 光用 B,则矩形用当前的 FillColor 和 FillStyle 填充。FillStyle 的缺省值为 transparent。

例:Private Sub Form_Load()Me.AutoRedraw = TrueLine (100, 100)-(2100, 2100), vbBlue, BFEnd Sub。

5. 如何写服务心得体会

一、通过职业素质的培训:使我树立了正确的从业观念,改变我认为干餐饮服务员是没有前途的消极想法;树立了干一行,爱一行的思想,知道了一个人是否有所作为,不在于他从事何种职业,而在于他是否尽心尽力把所从事的工作做好。具备了我的从业意志和端正了我的工作态度;知道了成功服务员应有的素质,从而增强我的从业意识,立志要么不做,要做就做一个有理想、有道德、有知识、有纪律的合格服务员。

二、通过服务技能的培训:我学会了服务宾客的原则;服务宾客的程序;服务中工作细则;宴会出菜程序;托盘的技巧及端托行走的步伐;铺台、摆台的注意事项;换烟灰缸的重点;点菜、写菜单、取消菜式的注意事项及推销菜品的技巧;斟酒水的基本方法、程序和酒水的一般知识;处理客人投诉及服务工作突发事件对应技巧;餐厅开市的准备工作及收市的注意事项以及各种服务礼仪、餐饮卫生知识、消防知识等等。使我成为一个优秀的服务员奠定了基础。

三、通过这次培训如何做好服务员我总结了以下几点心德与同事们共同学习:

1、热爱你的工作:当你热爱自己的工作,你就会快乐地、更容易地做好你的工作。我们要让就餐的人们获得健康、能量与良好的服务。你就可能将平凡的工作做得不同凡响。而企业最需要的人就是热爱工作的人。

2、迅速熟悉工作标准和方法:为了自己的企业和自己在激烈的竞争中获胜,我们必须能够尽快地投入工作并胜任工作,以提高工作效率。

3、积极参与各种职位培训:培训学习是进步与发展的原泉。

4、要有勤奋的精神:餐饮工作主要是手头工作,通常不会过重,多做一些与不会累坏。所以我们要做到腿勤、眼勤、手勤、心勤。主动地工作,主动地寻找工作。“一勤天下无难事”的俗语说出一个很深刻道理,只要你勤奋成功的大门就为你敞开。

5、要有自信心:与金钱、势力、出身背景相比,自信是最重要的东西,自信能帮助人排除各种障碍、克服各种困难,相信自己是最优秀的。

6、要学会做人:做人就是做一位敬业、感恩、乐于助人、讲职业道德的人,真诚做人、认真做事,事业将会更成功

7、责任:就是以公司利益为重,对自己的工作岗位负责;就是为客人负责,给客人提供优质的出品与服务;就是“敬无在”,即使没有人监督你,你也会认真地做好工作,这就是责任的表现。

8、平常心面对工作中的不公平:在工作中没有绝对的公平,位在努力者面前,机会总是均等的。没有一定的挫折承受能力,今后如何能挑起大梁。

9、团队:发挥团队精神是企业一致的追求,餐饮企业的工作由多种分工组成,非常需要团队成员的配合。具有团队精神、善于合作的员工和企业都更成功。

10、每天进步一点点:积沙成塔、积少成多,很多成功者就是积累一点点小而成大器的。每天创新一点点,是在走向领先;每天多做一点点,是在走向丰收;每天进步一点点是在走向成功。

6. 怎么把自己写的服务程序添加到计算机服务

下面介绍使用SrvAny.exe将tracd封装成windows服务。

1.下载安装Windows2003 Resource Kits,其实我们只需要该目录下的SrvAny.exe和instsrv.exe文件即可,在此目录下还有rktools.chm帮助文件,大家可以查看SrvAny.exe如何使用。

2.创建服务,语法如下:instsrv 服务名称 srvany所在路径/srvany.exe。假设我们的Windows 2003 Resource Kits都安装在C:/Program Files/Windows Resource Kits/Tools目录,待建立的服务名称是TracSrv,那么我们的命令如下:

"C:/Program Files/Windows Resource Kits/Tools/instsrv" TracSrv "C:/Program Files/Windows Resource Kits/Tools/srvany.exe"

需要注意的是,srvany前的路径不能省略,必须是绝对路径。

现在我们已经创建了一个名叫TracSrv的服务,下一步我们来配置这个服务,让它封装tracd命令。

3.打开注册表编辑器。找到注册表项 “HKEY_LOCAL_MACHINE/SYSTEM/ CurrentControlSet/Services/TracSrv”,在TracSrv项里建立新的子项“Parameters”,再在新建的 Parameters项里新建字符串值,数值名称设为“Application”,数值数据设为我们在第一篇说的启动tracd的行命令,也就是

c:/python24/python c:/python24/scripts/tracd -p 8001 C:/SCM/Angel/Angel_Trac

(注意使用全路径)。这样,我们就配置好了TracSrv服务。

4.启动TracSrv服务。现在我们就可以在浏览器中访问Trac网站,只要服务器启动,不需要进入登陆Windows桌面,我们就可以访问Trac站点了。

如何删除这个服务呢?使用sc.exe即可,此命令在xp系统自带。

1.停止TracSrv服务。

2.运行cmd,进入行命令窗口,输入“sc delete TracSrv",回车即可。

7. 怎么用c#写一个windows服务程序

1、在VS2010创建windows service工程,文件--新建--项目--windows服务,名称:TestWindowsService,设置server1的ServiceName属性为TestWindowsService 2、由于服务是要安装的,所以它运行的时候就需要一个安装类Installer将服务安装到计算机,新建一个后台服务安装类Install继承自Installer,安 装初始化的时候是以容器进行安装的,所以还要建立ServiceProcessInstaller和ServiceInstaller服务信息组件添加到 容器安装,在Install类增加如下代码: using System; using System.Collections.Generic; //using System.Linq; using System.Text; using System.Configuration.Install; using System.ComponentModel; namespace TestWindowsService { [RunInstaller(true)]//注意这里的属性Attribute设置 class Install : Installer { private System.ComponentModel.IContainer components = null; private System.ServiceProcess.ServiceProcessInstaller spInstaller; private System.ServiceProcess.ServiceInstaller sInstaller; private void InitializeComponent() { components = new System.ComponentModel.Container(); // 创建ServiceProcessInstaller对象和ServiceInstaller对象 this.spInstaller = new System.ServiceProcess.ServiceProcessInstaller(); this.sInstaller = new System.ServiceProcess.ServiceInstaller(); // 设定ServiceProcessInstaller对象的帐号、用户名和密码等信息 this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem; this.spInstaller.Username = null; this.spInstaller.Password = null; // 设定服务名称 this.sInstaller.ServiceName = "TestWindowsService"; sInstaller.DisplayName = "后台Windows服务"; sInstaller.Description = "一个后台Windows运行的服务"; // 设定服务的启动方式 this.sInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic; this.Installers.AddRange(new System.Configuration.Install.Installer[] { this.spInstaller, this.sInstaller }); } } } 3、点击Service1.cs的视图设计器,在“单击此处切换到代码视图”上右键--添加安装程序,就出现了ProjectInstaller.cs。

点击ProjectInstaller.cs--选择serviceInstaller1--设置ServiceName为TestWindowsService,StartType为Automatic。选择serviceProcessInstaller1--设置account为LocalSystem 点击运行--出现:“无法从命令行或调试器启动服务” 4、一个空的服务基本上搞定了,只是业务没有,就看怎么在服务器上安装部署了.C#写的Windows后台服务不能直接安装,需要借助.NET Framework里面的InstallUtil.exe安装工具安装,我们可以做成一个执行CMD命令的文件BAT文件来安装启动它,命令如下: %windir%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe �%\TestWindowsService.exe 安装完成以后,我们可以在我的电脑管理服务里面看到才安装上的后台服务. 5、卸载:找到开始--运行--regedit,找到目录下的TestWindowsService: 删除后重新启动就可以了。

6、C#获取服务程序路径string PathBase = System.AppDomain.CurrentDomain.BaseDirectory; //-------------------另一种安装部署时添加注册表信息实现开机自启动------------------------ 使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件。具体实现如下: 创建安装部署这部分就不用说了,添加安装部署项目后,鼠标右键安装项目->视图->注册表, 要使软件在开机就运行,可以在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中 添加键值保存软件目录。

在这里我们依次添加以上的项,然后在Run中添加键值,键名可以自己起,value要填软件的物理路径。物理路径是客户在部署确定 的,我们如何获取呢?这里我们可以使用[TARGETDIR]获取客户选择的路径,在加上软件的启动文件名称。

比如软件启动文件的名称是 Client.exe,那么Value的值就为:[TARGETDIR]Client.exe.生成安装项目。找到bin目录下的setup.exe文件 运行,安装结束后我们可以在注册表中找到相应的键值。

重启电脑系统就会自动运行我们设置的软件。

怎么写服务程序

转载请注明出处育才学习网 » 中断服务程序怎么写

知识

罗梅芬用日文怎么写(罗钰潇日语怎么写)

阅读(21431)

本文主要为您介绍罗梅芬用日文怎么写,内容包括伊蕾娜日语怎么写,王雪菲用日文怎么说,张佳怡在日语中怎么写啊怎么读啊。罗 ら ラ ra钰 ぎょく ギョク gyoku潇 しょう シヨウ shou第一列:日语汉字,写法同汉字,都要用繁体,这三个都挺难写的,看

知识

邓先生的英文怎么写(1~40的英文怎么说)

阅读(10449)

本文主要为您介绍邓先生的英文怎么写,内容包括“邓先生”用英语怎么写,1~40的英文怎么说,漂亮英文beautiful缩写怎么写。1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 8 nine 10 te

知识

一个人布满皱纹怎么写(描写人物皱纹的句子)

阅读(9523)

本文主要为您介绍一个人布满皱纹怎么写,内容包括描写人物皱纹的句子,描写人物皱纹的句子,皱纹怎么描写。、老人脸上布满了皱纹,那一条条曲折不均的像是墙上斑驳的印迹,爬满了面容,留下了岁月的痕迹。2、外祖父是一位年过六旬的白发老人。在他

知识

登录接口怎么写(php登录的接口怎么写)

阅读(7769)

本文主要为您介绍登录接口怎么写,内容包括php登录的接口怎么写,网页登陆接口怎么做,网站登录接口程序怎么做。PHP 接口 接口 使用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。我们可以通过int

知识

档案奖惩情况怎么写(奖惩情况怎么写)

阅读(9607)

本文主要为您介绍档案奖惩情况怎么写,内容包括奖惩情况怎么写,个人简历及奖惩情况怎么填写,个人简历里面奖惩情况怎么写。在简历里的“奖励”部分,列出与你所获得的并与你的求职目标相关的荣誉、奖励和奖金。你既可以按时间顺序排列,也可以按

知识

头孢克肟拼音怎么写(头孢克肟的肟念什么)

阅读(8011)

本文主要为您介绍头孢克肟拼音怎么写,内容包括头孢克肟片全名拼音,头孢克肟片全名拼音,头孢克肟的肟念什么。肟[wò] :是含有羰基的醛、酮类化合物与羟胺作用而生成的有机化合物,可以参与许多有机化学反应,例如经典的Beckmann重排就是肟为底

知识

一库搜用日语怎么写(日语一库是什么意思)

阅读(8002)

本文主要为您介绍一库搜用日语怎么写,内容包括日语大神来,看动漫里的主人公说一句:恰,一库搜这是什么意思,一库一库;一搜库这两个日语是什么意思怎么写,看片都有“一库”(日语)是什么意。一库的意思就是“出发,出去”的意思。日语「行く」的音译

知识

外租无人机广告怎么写(植保无人机广告语)

阅读(7006)

本文主要为您介绍外租无人机广告怎么写,内容包括求一个无人机创意广告词谢谢巨友们了,求一关于无人机的广告标语,求一关于无人机的广告标语我们公司是做无人机的,新成立的公司,求。DJI大疆创新研发的的MG-1农业植保机专为农村作业环境设计,

知识

河南话que怎么写(河南话的nenna怎么写)

阅读(6539)

本文主要为您介绍河南话que怎么写,内容包括que怎么写,河南话的nenna怎么写,que怎么写。尿一壶(niào yī hú)关系密切,观点一致。例:“他俩今天尿一壶啦。”●尿(niào)⑴、从尿道排泄的液体。⑵、排泄小便。⑶、不放

知识

国学经文的论文怎么写(国学征文该怎么写)

阅读(7120)

本文主要为您介绍国学经文的论文怎么写,内容包括国学征文该怎么写,弟子规的400论文,关于国学经典的征文怎么写。“子曰:“温故而知新,可以为师”……小时,总是觉得国学就是没用的,古人写的话,我们还需要背,每次老师教给我们时,我总是会让思想开一

知识

化学实验总结怎么写(化学实验报告小结怎么写)

阅读(5399)

本文主要为您介绍化学实验总结怎么写,内容包括化学实验总结怎么写,化学实验报告小结怎么写,化学实验小结怎么写。化学实验报告的书写: 一般情况下化学实验报告是根据实验步骤和顺序从七方面展开来写的: 1.实验目的:即本次实验所要达到的目标或

知识

蝴蝶豌豆拼音怎么写(豌豆的拼音是什么)

阅读(5833)

本文主要为您介绍蝴蝶豌豆拼音怎么写,内容包括蝴蝶怎么拼音的,豌豆的拼音是什么,蝴蝶的拼音是什么。豌豆的拼音是[wān dòu]。豌豆是豆科一年生攀援草本,高0.5-2米。全株绿色,光滑无毛,被粉霜。叶具小叶4-6片,托叶心形,下缘具

知识

海绵宝宝用英文怎么说(海绵宝宝用英文怎么说)

阅读(6516)

本文主要为您介绍海绵宝宝用英文怎么说,内容包括海绵宝宝用英语怎么说,海绵宝宝用英文怎么说,海绵宝宝英文名是什么。1. SPONGEBOB SQUAREPANTS 近期很夯的一步卡通影片《海绵宝宝》(SpongeBob SquarePants)是一系

知识

茶盏怎么用(茶盏在茶道中干嘛用)

阅读(5426)

本文主要为您介绍茶盏怎么用,内容包括茶盏怎么用我要写一篇200字左右的茶盏的使用说明,求指教,茶盏在茶道中干嘛用,问一下斗笠盏如何使用现在是不是很少有人使用它,它的意义。苏东坡的名句"从来佳茗似佳人",典型地代表了唐宋及以后的文人墨客,

知识

thinkpad小红点怎么用(怎么学习使用thinkpad小红点)

阅读(7589)

本文主要为您介绍thinkpad小红点怎么用,内容包括怎么学习使用thinkpad小红点,thinkpad小红点怎么用,求教:THINKPAD的小红点使用方法。Thinkpad 小红点最高效的使用方法为:左手拇指按左键,无操作时在左键待命2、右手拇指按右键,同时兼按空格键及