+int CUtils::GetWindowTextType(const CString& text)\r
+{\r
+ int len = text.GetAllocLength();\r
+ if (len >= 3 && text[0] == _T('*') && text[len - 1] == _T('*'))\r
+ return IDS_WINDOW_TEXT_MATCH;\r
+ else if (len >= 2 && text[0] != _T('*') && text[len - 1] == _T('*'))\r
+ return IDS_WINDOW_TEXT_MATCH_FORWARD;\r
+ else if (len >= 2 && text[0] == _T('*') && text[len - 1] != _T('*'))\r
+ return IDS_WINDOW_TEXT_MATCH_BACKWARD;\r
+ else if (len > 0 && text[0] != _T('*') && text[len - 1] != _T('*'))\r
+ return IDS_WINDOW_TEXT_MATCH_FULL;\r
+ return IDS_WINDOW_TEXT_IGNORE;\r
+}\r
+\r
+bool CUtils::IsMatchWindowText(const CString& text)\r
+{\r
+ int len = text.GetLength();\r
+ TCHAR buf[WINDOW_TEXT_LENGTH];\r
+ GetWindowText(GetForegroundWindow(), buf, sizeof(buf));\r
+ CString current(buf);\r
+ switch (GetWindowTextType(text)) {\r
+ case IDS_WINDOW_TEXT_MATCH: // *foo*\r
+ return current.Find(text.Mid(1, len - 2)) >= 0;\r
+ case IDS_WINDOW_TEXT_MATCH_FORWARD: // foo*\r
+ return current.Left(len - 1) == text.Left(len - 1);\r
+ case IDS_WINDOW_TEXT_MATCH_BACKWARD: // *foo\r
+ return current.Right(len - 1) == text.Right(len - 1);\r
+ case IDS_WINDOW_TEXT_MATCH_FULL: // foo\r
+ return current == text;\r
+ }\r
+ return true;\r
+}\r
+\r