日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ 调用cmd命令行函数 可隐藏黑框 四种方法总结

發布時間:2025/3/19 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 调用cmd命令行函数 可隐藏黑框 四种方法总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在很多情況下,不得不調用cmd命令行,去實現一系列功能,總結靠譜方法兩種如下:

方法一:可接受cmd命令行黑框一閃(推薦星數::可傳值幾乎任何cmd命令)

string

string getCmdResult(const string &strCmd)//傳參string格式命令,返回值string格式; {char buf[10240] = { 0 };FILE *pf = NULL;if ((pf = _popen(strCmd.c_str(), "r")) == NULL){return "";}string strResult;while (fgets(buf, sizeof buf, pf)){strResult += buf;}_pclose(pf);unsigned int iSize = strResult.size();if (iSize > 0 && strResult[iSize - 1] == '\n') {strResult = strResult.substr(0, iSize - 1);}return strResult; }

方法二:隱藏CMD黑窗?(推薦星數::可傳值大部分cmd命令,如ipconfig、ping等,具體請自測)

直接調用此函數string ExeCmd(string pszCmd)即可,傳命令為string格式,返回值仍為?string格式。

重點:部分命令,傳形參命令時必須加入?cmd.exe /c? 具體請自測。(這個讓我走了好幾天彎路百思不得其解,最后意外發現此方法可解決,免去了把文件導出來,一行讀取判斷的麻煩!)

例如:改變文件編碼格式命令 type 1.txt>2.txt?

? ? ? ? ? ?傳形參時應該這樣傳參? cmd.exe /c? type 1.txt>2.txt

#include <iostream>#include <string> //#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )//隱藏命令行 #include <windows.h> #include <stdio.h> #include <tchar.h> using namespace std; wstring Str2Wstr(string str) {unsigned len = str.size() * 2;// 預留字節數setlocale(LC_CTYPE, ""); //必須調用此函數wchar_t *p = new wchar_t[len];// 申請一段內存存放轉換后的字符串mbstowcs(p, str.c_str(), len);// 轉換std::wstring str1(p);delete[] p;// 釋放申請的內存return str1; } string ExeCmd(string pszCmd) {wstring pszCmd_w = Str2Wstr(pszCmd);wcout << "pszCmd_w is " << pszCmd_w << endl;// 創建匿名管道,write->read;SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };HANDLE hRead, hWrite;if (!CreatePipe(&hRead, &hWrite, &sa, 0)){cout << "@ CreatePipe failed!" << endl;return (" ");}cout << "@0" << endl;// 設置命令行進程啟動信息(以隱藏方式啟動命令并定位其輸出到hWriteSTARTUPINFO si = { sizeof(STARTUPINFO) }; // Pointer to STARTUPINFO structure;GetStartupInfo(&si);si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;//si.dwFlags = STARTF_USESHOWWINDOW;si.wShowWindow = SW_HIDE; //隱藏窗口;si.hStdError = hWrite;si.hStdError = hWrite;si.hStdOutput = hWrite; //管道的輸入端口連接命令行的輸出;// 啟動命令行PROCESS_INFORMATION pi;// Pointer to PROCESS_INFORMATION structure;if (!CreateProcess(NULL,(LPWSTR)pszCmd_w.c_str(),NULL,NULL,TRUE, //FALSE, // Set handle inheritance to FALSENULL,//0, // No creation flagsNULL,NULL,&si,&pi)){cout << "@ CreateProcess failed!" << endl;return ("Cannot create process");}CloseHandle(hWrite);//關閉管道的輸入端口;// 讀取命令行返回值string strRetTmp;char buff[1024] = { 0 };DWORD dwRead = 0;strRetTmp = buff;while (ReadFile(hRead, buff, 1024, &dwRead, NULL))//從管道的輸出端獲取命令行寫入的數據;{cout << "buff = " << buff << endl;strRetTmp += buff;}CloseHandle(hRead);//關閉管道的輸出端口;cout << "strRetTmp:"<<strRetTmp << endl;return strRetTmp; }

方法三:調用vbs腳本,可隱藏黑框(推薦星數:)
 

vbs腳本:?
  Set ws= CreateObject("Wscript.shell")?
  ws.run "cmd /c test.bat",vbhide?
  另做test.bat填充功能代碼?

set objShell=wscript.createObject("wscript.shell") iReturn=objShell.Run("你的程序.exe", 0, FALSE) 'Run() '第一個參數是你要執行的程序的路徑, '第二個參數是窗口的形式,0后臺運行;1正常運行;2最小化;3最大化;缺省的話表示正常運行 '第三個參數是表示這個腳本是等待還是繼續執行,如果設為了True,腳本就會等待調用的程序退出后再向后執行。

方法四:?WinExec函數(推薦星數:,黑框可隱藏)

? WinExec(cmd.c_str(),SW_HIDE);//cmd(string類型)中為我們要調用的程序名及其參數, 如 “dir *.exe ”

其第一個參數相當于system函數的參數,

其第二個參數可以設置窗口是否顯示,SW_HIDE這個宏表示隱藏窗口。

重點:部分命令,傳形參命令時也必須加入?cmd.exe /c? 具體請自測。
??? 但是這個函數有一個問題,函數創建完這個進程后就返回了,也就是說它返回后,該進程不一定已經結束。

^-^自由 開源因你更精彩^-^ 。

總結

以上是生活随笔為你收集整理的c++ 调用cmd命令行函数 可隐藏黑框 四种方法总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。