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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2010, 19:03   #1
Armorer
Подтвердите свой е-майл
 
Регистрация: 07.04.2007
Сообщений: 120
По умолчанию SendMessage(BSend, BM_CLICK, 0, 0); работает только если курсор находится над кнопкой

В программе ищу хендл кнопки другого приложения. Потом отправляю сообщение
Код:
SendMessage(BSend, BM_CLICK, 0, 0);
Но кнопка нажимается только если курсор находится над ней.
Пробовал PostMessage.

Как решить проблему?
Armorer вне форума Ответить с цитированием
Старый 12.11.2010, 19:08   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

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

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

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

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

Добрый день.

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

Тоска...

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

Код:
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, 14:59   #9
dummy_user
Форумчанин
 
Аватар для dummy_user
 
Регистрация: 02.03.2013
Сообщений: 109
По умолчанию

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

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

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

Ну вы хоть скрин приведите или Spy++ инфу.
p51x вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показ 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