| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > vs 2010 получить хендл окна |
| Автор: gorillka 4.5.2011, 11:08 |
| Доброго времени суток! в vs 2010 не могу получить хендл окна!!! в vs 2008 делал так: 1) hTargetWnd =(HWND) ::FindWindowEx(0, 0, NULL,(LPCSTR) "WM_COPYDATA-Receiver"); 2) hTargetWnd = ::FindWindow( NULL, (LPCSTR) "WM_COPYDATA-Receiver" ); 3) hTargetWnd = ::FindWindow( (LPCSTR) "TForm1", NULL); все три варианта работают в 2008 а в 2010 почему-то нет! Помогите плз ума не приложу в чем дело Побывал и FindWindowExW и FindWindowW результат тот же: компилируется нормально а окно не находит |
| Автор: gorillka 4.5.2011, 12:22 |
| Что настораживает так это, то что если написать например: FindWindow( NULL, (LPCSTR) "WM_COPYDATA-Receiver" ); то vs 2010 ругается на LPCSTR и хочет вместо него LPCWSTR и при этом ссылается на функцию FindWindowW, хотя я вызываю FindWindow. может где-то здесь загвоздка... |
| Автор: gorillka 4.5.2011, 12:37 |
| Решил проблему! Надо использовать функцию FindWindowExA! P.S. вот намудрили эти мелкософтовцы с кодировкой а я мучайся |
| Автор: Earnest 4.5.2011, 20:22 |
| Это не они намудрили, а ты так до сих пор и не разобрался, что бывают юникодные программы и не-юникодные. А функции типа FindWindow - это не функции, а макросы, которые расширяются либо до FindWindowW, либо до FindWindowA. Видимо, в 2008 проект был не-юникодный, а теперь - юникодный. Все, что надо сделать - использовать строковые макросы: _T("Трам-пам-пам"), которые автоматически будут превращены на препроцессинге либо в обычные строки, либо в широкие. Вместо уродских кастов и явных A\W - функций. |
| Автор: gorillka 5.5.2011, 08:34 | ||
Спасибо за разъяснение |