тогда проще сделать вызываемую форму модальной.
в run() формы добавьте
X++:
void run()
{
WinApi::setFormModal(this.hWnd(), true);
}
в класс WinApi добавьте
X++:
static HWND setFormModal(hWND _thisHWND, boolean _bModal, HWND _parentHWND = 0)
{
DLL _winApiDLL;
DLLFunction _EnabledWindow;
DLLFunction _getTop;
DLLFunction _getNext;
DLLFunction _getParent;
void local_enableWHND(HWND _lHWND, HWND _pHWND = 0)
{
int lnextWnd;
if (!_pHWND)
_pHWND = _getParent.call(_lHWND);
lnextWnd = _getTop.call(_getParent.call(_lHWND));
while (lnextWnd)
{
if (lnextWnd != _lHWND && WinApi::getWindowText(lnextWnd) != "@SYS25246")
_enabledWindow.call(lnextWnd, (!_bModal));
lnextWnd = _getNext.call(lnextWnd, 2);
}
}
;
_winApiDLL = new DLL('user32');
_getNext = new DLLFunction(_winApiDLL, "GetWindow");
_EnabledWindow = new DLLFunction(_winApiDLL, "EnableWindow");
_getTop = new DLLFunction(_winApiDLL, "GetTopWindow");
_getParent = new DLLFunction(_winApiDLL, "GetParent");
_getParent.returns(ExtTypes::DWORD);
_getParent.arg(ExtTypes::DWORD);
_EnabledWindow.returns(ExtTypes::DWORD);
_EnabledWindow.arg(ExtTypes::DWORD, ExtTypes::DWORD);
_getTop.returns(ExtTypes::DWORD);
_getTop.arg(ExtTypes::DWORD);
_getNext.returns(ExtTypes::DWORD);
_getNext.arg(ExtTypes::DWORD, ExtTypes::DWORD);
local_enableWHND(_thisHWND);
if (!_parentHWND)
_parentHWND = _getParent.call(_thisHWND);
local_enableWHND(_getParent.call(_thisHWND));
return _parentHWND;
}