(AHK)(AutoHotkey)

 ぼちぼちと作り直し中の _Lib_StdLibrary.ahk の 経過報告です

 API関数を別に定義した事によって直接呼び出せるようになってますね
あと、極力 以前のと 仕様が変わらないようにもしてます
CurDir()
{
	VarSetCapacity(buf, 260, 0x00)
	api_GetCurrentDirectory(260, &buf)
	VarSetCapacity(buf, -1)
	Return buf
}
Divmod(Numeric, Divisor, ByRef Quotient, ByRef Modulus)
{
	Quotient := Numeric // Divisor
	Modulus := Mod(Numeric, Divisor)
	Return Quotient
}
DL2DN(DriveLetter)
{
	If ( (DriveLetter < 0) or (DriveLetter > 25) )
		Return ""
	Return Chr(DriveLetter + 0x61) . ":"
}
DumpMem(FileName, pBuffer, WriteSize)
{
	If ( (hFile := api_CreateFile(&FileName, 0x40000000, 0x0, 0x0, 0x2, 0x80, 0x0)) == 0xFFFFFFFF )
		Return 0
	res := api_WriteFile(hFile, pBuffer, WriteSize, WrittenSize, 0x0)
	api_CloseHandle(hFile)
	If ( res )
		Return WrittenSize
	Else
		Return ""
}
E2D(Expression)
{
	Expression := RegExReplace(Expression, "\\$", "")
	VarSetCapacity(buf, 260, 0x00)
	buf := Expression
	api_PathRemoveFileSpec(&buf)
	VarSetCapacity(buf, -1)
	Return buf
}
E2Dri(Expression)
{
	Return DL2DN(api_PathGetDriveNumber(&Expression))
}
E2E(Expression)
{
	VarSetCapacity(buf, 260, 0x00)
	api_lstrcpy(&buf, api_PathFindExtension(&Expression))
	VarSetCapacity(buf, -1)
	Return buf
}
E2F(Expression)
{
	VarSetCapacity(buf, 260, 0x00)
	api_lstrcpy(&buf, api_PathFindFileName(&Expression))
	api_PathRemoveExtension(&buf)
	VarSetCapacity(buf, -1)
	Return buf
}
E2FE(Expression)
{
	VarSetCapacity(buf, 260, 0x00)
	api_lstrcpy(&buf, api_PathFindFileName(&Expression))
	VarSetCapacity(buf, -1)
	Return buf
}
EnumProcess()
{
	hPS := api_CreateToolhelp32Snapshot(0x2, 0x0)
	VarSetCapacity(PE, 296, 0x00)
	NumPut(296, PE, 0, "UInt")
	If ( api_Process32First(hPS, &PE) )
	{
		dat .= NumGet(PE, 8, "UInt") . ","
			. StrGet(&PE + 36, 260) . ","
			. NumGet(PE, 24, "UInt") . "`n"
		Loop
		{
			If ( api_Process32Next(hPS, &PE) )
				dat .= NumGet(PE, 8, "UInt") . ","
					. StrGet(&PE + 36, 260) . ","
					. NumGet(PE, 24, "UInt") . "`n"
			Else
				Break
		}
	}
	api_CloseHandle(hPS)
	Return dat
}
ErrCode2Mes(ErrorCode, BufferSize = 512)
{
	VarSetCapacity(buf, BufferSize, 0x00)
	LangID := (0x00 | (0x02 << 10))
	api_FormatMessage(0x1000, 0x0, ErrorCode, LangID, &buf, BufferSize, 0x0)
	VarSetCapacity(buf, -1)
	Return buf
}
FileSize(FileName)
{
	If ( (hFile := api_CreateFile(&FileName, 0x80000000, 0x0, 0x0, 0x3, 0x0, 0x0)) == 0xFFFFFFFF )
		Return 0
	VarSetCapacity(LargeInteger, 8, 0x00)
	api_GetFileSizeEx(hFile, &LargeInteger)
	api_CloseHandle(hFile)
	Return NumGet(LargeInteger, 0, "UInt64")
}
FN2FL(FileName)
{
	VarSetCapacity(buf, 260, 0x00)
	api_GetLongPathName(&FileName, &buf, 260)
	VarSetCapacity(buf, -1)
	api_GetFullPathName(&buf, 260, &buf, 0x0)
	VarSetCapacity(buf, -1)
	Return buf
}
FN2FS(FileName)
{
	VarSetCapacity(buf, 260, 0x00)
	api_GetShortPathName(&FileName, &buf, 260)
	VarSetCapacity(buf, -1)
	api_GetFullPathName(&buf, 260, &buf, 0x0)
	VarSetCapacity(buf, -1)
	Return buf
}
FN2IsD(FileName)
{
	Return api_PathIsDirectory(&FileName)
}
FN2IsE(FileName)
{
	Return api_PathFileExists(&FileName)
}
FN2L(FileName)
{
	VarSetCapacity(buf, 260, 0x00)
	api_GetLongPathName(&FileName, &buf, 260)
	VarSetCapacity(buf, -1)
	Return buf
}
FN2S(FileName)
{
	VarSetCapacity(buf, 260, 0x00)
	api_GetShortPathName(&FileName, &buf, 260)
	VarSetCapacity(buf, -1)
	Return buf
}

H2C(hWindow)
{
	VarSetCapacity(buf, 256, 0x00)
	api_GetClassName(hWindow, &buf, 256)
	VarSetCapacity(buf, -1)
	Return buf
}
H2PID(hWindow)
{
	VarSetCapacity(buf, 4, 0x00)
	api_GetWindowThreadProcessId(hWindow, &buf)
	Return NumGet(buf, 0, "UInt")
}
H2PN(hWindow)
{
	If !( PID := H2PID(hWindow) )
		Return ""
	hPS := api_CreateToolhelp32Snapshot(0x2, 0x0)
	VarSetCapacity(PE, 296, 0x00)
	NumPut(296, PE, 0, "UInt")
	If ( api_Process32First(hPS, &PE) )
	{
		If ( NumGet(PE, 8, "UInt") == PID )
		{
			api_CloseHandle(hPS)
			Return StrGet(&PE + 36, 260)
		}
		Loop
		{
			If ( api_Process32Next(hPS, &PE) )
			{
				If ( NumGet(PE, 8, "UInt") == PID )
				{
					api_CloseHandle(hPS)
					Return StrGet(&PE + 36, 260)
				}
			}Else{
				Break
			}
		}
	}
	api_CloseHandle(hPS)
	Return ""
}
H2T(hWindow, BufferSize = 200)
{
	VarSetCapacity(buf, BufferSize, 0x00)
	api_GetWindowText(hWindow, &buf, BufferSize)
	VarSetCapacity(buf, -1)
	Return Buf
}
H2Thread(hWindow)
{
	Return api_GetWindowThreadProcessId(hWindow, 0x0)
}
IME_GetConv(hWindow)
{
	Return api_SendMessage(api_ImmGetDefaultIMEWnd(hWindow), 0x283, 0x1, 0x0)
}
IME_IsON(hWindow)
{
	Return api_SendMessage(api_ImmGetDefaultIMEWnd(hWindow), 0x283, 0x5, 0x0)
}
IME_IsKana(hWindow)
{
	If ( (IME_GetConv(hWindow) & 0x10) == 0x10 )
		Return 0
	Return 1
}
IME_IsRoman(hWindow)
{
	If ( (IME_GetConv(hWindow) & 0x10) == 0x10 )
		Return 1
	Return 0
}
IME_OFF(hWindow)
{
	If ( !api_IsWindow(hWindow))
		Return 0
	If ( !IME_IsON(hWindow) )
		Return 1
	Return ( !api_SendMessage(api_ImmGetDefaultIMEWnd(hWindow), 0x283, 0x6, 0x0) )
}
IME_ON(hWindow)
{
	If ( !api_IsWindow(hWindow))
		Return 0
	If ( IME_IsON(hWindow) )
		Return 1
	Return ( !api_SendMessage(api_ImmGetDefaultIMEWnd(hWindow), 0x283, 0x6, 0x1) )
}
IME_SetConv(hWindow,ConversionMode)
{
	Return api_SendMessage(api_ImmGetDefaultIMEWnd(hWindow), 0x283, 0x2, ConversionMode)
}
M2A()
{
	hWindow := M2PH()
	WinActivate, ahk_id %hWindow%
	Return
}
M2H()
{
	VarSetCapacity(buf, 8, 0x00)
	api_GetCursorPos(&buf)
	Return api_WindowFromPoint(NumGet(buf, 0, "Int"), NumGet(buf, 4, "Int"))
}
M2PH()
{
	MouseGetPos, , , hWindow
	Return hWindow
}
MCI_Close(AliasName)
{
	global MCI_CMD_STRING
	MCI_CMD_STRING := "close " . AliasName
	Return api_mciSendString(&MCI_CMD_STRING, 0x0, 0x0, 0x0)
}
MCI_ErrCode2Mes(ErrorCode)
{
	global MCI_BUFFER
	api_mciGetErrorString(ErrorCode, &MCI_BUFFER, 512)
	VarSetCapacity(MCI_BUFFER, -1)
	Return MCI_BUFFER
}
MCI_GetLength(AliasName)
{
	global MCI_BUFFER, MCI_CMD_STRING
	MCI_CMD_STRING := "status " . AliasName . " length"
	api_mciSendString(&MCI_CMD_STRING, &MCI_BUFFER, 20, 0x0)
	VarSetCapacity(MCI_BUFFER, -1)
	Return (MCI_BUFFER + 0)
}
MCI_GetMode(AliasName)
{
	global MCI_BUFFER, MCI_CMD_STRING
	MCI_CMD_STRING := "status " . AliasName . " mode"
	api_mciSendString(&MCI_CMD_STRING, &MCI_BUFFER, 20, 0x0)
	VarSetCapacity(MCI_BUFFER, -1)
	Return MCI_BUFFER
}
MCI_GetPosition(AliasName)
{
	global MCI_BUFFER, MCI_CMD_STRING
	MCI_CMD_STRING := "status " . AliasName . " position"
	api_mciSendString(&MCI_CMD_STRING, &MCI_BUFFER, 20, 0x0)
	VarSetCapacity(MCI_BUFFER, -1)
	Return (MCI_BUFFER + 0)
}
MCI_Init(BufferSize = 512)
{
	global MCI_BUFFER, MCI_CMD_STRING
	MCI_CMD_STRING := ""
	Return VarSetCapacity(MCI_BUFFER, 512, 0x00)
}
MCI_Open(DataName, AliasName)
{
	global MCI_CMD_STRING
	MCI_CMD_STRING := "open " . """" . DataName . """" . " alias " . AliasName
	Return api_mciSendString(&MCI_CMD_STRING, 0x0, 0x0, 0x0)
}
MCI_Pause(AliasName)
{
	global MCI_CMD_STRING
	MCI_CMD_STRING := "pause " . AliasName
	Return api_mciSendString(&MCI_CMD_STRING, 0x0, 0x0, 0x0)
}
MCI_Play(AliasName)
{
	global MCI_CMD_STRING
	MCI_CMD_STRING := "play " . AliasName
	Return api_mciSendString(&MCI_CMD_STRING, 0x0, 0x0, 0x0)
}
MCI_Seek(AliasName, Position)
{
	global MCI_CMD_STRING
	MCI_CMD_STRING := "seek " . AliasName . " to " . Position
	Return api_mciSendString(&MCI_CMD_STRING, 0x0, 0x0, 0x0)
}
MCI_SetFormatMS(AliasName)
{
	global MCI_CMD_STRING
	MCI_CMD_STRING := "set " . AliasName . " time format ms"
	Return api_mciSendString(&MCI_CMD_STRING, 0x0, 0x0, 0x0)
}
MCI_SetFormatMSF(AliasName)
{
	global MCI_CMD_STRING
	MCI_CMD_STRING := "set " . AliasName . " time format msf"
	Return api_mciSendString(&MCI_CMD_STRING, 0x0, 0x0, 0x0)
}
MCI_SetFormatTMSF(AliasName)
{
	global MCI_CMD_STRING
	MCI_CMD_STRING := "set " . AliasName . " time format tmsf"
	Return api_mciSendString(&MCI_CMD_STRING, 0x0, 0x0, 0x0)
}
MCI_Stop(AliasName)
{
	global MCI_CMD_STRING
	MCI_CMD_STRING := "stop " . AliasName
	Return api_mciSendString(&MCI_CMD_STRING, 0x0, 0x0, 0x0)
}
RandomFileSelect(FileMatchPatterns)
{
	Count := 0
	Loop, Parse, FileMatchPatterns, `n
	{
		If ( A_LoopField == "" )
			Break
		Loop, %A_LoopField%
			Count++
	}
	Random, RandomIndex, 1, %Count%
	Count := 0
	Loop, Parse, FileMatchPatterns, `n
	{
		Loop, %A_LoopField%
		{
			Count++
			If ( Count == RandomIndex )
				Return A_LoopFileLongPath
		}
	}
	Return ""
}
ReadFile(FileName)
{
	If ( (hFile := api_CreateFile(&FileName, 0x80000000, 0x0, 0x0, 0x3, 0x0, 0x0)) == 0xFFFFFFFF )
		Return ""
	VarSetCapacity(buf, 8, 0x00)
	api_GetFileSizeEx(hFile, &buf)
	fs := NumGet(buf, 0, "UInt64")
	VarSetCapacity(buf, fs, 0x00)
	api_ReadFile(hFile, &buf, fs, ReadedSize, 0x0)
	api_CloseHandle(hFile)
	VarSetCapacity(buf, -1)
	Return buf
}
RMExt(FileName)
{
	api_PathRemoveExtension(&FileName)
	Return FileName
}
RunEx(ExecuteFileName, Parameter = "", WorkDirectory = "", SW_xxxx = 1, Operation = "open")
{
	ExecuteFileName := FN2FL(ExecuteFileName)
	If ( WorkDirectory == "" )
		WorkDirectory := E2D(ExecuteFileName) . "\"
	Return api_ShellExecute(0x0, &Operation, &ExecuteFileName, &Parameter, &WorkDirectory, SW_xxxx)
}
StrGet(pBuffer, BufferSize)
{
	VarSetCapacity(buf, BufferSize, 0x00)
	api_lstrcpy(&buf, pBuffer)
	VarSetCapacity(buf, -1)
	Return buf
}
;--------------------------------------------------------------------------------
; Win32API
;--------------------------------------------------------------------------------
api_AttachThreadInput(AttachFrom, AttachTo, Flag)
{
	Return DllCall("user32.dll\AttachThreadInput"
		, "UInt", AttachFrom
		, "UInt", AttachTo
		, "Int", Flag
		, "Int")
}
api_CharLower(pString)
{
	Return DllCall("user32.dll\CharLower"
		, "UInt", pString
		, "UInt")
}
api_CharUpper(pString)
{
	Return DllCall("user32.dll\CharUpper"
		, "UInt", pString
		, "UInt")
}
api_CloseHandle(Handle)
{
	Return DllCall("kernel32.dll\CloseHandle"
		, "UInt", Handle
		, "Int")
}
api_CreateFile(pFileName, Access, Share, Security, Disposition, Attributes, hTemplate)
{
	Return DllCall("kernel32.dll\CreateFile"
		, "UInt", pFileName
		, "UInt", Access
		, "UInt", Share
		, "UInt", Security
		, "UInt", Disposition
		, "UInt", Attributes
		, "UInt", hTemplate
		, "UInt")
}
api_CreateToolhelp32Snapshot(Flags, th32ProcessID)
{
		Return DllCall("kernel32.dll\CreateToolhelp32Snapshot"
		, "UInt", Flags
		, "UInt", th32ProcessID
		, "UInt")
}
api_FormatMessage(Flag, pSource, MessageId, LanguageId, pBuffer, BufferSize, Arguments)
{
	Return DllCall("kernel32.dll\FormatMessage"
		, "UInt", Flag
		, "UInt", pSource
		, "UInt", MessageId
		, "UInt", LanguageId
		, "UInt", pBuffer
		, "UInt", BufferSize
		, "UInt", Arguments
		, "UInt")
}
api_GetClassName(hWindow, pBuffer, BufferSize)
{
	Return DllCall("user32.dll\GetClassName"
		, "UInt", hWindow
		, "UInt", pBuffer
		, "Int", BufferSize
		, "Int")
}
api_GetCurrentDirectory(BufferSize, pBuffer)
{
	Return DllCall("kernel32.dll\GetCurrentDirectory"
		, "UInt", BufferSize
		, "UInt", pBuffer
		, "UInt")
}
api_GetCurrentThreadId()
{
	Return DllCall("kernel32.dll\GetCurrentThreadId"
		, "UInt")
}
api_GetCursorPos(pPoint)
{
	Return DllCall("user32.dll\GetCursorPos"
		, "UInt", pPoint
		, "Int")
}
api_GetDriveType(pRootDirectoryName)
{
	Return DllCall("kernel32.dll\GetDriveType"
		, "UInt", pRootDirectoryName
		, "UInt")
}
api_GetFileSizeEx(hFile, pLargeInteger)
{
	Return DllCall("kernel32.dll\GetFileSizeEx"
		, "UInt", hFile
		, "UInt", pLargeInteger
		, "Int")
}
api_GetForegroundWindow()
{
	Return DllCall("user32.dll\GetForegroundWindow"
		, "UInt")
}
api_GetFullPathName(pFileName, BufferSize, pBuffer, pFilePart)
{
	Return DllCall("kernel32.dll\GetFullPathName"
		, "UInt", pFileName
		, "UInt", BufferSize
		, "UInt", pBuffer
		, "UInt", pFilePart
		, "UInt")
}
api_GetLastError()
{
	Return DllCall("kernel32.dll\GetLastError"
		, "UInt")
}
api_GetLongPathName(pFileName, pBuffer, BufferSize)
{
	Return DllCall("kernel32.dll\GetLongPathName"
		, "UInt", pFileName
		, "UInt", pBuffer
		, "UInt", BufferSize
		, "UInt")
}
api_GetShortPathName(pFileName, pBuffer, BufferSize)
{
	Return DllCall("kernel32.dll\GetShortPathName"
		, "UInt", pFileName
		, "UInt", pBuffer
		, "UInt", BufferSize
		, "UInt")
}
api_GetTickCount()
{
	Return DllCall("kernel32.dll\GetTickCount"
		, "UInt")
}
api_GetWindowLong(hWindow, nIndex)
{
	Return DllCall("user32.dll\GetWindowLong"
		, "UInt", hWindow
		, "Int", nIndex
		, "Int")
}
api_GetWindowText(hWindow, pBuffer, BufferSize)
{
	Return DllCall("user32.dll\GetWindowText"
		, "UInt", hWindow
		, "UInt", pBuffer
		, "UInt", BufferSize
		, "Int")
}
api_GetWindowThreadProcessId(hWindow, pPID)
{
	Return DllCall("user32.dll\GetWindowThreadProcessId"
		, "UInt", hWindow
		, "UInt", pPID
		, "UInt")
}
api_ImmGetDefaultIMEWnd(hWindow)
{
	Return DllCall("imm32.dll\ImmGetDefaultIMEWnd"
		, "Uint", hWindow
		, "UInt")
}
api_IsWindow(hWindow)
{
	Return DllCall("user32.dll\IsWindow"
		, "UInt", hWindow
		, "Int")
}
api_lstrcpy(pStringTo, pStringFrom)
{
	Return DllCall("kernel32.dll\lstrcpy"
		, "UInt", pStringTo
		, "UInt", pStringFrom
		, "UInt")
}
api_lstrcpyn(pStringTo, pStringFrom, MaxLength)
{
	Return DllCall("kernel32.dll\lstrcpyn"
		, "UInt", pStringTo
		, "UInt", pStringFrom
		, "Int", MaxLength
		, "UInt")
}
api_mciSendString(pCommandString, pBuffer, BufferSize, hCBWindow)
{
	Return DllCall("winmm.dll\mciSendStringA"
		, "UInt", pCommandString
		, "UInt", pBuffer
		, "UInt", BufferSize
		, "UInt", hCBWindow
		, "UInt")
}
api_mciGetErrorString(ErrorCode, pBuffer, BufferSize)
{
	Return DllCall("winmm.dll\mciGetErrorStringA"
		, "UInt", ErrorCode
		, "UInt", pBuffer
		, "UInt", BufferSize
		, "Int")
}
api_PathFileExists(pFileName)
{
	Return DllCall("shlwapi.dll\PathFileExistsA"
		, "UInt", pFileName)
}
api_PathFindExtension(pFileName)
{
	Return DllCall("shlwapi.dll\PathFindExtensionA"
		, "UInt", pFileName
		, "UInt")
}
api_PathFindFileName(pFileName)
{
	Return DllCall("shlwapi.dll\PathFindFileNameA"
		, "UInt", pFileName
		, "UInt")
}
api_PathGetDriveNumber(pFileName)
{
	Return DllCall("shlwapi.dll\PathGetDriveNumberA"
		, "UInt", pFileName
		, "Int")
}
api_PathIsDirectory(pFileName)
{
	Return DllCall("shlwapi.dll\PathIsDirectoryA"
		, "UInt", pFileName
		, "Int")
}
api_PathRemoveExtension(pFileName)
{
	Return DllCall("shlwapi.dll\PathRemoveExtensionA"
		, "UInt", pFileName
		, "UInt")
}
api_PathRemoveFileSpec(pFileName)
{
	Return DllCall("shlwapi.dll\PathRemoveFileSpecA"
		, "UInt", pFileName
		, "Int")
}
api_Process32First(hSnapshot, pPROCESSENTRY32)
{
	Return DllCall("kernel32.dll\Process32First"
		, "UInt", hSnapshot
		, "UInt", pPROCESSENTRY32
		, "Int")
}
api_Process32Next(hSnapshot, pPROCESSENTRY32)
{
	Return DllCall("kernel32.dll\Process32Next"
			, "UInt", hSnapshot
			, "UInt", pPROCESSENTRY32
			, "Int")
}
api_ReadFile(hFile, pBuffer, ReadSize, ByRef ReadedSize, pOverlapped)
{
	Return DllCall("kernel32.dll\ReadFile"
		, "UInt", hFile
		, "UInt", pBuffer
		, "UInt", ReadSize
		, "UIntP", ReadedSize
		, "UInt", pOverlapped
		, "Int")
}
api_SendMessage(hWindow, Message, wParam, lParam)
{
	Return DllCall("user32.dll\SendMessage"
		, "UInt", hWindow
		, "UInt", Message
		, "Int", wParam
		, "Int", lParam
		, "Int")
}
api_ShellExecute(hWindow, pVerb, pFileName, pParameters, pDirectory, ShowCmd)
{
	Return DllCall("shell32.dll\ShellExecuteA"
		, "UInt", hWindow
		, "UInt", pVerb
		, "UInt", pFileName
		, "UInt", pParameters
		, "UInt", pDirectory
		, "Int", ShowCmd
		, "UInt")
}
api_timeBeginPeriod(uPeriod)
{
	Return DllCall("winmm.dll\timeBeginPeriod"
		, "UInt", uPeriod
		, "UInt")
}
api_timeEndPeriod(uPeriod)
{
	Return DllCall("winmm.dll\timeEndPeriod"
		, "UInt", uPeriod
		, "UInt")
}
api_timeGetTime()
{
	Return DllCall("winmm.dll\timeGetTime"
		, "UInt")
}
api_WindowFromPoint(xpos, ypos)
{
	Return DllCall("user32.dll\WindowFromPoint"
		, "Int", xpos
		, "Int", ypos
		, "UInt")
}
api_WriteFile(hFile, pBuffer, WriteSize, ByRef WrittenSize, pOverlapped)
{
	Return DllCall("kernel32.dll\WriteFile"
		, "UInt", hFile
		, "UInt", pBuffer
		, "UInt", WriteSize
		, "UIntP", WrittenSize
		, "UInt", pOverlapped
		, "Int")
}