C\C++控制檯程式隱藏方法總結

大囚長發表於2018-12-28

        學習計算機,往往先從Windows環境下學習程式設計,學習程式設計,往往從C學起,學習C,往往又從控制檯程式學習,何為控制檯,就是那個黑框白字的介面。對於這樣一個最初認為奇陋無比而現在認為無所不能的程式設計平臺,有時候需要將介面隱藏起來。那麼如何做呢?


方法1:

        在標頭檔案下加上一句預處理命令:

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 設定入口地址
完整程式為:

  1. #include<windows.h>
  2. #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 設定入口地址
  3. int main()
  4. {
  5. MessageBox(NULL,"Hello","Notice",NULL);
  6. return 0;
  7. }

在編譯器下執行時仍會出現黑框,但直接執行編譯好的exe程式就不會顯示黑框了,截圖分別如下:


方法2:

        使用API函式隱藏自身視窗,但會有黑框快速閃過的痕跡。程式碼如下:

  1. #include<windows.h>
  2. int main()
  3. {
  4. HWND hwnd;
  5. hwnd=FindWindow("ConsoleWindowClass",NULL); //處理頂級視窗的類名和視窗名稱匹配指定的字串,不搜尋子視窗。
  6. if(hwnd)
  7. {
  8. ShowWindow(hwnd,SW_HIDE); //設定指定視窗的顯示狀態
  9. }
  10. MessageBox(NULL,"Hello","Notice",MB_OK);
  11. system("pause");
  12. return 0;
  13. }

        執行效果:在編譯器下執行和直接執行exe檔案,都會有黑屏閃爍一下。


方法3:

        一個人自身的力量畢竟有限,所有有時候需要藉助外力,自己辦不到的可以讓好朋友幫忙,程式也同樣如此,內部實現不了的功能可以讓外部程式幫自己實現。

       再用C\C++寫一個載入程式,讓載入程式隱藏呼叫該程式。假設要隱藏執行記事本程式,程式碼如下:

  1. #include<windows.h>
  2. int main()
  3. {
  4. WinExec("notepad.exe",SW_HIDE); //隱藏執行其他程式
  5. return 0;
  6. }
執行效果:完全隱藏

方法4:

        既然思路以及不再侷限到程式自身,那麼其實就有了很多很多中外部隱藏呼叫的方法,只要你的知識面足夠寬那麼解決方法就會足夠多。比如,C#、Java、Python、Ruby、VB、Delphi等等都可以。最後再用VBScript寫一個吧。程式碼如下:

  1. set objShell=wscript.createObject("wscript.shell")
  2. iReturn=objShell.Run("你的程式.exe", 0, FALSE)
  3. 'Run()
  4. '第一個引數是你要執行的程式的路徑,
  5. '第二個引數是視窗的形式,0後臺執行;1正常執行;2最小化;3最大化;預設的話表示正常執行
  6. '第三個引數是表示這個指令碼是等待還是繼續執行,如果設為了True,指令碼就會等待呼叫的程式退出後再向後執行。

執行效果:完全隱藏



相關文章