diff --git a/src/bridge/bridgemain.cpp b/src/bridge/bridgemain.cpp index 2862257aa..3ad05631f 100644 --- a/src/bridge/bridgemain.cpp +++ b/src/bridge/bridgemain.cpp @@ -1997,6 +1997,11 @@ BRIDGE_IMPEXP DWORD GuiGetMainThreadId() return (DWORD)(duint)_gui_sendmessage(GUI_GET_MAIN_THREAD_ID, nullptr, nullptr); } +BRIDGE_IMPEXP bool GuiIsDebuggerFocused() +{ + return (bool)(duint)_gui_sendmessage(GUI_IS_DEBUGGER_FOCUSED, nullptr, nullptr); +} + BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { hInst = hinstDLL; diff --git a/src/bridge/bridgemain.h b/src/bridge/bridgemain.h index 676b4a0a9..ffe6b3466 100644 --- a/src/bridge/bridgemain.h +++ b/src/bridge/bridgemain.h @@ -1126,6 +1126,7 @@ BRIDGE_IMPEXP void DbgGetSymbolInfo(const SYMBOLPTR* symbolptr, SYMBOLINFO* info BRIDGE_IMPEXP DEBUG_ENGINE DbgGetDebugEngine(); BRIDGE_IMPEXP bool DbgGetSymbolInfoAt(duint addr, SYMBOLINFO* info); BRIDGE_IMPEXP duint DbgXrefAddMulti(const XREF_EDGE* edges, duint count); +BRIDGE_IMPEXP bool GuiIsDebuggerFocused(); //Gui defines typedef enum @@ -1274,6 +1275,7 @@ typedef enum GUI_GET_MAIN_THREAD_ID, // param1=unused, param2=unused GUI_ADD_MSG_TO_LOG_HTML, // param1=(const char*)msg, param2=unused GUI_IS_LOG_ENABLED, // param1=unused, param2=unused + GUI_IS_DEBUGGER_FOCUSED, // param1=unused, param2=unused } GUIMSG; //GUI Typedefs diff --git a/src/dbg/expressionfunctions.cpp b/src/dbg/expressionfunctions.cpp index 58e7f9c8a..c06f46c0e 100644 --- a/src/dbg/expressionfunctions.cpp +++ b/src/dbg/expressionfunctions.cpp @@ -152,6 +152,9 @@ void ExpressionFunctions::Init() //Undocumented RegisterEasy("bpgoto", bpgoto); + //Other + RegisterEasy("isdebuggerfocused", isdebuggerfocused); + // Strings ExpressionFunctions::Register("utf8", ValueTypeString, { ValueTypeNumber }, Exprfunc::utf8, nullptr); ExpressionFunctions::Register("utf16", ValueTypeString, { ValueTypeNumber }, Exprfunc::utf16, nullptr); diff --git a/src/dbg/exprfunc.cpp b/src/dbg/exprfunc.cpp index e7d66cd7d..995ed8b20 100644 --- a/src/dbg/exprfunc.cpp +++ b/src/dbg/exprfunc.cpp @@ -600,6 +600,11 @@ namespace Exprfunc return getLastExceptionInfo().ExceptionRecord.ExceptionInformation[index]; } + duint isdebuggerfocused() + { + return GuiIsDebuggerFocused(); + } + bool streq(ExpressionValue* result, int argc, const ExpressionValue* argv, void* userdata) { assert(argc == 2); diff --git a/src/dbg/exprfunc.h b/src/dbg/exprfunc.h index f524c98c0..3d5b15729 100644 --- a/src/dbg/exprfunc.h +++ b/src/dbg/exprfunc.h @@ -86,6 +86,8 @@ namespace Exprfunc duint exinfocount(); duint exinfo(duint index); + duint isdebuggerfocused(); + bool streq(ExpressionValue* result, int argc, const ExpressionValue* argv, void* userdata); bool strieq(ExpressionValue* result, int argc, const ExpressionValue* argv, void* userdata); bool strstr(ExpressionValue* result, int argc, const ExpressionValue* argv, void* userdata); diff --git a/src/gui/Src/Bridge/Bridge.cpp b/src/gui/Src/Bridge/Bridge.cpp index 1df7124d4..e1f156c91 100644 --- a/src/gui/Src/Bridge/Bridge.cpp +++ b/src/gui/Src/Bridge/Bridge.cpp @@ -905,6 +905,9 @@ void* Bridge::processMessage(GUIMSG type, void* param1, void* param2) case GUI_GET_MAIN_THREAD_ID: return (void*)dwMainThreadId; + + case GUI_IS_DEBUGGER_FOCUSED: + return (void*)!!QApplication::activeWindow(); } return nullptr;