編程之關機
❶ 如何用C# 實現遠程關機呢
兩種方法,一種是服務端開一個web service埠及實現關機注銷等的函數,或封裝一個關機注銷等的類使用.net remoting。這樣客戶端直接通過訪問服務端的這個遠程函數或遠程對象,就可以實現關機注銷。另一種是通過windows遠程關機的dos(cmd)命令,來實現這個功能,即使用 http://topic.csdn.net/t/20050620/07/4093050.html 上所說的方法。創建一個Process,第一種是游簡在服務端創建,第二種是客戶端創建,一樣的使用process和shutdown命令。
創建cmd進程,並運行命令。方法如下類似
Process commandProcess = new Process();
try
{
commandProcess.StartInfo.FileName = "cmd.exe";
commandProcess.StartInfo.UseShellExecute = false;
commandProcess.StartInfo.CreateNoWindow = true;
commandProcess.StartInfo.RedirectStandardError = true;
commandProcess.StartInfo.RedirectStandardInput = true;
commandProcess.StartInfo.RedirectStandardOutput = true;
if (commandProcess.Start()) { }
commandProcess.StandardInput.WriteLine(string.Format("shutdown /?"));
commandProcess.StandardInput.WriteLine("exit");
for (; !commandProcess.HasExited; )//等待cmd命令運行皮告完神握褲畢
{
System.Threading.Thread.Sleep(1);
}
//錯誤輸出
string tmpout = commandProcess.StandardError.ReadToEnd();
string tmpout1 = commandProcess.StandardOutput.ReadToEnd();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
finally
{
if (commandProcess != null)
{
commandProcess.Dispose();
commandProcess = null;
}
}
哈哈,這個我正好可以悶悔幫你,以前寫了類似程序
開機運行:String regKey = "螞梁正HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
String myAppName = "DaKa";
try {
Runtime.getRuntime().exec("reg " + (isStart ? "add " : "delete ") + regKey + " "
+ myAppName + (isStart ? " /t reg_sz /d " + dirpath : " /f"渣陵));
dirpath是你當前文件的絕對路徑(包括文件名)
關機:Runtime.getRuntime().exec("shutdown -s -f -t 10");
❸ C語言高手。可以幫我製作一個在電腦上可以定時開關機子的C語言編程簡單點就好的,拜託了。
在Windows XP中,新增了一條命令行工具「shutdown」,其作用是「關閉或重新啟動本地或遠程計算機」。利用它,我們不但可以注銷用戶,關閉或重新啟動計算機,還可以實現定時關機、遠程關機。
該命令的語法格式如下:
shutdown [-i -l -s -r -a] [-f] [- m [\\ComputerName]] [-t xx] [-c "message"] [-d[u][p]:xx:yy] 其中,各參數的含義為:
-i 顯示圖形界面的對話框。
-l 注銷當前用戶,這是默認設置。-m ComputerName 優先。
-s 關閉計算機。
-r 關閉之後重新啟動。
-a 中止關閉。除了 -l 和 ComputerName 外,系統將忽略其它參數。在超時期間,您只可以使用 -a。
-f 強制運行要關閉的應用程序。
-m [\\ComputerName] 指定要關閉的計算機。
-t xx 將用於系統關閉的定時器設置為 xx 秒。默認值是 20 秒。
-c "message" 指定將在「系統關閉」窗口中的「消息」區域顯示的消息。最多可以使用 127 個字元。引號中必須包含消息。
-d [u][p]:xx:yy 列出系統關閉的原因代碼。
首先,我們來看一下該命令的一些基本用法:
1、注銷當前用戶
shutdown - l
該命令只能注銷本機用戶,對遠程計算機不適用。
2、關閉本地計算機 shutdown - s
3、重啟本地計算機
shutdown - r
4、定時關機
shutdown - s -t 30
指定在30秒之後自動關閉計算機。
5、中止計算機的關閉
有時我們設定了計算機定時關機後,如果出於某種原因又想取消這次關機操作,就可以用 shutdown - a 來中止。如:
shutdown -s C t 300 設定計算機在5分鍾後關閉。
Shutdown C a 取消上述關機操作。
以上是shutdown命令在本機中的一些基本應用。前面我們已經介紹過,該命令除了關閉、重啟本地計算機外,更重要的是它還能對遠程計算機進行操作,但是如何才能實現呢?
在該命令的格式中,有一個參數[-m [\\ComputerName],用它可以指定將要關閉或重啟的計算機名稱,省略的話則默認為對本機操作。於是,我用以下命令試了一下:
shutdown Cs Cm \\netproxy -t 30
(在30秒內關閉計算機名為netproxy的機器;註:netproxy為區域網內一台同樣裝有Windows XP的電腦)
但該命令執行後,計算機netproxy一點反應都沒有,我的屏幕上卻返回這樣一句話:Access is denied (拒絕訪問)。
為什麼會出現這種情況呢?我想了半天,四處查找有關的資料,終於發現,在Windows XP默認的安全策略中,只有管理員組的用戶才有權從遠端關閉計算機,而一般情況下我們從區域網內的其他電腦來訪問該計算機時,則只有guest用戶許可權,所以當我們執行上述命令時,便會出現「拒絕訪問」的情況。
找到問題的根源之後,解決的辦法也很簡單,只要在客戶計算機(能夠被遠程關閉的計算機,如上述的netproxy)中賦予guest用戶遠程關機的許可權即可。這可利用Windows XP的「組策略」或「管理工具」中的「本地安全策略」來實現。下面以「組策略」為例進行介紹:
1、單擊「開始」按鈕,選擇「運行」,在對話框中輸入「gpedit.msc」,然後單擊「確定」,打開「組策略編輯器」。
2、在「組策略」窗口的左窗格中打開「計算機配置」—「Windows 設置」—「安全設置」—「本地策略」—「用戶權利指派」。(如圖)
3、在「組策略」窗口的右窗格中選擇「Force shutdown from a remote system (從遠端系統強制關機)」,雙擊。
4、在彈出的對話框中顯示目前只有「Administrators」組的成員才有權從遠程關機;單擊對話框下方的「添加用戶或組」按鈕,然後在新彈出的對話框中輸入「guest」,再單擊「確定」。
5、這時在「從遠端系統強制關機」的屬性中便添加了一個「guest」用戶,單擊「確定」即可。
6、關閉「組策略」窗中。
通過上述操作後,我們便給計算機netproxy的guest用戶授予了遠程關機的許可權。以後,我們要遠程關閉計算機netproxy,只要在網路中其他裝有Windows XP 的電腦中輸入以下命令即可:
shutdown -s Cm \\netproxy -t 30 (其他參數用法同上)
這時,在netproxy計算機的屏幕上將顯示一個「系統關機」的對話框,提示「系統即將關機。請保存所有正在運行的工作,然後注銷。未保存的改動將會丟失。關機是由netproxy\guest初始的。」在對話框下方還有一個計時器,顯示離關機還有多少時間。在等待關機的時間里,用戶還可以執行其他的任務,如關閉程序、打開文件等,但無法關閉該對話框,除非你用shutdown Ca命令來中止關機任務。
最後,有一點要說明的是,shutdown命令不但可以遠程關閉裝有Windows XP系統的計算機,它還可以遠程關閉裝有 Windows 2000系統的計算機(對於Win9X嘛,好像不適用)。有關Windows 2000客戶計算機上的一些設置,操作方法同上,這里就不再多說了。
另外shutdown作為一個外部命令(其對應文件為\Windows\system32文件夾下的shutdown.exe),我們還可將它復制到Windows 2000的機器上,這樣,在裝有Windows 2000系統的機器之間便也能相互實現遠程關機。
❹ 電腦編程式控制制自動關機
在不指定編程語言的情況下,使用系統自帶的命令行支持是最為便捷的。
以目前野陸主流的windows操作系統為例,自帶的命令行為dos命令,腳本被稱為批處理文件,彎脊局其擴展名為.bat。
要實現自動關機,需要在批處理文件中寫入命令
shutdown -s -t 100
其中-t後的100是關機時間,即當前時間後100秒執行關機。
如果要馬上關機,只需要埋讓改成
shutdown -s -t 0
即可。
要讓電腦在指定時間關機,可以增加at。如令電腦在17:20關機,那麼在批處理寫入
at 17:20:00 shutdown -s -t 0
批處理的建立:
1 在需要建立批處理文件的位置,右鍵選擇新建->文本文檔;
2 將新建出的文本文檔(默認擴展名為txt),修改為需要的文件名.bat。
批處理的編輯:
不可以直接雙擊打開,而是要用右鍵點擊,選擇打開方式為記事本。或者右鍵->編輯。
批處理的運行:
雙擊批處理文件即可直接運行。
❺ C#編程關機程序不讓windows提醒
你如果使用命令
「shutdown -s -t xxxx」 這種做法 是一定會出現這個對話慎察框的,
這是window的安全策略,不可能在用戶毫不知爛孝遲情的情況下執行計劃任務。
如果希望定時關機而不告知用戶,
必須使用 shutdown -f (立即強制關機);
給你的解決方案就是,把定時的功能放在你程序的內部,使用Timer 控制項來處理定時,
時飢李間到了之後,Timer觸發cmd的「shutdown -f」 事件, 這樣就可以沒有提示的實現定時關機功能了,(迅雷就是這么做的)
如果定時的程序有可能被關閉,希望程序關閉後依然有定時關機的效果的話,可以再寫一個
Windows服務, 開始程序時直接跑起來Windows服務,這樣哪怕用戶把你這個小程序關了,
該幾點關機還是會幾點關機的。
❻ 自動關機的編程是怎麼寫的,如果解除自動關機,又怎麼辦
Shell
"cmd.exe
/c
shutdown
-s
-t
0"
若要重棗凳啟,把
-s
改為
-r
不加
-f
,vbHide也派皮可以省去,-t
後的數字最好不要是0,以保證在關機前可以用代碼
Shell
"cmd.exe
/c
shutdown
-a"
取消關機凳羨旅
❼ 電腦編程式控制制自動關機
最簡單的:
編寫一個批處理如下
@shutdown -s -t 20
保存孝段為sd.bat,然後放到windows的「控制面板」-「任務計劃」裡面,自己設計時間點。
-t 後面的20s是為了留20秒時間來保存。
編寫後陪森台的也行,就是寫一循環反復查詢系統時間,一旦到達23點就關機;當然可以優化,根據現在的時間讓線程sleep一段時間。也就是比如說現在是21點,你可以讓線程sleep1個多小時,然後再查詢,再調整sleep時間。具體代蘆慎畝碼不寫了,用第一種方法就行。
❽ 誰知道怎樣用VB編程序關機
分類: 電腦/網路 >> 程序設計 >> 其他編程語言敏蘆
問題描述:
shell "shutdown -s -t"的方法不是很好,有沒有什麼正常一點的?謝謝……
解析:
'暈!我剛剛才巧殲做了一個,把代橋寬頻碼給你。(怎麼這么巧啊?)
'你需要畫一個timer,名字叫timer1,然後把代碼復制就可以了。
Option Explicit
Private Const EWX_LogOff As Long = 0
Private Const EWX_SHUTDOWN As Long = 1
Private Const EWX_REBOOT As Long = 2
Private Const EWX_FORCE As Long = 4
Private Const EWX_POWEROFF As Long = 8
'The ExitWindowsEx function either logs off, shuts down, or shuts
'down and restarts the system.
Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
'The GetLastError function returns the calling thread's last-error
'code value. The last-error code is maintained on a per-thread basis.
'Multiple threads do not overwrite each other's last-error code.
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
TheLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
'The GetCurrentProcess function returns a pseudohandle for the
'current process.
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
'The OpenProcessToken function opens the access token associated with
'a process.
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, _
ByVal DesiredAccess As Long, TokenHandle As Long) As Long
'The LookupPrivilegeValue function retrieves the locally unique
'identifier (LUID) used on a specified system to locally represent
'the specified privilege name.
Private Declare Function LookupPrivilegeValue Lib "advapi32" _
Alias "LookupPrivilegeValueA" _
(ByVal lpSystemName As String, _
ByVal lpName As String, _
lpLuid As LUID) As Long
'The AdjustTokenPrivileges function enables or disables privileges
'in the specified access token. Enabling or disabling privileges
'in an access token requires TOKEN_ADJUST_PRIVILEGES access.
Private Declare Function AdjustTokenPrivileges Lib "advapi32" _
(ByVal TokenHandle As Long, _
ByVal DisableAllPrivileges As Long, _
NewState As TOKEN_PRIVILEGES, _
ByVal BufferLength As Long, _
PreviousState As TOKEN_PRIVILEGES, _
ReturnLength As Long) As Long
Private Declare Sub SetLastError Lib "kernel32" _
(ByVal dwErrCode As Long)
Private Const mlngWindows95 = 0
Private Const mlngWindowsNT = 1
Public glngWhichWindows32 As Long
'The GetVersion function returns the operating system in use.
Private Declare Function GetVersion Lib "kernel32" () As Long
Private Sub AdjustToken()
'********************************************************************
'* This procere sets the proper privileges to allow a log off or a
'* shut down to occur under Windows NT.
'********************************************************************
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
'Set the error code of the last thread to zero using the
'SetLast Error function. Do this so that the GetLastError
'function does not return a value other than zero for no
'apparent reason.
SetLastError 0
'Use the GetCurrentProcess function to set the hdlProcessHandle
'variable.
hdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, _
(TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), _
hdlTokenHandle
'Get the LUID for shutdown privilege
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1 ' One privilege to set
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED
'Enable the shutdown privilege in the access token of this process
AdjustTokenPrivileges hdlTokenHandle, _
False, _
tkp, _
Len(tkpNewButIgnored), _
tkpNewButIgnored, _
lBufferNeeded
End Sub
Private Sub Form_Load()
'********************************************************************
'* When the project starts, check the operating system used by
'* calling the GetVersion function.
'********************************************************************
Dim lngVersion As Long
lngVersion = GetVersion()
If ((lngVersion And &H***********) = 0) Then
glngWhichWindows32 = mlngWindowsNT
Else
glngWhichWindows32 = mlngWindows95
End If
End Sub
Private Sub Timer1_Timer()
V = MsgBox("確認要關機嗎?", vbYesNo + vbQuestion, "???")
If V = vbYes Then
If glngWhichWindows32 = mlngWindowsNT Then
AdjustToken
End If
ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_POWEROFF), 0
End If
End Sub
❾ 如何編程實現快速關機
關機其實不是很麻煩的一件事,但是代碼量不小。
總的來說,編程實現關機大多是調用Win32 API函數ExitWindows或ExitWindowsEx這兩個函數實現的。
如果在以前的98系統里,一句簡單的ExitWindows()就可以了,連參數都沒有,可是如果是在NT系列機里就要困難很多,因為蓋茨先生為了安全考慮加入了許可權這種東西。想要關機就先要獲取關機需要的許可權。
獲取許可權的方法是調用AdjustTokenPrivileges函數取得SE_SHUTDOWN_NAME許可權,有了這個許可權才可以順利地關機,不然就會返回失敗。
我不知道你擅長哪種語言,所以暫時沒有給出常式。
總的思想方法是先用OpenProcessToken()和GetCurrentProcess()函數配合獲得當前進程的訪問令牌,然後使用LookupPrivilegeValue()函數查詢關機許可權的本地唯一標識符(LUID),再使用AdjustTokenPrivileges函數獲得關機許可權,最後調用ExitWindowsEx函數關機。這幾個步驟地順序不能弄反,否則就會出錯。如果想保證程序的兼容性,還應該在開始前用GetVersionEx函數獲得當前的操作系統,保證獲取關機許可權的代碼只有當系統是NT內核時才運行。
如果你覺得這個方法麻煩,其實也可以用ShellExecute函數直接調用Shutdown.exe程序關機,很多小的關機程序也是這樣寫的。
❿ 編程自動關機代碼。。。。。
比如你的電腦要在22:00關機,可以選擇「開始→運行」,輸入「at 22:00 Shutdown -s」,
這樣,到了22點電腦就會出現「系統關機」對話框,默認有30秒鍾的倒計時並提示你保存工
作。如果你想以倒計時的方式關機,可以輸入「Shutdown.exe -s -t 3600」,這里表示60
分鍾後自動關機,「3600」代表60分鍾。
設置好自動關機後,如果想取消的話,可以在運行中輸入「shutdown -a」。另外輸入
「shutdown -i」,則可以打開設置自動關機對話框,對自動關機進行設置。
Shutdown.exe的參數,每個都具有特定的用途,執行每一個都會產生不同的效果,比如
「-s」就表示關閉本地計算機,「-a」表示取消關機操作,下面列出了更多參數,大家
可以在Shutdown.exe中按需使用。
-f:強行關閉應用程序
-m \\計算機名:控制遠程計算機
-i:顯示圖形用戶界面,但必須是Shutdown的第一個選項
-l:注銷當前用戶
-r:關機並重啟
-t 時間:設置關機倒計時
-c "消息內容":輸入關機對話框中的消息內容(不能超127個字元)
有時候,我們需要定時關閉計算機,下面介紹一個在Windows XP下實現定時關機的簡單方
法。
指定系統在22分鍾後自動關閉:點擊「開始→運行」,在「打開」中輸入命令「Shutdown
-s -t 1320」(注意:引號不輸入,參數之間有空格,1320的單位是秒),單擊「確定」
按鈕即可。
指定系統在某個時間(比如12:00)自動關閉:在「打開」中輸入命令
「at 12:00 Shutdown -s」即可。
取消定時關機:在「打開」中輸入命令「Shutdown -a」即可。