创建或打开指定文件的有名或无名文件映射对象.
#Include <WinAPIEx.au3>
_WinAPI_CreateFileMapping ( $hFile [, $iSize [, $sName [, $iProtect [, $tSecurity]]]] )
$hFile | 创建文件映射对象的文件句柄.如果此参数为 -1, 则 $iSize 必须指定文件映射对象的大小. 此时本函数创建的文件映射对象由系统页面文件支持, 而不是由文件系统的文件支持. |
$iSize | [可选参数] 文件映射对象的最大尺寸. 如果此参数为 0, 文件映射对象的最大尺寸等于 $hFile 文件的当前大小 |
$sName | [可选参数] 文件映射对象的名称. |
$iProtect | [可选参数] 指定文件映射对象的页面保护,可以是以下值之一: $PAGE_EXECUTE_READ --- 允许映射为只读,复制写入或执行访问 $PAGE_EXECUTE_READWRITE --- 允许映射为只读,复制写入,读/写或执行访问 $PAGE_EXECUTE_WRITECOPY --- 相当于 PAGE_EXECUTE_READ $PAGE_READONLY --- 允许映射为只读,复制写入访问 $PAGE_READWRITE --- 允许映射为只读,复制写入,或读/写访问 $PAGE_WRITECOPY --- 相当于 PAGE_READONLY 结合上面的页面保护值,为文件映射对象指定下列一或多个属性: $SEC_COMMIT --- 如果文件映射对象由操作系统分页文件支持(即 $hfile 参数为 -1),当文件视图映射到进程地址空间,指定整个范围内的页面,而不是保留 $SEC_IMAGE --- 指定 $hFile 参数值是一个可执行映像文件 $SEC_LARGE_PAGES --- 对操作系统页面文件支持的文件映射对象启用大页面 $SEC_NOCACHE --- 不缓存所有页面 $SEC_RESERVE --- 如果文件映射对象由操作系统的分页支持,指定文件视图空间映射到进程地址,页面范围保留为以后整个过程使用 $SEC_WRITECOMBINE --- 所有页写组合 |
$tSecurity | [可选参数] $tagSECURITY_ATTRIBUTES 结构,决定子进程是否可以继承返回的句柄. 如果此参数为 0, 句柄不能被继承,文件映射对象得到一个默认的安全描述符. |
成功: | 返回新创建的文件映射对象句柄.如果函数调用之前该对象已存在, |
函数返回现有对象的句柄(当前的大小,而不是指定的大小), | |
并设置 @extended 为 1. | |
失败: | 返回 0,设置 the @error 为非 0 值. |
在MSDN中搜索
#NoTrayIcon
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Opt('WinWaitDelay', 0)
Global Const $Title = '_WinAPI_MapViewOfFile' & ChrW(160)
If Not $CmdLine[0] Then
If WinExists($Title) Then
Exit
EndIf
For $i = 1 To 2
If Not @compiled Then
Run(@AutoItExe & ' "' & @ScriptFullPath & '" /' & $i)
Else
Run(@AutoItExe & ' /' & $i)
EndIf
Sleep(500)
Next
Exit
EndIf
Opt('TrayIconHide', 0)
Switch $CmdLine[1]
Case '/1'
_Sender()
Case '/2'
_Receiver()
Case Else
Exit
EndSwitch
Func _Receiver()
Local $hMapping, $pAddress, $tData, $Text
$hMapping = _WinAPI_OpenFileMapping('MyFileMapping')
If @error Then
Return
EndIf
$pAddress = _WinAPI_MapViewOfFile($hMapping)
$tData = DllStructCreate('wchar[1024]', $pAddress)
While WinWait($Title, '', 1)
Sleep(200)
$Text = DllStructGetData($tData, 1)
DllStructSetData($tData, 1, '')
If $Text Then
MsgBox(64, $Title, $Text)
EndIf
WEnd
_WinAPI_UnmapViewOfFile($pAddress)
_WinAPI_CloseHandle($hMapping)
EndFunc ;==>_Receiver
Func _Sender()
Local $hMapping, $pAddress, $tData, $Text
$hMapping = _WinAPI_CreateFileMapping(-1, 2048, 'MyFileMapping')
If (@error) Or (@extended) Then
MsgBox(16, 'Error', 'Unable to create file mapping.')
Return
EndIf
$pAddress = _WinAPI_MapViewOfFile($hMapping)
$tData = DllStructCreate('wchar[1024]', $pAddress)
While WinWaitClose($Title)
$Text = StringStripWS(InputBox($Title, 'Type some text message.', '', '', -1, 171), 3)
If Not $Text Then
ExitLoop
EndIf
DllStructSetData($tData, 1, $Text)
If Not WinWait($Title, '', 1) Then
ExitLoop
EndIf
WEnd
_WinAPI_UnmapViewOfFile($pAddress)
_WinAPI_CloseHandle($hMapping)
EndFunc ;==>_Sender