0

我按照教程制作了一个小型 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 并使其工作?

4

1 回答 1

0

解决了:

function launch()
 ps1 = 'start notepad.exe'
 p1 = os.execute(ps1)
 sleep(1000)
 openProcess('notepad.exe')
 w=getWindow(getForegroundWindow(), GW_HWNDFIRST)
 pid=getOpenedProcessID()
   while w and (w~=0) do
     if (getWindowProcessID(w)==pid) and (executeCodeLocal("IsWindowVisible",w)~=0) then
       --print(w..' - '..getWindowCaption(w)..'('..getWindowClassName(w)..')')
     SetParent(w, f.handle)
     MoveWindow(w, 10, 20, 400, f.Height-100, 1)
     end
     w=getWindow(w, GW_HWNDNEXT)
   end
end

b.OnClick = launch
于 2020-02-22T14:56:31.190 回答