На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Кнопка не кнопка и без хендла! , Нету Хендла элемента!
    Здравствуйте! Помогите разобратся. Нужно в фоновом режиме нажать на кнопку. Весь процесс я знаю. Но дело в том, что случился форс-мажор =) Spy++ не видит этот элемент. Скачал програмку wndinfo тоже не видит ни чего. С дельфи ВинСайт32 сканировал, тоже не видит. Что ЭТО? Выглядит как кнопка и выполняет функции кнопки, но сама не кнопка и не панель вообще как будто ни чего нету. Программа называется WPF v.6.69. Любая кнопка в самой программе. Там их много очень и ни одна не определяется.
    Они лежат на TabSheet но когда на них наводиш программа вообще не видит их. Хотя в самой программе нажимаются. Помогите разобратся пожалуйста. Скачать WPF можно где угодно. Прикреплённый файлПрикреплённый файл1.png (31 Кбайт, скачиваний: 562)
      Цитата MaxXx_2 @
      Что ЭТО? Выглядит как кнопка и выполняет функции кнопки, но сама не кнопка и не панель вообще как будто ни чего нету

      В дельфи\VCL такая кнопка называется TSpeedButton. Это не оконный, а чисто графический контрол, который рисуется на канве родительского окна (как TLabel, TBevel и т.п.), которое передает ему на обработку нажатия\движения мыши, когда мышиный курсор находится в пределах BoundsRect этого контрола. У TLabel тоже есть события обработки мышиных нажатий, поэтому из нее также можно сделать подобие кнопки, добавив рамку в виде TBevel и изменяя ее вид с выпуклого на вдавленный и наоборот по событиям OnMouseDown\Up
        Ага спасибо. Ну а как програмно отправить нажатие на кнопку, которой не существует?
          Пишу вот так вот. Предварительно дохожу до панели на которой кнопка и потом ищю любой СпидБатон. Нету таких говорит вообще.

          ExpandedWrap disabled
            procedure TForm1.Button1Click(Sender: TObject);
            var
            w1, w2, w3, w4 :THandle;
            begin
            W1 := FindWindow('TPanel', ' WÐ v6.69F');
            if W1 <> 0 then
            ShowMessage('+ Panel')
            else
            ShowMessage('- Panel');
             
            W2 := FindWindowEx(W1, 0, 'TPageControl', nil);
            if W2 <> 0 then
            ShowMessage('+ PageControl')
            else
            ShowMessage('- PageControl');
             
            W3 := FindWindowEx(W2, 0, 'TTabSheet', ' Proxy PC ');
            if W3 <> 0 then
            ShowMessage('+ TabSheet')
            else
            ShowMessage('- TabSheet');
             
            W4 := FindWindowEx(W3, 0, 'TSpeedButton', nil);
            if W4 <> 0 then
            begin
            ShowMessage('Yes SpeedButton');
            SendMessage(w4,WM_LBUTTONDOWN,0,0);
            SendMEssage(w4,WM_LBUTTONUP,0,0);
            end
            else
            ShowMessage('No SpeedButton');
            end;


          Добавлено
          Нашел информацию, что оказывается нажать на SpeedButton в чужом окне нереально! Как выйти из положения? ХотКей для них нет, меню нет.
            Цитата MaxXx_2 @
            Пишу вот так вот...
            FindWindow...

            Вам же сказали что это не оконные контролы

            нажать можно: SetCursorPos + mouse_event
              Нарыл на просторах такой вот кусочек:
              ExpandedWrap disabled
                PostMessage(h, WM_LBUTTONDOWN, 0, MAKELPARAM(x,y));
                PostMessage(h, WM_LBUTTONUP, 0, MAKELPARAM(x,y));

              h - хэндл формы, на которой лежит кнопка (ну или того настоящего окна, на которой она лежит в общем случае)
              x, y - клиент-координаты формы в которые попадает кнопка.

              Но он не работает. Где я ошибку допустил? В итоге получилось вот так?
              ExpandedWrap disabled
                begin
                W1 := FindWindow('TPanel', ' WÐ v6.69F');
                if W1 <> 0 then
                ShowMessage('+ Panel')
                else
                ShowMessage('- Panel');
                 
                W2 := FindWindowEx(W1, 0, 'TPageControl', nil);
                if W2 <> 0 then
                ShowMessage('+ PageControl')
                else
                ShowMessage('- PageControl');
                 
                W3 := FindWindowEx(W2, 0, 'TTabSheet', ' Proxy PC ');
                if W3 <> 0 then
                begin
                PostMessage(w3, WM_LBUTTONDOWN, 0, MAKELPARAM(200,500));
                PostMessage(w3, WM_LBUTTONUP, 0, MAKELPARAM(200,500));
                ShowMessage('+ TabSheet')
                else
                ShowMessage('- TabSheet');
                end;


              Потом решил просто проверить в Паинте нажатие на пустое место кисточкой. И тоже ни чего не произошло:

              ExpandedWrap disabled
                procedure TForm1.Button1Click(Sender: TObject);
                var
                w1, w2:THandle;
                begin
                w1 := FindWindow('MSPaintApp', Безымянный - Paint');
                if W1 <> 0 then
                ShowMessage('Нашел MSPaintApp')
                else
                ShowMessage('Нету MSPaintApp');
                 
                W2 := FindWindowEx(W1, 0, 'Afx:00000000FF4C0000:0:0000000000010003:0000000000000010:0000000000000000','');
                if W2 <> 0 then
                begin
                PostMessage(w2, WM_LBUTTONDOWN, 0, MAKELPARAM(300,300));
                PostMessage(w2, WM_LBUTTONUP, 0, MAKELPARAM(300,300));
                ShowMessage('Нашел рисовалку');
                end
                else
                ShowMessage('Не нашел рисовалку');
                end;
                Цитата MaxXx_2 @
                Скачать WPF можно где угодно.

                Гуглил минуты 3, не нашёл, надоело, выклади.
                  Прошу прощения. Вот эта штука:
                  http://mmoru.com/board/showthread.php?t=464736
                  Вот прямая на программу: http://rghost.ru/52752794
                    Поковырять ехе-шник не удалось, он пожат пакером.
                    Короче, раз это TSpeedButton или любой другой TGraphicControl, то послать ему клик не получится.
                    Надо найти хэндл окна, на котором он лежит (в данном случае - TTabSheet.Handle), высчитать (визуально или хз как ещё) BoundRect этих кнопок и посылать клик-мессадж (вернее MouseDown/Up) уже ихнему родителю.

                    З.Ы. Антивирус в твоём архиве нашёл 2 малваря.
                      Цитата min@y™ @
                      Короче, раз это TSpeedButton или любой другой TGraphicControl, то послать ему клик не получится

                      Получится, только не через PostMessage, а через mouse_event
                      Нужно только знать координаты, по которым отправлять сообщение.
                      В данном случае, как я понимю, координаты кнопок не изменяемые, поэтому просто берем координаты окна, на канвасе которого отображены эти псевдокнопки и рассчитываем необходимые оффсеты.
                        Цитата Rouse_ @
                        только не через PostMessage, а через mouse_event

                        да, но родительское окно должно быть в фокусе.
                          Щас поковыряю екзешник на пакер, если не сально мощьный протектор я распакую и там посмотрим, что к чему.
                            Цитата MaxXx_2 @
                            Щас поковыряю екзешник на пакер, если не сально мощьный протектор я распакую и там посмотрим, что к чему.

                            боюсь, паковали не ради уменьшения рамера ехе-шника.
                              PEiD показывает Microsoft Visual C++ v6.0 DLL * но Olly не открывает его. Хотя программа очень старая и скорее всего запакова слабым пакером. Надо чуть чуть глебже капнуть постаратся. Dede дамп снимает вроде.
                                На кнопки нажимать это 1хрен не поможет.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0465 ]   [ 16 queries used ]   [ Generated: 8.11.24, 23:43 GMT ]