BOOL CALLBACK EnumProcTopLevelWindowList(HWND hwnd, LPARAM lparam) { CString title = "", winclass = ""; char text[MAX_WINDOW_TITLE] = {0}; RECT crect = {0}; STableList tablelisthold; int tablemap_index = (int)(lparam); write_log(preferences.debug_autoconnector(), "[CAutoConnector] EnumProcTopLevelWindowList(..)\n"); write_log(preferences.debug_autoconnector(), "[CAutoConnector] Tablemap nr. %d\n", tablemap_index); // If this is not a top level window, then return if (GetParent(hwnd) != NULL) return true; // If this window is not visible, then return if (!IsWindowVisible(hwnd)) return true; // If there is no caption on this window, then return GetWindowText(hwnd, text, sizeof(text)); if (strlen(text)==0) return true; title = text; // Found a candidate window, get client area rect write_log(preferences.debug_autoconnector(), "[CAutoConnector] EnumProcTopLevelWindowList(..) found a window candidate...\n"); GetClientRect(hwnd, &crect); // See if it matches the currently loaded table map if (Check_TM_Against_Single_Window(tablemap_index, hwnd, crect, title)) { // Filter out served tables already here, // otherwise the other list used in the dialog // to select windows manually will cause us lots of headaches, // as the lists will be of different size // and the indexes will not match. if (p_sharedmem->PokerWindowAttached(hwnd)) { write_log(preferences.debug_autoconnector(), "[CAutoConnector] Window candidate already served: [%d]\n", hwnd); } else { write_log(preferences.debug_autoconnector(), "[CAutoConnector] Adding window candidate to the list: [%d]\n", hwnd); tablelisthold.hwnd = hwnd; tablelisthold.title = title; tablelisthold.path = p_tablemap_loader->GetTablemapPathToLoad(tablemap_index); tablelisthold.crect.left = crect.left; tablelisthold.crect.top = crect.top; tablelisthold.crect.right = crect.right; tablelisthold.crect.bottom = crect.bottom; g_tlist.Add(tablelisthold); } } return true; // keep processing through entire list of windows }
void CAutoConnector::CheckIfWindowMatchesMoreThanOneTablemap(HWND hwnd) { // In OpenHoldem 9.0.1 we replaced clientsize in favour of clientsizemin/max // and targetsize. This caused the problem that some people used a very large // range of clientsizemin/max in combination with a very common titletext // like "Poker". As a consequence some tablemaps connected to nearly every // window (not even table). // To solve this problem we now detect if a table could be served // by more than one tablemap. For performance reasons we do this exactly once // per table at connection. // http://www.maxinmontreal.com/forums/viewtopic.php?f=110&t=19407&start=90#p138038 int num_loaded_tablemaps = p_tablemap_loader->NumberOfTableMapsLoaded(); int num_matching_tablemaps = 0; CString matching_tablemaps = ""; char text[MAX_WINDOW_TITLE] = { 0 }; GetWindowText(hwnd, text, sizeof(text)); CString title = text; RECT crect; GetClientRect(hwnd, &crect); for (int i=0; i<num_loaded_tablemaps; ++i) { // See if it matches the currently loaded(?????) table map if (Check_TM_Against_Single_Window(i, hwnd, crect, title)) { ++num_matching_tablemaps; // Build "list" of matching tablemaps matching_tablemaps += p_tablemap_loader->GetTablemapPathToLoad(i); matching_tablemaps += "\n"; } } if (num_matching_tablemaps > 1) { CString error_message; error_message.Format("%s%s%s%s%s%s%s%s%s", "More then one tablemap fits to the same table\n\n", matching_tablemaps, "\nTable: ", title, "\n\nThese tablemaps need to be adapted:\n", " * clientsizemin/max\n", " * titletext(s)\n", " * and/or tablepoints\n", "to make the tablemap-selection-process unambiguous."); OH_MessageBox_Error_Warning(error_message); } }