2011-03-11 19 views
8

如何在C中運行外部程序?例如應用程序,如browserword,Notepad等。另外我怎樣才能設置外部應用程序的窗口的一定大小?例如一個窗口大小爲300 X 300像素。如何在C中運行外部程序?

+0

每個線程都應該是一個問題。你應該爲第二個問題創建一個新線程(儘管快速搜索會爲你找到答案)。 – 2011-03-11 21:38:07

回答

2

您可以使用來自C標準庫或Win32 CreateProcess函數的system運行和外部程序。

調整您創建的應用程序的主窗口的大小。首先用CreateWindow開始這個過程。然後使用EnumThreadWindows和CreateProcess的句柄來查找該進程的主窗口。最後,您可以撥打該號碼MoveWindow來設置大小和位置。

0

要運行外部程序,最直接的方法是使用system。還有其他選項(使用搜索)。

要設置窗口大小,您必須與窗口管理器進行交互,並要求它這樣做。我不知道這對你是否可行(Windows有一個"start"命令,如果你使用該操作系統,你可能會發現它有幫助)。

14

標準方法是system - 幾乎可以在任何地方使用,但是不能控制子進程的運行方式。

按照控制(和複雜度)的升序排列,Windows提供:WinExec,ShellExecute,ShellExecuteExCreateProcess。通過CreateProcess,您可以傳遞一個STARTUPINFOSTARTUPINFOEX結構。無論哪種方式,您都可以指定子窗口的起始位置和/或大小(儘管子進程可以並且可以在其窗口甚至可見之前移動/調整窗口大小)。

您可能還需要考慮Boost Process,這是不接受爲升壓的正式組成部分,但提供了比system更多的控制,同時保持合理的移植到相當數量的最廣泛使用的系統(包括Windows和任何類似POSIX的合理軟件,比如Linux或OS X)。

+0

'system'的問題在於它打開了控制檯(無論如何都是在Windows中)。有什麼方法可以擺脫這種情況嗎? – 2016-08-07 15:04:33

+0

我認爲我給出的替代方案清單仍然相當準確。如果你需要捕獲孩子的'stdout'或者輸入到'stdin'的輸出,你可能會考慮'popen'。我還添加了一個指向Boost.Process的指針,您可能會發現它很有用(但請注意,儘管名稱不是正式發佈的Boost部分)。 – 2016-08-07 18:29:20

2

您可以使用系統功能用於此目的一樣,

#include <stdlib.h> 

int main() 
{ 
    system("your-program-name"); 

    return 0; 
} 

這將在命令提示符下執行。

但是,如果你想使用WINAPI最好的方法是使用CreateProcess()函數, http://msdn.microsoft.com/en-us/library/ms682425.aspx

0

在Windows 不要使用系統()(禁止) 使用命令行的API