Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2008, 09:47   #1
Rend1
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 26
По умолчанию работа с чужими программами

как из своей прграммы открывать и закрывать другие
этот вопрос уже обсуждался на форуме но поиск выдает такое количество тем что невозможно разобратся дайте точные ссылки
Rend1 вне форума Ответить с цитированием
Старый 05.02.2008, 09:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Закрывать ищи WM_CLose или TerminateProcess
Открывать CreateProcess ну и WM_SHOW
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.02.2008, 09:58   #3
Rend1
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 26
По умолчанию

а как определять какую программу открыть или закрыть поимени или номер какой-нить есть
Rend1 вне форума Ответить с цитированием
Старый 05.02.2008, 11:02   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно по имени файла, можно по номеру - Хендлу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2008, 02:26   #5
st01en
Пользователь
 
Регистрация: 06.02.2008
Сообщений: 33
По умолчанию

Поидее этот код должен закрыть все окна ИЕ. Со всякими блокнотами, пейнтами и т.п. справляется, ИЕ не закрывается ни в какую, что не так?:
Код:
var
  wnd: HWND;
  buff: array[0..127] of char;
  str: string;
begin
  wnd := GetWindow(Handle, gw_HWndFirst);
  while wnd <> 0 do
  begin
    GetWindowText(wnd, buff, SizeOf(buff));
    str := StrPas(buff);
    if pos('Internet Explorer', str) <> 0 then
      PostMessage(wnd, WM_QUIT, 1, 0);
    Wnd := GetWindow(wnd, gw_HWndNext);
  end;
end;

Спасибо.
st01en вне форума Ответить с цитированием
Старый 14.02.2008, 02:34   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

PostMessage(wnd, WM_QUIT, 1, 0); лучше заменить на:
PostMessage(wnd, WM_SYSCOMMAND, SC_CLOSE, 0);
B_N вне форума Ответить с цитированием
Старый 14.02.2008, 02:52   #7
st01en
Пользователь
 
Регистрация: 06.02.2008
Сообщений: 33
По умолчанию

Спасибо, работает, если не лень можеш рассказать в чем разница и почему мой вариант не срабатывал?
st01en вне форума Ответить с цитированием
Старый 14.02.2008, 03:25   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

WM_QUIT вообще не рекомендуется отправлять через PostMessage, вместо этого используется PostQuitMessage с кодом завершения. Почему не работает в эксплолере? Может быть в нем какие-то дополнительные проверки на закрытие окна, может быть это связано с тем, что в отличие от пейнтов и блокнотов, эксплорер многозадачный, точнее сейчас не скажу, надо проверять.
B_N вне форума Ответить с цитированием
Старый 27.02.2008, 12:18   #9
st01en
Пользователь
 
Регистрация: 06.02.2008
Сообщений: 33
По умолчанию

Опять я
Решил вникнуть в эту тему поглубже, а то как-то неинтересно писать наугад.
Мои вопросы:
1. PostMessage и SendMessage - в чем разница
2. У обоих этих ф-ций передается 4 параметра. Что там к чему.
Дальше будет больше но пока хотелось бы в самых основах не шататься а уверено идти.

Мои ответы (насколько я понял):
1. PostMessage - отправляет сообщение окну и забывает про это, программа дальше занимается своими делами.
SendMessage - Отправляет сообщение окну и ждет ответа\результата
2. первый параметр: хендл окна, 2-й: собственно само сообщение. третий и четвертый параметры передаваемого сообщения и их значения от сообщения и зависят. Если это так то прошу обьяснить как ими пользоваться. Например сообщение WM_LBUTTONDOWN
читаю МСДН:
Цитата:
wParam
Indicates whether various virtual keys are down. This parameter can be one or more of the following values.
*и тут перечисление возможных параметров*

lParam
The low-order word specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
The high-order word specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
как этим пользоваться, т.е. допустим, я хочу послать окну нажатие кнопки мыши в координатах 150, 100 и сказать что при этом зажаты Ctrl и shift, как должен выглядеть код?

Код:
PostMessage(<тут Handle окна>, WM_LBUTTONDOWN, ??, ??);
з.ы. и еще насчет WM_LBUTTONDOWN, координаты задаются относительно верхнего левого угла client area, что под этим понимать, угол экрана или окна, или еще чего-то?
st01en вне форума Ответить с цитированием
Старый 27.02.2008, 12:26   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нажатие кнопки мыши в координатах 150, 100 и сказать что при этом зажаты Ctrl и shift
Примерно так:
Код:
PostMessage(<тут Handle окна>, WM_LBUTTONDOWN, MK_CONTROL	 or MK_LBUTTON or MK_SHIFT,makeLparam(150,100));
(Если где то ошибся поправьте)
Цитата:
Мои ответы
Ну вроде ты ничего не упустил.
I'm learning to live...

Последний раз редактировалось Stilet; 27.02.2008 в 12:28.
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с другими программами через Delphi slon Общие вопросы Delphi 8 10.10.2008 11:58
Работа с другими программами kurazh77 Общие вопросы Delphi 6 09.10.2007 22:07
Глюки с программами для БД ГОСЕАН БД в Delphi 2 06.07.2007 17:27
перехват отправления чужими программами отправки на печать документов Nat Win Api 7 20.04.2007 16:07
работа с "чужими" окнами zetrix Безопасность, Шифрование 1 29.10.2006 11:28