2009-02-28 41 views
9

**** Cảnh báo cho người mới sử dụng C *** Làm cách nào để biên dịch một ứng dụng C để nó chạy mà không hiển thị cửa sổ bảng điều khiển trên Windows? Tôi đang sử dụng Windows XP và GCC 3.4.5 (mingw-vista đặc biệt r3). Tôi đã googled này đầy đủ và tôi đã đưa ra những điều sau đây, theo những gì tôi đã đọc, có vẻ như nó được cho là để làm các trick, nhưng không phải trên hệ thống của tôi:GCC/C cách ẩn cửa sổ bảng điều khiển?

#include <windows.h> 
#include <stdlib.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
    system("start notepad.exe"); 
} 

I cũng đã cố gắng vượt qua các đối số "-mwindows" để GCC không có kết quả. Mẫu mã khởi chạy Notepad nhưng vẫn nhấp nháy một dấu nhắc lệnh.

EDIT: FWIW Tôi đã cũng đã cố gắng ShellExecute như một alernative vào hệ thống(), mặc dù tôi sẽ rất vui khi có được thậm chí một ứng dụng với một chính rỗng() hoặc WinMain() làm việc tại thời điểm này.

Trả lời

14

Giữ lại lá cờ -mwindows và sử dụng này:

#include <windows.h> 
#include <process.h> 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
    execl("c:\\winnt\\system32\\notepad.exe", 0); 
    // or: execlp("notepad.exe", 0); 
} 

Lưu ý: bạn cần đường dẫn đầy đủ cho execl() cuộc gọi nhưng không phải là execlp() một.

Chỉnh sửa: giải thích ngắn gọn về lý do tại sao hệ thống này sử dụng hệ thống() khởi động trình bao (như cmd.exe) để thực hiện lệnh tạo cửa sổ bảng điều khiển. Sử dụng execl không.

+0

Hoàn hảo! Cảm ơn bạn. –

+0

Ah, cảm ơn bạn đã chỉnh sửa - tôi đã đoán nó giống như vậy. (Ở đâu là nút +2? ;-) –

+0

Bạn không cần đường dẫn đầy đủ nếu bạn sử dụng execlp(). – paxdiablo

Các vấn đề liên quan