2017-01-01 6 views
0

다시 한번 귀하의 도움이 필요합니다. 저를 믿으세요. 수십 번이 항목을 검색했지만 많은 유용한 정보를 찾을 수 없습니다..exe 프로세스에 windows forms 응용 프로그램을 연결하는 방법

그래서 내가하고있는이 프로젝트의 아이디어는 "카운터 스트라이크 글로벌 공격"이라는 게임에 내 vb.net Windows 폼 응용 프로그램을 첨부하는 것입니다. 이것은 속임수가 아닙니다!

내 의도는 ... 등등의 시간으로, 기본적으로 내가 즐기면서 볼 수있는 몇 가지 유용한 도구입니다

[문제] 내가하지만 반대로,이 작업이 완료 된 경우, 몇 비디오를 본 적이, 즉 기존 프로세스를 Windows 폼에 연결했음을 의미합니다 (예 : 어떤 사람이 calc.exe를 자신의 Windows 양식 응용 프로그램에 첨부 한 비디오를 보았습니다. 이해할 수 있듯이 그 반대의 경우, 기존 Windows 응용 프로그램에 Windows 양식을 첨부하고 싶습니다.

[것들 내가 시도] 그래서 내가 무슨 짓을했는지, 자신의 C# 코드를 복사 vb.net로 번역하고 주위를 혼합, 그리고 나는 심하게 엉망 : D

나는 내 프로젝트를 실행하면 각 프로세스 (게임 & 응용 프로그램)의이어야 (200 개) 인스턴스를 시작하고 내가 그들을 종료 내 PC를 다시 부팅해야 할 것 : 나는 당신의 코드를보다 같은보고 기대

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 및 후크 (_ ** VAC ** _라고도하는 _ ** Valve Anti-Cheat System **에주의하십시오.)를 통해 게임 화면에 물건을 렌더링 할 수는 있지만, 자신의 히트 테스트 및 클릭 인식을 할 수 있습니다. –

+0

그래, ImGUI, DirectX, OpenGL 등을 사용하여 잠깐 얘기를 들었지만 그다지 C# ++가 아닌가? D : D –

+0

DirectX는 주로 C++이지만 C#과 VB에서 모두 작동하는 SlimDX 나 SharpDX 같은 .NET 래퍼가 있습니다. 그물. –

답변

0

D :

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을 모두 자리에 사용합니다. 완전히 다른 것을 의미하기 때문에 핸들을 사용할 수 없습니다.

+0

안녕하세요, Idle_Mind, 답장을 보내 주셔서 감사합니다, 나는 고맙게 생각합니다! –

+0

안녕하세요, Idle_Mind, 답장을 보내 주셔서 감사합니다, 나는 고맙게 생각합니다! 이것은 문제를 해결하지 못했지만, 분명히 몇 가지 사항을 변경했으며 적어도 지금은 200 인스턴스를 시작하지 않습니다. D 내 주요 문제는 내 vb.net 양식을 게임 내에 유지하는 것이었지만, 다시 말한 코드 두 프로세스를 시작했지만 단 하나의 프로세스로 시작했습니다. 즉, 창문을 게임 밖으로 옮길 수 있다는 것을 의미합니다. 목적이 아니 었습니다. 내가 알아볼 수 있고 알 수있는 소스가 있습니까? –