有時候程序需要輸出cmd窗口,查看運行過程的輸出,下面這些就是很好的例子。
AllocConsole(); //調用cmd窗口
freopen("CONIN$","r+t",stdin); //進行輸入流定向
ps: 當然用完要關閉,在程序退出的地方釋放
FreeConsole();
當然如果想要在運行 到時候,cmd窗口的關係按鈕失效,也是有辦法的。
原地址 :http://bbs.csdn.net/topics/330160646
int
main(
int
argc,
char
* argv[])
{
char
buf[MAX_PATH];
GetConsoleTitle(buf, MAX_PATH);
HWND
hwnd = ::FindWindow(NULL, buf);
HMENU
hmenu = ::GetSystemMenu(hwnd, FALSE);
if
(hwnd)
{
/** @brief 2.禁用控制檯窗口的關閉按鈕*/
::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND);
/** @brief 3.控制檯程序啓動時窗口最小化*/
::SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
}
/** @brief 4.獲得服務器啓動程序當前路徑,並添加到註冊表自啓動*/
TCHAR
workingPath[MAX_PATH];
ZeroMemory(workingPath, MAX_PATH);
if
(GetModuleFileName(NULL, workingPath, MAX_PATH) > 0)
{
//設置exe程序的工作路徑,這裏設置爲exe文件所在的位置爲工作路徑
char
path[3000];
memset
(path, 0, 3000);
for
(
int
i =
strlen
(workingPath) - 1; i >= 0; --i)
{
if
(workingPath[i] ==
'\\'
)
{
strncpy
(path, workingPath, i + 1);
break
;
}
}
SetCurrentDirectory(path);
//取得當前工作路徑成功
HKEY
hKey;
if
(RegCreateKey(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
, &hKey) != ERROR_SUCCESS)
{
//創建註冊表成功
}
else
{
if
(RegSetValueEx(hKey,
"CASCO Log Sever"
, 0, REG_SZ, (CONST
BYTE
*)(
LPCTSTR
)workingPath,
strlen
(workingPath)) != ERROR_SUCCESS)
{
//設置註冊表失敗,不自啓動
}
else
{
//設置註冊表成功,啓動設置成功
}
RegCloseKey(hKey);
}
}
else
{
//取得當前工作路徑成功失敗,不自啓動
}
return
0;
}