![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| KaraKum |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Доброе время суток.
Нужно, отправляя окну "MainWnd" сообщение, открыть новое окно "Optimum". Затем дочернему окну "OKButton" окна "Optimum" отправить сообщения о нажатии кнопки, тем самым закрывая окно "Optimum". Вот код:
Всё работает, но только по-отдельности. То есть, если окно "Optimum" ещё не открыто, то оно только открывается первой частью кода, а кнопка "ОК" не нажимается, а если окно "Optimum" уже открыто, то открывается ещё одно окно "Optimum", а в уже открытом нажимается кнопка "ОК". Пробовал между двумя частями кода вставлять такой код:
но прога виснет - наверное так и не получается найти такое окно. Подскажите, пожалуйста, что не так? |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
KaraKum, ты разделом ошибся, общие вопросы ни при чём. Тебе в "Системное программирование и WinAPI".
|
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Заголовок форума: "Форум: C/C++: Системное программирование и WinAPI". Так куда же? |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
||||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
||||
|
||||
| EnergoHokum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: 3 Всего: 6 |
Во всех функциях, где может произойти ошибка (у тебя -- FindWindow и SendMessage), нужно делать проверку на эту ошибку. Если ошибка случилась, то вызови GetLastError, она отдаст код ошибки, а там уже можно посмотреть, на чём у тебя программа споткнулась. Подробнее -- завтра, я счас не на винде.
|
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Такая ошибка:
"ERROR_INVALID_WINDOW_HANDLE 1400 Invalid window handle. " Это, вероятно, всвязи с тем, что сообщения отправляются окну по нулевому указателю (этот указатель я записываю в файл). У меня этот код активируется при нажатии на кнопку в программе, так вот проблема в том, что если окно "Optimum" программы "MainWnd" ещё не открыто, то оно открывается, а по следующим строкам кода указатель на это окно не находится (в файл записывается нулевой указатель), а если окно уже открыто (часть кода, отправляющую сообщение открытия окна, при этом, нужно убирать), то выполняется нажатие кнопки "ОК" в окне "Optimum", что и требуется. Но нужно, чтобы всё выполнялось за один раз. Скажите, плиз, что не так? |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
KaraKum, а ты между строками ::SendMessage(hMainWnd, 0xC1F4, 0x0000000E, 0x01E11910); и HWND hOptimumWnd = ::FindWindow(NULL, "Optimum"); не пробовал задержку вставить? У меня стойкое ощущение, что окно Optimum просто не успевает открыться к тому моменту, когда ты запрашиваешь его хендл...
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| KaraKum |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Сначала пробовал простую задержку ставить - ничего. А потом и эту поставил - прога так и не заканчивает своё выполнение, видимо этот цикл всегда выполняется. Так и не работает... |
||||
|
|||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
KaraKum,
накидал тестовый проект (Win32), который делает нужную тебе вещь (по крайней мере - как я понял) - посмотри, сравни со своим, может и найдешь ошибку, так гадать можно долго... Описание: есть дополнительное окошко About - если его выбирать из меню - оно появляется как положено и убирается по кнопке Ok, если нажать кнопку на окне - тогда это окошко появится и через секунду программно нажмется кнопка Ok, вызвав закрытие окна. Если нажать кнопку, когда окно About открыто - то через секунду закроется текущее окно без создания нового Присоединённый файл ( Кол-во скачиваний: 9 )
TestCons.rar 22,50 Kb-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| KaraKum |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Открыть файл не получилось - версия визуалки не совпадает, но, как я видел, принцип почти тот же:
И я переделал на:
Так и не работает. Попробовал сымитировать клики мыши через SendInput(): такой код:
после компиляции появились ошибки и одна из них: 235: error C2065: 'INPUT' : undeclared identifier но при наведении указателя мыши на "INPUT" высвечивается умная надпись: "typedef tagINPUT INPUT". Что не так? |
||||||
|
|||||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
KaraKum, выложи свой проект (максимально обрезанный, но чтобы ошибка наблюдалась), посмотрим...
какая у тебя? -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| KaraKum |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Your project file version is '7.10'. Visual Studio .NET can only load version '7.0' project files. Version 7.0.9466/Version 7.0.3705 Тот же код, что и у меня, только для калькулятора:
Всё работает, в файл записывается правильный указатель. Но если использовать такой же код в моём случае, то окно открывается, но указатель не находится, но если окно уже открыто (при этом нужно удалить часть кода, ответственную за открытие окна), то выполняется всё, что нужно: и указатель записывается в файл и кнопки нужные нажимаются (как дочерние окна). Скорее всего проблема тут не в коде, а в программе. Не пойму с чем это связано, но, например, для отправки сообщения об открытии окна "Optimum" каждый раз приходится искать сообщение в Spy++ - оно почти всегда разное и ещё программа on-line. Думаю, что так ничего и не выйдет, поэтому хочу нажать нужные кнопки, исользуя функцию SendInput(), но не могу определить переменную типа INPUT, ошибка при компиляции: 235: error C2065: 'INPUT' : undeclared identifier. В чём здесь ошибка? Это сообщение отредактировал(а) KaraKum - 11.1.2008, 12:12 |
||||
|
|||||
| ama_kid |
|
||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
Я обычно в таких случаях просто вручную меняю версию проекта в vcproj-файле... Или создаю новый проект с таким же именем и просто заменяю *.cpp и *.h - файлы... -------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||
|
|||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
У меня в файле winable.h:
что-то не так? Это сообщение отредактировал(а) KaraKum - 11.1.2008, 12:19 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |