2014-04-17 4 views

답변

1

CreateProcess() API가 있습니다.

설명서를 보시려면 here을 참조하십시오. 이름으로 응용 프로그램을로드 할 수 있으며 나머지는 Windows에서 처리됩니다.

0

실행 대화 상자를 말하는 것으로 가정합니다. 이 코드는 Windows 실행 대화 상자를 엽니 다. 경고 : 이것은 이름이 아닌 서수를 통해 Windows API에 액세스합니다. 이것은 일반적으로 향후 Windows 릴리스에서 작동하지 않을 수도있는 문서화되지 않은 작업을 나타내는 신호입니다.

// MS Run dialog 
typedef void (__stdcall* lpfnMSRun)(HWND, HICON, LPCSTR, LPCSTR, LPCSTR, int); 
static lpfnMSRun MSRun = NULL; 

bool DisplayRunDialog() 
{ 
    if ((MSRun == NULL) && (emergeLibGlobals::GetShell32DLL())) 
    { 
    MSRun = (lpfnMSRun)GetProcAddress(emergeLibGlobals::GetShell32DLL(), (LPCSTR) 61); 
    } 

    if (MSRun) 
    { 
    MSRun(NULL, NULL, NULL, NULL, NULL, 0); 
    return true; 
    } 

    return false; 
} 

이에 대한 메모를 그냥 몇 - emergeLibGlobals::GetShell32DLL()는 Shell32.dll에서에 LoadLibrary를 호출하고 그 HMODULE를 반환하는 내부 방법이다. 직접 LoadLibrary으로 전화하면됩니다. 또한 컴파일러에서 C++ 11을 지원하는 경우 NULLnullptr으로 바꿀 수 있습니다.

This CodeProject article은 동일한 일을하는 문서화 된 방법이 있다고 주장하지만 작동을 보장 할 수는 없으므로 시도하지 않았습니다.

+0

아니요. 해당 기능을 복제하려면 ShellExecuteEx를 호출하십시오. –

+1

@DavidHeffernan 이것이 문서화되지 않았다는 사실 외에도 특별한 이유가 있습니까? 내가 유지 관리하는 코드베이스에서이 코드를 직접 가져온 것이 궁금합니다. 그것이 나쁜 코드라면, 나는 그것을 처리 할 수 ​​있도록 알고 싶습니다. – computerfreaker

+0

다른 이유가 필요합니까? –

관련 문제