我一直在嘗試使用Windows API創建一個CreateProcess()過程。即使在瀏覽網頁後,我仍然無法創建新的控制檯。CreateProcess()不會創建一個CREATE_NEW_CONSOLE標誌的新窗口 - C/C++
Reasearch我已經完成:
我使用的MSDN示例代碼作爲用於我應在函數中使用的參數的基礎:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682512%28v=vs.85%29.aspx
我閱讀以下MSDN文章有關如何創建新控制檯窗口的信息:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682528%28v=vs.85%29.aspx
我也看到了類似的SO問題礦井大約有一個人同樣的問題:
CreateProcess does not create additional console windows under Windows 7?
結果:
我寫的代碼,我將與所有的要求下發布需要創建一個新的控制檯,但它不像預期的那樣工作。我花了很長時間試圖自己找到答案,但上面的文章是唯一可以通過google找到的相關文章。會發生什麼是該進程已創建,但它是在我的C程序的控制檯內。我希望能夠創建這個過程,而不需要攔截我的程序的控制檯。
也有其他差異。如果我在沒有Sleep()的do-while循環中打印大量字符以減慢速度,則TerminateProcess()將失敗並顯示拒絕訪問,並且當按下轉義鍵時程序將崩潰。這也是不希望的行爲。
這裏是C程序,我現在所擁有的:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define WIN32_LEAN_AND_MEAN
#include <process.h>
#include <windows.h>
#define IS_PRESSED(vk) (GetAsyncKeyState(vk) & 0x8000)
typedef struct process
{
PROCESS_INFORMATION p_info;
STARTUPINFO s_info;
} process;
void win_error(char * message, int is_exit)
{
char buffer[BUFSIZ] = { 0 };
DWORD error_code = GetLastError();
FormatMessage
(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
error_code,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) buffer,
BUFSIZ,
NULL
);
MessageBox(NULL, buffer, message, MB_ICONWARNING | MB_OK);
if (is_exit) exit(error_code);
return;
}
int create_process(process * p, const char * exe_path, const char * cmd_line_args)
{
p->s_info.cb = sizeof(STARTUPINFO);
p->s_info.dwFlags |= CREATE_NEW_CONSOLE;
return CreateProcess(
exe_path,
(LPSTR)cmd_line_args,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&p->s_info,
&p->p_info
);
}
int main()
{
process p = { { 0 }, { 0 } };
srand(time(NULL));
if (!create_process(&p, "J:\\C programs and compiliers\\C\\WindowsTest\\bin\\Debug\\matrix.bat", NULL))
win_error("CreateProcess", 1);
CloseHandle(p.p_info.hThread);
do
{
if (IS_PRESSED(VK_ESCAPE))
if (!TerminateProcess(p.p_info.hProcess, 0))
win_error("TerminateProcess", 0);
Sleep(50);
} while (WaitForSingleObject(p.p_info.hProcess, 0) != WAIT_OBJECT_0);
CloseHandle(p.p_info.hProcess);
return 0;
}
這裏是批處理程序我打電話:
@echo off
setlocal enabledelayedexpansion
:start
echo Hello PSAPI on Windows...
pause >nul
exit
我期待有人會知道如何亂用過程比我更多。這是我第一次使用CreateProcess()函數。是的,我知道ShellExecute()。我也知道我的批處理文件不是矩陣,但我想簡單地開始。
我剛剛找到解決方案,但我沒有足夠的聲望發佈它。對不起,如果我浪費你的時間。 – TheDelightfulEnd
您不需要聲望點即可發佈答案。您可以發佈自己的問題的答案,你不會得到任何聲譽點。 –