我按照教程制作了一个小型 VB Net 项目,以在表单边界内打开 Windows 应用程序。我已经将控制 Windows 应用程序的功能翻译为 Cheat Engine Lua 语法:
f = createForm()
f.setSize(640,500)
f.Caption = 'Test Apps Inside The Boundaries'
b = createButton(f)
b.setPosition(570,460)
b.setSize(60,30)
b.Caption = 'Launch'
function SetParent(hWndChild, hWndNewParent)
executeCodeLocalEx('SetParent', hWndChild, hWndNewParent)
end
function SetWindowPos(hwnd, hWndInsertAfter, x, y, cx, cy, wFlags)
executeCodeLocalEx('SetWindowPos', hwnd, hWndInsertAfter, x, y, cx, cy, wFlags)
end
function MoveWindow(hwnd, x, y, cx, cy, repaint)
local rp
if repaint then
rp=1
else
rp=0
end
executeCodeLocalEx('MoveWindow', hwnd, x, y, cx, cy, rp)
end
function launch()
local ps1 = os.execute'calculator.exe'
sleep(1000)
--- appWin1 = ps1.MainWindowHandle --- how this?
local appWin1 = findWindow(nil,'Calculator')
SetParent(appWin1,f)
MoveWindow(appWin1, 0,0, f.Width/2, f.Height/2,true)
end
b.OnClick = launch
但是上面的代码不起作用。VB Net 中的代码如下:
NeedtoCELua = [[ Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click
Try
Dim ps1 As New ProcessStartInfo("notepad.exe")
ps1.WindowStyle = ProcessWindowStyle.Minimized
Dim p1 As Process = Process.Start(ps1)
Thread.Sleep(1000) ' Allow the process to open it's window
appWin1 = p1.MainWindowHandle
' Put it into this form
SetParent(appWin1, Me.Handle)
' Move the window to overlay it on this window
MoveWindow(appWin1, 0, 0, Me.Width \ 2, Me.Height, True)
Private Sub Form8_Resize(ByVal sender As Object, ByVal e As EventArgs)
If Me.appWin1 <> IntPtr.Zero Then
MoveWindow(appWin1, 0, 0, Me.Width \ 2, Me.Height, True)
End If
If Me.appWin2 <> IntPtr.Zero Then
MoveWindow(appWin2, Me.Width \ 2, 0, Me.Width, Me.Height, True)
End If
'base.OnResize(e);
End Sub
]]
如何在 CE Lua 中编写一个适当的函数,如上图所示,参考 VB Net function for button click 并使其工作?