2012-04-03 16 views
2

我想寫一個程序關閉窗戶N秒。我知道要關閉窗口的最簡單的方法是調用system()寫一個小C程序來關閉Windows中輸入時間

shutdown -s -t XXXX 

其中XXXX是給定的時間。但system()只接受字符串作爲參數。如何在用戶輸入7200時撥打system("shutdown -s -t 7200")

+4

「系統」並不是真正做到這一點的最佳方式。簡單地調用['InitiateSystemShutdown'](http://msdn.microsoft.com/en-us/library/windows/desktop/aa376873(V = vs.85)的.aspx)。 – 2012-04-03 20:14:01

+0

所以你卡在哪裏?獲取用戶輸入?將它作爲字符串追加到系統調用中?別的地方? – AShelly 2012-04-03 20:16:08

回答

1

我會用InitiateSystemShutdown代替。您可以使用ExitWindowsExitWindowsEx,但那些都直接支持延遲被問及在原來的問題,所以你必須將代碼添加到做延遲(例如,使用SetTimer)。這當然是可能的,但是如果不做任何額外的回報就會招致額外的工作。

如果你堅持要用system,您可以使用sprintf(或類似的東西)創建的字符串傳遞給system

​​
+0

我想調用ExitWindows OP將需要提升權限,否則+1。 – user7116 2012-04-03 20:21:55

+0

@sletterlettervariables:幾乎任何*試圖關閉計算機的東西都需要SE_SHUTDOWN_NAME特權,無論是通過InitiateSystemShutdown,ExitWindows(Ex)還是在命令行上關閉。雖然它被編輯過,但在這種情況下,我會推薦使用ExitWindows(Ex)。要延遲使用它們,你必須自己處理延遲部分 - 額外的工作無法獲得。 – 2012-04-03 20:25:49

+0

我相信['shutdown'確實在內部(http://msdn.microsoft.com/en-us/library/windows/desktop/aa376881.aspx)是所有我指出。 – user7116 2012-04-03 20:28:30

0

scanf()sprintf()看看,如:

#define MAX_LENGTH 50 
/* ... */ 
int shutdownTime; 
char shutdownCall[MAX_LENGTH]; 

scanf("%d", &shutdownTime); 
if (shutdownTime < 0) 
    return NEGATIVE_TIME_ERROR; 
sprintf(shutdownCall, "shutdown -s -t %d", shutdownTime); 
system(shutdownCall);