如何将Windows窗体应用程序附加到.exe进程

时间:2017-01-01 23:53:27

标签: vb.net forms attachment

我需要你的帮助。 相信我,我已经搜索了好几十次,但找不到太多有用的信息。

所以我正在做的这个项目背后的想法是将我的vb.net windows窗体应用程序附加到一个名为“反击全球攻势”的游戏中,这不是作弊!

我的意图基本上是我在比赛时可以看到的一些有用的工具,比如时间等...

[问题] 我已经看过很少的视频,这已经完成了,但相反,这意味着他们将现有的流程附加到他们的Windows窗体,例如。我看到一个视频,其中一个人将calc.exe附加到他的Windows窗体应用程序,你可以理解,我想要相反,我想将我的窗体表单附加到现有的应用程序。

[我试过的事] 所以我所做的就是复制他的C#代码,将其翻译成vb.net并混合使用,我搞砸了很多:D

当我运行我的项目时,它会启动每个进程的至少200个实例(游戏和应用程序),我必须重启我的电脑才能关闭它们:D

Imports System.Windows.Forms
Imports System.Threading
Imports System.Diagnostics
Imports System.Runtime.InteropServices

Partial Public Class CubicCheat
    Inherits Form
    Public Sub New()
        InitializeComponent()
    End Sub

    <DllImport("USER32.DLL")> _
    Private Shared Function SetParent(hwc As IntPtr, hwp As IntPtr) As IntPtr
    End Function

    Private Sub CubicCheat_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        HookCsgo()
    End Sub

    Function HookCsgo()
        Dim csgo As Process = Process.Start("C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe")
        Dim cubic As Process = Process.Start("C:\Users\redfa_000\Documents\Visual Studio 2012\Projects\C++ Projekter\Crazy Tutorials\CubicHook\CubicHook\bin\Debug\CubicHook.exe")
        Thread.Sleep(500)
        cubic.WaitForInputIdle()
        SetParent(cubic.MainWindowHandle, csgo.Handle)
        Dispose()
    End Function

End Class

1 个答案:

答案 0 :(得分:0)

我希望您的代码看起来更像这样:

    Dim csgo As Process
    Dim csgoFileName As String = "C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe"
    Dim csgoMatches As Process() = Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(csgoFileName))
    If csgoMatches.Length = 0 Then
        csgo = Process.Start(csgoFileName)
        csgo.WaitForInputIdle()
    Else
        csgo = csgoMatches(0)
    End If

    Dim cubic As Process
    Dim cubicFileName As String = "C:\Users\redfa_000\Documents\Visual Studio 2012\Projects\C++ Projekter\Crazy Tutorials\CubicHook\CubicHook\bin\Debug\CubicHook.exe"
    Dim cubicMatches() As Process = Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(cubicFileName))
    If cubicMatches.Length = 0 Then
        cubic = Process.Start(cubicFileName)
        cubic.WaitForInputIdle()
    Else
        cubic = cubicMatches(0)
    End If

    SetParent(cubic.MainWindowHandle, csgo.MainWindowHandle)

请注意,在SetParent()调用中,我们在两个位置使用MainWindowHandle。你不能在那里使用Handle,因为它意味着完全不同的东西。