當前位置:首頁 » 編程軟體 » 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.隨用隨查。永遠不要在用不到的函數上浪費寶貴的時間

熱點內容
html5移動端源碼下載 發布:2025-02-08 06:20:45 瀏覽:146
外網訪問黑群暉 發布:2025-02-08 05:45:59 瀏覽:559
中央存儲伺服器公司地址 發布:2025-02-08 05:38:48 瀏覽:821
伺服器如何查詢表空間的文件路徑 發布:2025-02-08 05:38:00 瀏覽:162
宏基4741g哪個配置好 發布:2025-02-08 05:37:56 瀏覽:810
混合料運輸車的配置是如何計算的 發布:2025-02-08 05:31:35 瀏覽:293
android紅包插件 發布:2025-02-08 05:31:34 瀏覽:365
ea伺服器怎麼連接 發布:2025-02-08 05:16:45 瀏覽:463
更加密更改 發布:2025-02-08 05:15:20 瀏覽:786
倉儲資源配置都需要開展哪些任務 發布:2025-02-08 05:13:51 瀏覽:676