Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 12.11.2010, 20:03   #1
Armorer
Форумчанин
 
Регистрация: 07.04.2007
Адрес: г. Нижневартовск
Сообщений: 120
Репутация: 22

icq: 277444615
По умолчанию SendMessage(BSend, BM_CLICK, 0, 0); работает только если курсор находится над кнопкой

В программе ищу хендл кнопки другого приложения. Потом отправляю сообщение
Код:

SendMessage(BSend, BM_CLICK, 0, 0);

Но кнопка нажимается только если курсор находится над ней.
Пробовал PostMessage.

Как решить проблему?
__________________
Way23.ru
Armorer вне форума   Ответить с цитированием
Старый 12.11.2010, 20:08   #2
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 21,007
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

про кликанье тем много, смотрите сообщения WM_LBUTTONDOWN и WM_LBUTTONUP
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 12.11.2010, 20:50   #3
Armorer
Форумчанин
 
Регистрация: 07.04.2007
Адрес: г. Нижневартовск
Сообщений: 120
Репутация: 22

icq: 277444615
По умолчанию

Спасибо, заработало при wm_LButtonDblClk. При WM_LBUTTONDOWN и WM_LBUTTONUP тоже зависит от того на кнопке ли мышь. Хотя я не понял почему BM_CLICK не работает.
__________________
Way23.ru
Armorer вне форума   Ответить с цитированием
Старый 12.11.2010, 21:16   #4
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,958
Репутация: 6799
По умолчанию

Может потому что Механизм обработки этого сообщения требует еще кое-каких условий?
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 25.11.2010, 20:22   #5
blinkapec
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 12
Репутация: 10
По умолчанию

Чем отличаются SendMessage от PostMessage? Я пробовал обе функции, но при эмуляции нажатий кнопок клавиатуры ничего не происходило... Видимо что-то не так делал, но хэндл нужного окна совпадал с тем что показывала WinSpy, да и окно было в фокусе (что кстати необязательно для этих функций?)
blinkapec вне форума   Ответить с цитированием
Старый 25.11.2010, 20:38   #6
BOBAH13
Android Developer
Профессионал
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

Цитата:
Чем отличаются SendMessage от PostMessage?
Узнаем новые слова и информацию от MSDN
__________________
Home | Android for food | XWindows Dock | github
BOBAH13 вне форума   Ответить с цитированием
Старый 17.10.2011, 17:48   #7
davidoff_pk
Пользователь
 
Регистрация: 08.04.2011
Сообщений: 21
Репутация: 10
По умолчанию

Добрый день.

Не стал открывать новую тему, лучше оживить эту. Возникла проблема. При запуске приложения с сетевого диска (добавить в доверенные не могу) появляется всем известное окно: "Не удается проверить издателя...". Оно мешает программному запуску приложения из под Delphi.

Нашел кусок кода, который получает дескриптор кнопки "Выполнить" в мешающем мне окошке. Но ни одна из констант (wm_LButtonDblClk, (WM_LBUTTONDOWN, WM_LBUTTONUP), BM_CLICK) отправке объекту сообщения не дожимают нужную кнопку. Ближе всего к цели wm_LButtonDblClk, она переводит ее в "запавший" режим при наведении курсора))

В принципе удается навести на кнопку курсор и эмитировать нажатие мыши, благо окошко в одном месте всегда вылезает, но это некрасивое решение (хотя едва ли тут приходится говорить о красоте...), так как если кто будет работать, программа уведет у пользователя курсор.

Может кто знает все таки, почему кнопка не нажимается? Ну или подскажите пожалуйста еще какие-нибудь пути решения проблемы, а то вот застрял на этой ерунде...
davidoff_pk вне форума   Ответить с цитированием
Старый 18.10.2011, 16:06   #8
davidoff_pk
Пользователь
 
Регистрация: 08.04.2011
Сообщений: 21
Репутация: 10
По умолчанию

Тоска...

Может в коде кто какой косяк увидит:

Код:

function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall;
var
  szFull: array[0..MAX_PATH] of Char; //Buffer for window caption
begin
  Result := Wnd <> 0;
  if Result then
  begin
    GetWindowText(Wnd, szFull, SizeOf(szFull)); // put window text in buffer
    if Pos(SL[0], StrPas(szFull)) > 0 then
      SL.AddObject(StrPas(szFull), TObject(Wnd)); // Add item to list
    EnumChildWindows(Wnd, @EnumChildProc, Longint(SL)); //Recurse into child windows
  end;
end;

function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean;
var
  SL: TStringList;
  H:  hWnd;
begin
  SL := TStringList.Create;
  try
    SL.AddObject(ButtonCaption, nil); // First item in list is text to find
    EnumChildWindows(ParentWindow, @EnumChildProc, Longint(SL));
    H := 0;
    ShowMessage(SL.Text);
    case SL.Count of
      1: ShowMessage('Window text not found.');
      2: H := hWnd(SL.Objects[1]);
      else
        ShowMessage('Ambiguous text detected.');
    end;
  finally
    SL.Free;
  end;
  Result := H <> 0;
  if Result then
    PostMessage(H, wm_LButtonDblclk, 0, 0);

end;

procedure TForm1.Button1Click(Sender: TObject);
var AppHandle : Thandle;
begin
  AppHandle := FindWindow(nil, 'Открыть файл - предупреждение системы безопасности');
  ClickButton(AppHandle, PChar('полнить'));
end;

davidoff_pk вне форума   Ответить с цитированием
Старый 17.10.2017, 15:59   #9
dummy_user
Форумчанин
 
Аватар для dummy_user
 
Регистрация: 02.03.2013
Адрес: Сибирь
Сообщений: 109
Репутация: 27

skype: raw_2_raw
По умолчанию

Подниму тему если не против...

Та же проблема что у davidoff_pk.

Есть кнопка, ничто её не может нажать. Она не нарисованная. Win 10, 64 бит.
dummy_user вне форума   Ответить с цитированием
Старый 17.10.2017, 16:03   #10
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 10,860
Репутация: 1806

icq: 216409213
По умолчанию

Ну вы хоть скрин приведите или Spy++ инфу.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показ Form2 на над кнопкой Shouldercannon Общие вопросы Delphi 5 01.06.2010 23:47
listbox над каким элементов находится курсор Gumer Компоненты Delphi 3 13.04.2010 19:08
StrinGrid( выделялась ячейка над которым находится курсор) StartMis Общие вопросы Delphi 1 29.03.2010 01:53
Подсветить или покрасить строку в dbgrid, над которой находится курсор Artik БД в Delphi 4 12.06.2009 20:43


04:01.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru