char* ExtractFromEverything(HWND WND, POINT Pt, int *BeginPos) { TEverythingParams CParams; ZeroMemory(&CParams, sizeof(CParams)); CParams.WND = WND; CParams.Pt = Pt; GetWordTextOutHook(&CParams); ConvertToMatchedWordA(&CParams); *BeginPos = CParams.BeginPos; return _strdup(CParams.MatchedWordA); }
static char* GetWordFromConsole(HWND WND, POINT Pt, int *BeginPos) { TConsoleParams *TP; DWORD pid; DWORD WordSize; char *Result; *BeginPos=0; if((TP = malloc(sizeof(TConsoleParams))) == NULL) return(NULL); ZeroMemory(TP,sizeof(TConsoleParams)); TP->WND = WND; TP->Pt = Pt; ScreenToClient(WND, &(TP->Pt)); GetClientRect(WND, &(TP->ClientRect)); // GetWindowThreadProcessId(GetParent(WND), &pid); GetWindowThreadProcessId(WND, &pid); if (pid != GetCurrentProcessId()) { if(Is_XP_And_Later()) { if(AttachConsole(pid)) { WordSize = GetWordFromConsolePack(TP); FreeConsole(); } else { WordSize = 0; } } else { WordSize = 0; } } else { WordSize = GetWordFromConsolePack(TP); } if (WordSize > 0 && WordSize <= 255) { TEverythingParams CParams; ZeroMemory(&CParams, sizeof(CParams)); CParams.Unicode=1; CParams.BeginPos=TP->BeginPos; CParams.WordLen=WordSize; CopyMemory(CParams.MatchedWordW, TP->Buffer, WordSize * sizeof(wchar_t)); ConvertToMatchedWordA(&CParams); *BeginPos = CParams.BeginPos; Result = _strdup(CParams.MatchedWordA); } else { Result = NULL; } free(TP); return Result; }