7
// Launch a uniform resource locator (i.e. http://www.yahoo.com/finance).
8
// This is expected to return immediately as the URL is launched by another
11
void inlLaunchURL( const TCHAR* URL, const TCHAR* Parms, NString* Error )
13
nuxDebugMsg( TEXT("LaunchURL %s %s"), URL, Parms?Parms:TEXT("") );
14
HINSTANCE Code = CALL_OS_TCHAR_FUNCTION(ShellExecuteW(NULL,TEXT("open"),URL,Parms?Parms:TEXT(""),TEXT(""),SW_SHOWNORMAL),ShellExecuteA(NULL,"open",TCHAR_TO_ANSI(URL),Parms?TCHAR_TO_ANSI(Parms):"","",SW_SHOWNORMAL));
16
*Error = (int)Code <= 32 ? TEXT("UrlFailed") : TEXT("");
20
// Creates a new process and its primary thread. The new process runs the
21
// specified executable file in the security context of the calling process.
23
void *inlCreateProc( const TCHAR* URL, const TCHAR* Parms )
25
nuxDebugMsg( TEXT("CreateProc %s %s"), URL, Parms );
27
TCHAR CommandLine[1024];
28
Snprintf( CommandLine, 1024, 1024-1, TEXT("%s %s"), URL, Parms );
30
PROCESS_INFORMATION ProcInfo;
31
SECURITY_ATTRIBUTES Attr;
32
Attr.nLength = sizeof(SECURITY_ATTRIBUTES);
33
Attr.lpSecurityDescriptor = NULL;
34
Attr.bInheritHandle = TRUE;
36
STARTUPINFO StartupInfo = { sizeof(STARTUPINFO), NULL, NULL, NULL,
37
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
38
NULL, NULL, NULL, NULL, SW_HIDE, NULL, NULL,
40
if( !CreateProcess( NULL, CommandLine, &Attr, &Attr, TRUE, DETACHED_PROCESS | REALTIME_PRIORITY_CLASS,
41
NULL, NULL, &StartupInfo, &ProcInfo ) )
44
return (void*)ProcInfo.hProcess;
48
// Retrieves the termination status of the specified process.
50
BOOL inlGetProcReturnCode( void* ProcHandle, INT* ReturnCode )
52
return GetExitCodeProcess( (HANDLE)ProcHandle, (DWORD*)ReturnCode ) && *((DWORD*)ReturnCode) != STILL_ACTIVE;
56
INL_IMPLEMENT_GLOBAL_OBJECT(NProcess);
58
void NProcess::Constructor()
60
m_ProcessID = GetCurrentProcessId();
61
m_ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, m_ProcessID);
63
m_MainThreadID = GetCurrentThreadId();
64
m_MainThreadHandle = OpenThread(THREAD_ALL_ACCESS, FALSE, m_MainThreadID);
67
void NProcess::Destructor()
69
CloseHandle(m_MainThreadHandle);
70
CloseHandle(m_ProcessHandle);
73
HANDLE NProcess::GetProcessHandle()
75
return m_ProcessHandle;
78
DWORD NProcess::GetProcessID()
83
HANDLE NProcess::GetMainThreadHandle()
85
return m_MainThreadHandle;
88
DWORD NProcess::GetMainThreadID()
90
return m_MainThreadID;
93
HANDLE NProcess::GetCurrentThreadHandle()
95
DWORD ThreadID = GetCurrentThreadId();
96
return OpenThread(THREAD_ALL_ACCESS, FALSE, ThreadID);
99
DWORD NProcess::GetCurrentThreadID()
101
return GetCurrentThreadId();