2017-01-01 119 views
0

我再次需要您的帮助。 相信我,我已经搜索了几十次,但找不到太多有用的信息。如何将windows窗体应用程序附加到.exe进程

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

我的意图基本上是一些有用的工具,我可以看一下,同时播放,如时间等等

[问题] 我看过一些影片,其中已完成这项工作,但相反,这意味着他们将现有的流程附加到他们的Windows窗体上,我看到一个视频,其中一个人将calc.exe附加到他的Windows窗体应用程序,并且正如你所理解的,我想要的是相反的,我想将我的Windows窗体附加到现有的应用程序中。

[事情我试过] 所以我做了什么,就是模仿他的C#代码,把它转变为vb.net和它周围的混合,我搞砸了严重:d

当我跑我的项目它开始ATLEAST 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 
+0

由于像CS:GO这样的游戏不包含标准的窗口消息循环,或者忽略/处理某些不同的消息,因此您尝试执行的操作可能不可行。可以通过DirectX和钩子(注意_ ** Valve Anti-Cheat System ** _! - 也称为_ ** VAC ** _)将内容呈现到游戏屏幕上,但这也意味着您可能会自己做点击测试和点击识别。 –

+0

是的,我听说过一些有关钩子和东西,与ImGUI,DirectX和OpenGL等,但不是一些c#C++的东西?我可以告诉你一个事实,我在这些语言中很糟糕:DI几乎不了解vb.net:D:D –

+0

DirectX主要是C++,但有.NET封装器,如SlimDX或SharpDX,它们都可以在C#和VB中使用。净。 –

回答

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,因为它意味着完全不同的东西。

+0

Hey there Idle_Mind,谢谢你的回复,感谢你的回复! –

+0

Hey there Idle_Mind,谢谢你的回复,感谢你的回复!这似乎并没有解决问题,但它确实改变了一些东西,至少它现在不会启动200个实例:D虽然我的主要问题是将我的vb.net表单保存在游戏中,但是您改编的代码启动这两个过程,但作为单一的过程,这意味着我可以移动我的Windows窗体出来的游戏,这不是目的,你有任何知识或任何形式的来源,我可以看看并学习这个? –

相关问题