Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата(Earnest @ 4.5.2011,  20:22)
Это не они намудрили, а ты так до сих пор и не разобрался, что бывают юникодные программы и не-юникодные. А функции типа FindWindow - это не функции, а макросы, которые расширяются либо до FindWindowW, либо до FindWindowA. Видимо, в 2008 проект был не-юникодный, а теперь - юникодный. Все, что надо сделать - использовать строковые макросы: _T("Трам-пам-пам"), которые автоматически будут превращены на препроцессинге либо в обычные строки, либо в широкие. Вместо уродских кастов и явных A\W - функций.

Спасибо за разъяснение smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)