Currently FindWindow("one") will match against "one two", because GetWindowText will truncate it to the length of the text to match against. Mike Hearn <mike@xxxxxxxxxxxxx> In WIN_FindWindow, use the result of GetWindowTextLength to allocate the buffer instead of using the length of the text to match against. Prevents a particular type of false match. Index: windows/win.c =================================================================== RCS file: /home/wine/wine/windows/win.c,v retrieving revision 1.230 diff -u -r1.230 win.c --- windows/win.c 11 Dec 2003 05:34:53 -0000 1.230 +++ windows/win.c 27 Dec 2003 11:41:38 -0000 @@ -1515,14 +1515,8 @@ HWND *list = NULL; HWND retvalue = 0; int i = 0, len = 0; - WCHAR *buffer = NULL; if (!parent) parent = GetDesktopWindow(); - if (title) - { - len = strlenW(title) + 1; /* one extra char to check for chars beyond the end */ - if (!(buffer = HeapAlloc( GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR) ))) return 0; - } if (!(list = list_window_children( parent, className, 0 ))) goto done; @@ -1538,15 +1532,21 @@ { while (list[i]) { - if (GetWindowTextW( list[i], buffer, len ) && !strcmpiW( buffer, title )) break; - i++; + int len = GetWindowTextLengthW( list[i] ) + 1; /* one extra char to check for chars beyond the end */ + WCHAR *buffer = HeapAlloc( GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR) ); + + int matched = (GetWindowTextW( list[i], buffer, len ) && !strcmpiW( buffer, title )); + + HeapFree( GetProcessHeap(), 0, buffer ); + + if (matched) break; + i++; } } retvalue = list[i]; done: if (list) HeapFree( GetProcessHeap(), 0, list ); - if (buffer) HeapFree( GetProcessHeap(), 0, buffer ); return retvalue; }