Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 787
от 05.07.2007, 16:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 485, Экспертов: 60
В номере:Вопросов: 3, Ответов: 8


Вопрос № 93367: Здравствуйте, эксперты. Подскажите пожалуйста, как программно получить данные из определённых полей в другой запущенной программе. А также как изменять данные и манипулировать программой, например перемещать указатель в ListBox'е. .
Вопрос № 93430: Поскажите самый качественный способ выключить компьютер с корректным завершением всех запущенных приложений. долго юзал гугл, но все варианты какие-то разные и непонятные) идея такая: после указанного времени программа завершает работу всех приложени...
Вопрос № 93444: добрый день, помогите ,пожалуйста, сделать рабочее стандартное окно "открыть",чтобы можно было открывать любой ехе файл...

Вопрос № 93.367
Здравствуйте, эксперты.
Подскажите пожалуйста, как программно получить данные из определённых полей в другой запущенной программе. А также как изменять данные и манипулировать программой, например перемещать указатель в ListBox'е.
Отправлен: 29.06.2007, 18:00
Вопрос задал: Gines (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зелик Колабухин
Здравствуйте, Gines!

Я думаю, что Вам, Gines, нужно вначале осознать, что всякие поля, кнопочки и проч. и проч. являются настоящими окнами со всеми оконными свойствами. А у каждого окна в Windows имеется свой, скажем так, идентификатор по которому система отличает его от остальных окон. Причем, зная этот идентификатор мы можем с окном, даже в чужой программе, делать многие вещи. Например менять его местоположение, сделать его невидимым, прочитать текст соответствующий этому окну. Так вот этот идентификатор имеет в C/C++ тип HWND (майкрасофт называет идентификатор "handle", а WND - сокращение от Window). Ну а теперь нужно копать в этом направлении.
Например, если мы знаем заголовок окошка в котором находится поле, то вызываем функцию FindWindow, которая возвращает нам HWND соответствующего окна. Это окно будет родителем нужного нам поля. Чтобы добраться до поля - тут уже Ваше творчество.
Если мы расположили указатель мыши над полем редактирования, то можно воспользоваться функцией WindowFromPoint. Кстати таким образом можно узнать что скрывается за парольными звездочками, т.е. через WindowFromPoint получаем HWND поля редактирования и затем функцией GetWindowText узнаем, чего там за пароль.
А вообще, функций для работы с окнами много и я думаю, что в каждом случае нужно поступать по ситуации.
Указанные функции можно найти в Win32 API Help или в MSDN.
Просто и доступно про основы программирования в окошках можно почитать у Петзольда в "Программировании для Windows 95".

Ну а что касается манипулирования программой, то тут нужно понимать, что каждая программа выполняется в своем пространстве и теоретически другая программа не должна залазить на её территорию. Однако в виндовсе имеются некоторые лазейки. Но коротко о них не напишешь. Рекомендую почитать Джеффри РИХТЕР "Создание эффективных WIN32-приложений". Примеры из неё можно подстроить под свои нужды.


Ответ отправил: Зелик Колабухин (статус: 2-ой класс)
Ответ отправлен: 29.06.2007, 18:42

Отвечает: Sov
Здравствуйте, Gines!
Есть подходящий пример по управлению калькулятором. После запуска из dll-ки функции starthook, у инженерного калькулятора должна появиться кнопка sqrt.
Найти дескриптор окна можно функцией FindWindow
список дочерних окон можно получить функцией EnumChildWindows
Идентифицировать окно можно используя класс окна и текст в нем содержащийся
GetClassName
SendMessage(hWind,WM_GETTEXT,sizeof(buf),(LPARAM)(LPCTSTR)buf)
Этот код я закомментировал. Проще в каком-нить редакторе ресурсов найти идентификатор нужного окна и в программе использовать GetWindowLong для получения этого идентификатора

Приложение:

Ответ отправил: Sov (статус: 5-ый класс)
Ответ отправлен: 29.06.2007, 19:47


Вопрос № 93.430
Поскажите самый качественный способ выключить компьютер с корректным завершением всех запущенных приложений. долго юзал гугл, но все варианты какие-то разные и непонятные) идея такая: после указанного времени программа завершает работу всех приложений и выключает компьютер.
Заранее благодарю. =)
Отправлен: 30.06.2007, 10:47
Вопрос задал: Le_san (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Maxim V.G.
Здравствуйте, Le_san!
WinAPI содержит функции ExitWindows, ExitWindowsEx подробнее прочитать про эти функции можно в MSDN (msdn.com), а пример можно посмотреть здесь http://netcode.ru/cpp/?artID=200 (ссылка из гугла :)). Ну а ещё это дело можно провернуть воспользовавшись внешнеё программой shutdown (так неро выключает компьютер) вызвав system(shutdown -список ключей). Список ключей прочитаете вызвав команду shutdown -h в командной строке.
---------
Жить вредно - от неё умирают
Ответ отправил: Maxim V.G. (статус: 2-ой класс)
Ответ отправлен: 30.06.2007, 11:15
Оценка за ответ: 4
Комментарий оценки:
как-то скудно, но спасиб)

Отвечает: Olegzp
Здравствуйте, Le_san!
Завершение работы Windows.
Для завершения работы Windows можно воспользоваться функцией ExitWindowsEx. При этом файловые буфера будут сброшены на диск, а система приведена в состояние, когда компьютер можно безопасно выключить.

В Windows NT/2000/XP: для завершения работы системы необходимо получить привелегию SE_SHUTDOWN_NAME, как показано в следующем примере:

Приложение:

Ответ отправил: Olegzp (статус: 3-ий класс)
Ответ отправлен: 30.06.2007, 11:37
Оценка за ответ: 5
Комментарий оценки:
с ней все норм будет? ок, спасибо) вот с привелегиями я и запарился... =)
буду разбираться)

Отвечает: Попов А.С.
Здравствуйте, Le_san!
Для этой цели существует WinAPI функция:
BOOL ExitWindows(
DWORD dwReserved, // reserved
UINT uReserved // reserved
);
Для реализации идеи потребуется Timer (вкладка System) после его активизации по истечения 4 секунд начнется завершение работы системы (см. приложение)

Приложение:

Ответ отправил: Попов А.С. (статус: 1-ый класс)
Ответ отправлен: 30.06.2007, 11:44
Оценка за ответ: 4
Комментарий оценки:
как-то скудно, но спасиб)

Отвечает: Lemeshev Konstantin
Здравствуйте, Le_san!
Предлагаю обратить внимание на системную функцию (Думаю пишете под Windows) shutdown.

Для ее запуска использовать функции exec или spawn
Ответ отправил: Lemeshev Konstantin (статус: 5-ый класс)
Ответ отправлен: 02.07.2007, 06:37


Вопрос № 93.444
добрый день, помогите ,пожалуйста, сделать рабочее стандартное окно "открыть",чтобы можно было открывать любой ехе файл
Отправлен: 30.06.2007, 13:03
Вопрос задала: Alinusik (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sov
Здравствуйте, Alinusik!
Я пользуюсь GetOpenFileName

Приложение:

Ответ отправил: Sov (статус: 5-ый класс)
Ответ отправлен: 30.06.2007, 15:16

Отвечает: Maxim V.G.
Здравствуйте, Alinusik!
Кроме функции приведенной экспертом Sov открывать файл можно следующими способами: OpenFileDialog - http://msdn.microsoft.com/library/RUS/vbcon/html/vbtskopeningfilesusingopenfiledialogcomponent.asp или использовать класс CFileDialog (если приложение использует MFC).
Выбор вызова диалога открытия файла за Вами.

---------
Жить вредно - от неё умирают
Ответ отправил: Maxim V.G. (статус: 2-ой класс)
Ответ отправлен: 30.06.2007, 17:01


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное