2017-01-01 6 views
0

еще раз Мне нужна ваша помощь. Поверьте мне, я искал это десятки раз, но не мог найти много полезной информации.Как приложить приложение форм Windows к процессу .exe

Итак, идея этого проекта, который я делаю, заключается в том, чтобы приложить мое приложение форм Windows vb.net к игре под названием «встречное глобальное наступление», это не обман!

Мои намерения в основном некоторые полезные инструменты, которые я могу смотреть на время игры, такие как время и т.д ...

[Проблема] Я смотрел несколько видео, где это было сделано, но противно, что они привязали существующие процессы к их формам окон, например. Я увидел видеоролик, в котором парень приложил файл calc.exe к своему окну, и, как вы понимаете, я хочу наоборот, я хочу приложить свои формы окон к существующему приложению.

[Вещи я пытался] Так что я сделал, был скопировать его 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 
+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

Эй, Idle_Mind, спасибо за ваш ответ, я ценю исправление! –

+0

Эй, Idle_Mind, спасибо за ваш ответ, я ценю исправление! Это, похоже, не решило проблему, но это определенно изменило некоторые вещи, и по крайней мере, она не запускает 200 экземпляров сейчас: D Хотя моя основная проблема заключалась в том, чтобы сохранить мою форму vb.net внутри игры, код, который вы перефразировали начались оба процесса, но как сингулярные процессы, а это значит, что я мог бы вывести свою форму из игры, что не было целью, могли бы вы иметь какие-либо знания или какой-либо источник, который я мог бы изучить и узнать об этом? –