Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Программное нажатие кнопки

12K
07 марта 2007 года
Algorithm
6 / / 12.11.2005
Может кто-нибудь знает как нажать кнопку на чужом окне. Мне известны заголовки окна, кнопки, есть handle окна. Если есть, дайте пример, желательно на Borland C++ или на чём-нибудь похожем.
257
07 марта 2007 года
kosfiz
1.6K / / 18.09.2005
используй SendMessage. выглядеть нажатие будет примерно так:
 
Код:
HWND wnd, cwnd;
wnd = FindWindow(NULL, "Калькулятор");//получаем хендл главного окна
cwnd = FindWindowEx(wnd, NULL, NULL, "4");// получаем хендл кнопки 4
SendMessage(cwnd, WM_LBUTTONDOWN, 0, 0);// далее жмем
SendMessage(cwnd, WM_LBUTTONUP, 0, 0);

пример показывает как нажать кнопку "4" в "Калькуляторе". пробуй.
397
10 марта 2007 года
SergPas
527 / / 03.02.2007
Либо можно послать сообщение SendMessage(cwnd,BM_CLICK,0,cwnd); что тоже самое...
25K
23 марта 2010 года
semiono
26 / / 31.08.2007
А теперь ещё раз на ассемблере повторите это пожалуйста? :)
Ну не будте мрачными и хмурыми, покажите пример, лучше на fasm сразу.
? (masm32 тоже пойдёт если другого не дано)

а вот конкретная задача куда надо нажать
rundll32.exe Shell32.dll,Control_RunDLL desk.cpl desk,@Themes /Action:OpenTheme /File:"%WinDir%\Resources\Themes\Luna.theme"

Может здесь ShellExecute тоже можно заменить на какую нибудь прямую API?
7
23 марта 2010 года
@pixo $oft
3.4K / / 20.09.2006
А чем вас,собственно,ShellExecute не устраивает?:)
Вполне себе работает.А на асме переписать–раз плюнуть,надо только узнать,какие кнопки как звать,и всё
25K
23 марта 2010 года
semiono
26 / / 31.08.2007
invoke ShellExecute устраивает, просто хочу все возможности использовать если вдруг есть таковые.
Я уже написал на асме с ошибками, и уже поправили мои ошибки, но я пока калькулятор нажимал. Небось с этим окном ещё болше повозиться придётся, так как CPL наверное более хитрое окно.
25K
24 марта 2010 года
semiono
26 / / 31.08.2007
Код:
include '%fasm%\win32ax.inc'

start:
        invoke ShellExecute,NULL,NULL,'desk.cpl',NULL,NULL,SW_SHOW
        invoke Sleep,20

        invoke FindWindow,"#32770",NULL
        mov [hWnd],eax
        invoke FindWindowEx,[hWnd],NULL,NULL,button
        mov [cWnd],eax
        invoke SendMessage,[cWnd],BM_CLICK,NULL,NULL

exit:
        invoke ExitProcess,NULL

section '.idata' import data readable writeable
        library kernel32,'KERNEL32.DLL',user32,'USER32.DLL'
        include '%fasm%\api\kernel32.inc'
        include '%fasm%\api\user32.inc'

        cWnd dd ?
        hWnd dd ?
        button db '1', 0


Не работает!
desk.cpl не имеет внутри ресурса который можно открыть так
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,-1
Как же реально тогда называется этот button? :(
399
24 марта 2010 года
KIV
432 / / 20.01.2009
Цитата:
invoke FindWindow,"#32770",NULL


Лучше так не делать. Это ищет первое диалоговое окно. А их может быть несколько. И не обязательно первое из них нужное. К тому же автор сказал, что знает handle окна.

25K
24 марта 2010 года
semiono
26 / / 31.08.2007
Вся проблема в CPL окнах. :rolleyes:


Здесь кнопки button1, button3, button4

В ресурсах же их вообще нету.

Может быть и не в этом дело, но всё же непонятно на что нажать тут :)
399
24 марта 2010 года
KIV
432 / / 20.01.2009
Может вы ресурс не той закладки смотрите? У меня по указанной командне открывается на закладке выбора темы. Правда у меня Windows XP, а он ли у вас не знаю...
25K
25 марта 2010 года
semiono
26 / / 31.08.2007
Из редактора ресурсов видно, что там только одна страница диалога в чём и неожиданность!
Однако, может это и не мешает нажать кнопку, просто надо догадаться как. Хоть бы на си кто нибудь попытался, я бы потом сам в асм перекодил, жаль что никому не охота.
У меня XP конечно! :)
70K
22 марта 2011 года
vkhacker
1 / / 22.03.2011
HWND h, h1;
h = FindWindow(NULL, "Свойства: Экран");
h1 = FindWindowEx(h, 0, NULL, "ОК");
SendMessage(h1, WM_LBUTTONDOWN, 0, 0);
SendMessage(h1, WM_LBUTTONUP, 0, 0);

BM_CLICK не всегда срабатывает, иногда может вызвать ошибку, которую очень трудно потом найти.

В помощь тебе программа: InqSoft Window Scanner
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог