0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 5

Подскажите, кто знает. Как нажать кнопку в тулбаре

10.01.2016, 19:24. Показов 1659. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, кто знает. Как нажать кнопку в тулбаре. Бьюсь месяц. Вот что получилось для проводника:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private Sub TBClick()
   Dim rwb As Long
   Dim procid As Long
   Dim rc As RECT
   Dim prc As Long 
   Dim Coord As Integer
   Dim hwmain As Long
   Dim xPosTB As Integer
   Dim yPosTB As Integer
    
 
    hwntbr = FindWindow(vbNullString, "Компьютер")
    hwntbr = FindWindowEx(hwntbr, ByVal 0&, "ShellTabWindowClass", "Компьютер")
    hwntbr = FindWindowEx(hwntbr, ByVal 0&, "WorkerW", vbNullString)
    hwntbr = FindWindowEx(hwntbr, ByVal 0&, "ReBarWindow32", vbNullString)
    hwntbr = FindWindowEx(hwntbr, ByVal 0&, "ToolbarWindow32", vbNullString)
 
   Call GetWindowThreadProcessId(hwntbr, procid) 
   hProcess = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_DUP_HANDLE, True, procid) 
   prc = VirtualAllocEx(hProcess, 0, LenB(rc), MEM_COMMIT Or MEM_TOP_DOWN, PAGE_READWRITE) 
   Call SendMessage(hwntbr, TB_GETITEMRECT, 2, prc) 
   Call ReadProcessMemory(hProcess, prc, rc, LenB(rc), rwb) 
   
   Call VirtualFreeEx(hProcess, prc, LenB(rc), MEM_RELEASE) 
   Call PostMessage(hwntbr, WM_LBUTTONDOWN, 0, MAKELONG(rc.Top, rc.Left))
   Call PostMessage(hwntbr, WM_LBUTTONUP, 0, MAKELONG(rc.Top, rc.Left))
   CloseHandle (hProcess)
End Sub
Но в итоге не нажимает. Может я чего не догоняю?

Добавлено через 45 минут
Еще может повлиять разрядность 32/64
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2016, 19:24
Ответы с готовыми решениями:

Программно нажать кнопку в тулбаре, зная его hwnd
Приветствую. Кто-нибудь может подсказать, каким образом я могу программно нажать кнопку в тулбаре, зная его hwnd? Приложение...

Кто знает подскажите как раскодировать сие чудо
Доброго времени суток уважаемые жители форума нашел на форуме тему с моей проблемой но на пол пути сел как говорят в лужу. Во общем суть...

Подскажите кто знает, как и чем создать образ !!!
Мне нужен не простой образ диска, а образ диска "С" -с последующим залитеем опять же на этот диск "С" только не при помощи...

5
Эксперт NIX
3302 / 931 / 200
Регистрация: 14.01.2013
Сообщений: 4,764
11.01.2016, 12:36
Хз, помогу или нет, но вот код на ассемблере, который находит кнопку в диалоговом окне (сначала код запускает нужную прогу, где открывается тот самый диалог) и нажимает её. Код реально рабочий, используется постоянно в работе.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
    call    ShellExecuteA,0,offset szOp,offset szProga,0,0,SW_SHOWNORMAL
    call    Sleep,2000
    call    FindWindowA,0,offset szTitle
    test    eax,eax
    jz  @@error
    mov h1,eax
    call    FindWindowExA,h1,0,offset szClass,0
    mov h2,eax
    call    FindWindowExA,h1,0,offset szClass1,offset szCapt
    mov h3,eax
    call    SendMessageA,h2,WM_SETTEXT,0,offset szInputText
    call    SendMessageA,h3,WM_LBUTTONDOWN,1,1
    call    SendMessageA,h3,WM_LBUTTONUP,1,1
Как видите, сначала ищется окно, по заголовку, потом ищется элемент управления, по классу, затем ищется кнопка, по подписи.
0
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 5
11.01.2016, 20:15  [ТС]
Спасибо за ответ. Но проблема в том что в тулбаре кнопки не имеют хендла. Хендл есть только у всего тулбара
0
90 / 37 / 14
Регистрация: 03.11.2010
Сообщений: 429
11.01.2016, 21:39
первая ссылка яндекса http://www.sql.ru/forum/862451... ilozheniya

Нужно:
...
SendMessage(hwndToolBar, WM_COMMAND, "ID кнопки", 0);
...
0
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 5
12.01.2016, 21:49  [ТС]
Спасибо большое. Этот вариант я тоже рассматривал. Вот что у меня получилось для трея:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
hwntbr = FindWindow("Shell_TrayWnd", vbNullString)
hwntbr = FindWindowEx(hwntbr, ByVal 0&, "TrayNotifyWnd", vbNullString)
hwntbr = FindWindowEx(hwntbr, ByVal 0&, "SysPager", vbNullString)
hwntbr = FindWindowEx(hwntbr, ByVal 0&, "ToolbarWindow32", "Пользовательская область уведомлений")
 
Call GetWindowThreadProcessId(hwntbr, procid) 
hProcess = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_DUP_HANDLE, True, procid) 
vptrTbn = VirtualAllocEx(hProcess, 0, LenB(Tbn), MEM_COMMIT Or MEM_TOP_DOWN, PAGE_READWRITE)
Call SendMessage(hwntbr, TB_GETBUTTON, 1, vptrTbn) 
Call ReadProcessMemory(hProcess, vptrTbn, Tbn, LenB(Tbn), rwbytes) 
Call PostMessage(hwntbr, WM_COMMAND, 1, hToolbar)
Call VirtualFreeEx(hProcess, vptrTbn, LenB(Tbn), MEM_RELEASE)
Call CloseHandle(hProcess)
Не срабатывает. Помогите я с ума скоро сойду!

Добавлено через 1 минуту
MsgBox SendMessage(hwntbr, TB_BUTTONCOUNT, 0, 0) показывает что там 5 кнопок
0
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 5
16.01.2016, 10:10  [ТС]
Все я родил:
это работает
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Call EnumChildWindows(FindWindow(vbNullString, "Компьютер"), AddressOf EnumChildProc, VarPtr(hwntbr))
If Not CBool(hwntbr) Then MsgBox "ToolbarWindow32 не найден"
 
   SetForegroundWindow (hwntbr)
   Call GetWindowThreadProcessId(hwntbr, procid)
   hProcess = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_DUP_HANDLE, True, procid) 
   prc = VirtualAllocEx(hProcess, 0, LenB(rc), MEM_COMMIT Or MEM_TOP_DOWN, PAGE_READWRITE) 
   Call SendMessage(hwntbr, TB_GETITEMRECT, 2, prc) 
   Call ReadProcessMemory(hProcess, prc, rc, LenB(rc), rwb)
   Call VirtualFreeEx(hProcess, prc, LenB(rc), MEM_RELEASE) 
   PostMessage hwntbr, WM_LBUTTONDOWN, 0, MAKELONG(rc.Top, rc.Left)
   PostMessage hwntbr, WM_LBUTTONUP, 0, MAKELONG(rc.Top, rc.Left)
   CloseHandle (hProcess)
 
Public Function MAKELONG(ByVal hiword As Integer, ByVal loword As Integer) As Long
    MAKELONG = (hiword * &H10000) Or (loword And &HFFFF&)
End Function
 
Public Function EnumChildProc(ByVal hwntbr As Long, ByVal lParam As Long) As Long
   Dim st As String * 512
   Dim ls As Long
    ls = GetClassName(hwntbr, st, 512)
    If Left(st, ls) = "ToolbarWindow32" Then
        If SendMessage(hwntbr, TB_BUTTONCOUNT, 0, 0) > 12 Then 
            Call PutMem4(ByVal lParam, ByVal hwntbr)         
            EnumChildProc = 0                               
           
            Exit Function
        End If
    End If
    EnumChildProc = 1                                      
End Function
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.01.2016, 10:10
Помогаю со студенческими работами здесь

Подскажите кто знает. Как закрыть одну из копий формы
Мы открываем множество экземпляров одной формы. Например: Из формы1 открывается форма1(копия1) из форма1(копия1) открывается...

Подскажите, кто знает, как к удаленной БД получить доступ по модему
Описываю проблему: Была локалка и в ней работала БД (Sybase SQL Anywhere 5.5) Создали новый филиал (далеко - сетку не потянешь) и он...

Как отключить кнопку в тулбаре?
Есть кулбар, в нем тулбар (или наоборот), а там есть кнопочки. Ни кто случаем не в курсе, как одну из кнопочек при определенных условиях...

Подскажите пожалуйста! Как заполненить дневник к производственной практике, может знает кто как это делать? Заранее спасибо)
Собственно трудности вызывает таблица в которой надо написать что я делал Каждый день! Таблица из 2 столбцов Дата | Рабочее...

Как можно нажать программно нажать на кнопку, у которой нет id?
Как можно нажать программно нажать на кнопку, у которой нет id?? В html она прописывается так: <a href="#" onclick=" ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
Mapped types (отображённые типы) в TypeScript
Reangularity 03.11.2025
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал. . .
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
GameUnited 02.11.2025
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное. . .
Протоколы в Python
py-thonny 31.10.2025
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического. . .
C++26: Read-copy-update (RCU)
bytestream 30.10.2025
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда. . .
Изображения webp на старых x32 ОС Windows XP и Windows 7
Argus19 30.10.2025
Изображения webp на старых x32 ОС Windows XP и Windows 7 Чтобы решить задачу, использовал интернет: поисковики Google и Yandex, а также подсказки Deep Seek. Как оказалось, чтобы создать. . .
Passkey в ASP.NET Core identity
stackOverflow 29.10.2025
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В . NET 10 команда Microsoft внедрила поддержку Passkey прямо в. . .
Последние результаты исследования от команды MCM (октябрь 2025 г.)
Programma_Boinc 29.10.2025
Последние результаты исследования от команды MCM (октябрь 2025 г. ) Поскольку мы продолжаем изучать гены, которые играют ведущую роль в развитии рака, в рамках проекта "Картирование раковых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru