Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Приложение замораживается


Ботаник ©   (2012-09-14 15:57:00) 

Здравствуйте. Хотел сделать простенькое приложение, которое запускало бы ABBYY Screenshot Reader, нажимало бы в нем кнопку сделать снимок и затем в окне выбора области снова нажать Сделать снимок. Простенький кликер, но не все так просто. Когда появляется окно для выбора области, приложение замораживается и кликнуть по Сделать снимок не выходит :( если закрыть окно выбора области, кликер выполняет действия дальше, тоесть кликает в том месте где было Сделать снимок.. Как сделать чтоб кликер не замораживался при появлении окна для выбора области??


Ботаник   (2012-09-15 03:16:00) [1]

поставил два раза подряд
postMessage(bh,WM_LBUTTONDOWN,0,0);
PostMessage(bh,WM_LBUTTONUP,0,0);
postMessage(bh,WM_LBUTTONDOWN,0,0);
PostMessage(bh,WM_LBUTTONUP,0,0);

и теперь срабатывает каждый раз. странности какието. ну да ладно
Всем большое спасибо


Ботаник   (2012-09-15 03:03:00) [2]

та кнопка, которую нажимаю
postMessage(bh,WM_LBUTTONDOWN,0,0);  //
PostMessage(bh,WM_LBUTTONUP,0,0);

Она через раз срабатывает


Ботаник   (2012-09-15 03:01:00) [3]


>  Заменить SendMessage на PostMessage

так работает, но кнопка на основном окне нажимается почему-то через раз. в чем может быть причина?


Германн   (2012-09-15 01:34:00) [4]


> Дмитрий С ©   (14.09.12 16:33) [1]
>
> Попробую включить телепатор. Заменить SendMessage на PostMessage
> ?

Пробовал?


turbouser   (2012-09-15 00:06:00) [5]


> Ботаник   (14.09.12 21:13) [8]
>
> я ж в программировании не силен..

Программирование тут особо не причем. Учись


Ботаник   (2012-09-14 21:13:00) [6]

я ж в программировании не силен.. подскажите что это и как это посмотреть


turbouser   (2012-09-14 21:03:00) [7]

Если мне память не изменяет, ридер апи предоставляет для работы с ним. Или нет?


Ботаник   (2012-09-14 20:59:00) [8]

ну потому что на втором окне я не знаю как через sendmessage сделать, оно появляется после нажатия на кнопку и блокирует все остальное, а если любую кнопку кроме интер нажать, то оно закрывается. Интер тож программно пробовал нажать, но не выходит по вышеизложенной причине - программа застывает и интер нажимается только когда окно закрыть. Вот кстати скрины как все это выглядит и куда нажать пытаюсь. на первом скрине кнопку жму, а вот на втором уже эта беда, ничего не могу через программу сделать :(
http://s49.radikal.ru/i124/1209/d0/656efabc054f.jpg
http://s017.radikal.ru/i419/1209/fe/a175eaf52fb7.jpg


Сергей М.   (2012-09-14 20:49:00) [9]

А что это за сборная клоунада - часть сообщений шмякать с помощью SendMessage, а другую часть с помощью маус_ивент ?

Ты уж определись инжектом мышиных событий ты занимаешься или хз чем тебе не понятным)


Ботаник   (2012-09-14 20:35:00) [10]

сперва запускаю скриншот ридер через процедуру
procedure OpenFile(FileName: string);
var
  c: array[0..800] of Char;
begin
  StrPCopy(c, FileName);
  ShellExecute(Application.Handle, 'open', c, nil, nil, SW_NORMAL);
end;

а затем нахожу окно программы по классу и кнопку на нем для запуска Окна для выбора области. Ставлю курсор туда где будет надпись Сделать снимок. щелкаю программно по кнопке Сделать снимок. Окно появляется с надписью сделать снимок, мышка над этой надписью, а щелкнуть не могу, моя программа как бы на паузе в этот момент получается
openfile('C:\Program Files (x86)\ABBYY FineReader 11\Bonus.ScreenshotReader.exe');
 h:= FindWindow( '#32770',nil);  // находим окно с кнопками
   if h <> 0 then  bh:=FindWindowEx(h, 0, 'Button', nil);  //находим кнопку с таким классом
 SetCursorPos(1200,900); //ставлю курсор в нужную позицию
 SendMessage(bh,WM_LBUTTONDOWN,0,0);  // нажимаем кнопку
 SendMessage(bh,WM_LBUTTONUP,0,0);

// вот тут выскакивает окно чтоб выбрать область для скрина и программа замерзает :(

 mouse_event(mouseeventf_leftdown,0,0,0,0); //нажатие на левую кнопку мыши
 mouse_event(mouseeventf_leftup,0,0,0,0);
//кнопка нажимается только после закрытия окна вручную :(


turbouser   (2012-09-14 20:09:00) [11]


> Ботаник   (14.09.12 17:08) [2]

Код приведи, как ты энтот файнридер вызываешь и
> затем в окне выбора области снова нажать Сделать снимок


Ботаник   (2012-09-14 17:08:00) [12]

это в чем? программа вообще не выполняет ни каких действий, пока не закроется "Окно" для выбора откуда скриншот делать. Окно в кавычках, потому что просто весь экран серый, а посередине прямоугольник прозрачный, который перетаскиваешь и меняешь его размеры. под прямоугольником надпись Сделать снимок. Вот я программно устанавливаю курсор куда надо, потом запускаю это Окно для выбора, а щелкнуть по надписи Сделать скриншот не могу, щелкает только после того как это окно сам закроешь :( в коде как бы пауза получается, пока это окно висит


Дмитрий С   (2012-09-14 16:33:00) [13]

Попробую включить телепатор. Заменить SendMessage на PostMessage ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо