purebasic.info

PureBasic forum
Текущее время: Сб дек 15, 2018 3:16 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: ToolBar стороннего приложения
СообщениеДобавлено: Чт сен 13, 2018 1:49 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 457
Благодарил (а): 51 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
Здравствуйте.
Подскажите как перечислить все кнопки на ToolBar'е стороннего приложения? Нужно получить их хэндлы и текст или подсказку(желательно). Есть приложение с стандартным ToolBar'ом (класс: "ToolbarWindow32"), но нет ни дублирующего кнопку пункта меню ни горячей клавиши.
Если, например взять Total Commander, то как можно программно нажать на кнопку ToolBar'а "Поиск файлов"? Клик по заранее заданным координатам не интересует в данном случае.
Искал так:
Код:
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
Procedure.l enumChildren(hwnd, lParam) ; Поиск дочерних окон, принадлежащих главному
  Protected Dim Buff.a(258)
 
  If hwnd    
    Len=GetClassName_(hwnd, @Buff(), 256)
    classText.s = LCase(PeekS(@Buff(), Len))
    Debug "class = " + classText
   
    Len=SendMessage_(hwnd,#WM_GETTEXT,256,@Buff())
    MainText.s=PeekS(@Buff(), Len)
    Debug "title = " + MainText
   
    ProcedureReturn 1
  Else
    ProcedureReturn 0
  EndIf
EndProcedure
 
 
TotalCMD = FindWindow_(@"TTOTAL_CMD",0)
If TotalCMD
  Debug TotalCMD
  ToolBar = FindWindowEx_(TotalCMD, 0, @"TButtonBar",0)
  If ToolBar
    Debug ToolBar
    ;EnumChildWindows_(TotalCMD, @enumChildren(), 0)
    EnumChildWindows_(ToolBar, @enumChildren(), 0)
  EndIf
EndIf


Но похоже, что они ищутся по-другому.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ToolBar стороннего приложения
СообщениеДобавлено: Чт сен 13, 2018 7:39 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 273
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
knower писал(а):
ToolBar'а "Поиск файлов"?
Ну, так можно :)
Код:
1
2
3
4
5
6
7
hWnd = FindWindow_(@"TTOTAL_CMD",0)
SetForegroundWindow_(hWnd)
keybd_event_(#VK_MENU, 0, 0, 0)
keybd_event_(#VK_F7, 0, 0, 0)
Delay(100)
keybd_event_(#VK_F7, 0, #KEYEVENTF_KEYUP, 0)
keybd_event_(#VK_MENU, 0, #KEYEVENTF_KEYUP, 0)


Не факт что там кнопки.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ToolBar стороннего приложения
СообщениеДобавлено: Чт сен 13, 2018 8:01 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 457
Благодарил (а): 51 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
repeat, нет. Total Commander взял только для примера. Повторюсь! В целевом приложении нет дублирующего кнопку ни пункта меню ни горячей клавиши. Поэтому расчитывал, что это будет учтено при решении. Представьте, что у Total'а нет ни "Alt+F7" ни меню. Только ToolBar. Но... стандартный! Не рисованный какой-нибудь. И вот теперь нужно "жмакнуть" именно по кнопке поиска файлов (к примеру). Только указывать курсору где "кликнуть" тоже не хотелось бы. Окно может изменить размеры/позицию и т.п. Понятно, что можно привязаться к координатам кнопки относительно окна, но это тоже дело. Тогда представим, что кнопки могут добавляться/удаляться и соответственно нужная нам может запросто изменить свои координаты. Ну как в Total'e примерно.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ToolBar стороннего приложения
СообщениеДобавлено: Чт сен 13, 2018 8:25 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 273
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
Если не рисованный то можно SendMessage_(hWndToolBar, #TB_BUTTONCOUNT, 0, 0) далее OpenProcess, VirtualAllocEx, WriteProcessMemory что-то вроде этого только вместо TB_HITTEST нужно TB_GETBUTTON или TB_GETBUTTONINFO, вот. Наверное есть вариант и проще :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ToolBar стороннего приложения
СообщениеДобавлено: Сб сен 15, 2018 9:05 am 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 457
Благодарил (а): 51 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
Спасибо за наводку. Попробую.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB