#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include <windows.h>
MODULE = Win32::Unicode::Process PACKAGE = Win32::Unicode::Process
PROTOTYPES: DISABLE
long
wait_for_single_object(HANDLE handle)
CODE:
RETVAL = WaitForSingleObject(handle, INFINITE);
OUTPUT:
RETVAL
long
wait_for_input_idle(HANDLE handle)
CODE:
RETVAL = WaitForInputIdle(handle, INFINITE);
OUTPUT:
RETVAL
void
create_process(WCHAR *shell, WCHAR* cmd)
CODE:
STARTUPINFOW si;
PROCESS_INFORMATION pi;
HV* hv = newHV();
SV* hvref = sv_2mortal(newRV_noinc((SV *)hv));
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
if (CreateProcessW(
shell,
cmd,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&si,
&pi
) == 0) {
XSRETURN_EMPTY;
}
hv_stores(hv, "thread_handle", newSViv((long)pi.hThread));
hv_stores(hv, "process_handle", newSViv((long)pi.hProcess));
ST(0) = hvref;
XSRETURN(1);
bool
get_exit_code(HANDLE handle)
CODE:
DWORD exit_code;
if (GetExitCodeProcess(handle, &exit_code) == 0) {
XSRETURN_EMPTY;
}
RETVAL = exit_code;
OUTPUT:
RETVAL