Tutorial Finally found a Gui worth using (external)

Hexui Undetected CSGO Cheats PUBG Accounts

SmokeyBaby

reconcile
Dank Tier Donator
Full Member
May 2, 2020
39
1,208
0
How long you been coding/hacking?
Less than a year
Started game hacking last summer went way too hard to fast and burned out eventually, now I'm back at it except slowing down and really getting an understanding for things in general.

With that said, I've been looking for a GUI worth using (imgui really didn't appeal to me especially because it made it a pain in the ass to run threads through) and I came across this repository ELTraxo/GH_UIX. My main problems so far have been:
  • Finding something in DirectX
  • Having it work with the CreateWindowEx function to make invisible overlays easier
  • Simplistic look
  • Easy to get the hand of
and this gui from what little I've worked with it so far has killed it.

The main reason I'm posting this is because when I downloaded the project and opened it, it looked to be a clusterfuck so if anyone wants to give it a try here's how I eventually got it to work...

When you launch it there will be multiple projects in the solution (in my case I want an external overlay window) so I would keep the main solution with all the headers and the standalone demo

P.S. Don't keep the one that says external it's gross and gives errors (for my dumbass at least). The standalone works so much easier once you make a few adjustments.

1603305267396.png
*Keep just these*

Next, the creator of the gui decided to be not too noob friendly so you have to go and change the includes.

Right click on the first solution "GH_UIX" and go to properties.
Once there go to C/C++ and look at the includes
1603305427430.png

Once there click the directory to the right of the red circle, click the down arrow and then "edit"

When you do that you should see something that looks like this except with different file locations.
1603305545874.png

Click on each of the file locations then the three dots on the right which will allow you to choose another file location

Literally just find where GH_UIX-master is on your computer and make all of them go to the folders they are already assigned

Then change the includes of the standalone demo by doing the same process but for the other project

1603305752743.png

For most people the Program Files Dir will stay the same its just the ones in the GH_UIX-master that will need changing

ONCE ALL OF THAT IS DONE RUN THE SOLUTION WITH THE STANDALONE DEMO SELECTED

It should run although it will be glitch and not blink in and out or might not even show up as long as the solution runs your on the right path

For whatever reason the standalone window is WHACK so you need to go into the winmain source folder and find the CreateStandaloneWindow function
1603306030244.png


Right click the function and go to its definition

If your interested what is wrong, the style of the window needs to be changed, you need to get rid of WS_EX_COMPOSITE which makes it glitch as well as add WS_EX_TOPMOST which will make the menu stay on top of all games / windows

Here's the new function :
C++:
NativeWindowPtr UIX::CreateStandaloneWindow( vec2i pos, vec2ui size )
{
    auto pNativeWindow = MakeNativeWindowPtr( hInstance, WndProcUIXSA );
    pNativeWindow->SetPos( pos );
    pNativeWindow->SetSize( size );
    pNativeWindow->SetStyleEx( /*WS_EX_COMPOSITE*/ WS_EX_LAYERED | WS_EX_TOPMOST); //
    pNativeWindow->SetIsOverlay( true );        //
    if(!vNativeWindows.size() )
        pNativeWindow->SetStyle( WS_POPUP );
    else
        pNativeWindow->SetStyle( WS_POPUP | WS_CHILD);
    pNativeWindow->SetClass( UIXCLASS );
    pNativeWindow->Create();
    vNativeWindows.push_back( pNativeWindow );
    if ( !pRender )
    {
        InitializeRendererEx(); // hope this doesn't fail? :P
        pNativeWindow->SetRenderer( pRender );
    }
    else
    {
        pNativeWindow->SetRenderer( pRender, true );
    }
    //auto canvasSize = size;
    //canvasSize *= vec2ui(2);
    //pNativeWindow->GetCanvas()->SetSize( { (float)canvasSize.x, (float)canvasSize.y } );
    auto pCanvas = pNativeWindow->GetCanvas();
    pCanvas->SetIsStandalone( true );
    pCanvas->SetSize( vec2f( size.x - 1.0f, size.y - 1.0f ) );
    return pNativeWindow;
}
Now it should run fine and the window should be on top of all other windows.

What the GUI looks like:
1603306272796.png
 

Attachments

You can download 0 Attachments

SmokeyBaby

reconcile
Dank Tier Donator
Full Member
May 2, 2020
39
1,208
0
Just came to find out that the gui does not include a way to put variables into the check boxes/sliders ect so I humbly encourage anyone to take on the challenge of implementing that... With all seriousness though I'm going to try to inform myself enough about how this thing works so I can do it myself but it seems odd someone would make a whole gui and not allow variables to be put in. Maybe its beta rn but none of the less that's what I'll be working on for the next while, any help is appreciated because I can't seem to figure out how this whole child control thing seems to work.


XControl.cpp:
void CXControl::AddChildControl( ControlPtr pControl )
{
    if(!pChildren)
    {
        pControl->SetParent( this->shared_from_this() );
        pChildren = pControl;
    }
    else
    {
        auto pTemp = pChildren;
        auto pNext = pTemp->GetNextControl();
        while(pNext)
        {
            pTemp = pNext;
            pNext = pNext->GetNextControl();
        }
        pTemp->SetNextControl( pControl );
        pControl->SetPrevControl( pTemp );
        pControl->SetParent( this->shared_from_this() );
    }
}
 
  • Like
Reactions: Petko123

proton

Old.
Dank Tier Donator
Apr 20, 2020
16
268
0
Just came to find out that the gui does not include a way to put variables into the check boxes/sliders ect so I humbly encourage anyone to take on the challenge of implementing that... With all seriousness though I'm going to try to inform myself enough about how this thing works so I can do it myself but it seems odd someone would make a whole gui and not allow variables to be put in. Maybe its beta rn but none of the less that's what I'll be working on for the next while, any help is appreciated because I can't seem to figure out how this whole child control thing seems to work.
The Child/Parent seems to be primarily for determining display properties at the moment.

Take a look in the Controls files and you'll see there is some implementation for variable controls:
C++:
CXButton::CXButton( RenderPtr pRender )
    :
    CXControl( pRender )
{
    this->pLabel = MakeLabelPtr( pRender );
    this->pLabel->SetFormat( DT_CENTER | DT_VCENTER );
    this->bDepressed = false;
    this->pCallback = nullptr;
    this->pDataBC = nullptr;
    this->iCallbackResult = 0;
}
You can check if (a button) in depressed:

if(whateverbutton->pDepressed)
{
//do whatever
}

in the slider control file the author has some functions that can control variables and get values already:

C++:
void CXSlider::SetValue( float value )
{
    this->fValue = value;
    UpdateThumbPosition();
    tstring buf( 16, 0 );
    swprintf_s( &buf[ 0 ], 16, _T( "%.2f" ), value);
    pLabel->SetText( buf );
}

float CXSlider::GetValue()
{
    return fValue;
}

There are however some areas where there is not clearly accessible values or controls like in the drop down menus and such. Most of these could be modified with a variable to hold the currently selected item OUTSIDE of the rendering loop. I like the style of the Gui
 

Similar threads

Community Mods