1
0
mirror of synced 2024-11-28 01:20:51 +01:00

impr: Allow console output to work when debugging (#1382)

This commit is contained in:
Nik 2023-10-22 23:39:14 +02:00 committed by GitHub
parent 215e1ffdc8
commit 58189e5403
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 5 deletions

View File

@ -98,7 +98,10 @@ macro(configurePackingResources)
endif()
if (WIN32)
if (NOT (CMAKE_BUILD_TYPE STREQUAL "Debug"))
set(APPLICATION_TYPE WIN32)
endif ()
set(IMHEX_ICON "${IMHEX_BASE_FOLDER}/resources/resource.rc")
if (CREATE_PACKAGE)

View File

@ -537,6 +537,12 @@ namespace hex {
*/
std::string getCommitBranch();
/**
* @brief Checks if ImHex was built in debug mode
* @return True if ImHex was built in debug mode, false otherwise
*/
bool isDebugBuild();
enum class UpdateType {
Stable,
Nightly

View File

@ -641,6 +641,14 @@ namespace hex {
#endif
}
bool isDebugBuild() {
#if defined DEBUG
return true;
#else
return false;
#endif
}
bool updateImHex(UpdateType updateType) {
// Get the path of the updater executable
std::fs::path executablePath;

View File

@ -232,6 +232,7 @@ namespace hex {
}
[[maybe_unused]]
static void reopenConsoleHandle(u32 stdHandleNumber, i32 stdFileDescriptor, FILE *stdStream) {
// Get the Windows handle for the standard stream
HANDLE handle = ::GetStdHandle(stdHandleNumber);
@ -259,12 +260,17 @@ namespace hex {
void Window::initNative() {
if (ImHexApi::System::isDebugBuild()) {
// If the application is running in debug mode, ImHex runs under the CONSOLE subsystem,
// so we don't need to do anything besides enabling ANSI colors
log::impl::enableColorPrinting();
} else if (hex::getEnvironmentVariable("__IMHEX_FORWARD_CONSOLE__") == "1") {
// Check for the __IMHEX_FORWARD_CONSOLE__ environment variable that was set by the forwarder application
// If it's present attach to its console window
if (hex::getEnvironmentVariable("__IMHEX_FORWARD_CONSOLE__") == "1") {
// If it's present, attach to its console window
::AttachConsole(ATTACH_PARENT_PROCESS);
// Reopen stdin, stdout and stderr to the console
// Reopen stdin, stdout and stderr to the console if not in debug mode
reopenConsoleHandle(STD_INPUT_HANDLE, STDIN_FILENO, stdin);
reopenConsoleHandle(STD_OUTPUT_HANDLE, STDOUT_FILENO, stdout);