二重起動防止を応用して・・・
http://yokohama.cool.ne.jp/chokuto/urawaza/doubleexe2.html
http://yokohama.cool.ne.jp/chokuto/urawaza/commonmem1.html
#uselib "kernel32.dll"
#func CreateFileMapping "CreateFileMappingA" sptr, sptr, sptr, sptr, sptr, sptr
#func MapViewOfFile "MapViewOfFile" sptr, sptr, sptr, sptr, sptr
#func UnmapViewOfFile "UnmapViewOfFile" sptr
#func GetLastError "GetLastError"
#func CloseHandle "CloseHandle" sptr
#func RtlMoveMemory "RtlMoveMemory" sptr, sptr, sptr
#uselib "user32.dll"
#func PostMessage "PostMessageA" sptr, sptr, sptr, sptr
#define WM_USER_DUPEXEC	0x0401	;二重起動を知らせるメッセージを定義
	onexit *exit
	oncmd gosub *dupexec, WM_USER_DUPEXEC
	
	CreateFileMapping -1, 0, 4, 0, 260, "myappname"	;マッピングオブジェクト作成
	hmapobj = stat
	GetLastError
	existflg = stat
	MapViewOfFile hmapobj, 2, 0, 0, 0	;マッピング
	pmapobj = stat
	
	if existflg = 183 {	;二重起動だった場合
		cmdline = dir_cmdline
		RtlMoveMemory pmapobj+4, varptr(cmdline), 256	;共有メモリにコマンドライン文字列を格納
		hwindow = 0
		RtlMoveMemory varptr(hwindow), pmapobj, 4	;共有メモリから初回起動ウィンドウハンドルを取得
		PostMessage hwindow, WM_USER_DUPEXEC, 0, 0	;二重起動されたことを初回起動ウィンドウに通知
		UnmapViewOfFile pmapobj
		CloseHandle hmapobj
		end
	} else {	;初回起動だった場合
		hwindow = hwnd
		RtlMoveMemory pmapobj, varptr(hwindow), 4	;共有メモリにウィンドウハンドルを格納
		stop
	}
*dupexec	;初回起動ウィンドウが二重起動通知を受けたときの処理
	sdim cmdline, 256
	RtlMoveMemory varptr(cmdline), pmapobj+4, 256	;共有メモリからコマンドライン文字列を取得
	mes cmdline
	return
*exit
	UnmapViewOfFile pmapobj
	CloseHandle hmapobj
	end