カメヲラボ

主にプログラミングとお勉強全般について書いてます

CreateProcessのサンプル

更新:2006.12.09 (dmd 0.176, 0.177)
Psapi.hとか、WinBase.hがphobosに組み込まれていないので
自前で書かにゃイカン。メンドクサー(゜Д゜)
とりあえず、notepadを開くだけ。

追記:みくしで質問してみたところ、
http://www.prowiki.org/wiki4d/wiki.cgi?WindowsAPI
からYTさんが昔Dモジュール化したものを最近のコンパイラでも通るようにしたものが手に入るようです。将来的にこれがphobosに取り込まれることを祈りつつ、今後はこれを使っていこうと思います。
ついでにdmd 0.177でも確認しときました。

以下のソースコード(test.d)と同じ位置にwin32モジュールを展開して、

dmd test.d win32/winbase.d

としてください。

import std.stdio;
import std.stream;
import std.c.windows.windows;
import win32.psapi;
import win32.winbase;

void main(char[][]argv){
    PROCESS_INFORMATION piProcInfo; 
    STARTUPINFO siStartInfo;
    PROCESS_MEMORY_COUNTERS memInfo;
    SECURITY_ATTRIBUTES saAttr; 

    saAttr.nLength = SECURITY_ATTRIBUTES.sizeof; 
    saAttr.bInheritHandle = true; 
    saAttr.lpSecurityDescriptor = null; 

//    siStartInfo.cb = STARTUPINFO.sizeof;
    siStartInfo.hStdError = siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    siStartInfo.dwFlags |= STARTF_USESTDHANDLES;

    assert( CreateProcess(
        cast(char*)null,//MtoW(szCmdline), 
        cast(char*)"notepad",     // command line 
        null,          // process security attributes 
        null,          // primary thread security attributes 
        cast(int)0,          // handles are inherited 
        cast(uint)NORMAL_PRIORITY_CLASS,             // creation flags 
        null,          // use parent's environment 
        cast(char*)null,          // use parent's current directory 
        &siStartInfo,  // STARTUPINFO pointer 
        &piProcInfo)
    );  // receives PROCESS_INFORMATION 

}