Работа с окнами
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Работа с окнами - 2006-03-24 19:00:48
|
|
|
.:[ksuri]:.
Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
|
<BR>…<BR>while(EnumChildwindоws(hChatwindоw,lpEnumFunc,NULL));<BR>…<BR>BOOL CALLBACK lpEnumFunc(HWND hWnd,LPARAM lParam)<BR>{<BR> char strChild[128];<BR> char strрагеnt[128];<BR> char strрагеntTitle[128];<BR> HWND hрагеnt;<BR> hрагеnt=Getрагеnt(hWnd);<BR> GetClassName(hWnd,strChild,127);<BR> GetwindоwText(hрагеnt,strрагеntTitle,127);<BR> if(strcmpi(strChild,"TRxRichEdit")&&strcmpi(strрагеntTitle,"Главный"))<BR> {<BR> GetClassName(hрагеnt,strрагеnt,127);<BR> if(strcmpi(strрагеnt,"TPageControl"))<BR> {<BR> std::cout<<"Sending message… ";<BR> if(SendMessage(hWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)newText)&&<BR> PostMessage(hWnd,WM_COMMAND,(WPARAM)IDOK,NULL)) std::cout<<"OK\n";<BR> else std::cout<<"FAILED: "<<GetLastError()<<"\n";<BR><BR> }<BR> }<BR> //else return false;<BR> return true;<BR>}<BR> Этот кусок кода должен по идее изменить заголовок определенного дочернего окна программы. Однако он изменяет все дочерние окна. Где ошибка? Ведь стоит проверка на заголовок и класс нужного окна… Помогите плиз.
|
|
|
Работа с окнами - 2006-03-24 20:42:37
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
предполагаю две проблемы: во-первых в одном из strcmpi у тебя используется строка "Главный" – ты уверен что кодировки совпадают? а во-вторых, что есть strcmpi я не очень осведомлён, но код if (strcmp (str1, str2)) { сделай_что_нить (); } говорит что ф-цию сделай_что_нить надо вызывать если str1 не равна str2. маны почитай насчёт возвращаемого значения strcmpi.
|
|
|
Работа с окнами - 2006-03-24 21:09:57
|
|
|
.:[ksuri]:.
Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
|
Кодировка в программе скорее всего cp1251 (прога написана наверно на дельфи, там ведь cp1251 стоит по умолчнию?). А функция strcmpi возвращает: 1 (true) - если строки равны (кроме регистра) 0 (false) - в остальных случаях Так что по идее такого быть не должно.
|
|
|
Работа с окнами - 2006-03-24 21:28:32
|
|
|
.:[ksuri]:.
Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
|
Еще вопросик: как сэмулировать нажатие 'Enter' ? Не кнопки 'Ok', а именно клавиши.
|
|
|
Работа с окнами - 2006-03-24 22:17:25
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
—————-<BR>Цитата: Дата:24.03.2006 21:09:57, Автор:.:[ksuri]:. :: Кодировка в программе скорее всего cp1251 (прога написана наверно на дельфи, там ведь cp1251 стоит по умолчнию?).<BR> —————-
х**! Это не показатель, кодировка сорца и кодировка строки возвращаемой функцией GetwindоwText должны быть одинаковыми. Где и какие кодировки я не знаю, но лучше проверь – закинь обе строки в текстовый файл (напр. fprintf (file, "GetwindоwText: %s\nLiteral: %s\n", strрагеntTitle, "Главная");) и фтыкай глазами какие там кодировки.
quote:
—————-<BR>Цитата: Дата:24.03.2006 21:09:57, Автор:.:[ksuri]:. :: <BR>А функция strcmpi возвращает:<BR><BR>1 (true) - если строки равны (кроме регистра)<BR><BR>0 (false) - в остальных случаях<BR><BR>Так что по идее такого быть не должно. —————-
Это ты где такое вычитал? Или сам придумал? Я не думаю что дизайн функции strcmpi сильно отличается от strcmp, хотя бы потому что названия явно в одном стиле. А strcmp (str1, str2) возвращает: <0 => лексикографически str1 < str2 ==0 => str1 == str2 >0 => str1 > str2. то есть твоё понимание наизнанку от верного, стандартная нубская ошибка для strcmp.
|
|
|
Работа с окнами - 2006-03-24 22:26:26
|
|
|
.:[ksuri]:.
Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
|
Короче я сам бл* уже запутался. Перепишу ваще лучше весь код заново, покампактней и попроще. И ты не мог бы мне помочь немного? Мне нужен код который бы перебирал кучу дочерних окон одной программы и отлавливал нужное мне. Условие: там много окон с одинаковыми классами и именами => надо еще проверять их родителей. Сможеш? Буду оч благодарен…
|
|
|
Работа с окнами - 2006-03-25 00:52:22
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
хых, я уже забыл что такое win32api. вспоминать не хочу. меня вообще, последнее время, чего-то достали все эти убогие C/C++/Java/ada и проч. языки низкого уровня. [sm=2.gif]
|
|
|
Работа с окнами - 2006-03-25 12:53:34
|
|
|
yan_kos
Сообщений: 22
Оценки: 0
Присоединился: 2006-02-09 12:04:55
|
А зря, ибо високий уровнь ето либо для ленивых либо для тупих….
А насчот проблеми то ф-я strcmpi возвращает 0 если строки одинаковие….
|
|
|
Работа с окнами - 2006-03-25 13:21:53
|
|
|
.:[ksuri]:.
Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
|
quote:
—————-<BR>Цитата: Дата:25.03.2006 0:52:22, Автор:rgo :: хых, я уже забыл что такое win32api. вспоминать не хочу. меня вообще, последнее время, чего-то достали все эти убогие C/C++/Java/ada и проч. языки низкого уровня. [sm=2.gif] —————-
Да я и сам вообще-то на Perl пишу, а на Си просто так - для развлекухи[sm=3.gif] Вот решил поучить и WinAPI на всякий случай. И скажу, что почитав несколько учебников по API я пришел к выводу что на нем можно реализовать такие вещи, какие не снились самым хардкорным Perl'щикам.
|
|
|
Работа с окнами - 2006-03-26 03:35:02
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
—————-<BR>Цитата: Дата:25.03.2006 12:53:34, Автор:yan_kos :: А зря, ибо високий уровнь ето либо для ленивых либо для тупих…. —————-
не ленивых программистов не встречал ни разу. а насчёт тупых, лучше промолчу.
|
|
|
Работа с окнами - 2006-03-26 20:17:36
|
|
|
.:[ksuri]:.
Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
|
<BR>#include <windоws.h><BR>#include <iostream><BR>#include <cstdlib><BR><BR>BOOL CALLBACK lpEnumFunc(HWND hWnd,LPARAM lParam);<BR><BR>void main()<BR>{<BR> HWND chatwindоw;<BR> LPCSTR chatwindоwClass="TLS_Chat";<BR> std::cout<<"Looking for chat main windоw… ";<BR> if(!(chatwindоw=Findwindоw(chatwindоwClass,NULL))) <BR> {<BR> std::cout<<"FAILED: "<<GetLastError()<<"\n";<BR> exit(1);<BR> }<BR> std::cout<<"0x"<<chatwindоw<<"\n";<BR> while(EnumChildwindоws(chatwindоw,lpEnumFunc,NULL));<BR>}<BR><BR>BOOL CALLBACK lpEnumFunc(HWND hWnd,LPARAM lParam)<BR>{<BR> HWND hEdit=Findwindоw("TRxRichEdit",NULL);<BR> HWND hEditрагеnt=Getрагеnt(hEdit);<BR> char hEditрагеntClass[128];<BR> GetClassName(hEditрагеnt,hEditрагеntClass,127);<BR> LPCSTR message=".:[KSURi]:.";<BR> int cmp=strcmpi(hEditрагеntClass,"TTabSheet");<BR> std::cout<<"Sending message -> ";<BR> if(hEdit&&cmp==0)<BR> {<BR> if(SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)(LPCTSTR)message)&&PostMessage(hEdit,WM_COMMAND,(WPARAM)IDOK,NULL))<BR> std::cout<<"OK\n";<BR> return true;<BR> }<BR> else std::cout<<"FAILED: "<<GetLastError()<<"\n";<BR> return false;<BR>}<BR>
Переписал первый код вот так. Вроде покампактней и попроще, убрал спорную проверку с русским языком, вставил точную проверку на сравнение классов окон. НО СЦУКО ВСЕ РАВНО НЕ ПАШЕТ![sm=scull.gif][sm=ghoul.gif] Я уже незнаю что и делать… Я в winAPI не особо шарю, наколякал как смог. Эта прога должна рекламировать в локальном чате мое сетевое радио, а то ручками заипался уже [sm=go139.gif] Пжлст, кто лучше меня шарит - помогите.
|
|
|
|
|