powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не корректно работает FindWindow
9 сообщений из 9, страница 1 из 1
Не корректно работает FindWindow
    #34382368
PigMey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех, кто читает:) Такая вот проблема- есть заведомо открытое окно, и код, ругающийся на то что оно есть или его нет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
HWND hwnd=FindWindow(NULL,LPCWSTR("Zagolovok_Okna"));
	if (hwnd)
	{
		printf("OK!");
	}
	else 
	{
		printf("NO WINDOW!");
	}

В теории должно работать, но всегда получается, что окна нет (хотя оно ТОЧНО открыто!). Подскажите в чем дело ПЛИZZZ.
Работаю с C++ в VS 2005. Заранее спасибо.
...
Рейтинг: 0 / 0
Не корректно работает FindWindow
    #34383753
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй spy++ определить класс окна, затем попробовать подставить в твою функцию

--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
Не корректно работает FindWindow
    #34384021
craftyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не корректно работает FindWindow
    #34384146
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что у вас там LPCWSTR делает?

Скорее всего вы вызываете юникодную версию FindWindow, а ей в таком случае надо передавать юникодную же константу (а не кастить к WCHAR*).

Код: plaintext
HWND hwnd = FindWindow(NULL, _T("Zagolovok_Okna"));
...
Рейтинг: 0 / 0
Не корректно работает FindWindow
    #34384779
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman10А что у вас там LPCWSTR делает?

Скорее всего вы вызываете юникодную версию FindWindow, а ей в таком случае надо передавать юникодную же константу (а не кастить к WCHAR*).

Код: plaintext
HWND hwnd = FindWindow(NULL, _T("Zagolovok_Okna"));

Тогда странно что accessViolation нет. два нуля в конце 8ибитной строки совсем не гарантированы...
...
Рейтинг: 0 / 0
Не корректно работает FindWindow
    #34385001
PigMey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перегон в юникод (_T()) дает тот же результат. Я использовал LPCWSTR() в честь того, что сначала пробовал вбивать название просто ввиде "Zagolovok_Okna", но VS ругалась, мол не могу преобразовать из const char[] в LPCWSTR, вот я и пошел прямым путем, т.е. LPCWSTR(). По-моему разумно. В MSDN вообще:

HWND FindWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName
);


При подстановке LPCTSTR(), кстати, тот же отрицательный эффект.
...
Рейтинг: 0 / 0
Не корректно работает FindWindow
    #34385127
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PigMeyПерегон в юникод (_T()) дает тот же результат. Я использовал LPCWSTR() в честь того, что сначала пробовал вбивать название просто ввиде "Zagolovok_Okna", но VS ругалась, мол не могу преобразовать из const char[] в LPCWSTR, вот я и пошел прямым путем, т.е. LPCWSTR(). По-моему разумно. В MSDN вообще:

HWND FindWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName
);


При подстановке LPCTSTR(), кстати, тот же отрицательный эффект.
Подстановка LPCTSTR() это не то же самое, что подстановка _T() или TEXT(). Посмотрите определение LPCTSTR и макроса _T()...
Хорошим вариантом было бы взять утилиту типа дельфийской WinSight и уже ей выяснить точный заголовок (может, там в конце строки пробел стоит? Или у вас в конце строки '\n' откуда-нибудь взялось ;)), а лучше ещё и класс окна, и по ним и искать нужное окно...
...
Рейтинг: 0 / 0
Не корректно работает FindWindow
    #34385158
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PigMeyмол не могу преобразовать из const char[] в LPCWSTR, вот я и пошел прямым путем, т.е. LPCWSTR(). По-моему разумно.
Это очень даже не разумно. LPCWSTR разрешается в const wchar_t*, размер wchar_t -два байта, а размер char - 1 байт. ПРи таком прямом кастинге из char* в wchar_t* вам светит accessviolation либо непонятные глюки программы, это раз, так как очень велика вероятность, что в конце char* строки не будет двух нулей подряд с четным индексом от начала строки. Т.е. функция, использующая LPCWSTR просто не найдет конец строки, и пойдет читать дальше левые данные.
Во-вторых, с таким кастингом вы никогда не найдете нужное вам окно, так как при этом такст "window" например, превратиться в что-то вроде "楷摮睯" (если у вас шрифта нет, то это китайские иероглифы, полная бессмыслица). Ну и по аналогии. Макросы TEXT() и _T() занимаются тем, что изменяют аргумент в скобках в зависимости от того, обьявлено использование юникода или нет. (сводится к дописыванию L в начале строки (L"TEST"), если поддержка юникода включена...)
Почитайте статьи по юникоду, или используйте Multibyte character set, или вызывайте FindWindowA, ему в качестве аргументов нужен const char*
...
Рейтинг: 0 / 0
Не корректно работает FindWindow
    #34385287
PigMey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромучее! Проехало с FindWindowA().
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не корректно работает FindWindow
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]