📄 convert_api_vb to autoit function.au3
字号:
#NoTrayIcon
#include <GUIConstants.au3>
#include <Array.au3>
#include <String.au3>
#Include <GuiEdit.au3>
$Convert = GUICreate("Convert API VB to Autoit Function", 466, 358, -1, -1)
GUISetBkColor(0xB6D9FC)
$Label1 = GUICtrlCreateLabel("Visual Basic API to convert", 32, 8, 132, 17)
$Label2 = GUICtrlCreateLabel("Convet to Dll Func in Autoit", 32, 144, 133, 17)
$Edit1 = GUICtrlCreateEdit("", 16, 24, 433, 105)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
$Edit2 = GUICtrlCreateEdit("", 17, 160, 431, 121)
GUICtrlSetData(-1, "")
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x000080)
$Checkbox1 = GUICtrlCreateCheckbox("Word-wrap", 120, 288, 89, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Auto Copy", 288, 288, 81, 17)
$Button1 = GUICtrlCreateButton("&Convert", 64, 320, 75, 25, 0)
GUICtrlSetTip(-1, "Convert to autoit")
GUICtrlSetCursor (-1, 0)
$Button2 = GUICtrlCreateButton("&Paste", 200, 320, 75, 25, 0)
GUICtrlSetTip(-1, "Paste API")
GUICtrlSetCursor (-1, 0)
$Button3 = GUICtrlCreateButton("&Copy", 336, 320, 75, 25, 0)
GUICtrlSetTip(-1, "Copy Autoit Function")
GUICtrlSetCursor (-1, 0)
GUISetState (@SW_SHOW)
_GUICtrlEditGetRECT ( $Edit1 )
$About = GUICtrlCreateMenuitem ("About", GUICtrlCreateContextMenu ())
Global $String, $FuncName, $Dll, $Func, $VarNums, $i, $VarReturn, $Data, $FuncParam, $DllParam, $n
GUICtrlSetData ($Edit1, StringReplace (IniRead ("API_TO_AU.ini", "Setting", "Input", ""), "|", @CRLF))
GUICtrlSetData ($Edit2, StringReplace (IniRead ("API_TO_AU.ini", "Setting", "Output", ""), "|", @CRLF))
;Set Example
If StringInStr(GUICtrlRead($Edit1), "Fucntion") = 0 Then
$Example = 'Declare Function WindowFromPoint Lib "user32"' & @CRLF & _
'Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long'
GUICtrlSetData($Edit1, $Example)
EndIf
_GUICtrlEditSetSel ($Edit1, 0, -1)
While 1
$nMsg = GUIGetMsg ()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Select
Case $nMsg = $Button1
$String = GUICtrlRead ($Edit1)
If $String <> "" Then
$FuncName = _StringWordNext($String, "Function", 1)
$Dll = StringReplace (_StringWordNext($String, "Function", 3), '"', "")
If StringRight ($Dll, 4) <> ".dll" then $Dll = $Dll & ".dll"
If StringInStr ($String, "Alias") Then
$Func = _StringWordNext($String, "Alias", 1)
Else
$Func = $FuncName
EndIf
$VarReturn = ConvertType(_StringWordNext($String, "Function", -1))
$StrExt = StringTrimLeft($String, StringInStr($String, "(") - 1)
$AsSplit = StringRegExp($StrExt, '[ ]([Aa]s)[ ]', 3)
If Not @error Then
$n = UBound($AsSplit) - 1
If $n > 0 Then
Dim $Var1[$n], $Var2[$n], $Var3[$n]
For $i = 0 To $n - 1
$Var1[$i] = StringRegExpReplace (_StringWordPrevious($StrExt, "As", 1, $i + 1), '[,)(]', "")
$Var2[$i] = ConvertType(StringRegExpReplace (_StringWordNext($StrExt, "As", 1, $i + 1), '[,)(]', ""))
$Var3[$i] = StringRegExpReplace (_StringWordPrevious($StrExt, "As", 2, $i + 1), '[,)(]', "")
Next
EndIf
EndIf
;_ArrayDisplay($Var1 & $Var2 & $Var3, "fd")
;Glue data
$Data = 'Func ' & $FuncName
If $n <> 0 Then
If $Var3[0] = "ByRef" Then
$FuncParam = "ByRef $" & $Var1[0]
Else
$FuncParam = "$" & $Var1[0]
EndIf
For $i = 1 To UBound ($Var1) - 1
If $Var3[$i] = "ByRef" Then
$FuncParam = $FuncParam & ", ByRef $" & $Var1[$i]
Else
$FuncParam = $FuncParam & ", $" & $Var1[$i]
EndIf
Next
$Data = $Data & "(" & $FuncParam & ")" & @CRLF
Else
$Data = $Data & "()" & @CRLF
EndIf
$Data = $Data & " Global $Return" & @CRLF
$Data = $Data & " $Return = DllCall (" & '"' & $Dll & '", ' & '"' & $VarReturn & '", '
If $n <> 0 Then
$Data = $Data & '"' & $Func
Else
$Data = $Data & '"' & $Func & '"'
EndIf
If $n <> 0 Then
$DllParam = ""
For $i = 0 To UBound ($Var1) - 2
$DllParam = $DllParam & ', "' & $Var2[$i] & '", $' & $Var1[$i]
Next
$DllParam = $DllParam & ', "' & $Var2[UBound ($Var1) - 1] & '", $' & $Var1[UBound ($Var1) - 1] & ')' & @CRLF
$Data = $Data & $DllParam
Else
$Data = $Data & ')' & @CRLF
EndIf
If $n <> 0 Then
If $Var2[UBound ($Var1) - 1] <> "str" And $Var2[UBound ($Var1) - 2] = "str" Then
$Data = $Data & ' Return $Return[2]' & @CRLF
Else
$Data = $Data & ' Return $Return[0]' & @CRLF
EndIf
Else
$Data = $Data & ' Return $Return[0]' & @CRLF
EndIf
$Data = $Data & 'EndFunc'
GUICtrlSetData ($Edit2, $Data)
IniWrite ("API_TO_AU.ini", "Setting", "Input", StringReplace ($String, @CRLF, "|"))
IniWrite ("API_TO_AU.ini", "Setting", "Output", StringReplace ($Data, @CRLF, "|"))
EndIf
Case $nMsg = $Button2
If ClipGet () <> "" Then
GUICtrlSetData ($Edit1, ClipGet ())
EndIf
Case $nMsg = $Button3
If _GUICtrlEditGetSel ($Edit1) <> 0 Then
ClipPut(_GUICtrlEditGetSel ($Edit1))
Else
ClipPut (GUICtrlRead ($Edit2))
EndIf
Case $nMsg = $Checkbox1
If GUICtrlRead($Checkbox1) = 1 Then
GUICtrlSetStyle($Edit1, $ES_AUTOVSCROLL)
Else
GUICtrlSetStyle($Edit1, $ES_AUTOHSCROLL)
EndIf
Case $nMsg = $Checkbox1
If GUICtrlRead($Checkbox1) = 1 Then
Else
EndIf
Case $nMsg = $About
MsgBox (64, "Infomation", "Author: HelloMotorola")
EndSelect
WEnd
Func _StringWordNext($Phrase, $Word, $Next = 1, $PhrasePos = 1)
If StringRight ($Phrase, 1) <> " " Then $Phrase = $Phrase & " "
$WordPos = StringInStr ($Phrase, $Word, 0, $PhrasePos)
If $WordPos <> 0 Then
$StringSearch = StringTrimLeft ($Phrase, $WordPos - 1)
$Array = StringRegExp ($StringSearch, "\b(.*?)[ ]", 3)
If Not @error Then
If $Next > 0 Then
If $Next < UBound ($Array) Then
Return $Array[$Next]
Else
Return ""
EndIf
ElseIf $Next = 0 Then
Return UBound ($Array);Return number word Next
Else
If $Next = -1 Then
Return $Array[UBound ($Array) - 1];Return word last
Else
Return ""
EndIf
EndIf
Else
Return ""
EndIf
Else
Return ""
EndIf
EndFunc ;==>_StringWordNext
Func _StringWordPrevious($Phrase, $Word, $Previous = 1, $PhrasePos = 1)
If StringRight ($Phrase, 1) <> " " Then $Phrase = $Phrase & " "
$WordPos = StringInStr ($Phrase, $Word, 0, $PhrasePos)
If $WordPos <> 0 Then
$StringSearch = StringLeft ($Phrase, $WordPos - 1)
$Array = StringRegExp ($StringSearch, "\b(.*?)[ ]", 3)
If Not @error Then
$ArraySize = UBound ($Array)
If $Previous > 0 Then
If $Previous < $ArraySize + 1 Then
Return $Array[$ArraySize - $Previous]
Else
Return ""
EndIf
ElseIf $Previous = 0 Then
Return UBound ($Array);Return number word Previous
Else
If $Previous = -1 Then;Return word first
Return $Array[0]
Else
Return ""
EndIf
EndIf
Else
Return ""
EndIf
Else
Return ""
EndIf
EndFunc ;==>_StringWordPrevious
Func ConvertType($Value)
$TypeAu = ""
$VBType = StringSplit ("long|RECT|OVERLAPPED|Boolean|String|Integer|any", "|"); Boolean = int
$AutoitType = StringSplit ("int|ptr|ptr|str|str|int|ptr", "|")
For $t = 1 To UBound ($VBType) - 1
If $Value = $VBType[$t] Then
$TypeAu = $AutoitType[$t]
ExitLoop
EndIf
Next
If $TypeAu = "" Then $TypeAu = $Value
Return $TypeAu
EndFunc ;==>ConvertType
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -