windows服務編程
Ⅰ WINDOWS是用什麼編寫的
90%的C語言+10%的匯編語言
windows系統都主要是用C語言編寫的
我們在用windows平台上編程的時候,要調用系統API(應用程序介面),這些介面封裝在系統的.dll(動態鏈接庫)裡面,所有的API函數都是32位平台上的C函數,從windows3.0一直windows95,到現在的win2003,都是基於C函數庫的程序集,所以用C函數編出的系統程序系統執行效率最高,當然在底層的一些調用,不排除有些是用匯編編的,但內核大多是用C做的。
另:MFC只是windows系統上API函數的封裝,基於面向對象原理,服務於GUI程序設計,MFC從AFX發展而來,已有十多年的歷史,最新的MFC6.0,那是設計基於windows系統程序的,而不是用來編寫操作系統本身,但也不能完全這樣說,系統上有些服務(可以說很多,比如時間)是用MFC做的。
Ⅱ Windows系統編程的介紹
Windows是個人計算機上最流行的操作系統,在國內外擁有眾多家庭和商務用戶,因此Windows系統編程可以說是程序員的基礎必修課。各高校許多專業都開設了相關的課程。本書結合大量的例子,介紹Windows系統編程的經典技術,並完整地介紹幾個Windows系統編程的實例,包括安裝和卸載軟體管理、Windows服務狀態監視器、鍵盤監視程序、進程保護器、系統信息查看程序等。
Ⅲ 什麼是windows編程
這不是一個嚴格概念,只是習慣於這么說而已。 基本上,如果「在windows系統下運行」這個事實對你寫程序而言很重要的的話, 就算是"windows編程"吧。 比方說你的程序的重要功能部分用到一些windows的api之類的
Ⅳ 如何學習windows編程
很多人從MFC開始學習,結果常常是一頭霧水,知難而退;也有人毅力堅強,熬過了MFC的陣痛期,最後卻是知其然而不知其所以然,並且思維被限制在MFC的框架之中,遇到稍微有點規模的程序就無從下手了。
以我個人的這些年的Windows開發經歷,我建議Windows上的學習路線如下:
首先當然是語言的學習,比如C或C++(STL),它是平台無關的
然後可以從《Windows程序設計》(by
Charles Petzold
)入門,從最原始的Windows API開始學習
接下來可以學習《Windows核心編程》(by
Jeffrey Richter
), 它會讓你比較深刻的理解Windows的前台和後台機制
學完上面2本書,對Windows系統已經比較熟悉了,再要深入的話可以學下《Windows 圖形編程》(by 袁鋒)。
至此,已經可以用API的方式開發大部分Windows應用程序了,
接下來可以學一些常用庫,比如MFC,WTL,ATL等,此時學習MFC和一開始就學習MFC已是截然不同的感覺,彼時痛苦難熬,此時會心一笑。
其他就是根據項目需要,專業知識的學習,比如COM技術,網路,D3D等。
Ⅳ Windows編程
摘要 如果打開《Windows程序設計》這本書,關於Windows開發的來龍去脈就一目瞭然了。但是要注意,《Windows程序設計》是一本純講述Windows API的書,確切的說,這本書主要講的是關於Windows 用戶態的API,也就是User32.dll GDI32.dll這兩個庫文件中的函數,大部分的內容都是關於Windows最基本的窗口元素的操控方面的API,比如創建窗口,繪制窗口,關閉窗口,消息循環等等。這本書不需要你有C++方面的知識,理論上說只要你有C語言的基礎就可以看懂,但是如果你連C語言的基礎也沒有,看這本書可能會發生一些困難,如果你學過其它一門非面向對象的語言,這本書實際上也能夠勉強看懂。我在大學的時候就看了這本書,但是直到現在也沒有看完,書中的某些知識,實際上在Windows開發中已經很少用到了,我個人認為是沒有必要把這本書從頭到位看一遍的,在看了前面幾章以後,我就蠢蠢欲動,寫了一些簡單的程序,迅速鞏固了關於這些API調用的記憶,為今後進化到Windows C++階段打下了一個良好的基礎。所以,寫程序是很重要的,這個階段,我建議大家寫一些簡單的程序,比如打字測速程序,自己創建一個消息循環,創建一個窗口,創建一個游標,用GDI函數輸出圖形及文字,這樣下來,基本的Windows程序設計概念就有了,不過注意寫的時候不要大段的Copy書上的代碼,全部自己寫,否則無助於理解各個API的含義,這個程序,因為是自己寫的第一個Windows程序,所以時間限定在一個月到一個半月之內比較合適。度過這個階段以後,Windows編程的基本概念就應該在你腦海中形成了。
Ⅵ 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編程是什麼
windows 編程就是編譯的程序可以在windows環境下運行 可以用的語言很多了,如VB,VC,Delphi,java,C#等等,很多編程軟體要調用系統的API函數,MFC,微軟基礎類(Microsoft Foundation Classes),同VCL(delphi的庫)類似,是一種Application Framework,隨微軟Visual C++ 開發工具發布。
Ⅷ Windows中服務程序指的是什麼
每個操作系統都需要有在後台執行任務的方法,無論是誰正在使用這部機器,這些任務都可以繼續運行,後台任務可以處理各種重要的服務,包括系統的或者用戶的。例如,一個信使服務可以監控網路,並且在接收到另一台機子的信息時,可以顯示一個對話框。一個發送和接收傳真的應用需要在啟動的時候運行,並且不斷地監控負責傳真的modem,看有沒有傳真進來。一個家庭的或者辦公室的安全程序,用來控制一件檢測設備時,它需要不時地查詢感測器,並且在適當的時候響應它。所有這些任務都需要CPU時間來執行它們,不過由於它們需要的CPU時間很少,因此可以放在後台而不影響用戶使用系統。
在MS-DOS中,後台的任務是通過TSR(Terminate and Stay Resident)程序來處理的。這些程序經由autoexec.bat文件開始。在UNIX中,後台任務是通過Daemons來處理的。在每次啟動 UNIX的過程中,你都可以看到操作系統啟動一些任務,例如定時的程序(Cron)和Finger的daemons,然後才可以讓首個用戶登錄。在 Windows NT中,後台的任務被稱為服務。服務可在每次NT啟動的時候運行,並且不管是誰登陸,都會一直運行下去。
Windows NT的服務都是通過一般的可執行程序實現的,不同的是,它遵循內部的一個特定協議來設計,以便它們能夠與服務控制管理器(SCM,Service Control Manager)進行正確的交互。在這篇文章中,你將學習到如何在Windows NT中創建和安裝簡單的Win32服務。一旦你懂得了這個簡單的服務,你要建立自己的服務也不難了,因為所有的服務,不論是如何地復雜,都必須包含有同樣基本的SCM介面代碼。只要符合SCM的要求,其實為服務設計的可執行文件和一般的程序並沒有多少的區別。
無論是對於編程者或者系統管理員,了解NT的服務如何工作都是很重要的。編程者就不必說了,因為他們要創建自己的服務,而對於系統管理員,也是同樣重要的。因為後台的任務可以是很危險的。MS-DOS和Macintosh系統都是一個病毒的溫床,因為它們在安全性方面先天不足,它們都可以允許任何人或者程序在任何時間創建後台的任務。Windows NT和UNIX系統是較安全的,因為只有系統管理員才可以為系統增加後台的任務,不過,如果系統管理員加入了一個破壞性的後台程序,就它就可以為所欲為了。因此系統管理員要了解Windows NT服務的技巧和許可權設置,就可以避免加入有潛在危險的後台任務。
基本的概念
服務有兩種不同的形式。驅動器服務使用驅動器協議,讓NT可以與特定的硬體進行通信。另一個是Win32服務,通過一般的Win32 API來實現後台任務。這篇文章的重點是談Win32服務,因為它們更為常見,而且創建起來也很容易。任何的NT編程者通過使用一般的NT SDK(或者Visual C++),並且可以用管理員的身份訪問一台NT機器,都可以實現和安裝自己的Win32服務。如果你想創建一些在Windows NT啟動時就運行的程序,並且要求它會在系統中一直運行,你就要使用Win32的服務。
在NT中,服務通過控制面板進行管理。在控制面板中,你會發現有一個服務的圖標,打開它你會看到所有Win32服務的清單。在那裡你可以開始、停止、暫停和繼續某個服務。你按下其中的啟動按鈕後,就會出現一個對話框,你可以修改啟動操作以及服務使用的默認帳號。一個服務可以在系統啟動的時候自動運行,也可以被完全禁止。或者設置為手動執行。在手動的時候,用戶還可以設置啟動的參數。要對服務中的項目作修改的話,你需要以一個管理員或者超級用戶的身份登錄。
Windows NT自帶有一些預裝的任務,用來處理諸如網路信使服務的操作或者使用「at」命令定時執行的操作,以及分布的RPC命名。在你創建自己的服務時,你必須執行一個獨立的安裝步驟,以將服務的信息插入到服務管理工具的列表中,這些信息包括有新服務的名字、執行文件的名字和啟動的類型等,都會寫入到注冊表中,這樣在機器下次啟動的時候,SCM就會得到新服務的相關信息。
Ⅸ 求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());
}