|
|
|
Не корректно работает FindWindow
|
|||
|---|---|---|---|
|
#18+
Приветствую всех, кто читает:) Такая вот проблема- есть заведомо открытое окно, и код, ругающийся на то что оно есть или его нет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. В теории должно работать, но всегда получается, что окна нет (хотя оно ТОЧНО открыто!). Подскажите в чем дело ПЛИZZZ. Работаю с C++ в VS 2005. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2007, 00:31 |
|
||
|
Не корректно работает FindWindow
|
|||
|---|---|---|---|
|
#18+
попробуй spy++ определить класс окна, затем попробовать подставить в твою функцию -------------------------------------------------------------- [подпись с другого сайта] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 11:51 |
|
||
|
Не корректно работает FindWindow
|
|||
|---|---|---|---|
|
#18+
А что у вас там LPCWSTR делает? Скорее всего вы вызываете юникодную версию FindWindow, а ей в таком случае надо передавать юникодную же константу (а не кастить к WCHAR*). Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 13:24 |
|
||
|
Не корректно работает FindWindow
|
|||
|---|---|---|---|
|
#18+
roman10А что у вас там LPCWSTR делает? Скорее всего вы вызываете юникодную версию FindWindow, а ей в таком случае надо передавать юникодную же константу (а не кастить к WCHAR*). Код: plaintext Тогда странно что accessViolation нет. два нуля в конце 8ибитной строки совсем не гарантированы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 15:52 |
|
||
|
Не корректно работает FindWindow
|
|||
|---|---|---|---|
|
#18+
Перегон в юникод (_T()) дает тот же результат. Я использовал LPCWSTR() в честь того, что сначала пробовал вбивать название просто ввиде "Zagolovok_Okna", но VS ругалась, мол не могу преобразовать из const char[] в LPCWSTR, вот я и пошел прямым путем, т.е. LPCWSTR(). По-моему разумно. В MSDN вообще: HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName ); При подстановке LPCTSTR(), кстати, тот же отрицательный эффект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 17:02 |
|
||
|
Не корректно работает FindWindow
|
|||
|---|---|---|---|
|
#18+
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' откуда-нибудь взялось ;)), а лучше ещё и класс окна, и по ним и искать нужное окно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 17:40 |
|
||
|
Не корректно работает FindWindow
|
|||
|---|---|---|---|
|
#18+
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* ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 17:50 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34384021&tid=2029276]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 466ms |

| 0 / 0 |
