Multiples Dialog Box WINAPI32

05/09/2017 17:41 nelsonrex#1
I have a project that has done in .DLL, but I have 3 dialog boxes, IDD_DIALOG1 (the main) and I have 2 other dialog boxes IDD_DIALOG2 and IDD_DIALOG3, of which within the IDD_DIALOG1 he inserted 2 BUTTONS that I want to call Each dialog box, for example: BUTTON1 that when clicking open the IDD_DIALOG2 and the BUTTON2 open the IDD_DIALOG3.

Code:
#include "windows.h"
#include "resource.h"

HINSTANCE H_DIALOG1, H_DIALOG2, H_DIALOG3;

BOOL CALLBACK call_Dialogo2(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK call_Dialogo3(HWND, UINT, WPARAM, LPARAM);

BOOL CALLBACK call_Dialogo1(HWND, UINT, WPARAM, LPARAM);

BOOL CALLBACK call_Dialogo1(HWND hDialogo, UINT mensaje, WPARAM wParam, LPARAM lParam)
{
    switch (mensaje)
    {
        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
            case IDCANCEL:
                EndDialog(hDialogo, false);
                break;

            case IDC_BUTTON1:
                DialogBox(H_DIALOG2, MAKEINTRESOURCE(IDD_DIALOG2), 0, call_Dialogo2);
                break;

            case IDC_BUTTON2:
                DialogBox(H_DIALOG3, MAKEINTRESOURCE(IDD_DIALOG3), 0, call_Dialogo3);
                break;
            }
    }
    return FALSE;
}
BOOL CALLBACK call_Dialogo2(HWND hDialogo, UINT mensaje, WPARAM wParam, LPARAM lParam)
{
    switch (mensaje)
    {
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDCANCEL:
            EndDialog(hDialogo, false);
            break;
        }
    }
    return FALSE;
}
BOOL CALLBACK call_Dialogo3(HWND hDialogo, UINT mensaje, WPARAM wParam, LPARAM lParam)
{
    switch (mensaje)
    {
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDCANCEL:
            EndDialog(hDialogo, false);
            break;
        }
    }
    return FALSE;
}
05/10/2017 00:15 wurstbrot123#2
use CreateDialog
05/11/2017 03:51 nelsonrex#3
howwww ????
05/12/2017 15:18 wurstbrot123#4
Just use CreateDialog instead of DialogBox for the 2 extra dialogs and use
ShowWindow for showing / hiding them.
05/14/2017 17:43 nelsonrex#5
U can fixed my code ? plz!

Code:
#include <windows.h>
#include "resource.h"

HINSTANCE H_DIALOG1, H_DIALOG2;

HMODULE GlobalhMod = NULL;
HWND hWnd;
HWND gameWindow;

BOOL CALLBACK call_Dialogo2(HWND hDialogo, UINT mensaje, WPARAM wParam, LPARAM lParam);

BOOL CALLBACK call_Dialogo1(HWND hDialogo, UINT mensaje, WPARAM wParam, LPARAM lParam);

// Hooked API
// Gracias ferris por el VirtualProtectEx
static const FARPROC Vprotect = (FARPROC)((DWORD)GetProcAddress(GetModuleHandleA("kernel32.dll"), "VirtualProtectEx") + 5);
_declspec(naked) BOOL WINAPI FixMem(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect)
{
	_asm
	{
		mov edi, edi
		push ebp
		mov ebp, esp
		jmp Vprotect
	}
}

BOOL CALLBACK call_Dialogo1(HWND hDialogo, UINT mensaje, WPARAM wParam, LPARAM lParam)
{
	switch (mensaje)
	{

	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
			case IDC_BUTTON1:
			DialogBox(H_DIALOG2, MAKEINTRESOURCE(IDD_DIALOG2), 0, call_Dialogo2);
			ShowWindow(hDialogo, SW_SHOW);
			break;
		}

	case WM_CLOSE:
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	}
	return FALSE;
}

BOOL CALLBACK call_Dialogo2(HWND hDialogo, UINT mensaje, WPARAM wParam, LPARAM lParam)
{
	switch (mensaje)
	{
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDCANCEL:
			EndDialog(hDialogo, false);
			break;
		}
	case WM_CLOSE:
		EndDialog(hWnd, 0);
		break;

	case WM_DESTROY:
		EndDialog(hWnd, 0);
		break;
	}
	return FALSE;
}


DWORD static WINAPI ThreadFunc(LPVOID)
{
	gameWindow = FindWindow(NULL, L"MapleStory");
	HRSRC hrsrc = FindResource(GetModuleHandle(L"DLL.dll"), MAKEINTRESOURCE(IDD_DIALOG1), RT_DIALOG);
	if (!hrsrc)
	{
		MessageBoxA(NULL, "Error", "Cargando Recurso", NULL);
		ExitThread(0);
	}
	//Aqui cargamos el dialogo que se encuentra dentro de este mismo dll
	//Como GamerzHacking.dll se ha injectado al proceso maplestory
	//Ahora lo busco y lo cargo como si fuera parte de maple
	HGLOBAL hglobal = LoadResource(GetModuleHandle(L"DLL.dll"), hrsrc);
	if (!hglobal)
	{
		MessageBoxA(NULL, "Error", "Cargando Recurso", NULL);
		ExitThread(0);
	}
	LPVOID hlock = LockResource(hglobal);
	if (!hlock)
	{
		MessageBoxA(NULL, "Error", "Cargando Recurso", NULL);
		ExitThread(0);
	}

	if (DialogBoxIndirectParam(GetModuleHandle(L"DLL.dll"), (LPCDLGTEMPLATE)hglobal, NULL, call_Dialogo1, 0) == -1)
	{
		MessageBoxA(NULL, "NO PUEDO CREAR DIALOGO VENTANA", "NO PUEDO CREAR DIALOGO VENTANA", NULL);
	}
	FreeLibraryAndExitThread(GetModuleHandle(L"DLL.dll"), 0);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
	if (ul_reason_for_call == DLL_PROCESS_ATTACH)
	{
		CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&ThreadFunc, 0, 0, 0); // Main thread
	}
	return true;
}
Plz, i dont speak english very well sorry :-(