//勝手に移植。サンクス http://www.creaters.net/~kanain/
function TForm1.GetSakurahWnd:THandle;
var
dst:String;
hnd:THandle;
adr:Pointer;
size:Integer;
Sakura_hWnd:THandle;
i,j:Integer;
s:string;
begin
Result:=0;
//ファイル マッピング オブジェクト
オープン
hnd:=OpenFileMapping(FILE_MAP_READ,FALSE,'Sakura');
if hnd=NULL then begin
Result:=0;
Exit;
end;
adr:=MapViewOfFile(hnd,FILE_MAP_READ,0,0,0);
if adr=nil then begin
CloseHandle(hnd);
Result:=0;
Exit;
end;
//データ読み出し&ウィンドウハンドル取得
CopyMemory(@size,adr,4);
inc(PChar(adr),4);
dst:=PChar(adr);
//Form1.Caption:=dst;
UnMapViewOfFile(adr);
//メモリ開放
CloseHandle(hnd);
If Length(dst)> size then exit;
//スクリプトを調べるの巻
//Form2.RichEdit1.text:=(dst);
//ハンドルをなんとしてでも検索
i:=Pos('.',dst);
if Copy(dst,i+1,4)='hwnd' then begin
inc(i,5);
s:='';
for j:=i+1 to i+20 do begin
If Byte(dst[j])=13 then break;
s:=s+dst[j];
end;
Sakura_hWnd:=StrToInt(s);
end else begin
Sakura_hWnd:=0;
end;
Result:=Sakura_hWnd;
end;
procedure TForm1.CopyDataToDSSTP(Wnd:
HWnd;text:string);
var
CDS: TCopyDataStruct;
begin
CDS.cbData:=Length(text)+1;
CDS.lpData:=PChar(text);
CDS.dwData:=9801;
SendMessage(Wnd,WM_COPYDATA,Form1.handle,LPARAM(@CDS));
end;
function TForm1.SSTPGet:Boolean;
var hmutex:THandle;
bools :Boolean;
begin
//初期化
bools:=False;
//任意をチェック
hmutex:=openmutex(mutex_all_access,false,'sakura');
if (hmutex=0) then begin
// いない
end else begin
// いる
bools:=True;
closehandle(hmutex);
end;
//SakuraScriptPlayerをチェック
hmutex:=openmutex(mutex_all_access,false,'ssp');
if (hmutex=0) then begin
// いない
end else begin
// いる
bools:=True;
closehandle(hmutex);
end;
//正常に認識すれば接続終了サインを出してSSTP存在を教える
Result:=bools;
end;
|