当前位置:首页 » 编程软件 » windows编程实例

windows编程实例

发布时间: 2023-07-01 03:59:36

① 求WINDOWS服务编程实例

我写的,参考一下:
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>

#define DEFAULT_BEEP_DELAY 3000

char * SERVICE_NAME="BeepService";
HANDLE terminateEvent=NULL;
SERVICE_STATUS_HANDLE serviceStatusHandle;
int beepDelay=DEFAULT_BEEP_DELAY;
BOOL pauseService=FALSE;
BOOL runningService=FALSE;
HANDLE threadHandle=0;

void SendStatusToSCM(DWORD dwCurrentState,DWORD dwWin32ExitCode,DWORD dwServiceSpecificExitCode,DWORD dwCheckPoint,DWORD dwWaitHint)
{
SERVICE_STATUS servicestatus;
servicestatus.dwServiceType=SERVICE_WIN32_OWN_PROCESS;
servicestatus.dwCurrentState=dwCurrentState;
if(dwCurrentState==SERVICE_START_PENDING)
{
servicestatus.dwControlsAccepted=0;
}
else
{
servicestatus.dwControlsAccepted=SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_PAUSE_CONTINUE|SERVICE_ACCEPT_SHUTDOWN;
}

if (dwServiceSpecificExitCode==0)
{
servicestatus.dwWin32ExitCode=dwWin32ExitCode;
servicestatus.dwServiceSpecificExitCode=0;

}
else
{
servicestatus.dwWin32ExitCode=ERROR_SERVICE_SPECIFIC_ERROR;
servicestatus.dwServiceSpecificExitCode=dwServiceSpecificExitCode;
}
servicestatus.dwCheckPoint=dwCheckPoint;
servicestatus.dwWaitHint=dwWaitHint;
SetServiceStatus(serviceStatusHandle,&servicestatus);
}

DWORD ServiceThread(LPDWORD parm)
{
while(1)
{
Beep(200,200);
Sleep(beepDelay);
}
return 0;
}

VOID Handler(DWORD controlcode)
{
switch(controlcode)
{
case SERVICE_CONTROL_STOP:
SendStatusToSCM(SERVICE_STOP_PENDING,NO_ERROR,0,1,5000);
runningService=FALSE;
SetEvent(terminateEvent);
return;
case SERVICE_CONTROL_PAUSE:
if(runningService && ! pauseService)
{
SendStatusToSCM(SERVICE_PAUSE_PENDING,NO_ERROR,0,1,1000);
pauseService=TRUE;
SuspendThread(threadHandle);
SendStatusToSCM(SERVICE_PAUSED,NO_ERROR,0,0,0);
}
break;
case SERVICE_CONTROL_CONTINUE:
if(runningService && pauseService)
{
SendStatusToSCM(SERVICE_CONTINUE_PENDING,NO_ERROR,0,1,1000);
pauseService=FALSE;
ResumeThread(threadHandle);
SendStatusToSCM(SERVICE_RUNNING,NO_ERROR,0,0,0);
}
break;
case SERVICE_CONTROL_INTERROGATE:
break;
case SERVICE_CONTROL_SHUTDOWN:
return;
}

}

VOID ServiceMain(DWORD argc,LPTSTR * argv)
{
serviceStatusHandle=RegisterServiceCtrlHandler(SERVICE_NAME,(LPHANDLER_FUNCTION) Handler);
SendStatusToSCM(SERVICE_START_PENDING,NO_ERROR,0,1,5000);
terminateEvent=CreateEvent(0,TRUE,FALSE,0);
SendStatusToSCM(SERVICE_START_PENDING,NO_ERROR,0,2,1000);
if(argc==2)
{
int temp=atoi(argv[1]);
if (temp<1000)
{
beepDelay=DEFAULT_BEEP_DELAY;
}
else
{
beepDelay=temp;
}
}
DWORD id;
threadHandle=CreateThread(0,0,(LPTHREAD_START_ROUTINE)ServiceThread,0,0,&id);
runningService=TRUE;
SendStatusToSCM(SERVICE_RUNNING,NO_ERROR,0,0,0);
WaitForSingleObject(terminateEvent,INFINITE);
CloseHandle(terminateEvent);
SendStatusToSCM(SERVICE_STOPPED,NO_ERROR,0,0,0);
CloseHandle(threadHandle);
}

VOID main(VOID)
{
SERVICE_TABLE_ENTRY serviceTable[]={{SERVICE_NAME,(LPSERVICE_MAIN_FUNCTION)ServiceMain},{NULL,NULL}};
BOOL success;
success=StartServiceCtrlDispatcher(serviceTable);
if(! success) ExitProcess(GetLastError());
}

② windows编程

我针对你的问题作个简要回答吧。
windows编程分好几种吗?个人理解是只有一种,window编程是指编写window环境下的软件。但我们可以用不同的开发工具和不同的语言来进行window编程.比如工具有Microsoft
Visual
C++
6.0、Microsoft
Visual
Studio
2005、delphi等工具。语言有c、c++、java
、pascal等。而你所认为的各种编唾分类是针对不同的方面进行的。比如windows核心编程就涉及到硬件方面,根据硬件怎样分配资源,怎样回收等分方面。而网络编程是针对网络方面划分的。涉及到服务器与客户机等。windows图形编程自然与图形编辑有关。windows系统编程针对操作系统的编写。你列出的概念还真是具体啊。我并不是万能,也不能用简短的回答就能解译的清楚的。有些解译深度不够,再所能免。只是为了认你清楚这些是针对不同方面联系较深而作出的概念而已。就象说话,对一个事物,可能有不同的叫法来表现事物与哪方面联系较深。游戏编程与游戏较多。假如有一种在windowsg下的编程与电影联系较深有能力为它命名为windows电影编程。我是说假如。希望不会误导你。
你的第三个问题是选择看书吧。本人认为选择哪本书并不是很重要。关键是你提取知识方面。从具体的编程来是,程序就是指令的集合,而软件开始一个重要的方面就是写指令(写代码)。代码的书写要用编程语言。所以编程就是根据编程语言进行创造的过程。所以真正想做软件开发方面的话,首先要打好基础。首先选择一门比较有感觉的人。比如c,c++,pascal,但不可移植到其它操作系统.java可以跨平台,可以把widow环境下开发的软件直接拿到unix等操作系统使用。不知道你水平如何,但我建议选c++有关的书。其中就有你想要的window编程,使用API函数和各网友所说的用MFC开发。如果想快一点开发你所认为的开发一些有用的实际的东西,那我建议你有delphi7软件开发。不过它是有pascal语言的。所以根据个人情况而定。
文字多了一点。不知道你有没有耐心看,但每个字都是我一手打出来的,可没有用复制的方法哦,可看不起我哦。言尽于此,能看懂多少就看你自己的了。
想找我聊天的话可以直接聊也可以在Q上。
MY
QQ:406784192

③ 请给一些Windows中网络编程的资料

为一个不断进取的编程者,我们常常不满足于编程语言所提供的一般功能,总是希望能够实现一些特殊的功能,这有时不但是我们程序的要求,有时也是编程者心理上需要(试想,还会有什么比在深夜中巧妙解决一个难题而更令人兴奋呢?)。VisualBasic,做为一个当前最流行的快速编程环境,就给我们提供了实现这些目标的平台,事实上,它无限扩展的API接口可以实现所有WINDOWS下可以实现的功能。然而对于初学者来说,“浩瀚“的API函数总是显得那么神奇与不可琢磨,因此在实际应用过程中不能够灵活应用。下面我将结合两个小例子来示范介绍VB中调用API函数的步骤和功能,并总结说明在实际工作中如何提高这方面的技巧。例子在WINDOWS98下采用VB6.0编译
一.限制鼠标的移动
---- 有时我们的软件要求用户在未完成某一任务时,鼠标不能移出当前活动控件,换句话就是将鼠标限制在控件的内部,直到任务完成或用户中断为止。这个功能借助API函数实现起来思路很清楚,代码也很简洁。其思路是先确定当前鼠标的位置;然后确定当前活动控件的大小;最后将鼠标限制在活动控件内。(下面忽略项目建立等过程)
---- 1.建立一个新项目:新窗体为form1,在form1上添加一个commandbutton,设置其Name=CMButton1;Caption=“将鼠标限制在此按钮中“

---- 2.拷贝API函数和POINTAPI结构:打开VB6.0自带的API浏览器,调入WIN32API.txt文件,复制以下结构和函数声明到form1的声明部分:

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Function ClientToScreen Lib
“user32“ Alias “ClientToScreen“ (ByVal
hwnd As Long, lpPoint As POINTAPI) As Long
‘用来确定当前鼠标的位置

Private Declare Function ClipCursor Lib
“user32“ Alias “ClipCursor“ (lpRect As Any)
As Long ‘用来限定当前鼠标的活动范围

---- 3.定义一个通用过程ConfineTo
Public Sub ConfineTo (myCtl As Object)
On Error Resume Next
Dim tmpRect As RECT
Dim pt As POINTAPI

With myCtl
If TypeOf myCtl Is Screen Then ‘锁定在屏幕范围内
tmpRect.Left = 0
tmpRect.Top = 0
tmpRect.Right = (.Width \ Screen.TwipsPerPixelX)
tmpRect.Bottom = (.Height \ Screen.TwipsPerPixelY)
Elseif TypeOf myCtl Is form ‘锁定在窗体范围内
tmpRect.Left = (.Left \ Screen.TwipsPerPixelX)
tmpRect.Top = (.Top \ Screen.TwipsPerPixelY)
tmpRect.Right = (.Left + .Width) \ Screen.TwipsPerPixelX
tmpRect.Bottom = (.Top + .Height) \ Screen.TwipsPerPixelY
else
pt.X = 0
pt.Y = 0
Call ClientToScreen(.hWnd, pt)
‘获取当前控件在屏幕上的位置
tmpRect.Left = pt.X
‘保存当前控件位置
tmpRect.Top = pt.Y
pt.X = .Width
pt.Y = .Height
Call ClientToScreen(.hWnd, pt)
tmpRect.Bottom = pt.Y
tmpRect.Right = pt.X
End If
Call ClipCursor(tmpRect)
End With
End Sub

---- 4.在 CMButton1_Click()中加入以下代码
Static Cliped As Boolean
‘静态变量用来控制状态切换
If Not Cliped Then
ConfineTo Cmbutton1
Cliped = True
Else
ConfineTo Screen ‘取消鼠标限制
Cliped = True
End If

---- 5. 运行后,鼠标点击cmbutton1,此时鼠标只能被锁定在此按钮内部,再次点击按钮,限制取消。
二.创建临时文件
---- 临时文件用来保存软件运行过程中的临时变化,这对于熟悉WORD等软件的人来说,经常会遇到。那么临时文件是如何产生的呢,其实很简单,只需要一个API函数就可以。
---- 1.拷贝声明函数(方法同前)

Private Declare Function GetTempFileName Lib “kernel32“ _
Alias “GetTempFileNameA“ (ByVal lpszPath As String, _
ByVal lpPrefixString As String, ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long
参数定义如下:
lpszPath =传入保存临时文件的路径 ,如“C:\mytemp“
lpPrefixString=传入临时文件名开始的前三个字母,
起到帮助识别临时文件来源的作用。
wUnique =0 ,windows随机产生文件名;否则安其值定义文件名。
lpTempFileName=返回随机文件名

---- 2.返回临时文件名
Private Function GenTempName(sPath As String)
Dim sPrefix As String
Dim lUnique As Long
Dim sTempFileName As String

If IsEmpty(sPath) Then sPath = “c:\temp“
sPrefix = “TVB“
lUnique = 0 ‘windows随机给名

sTempFileName = Space$(100)
GetTempFileName sPath, sPrefix, lUnique, sTempFileName
sTempFileName = Mid$(sTempFileName, 1,
InStr(sTempFileName, Chr$(0)) - 1) ‘去掉多余空格
GenTempName = sTempFileName
End Function

---- 3.将下面代码加入到form1_click()事件中
MsgBox GenTempName(“c:\temp“)

---- 4.运行,鼠标点击form,弹出msgbox,显示生成“c:\temp\TVB724.tmp“文件,用文件管理器查看,在c:\temp下有TVB724.tmp 文件,长度为0K。
---- 需要注意的是,传入的路径必须是有效路径,否则GenTempName函数返回0,lpTempFileName中也没有临时文件名。

三.结束语
---- 从上面可以看出,API函数的确简单高效,但也充满一些看似高深的变量而使人却步。我们不禁会问,究竟什么时候要用到API函数?具体哪些函数可以解决我的问题?,那些函数中的变量都代表什么?其实对这些问题,即使对一个VB高手也难给出明确的回答,因为API函数库实在太庞大了,每一个人最终只能熟悉其中的一小部分(这也可能是调用API的文章层出不穷的原因吧)。总结自己的一点经验,我觉得应该注意以下几点。
---- 1.熟练掌握VB基本技巧,了解其所能所不能,这是最基本的要求。

---- 2.了解WINDOWS内部控制机理,这样对一些复杂的问题就可以逐步分析其调用机制,初步确定采用哪部分的API函数来解决问题。

---- 3.案头必备一本最新的VB版的WINDOWS API 大全,推荐机械工业出版社的< >。书中给出了每一个VB可以调用的API函数的详细说明,可以帮助精确了解所需要的API函数的变量声明。

---- 4.多看别人的程序。报纸杂志,尤其是网上这方面的文章数不清。这是最快的方法。

---- 5.随用随查。永远不要在用不到的函数上浪费宝贵的时间

热点内容
iisftp命令 发布:2025-02-08 04:04:39 浏览:455
安卓为什么软件老更新 发布:2025-02-08 03:53:40 浏览:735
算法实际应用 发布:2025-02-08 03:53:07 浏览:535
c语言加密文本 发布:2025-02-08 03:47:50 浏览:681
安卓打字键盘的声音在哪里调 发布:2025-02-08 03:42:27 浏览:30
c实现c编译器 发布:2025-02-08 03:42:26 浏览:661
爱猫编程 发布:2025-02-08 03:40:52 浏览:588
剑网3解压包 发布:2025-02-08 03:40:51 浏览:684
服务器ip被电信封了 发布:2025-02-08 03:35:51 浏览:348
安卓市场怎么安 发布:2025-02-08 03:23:59 浏览:755