purebasic.info
http://purebasic.info/phpBB3ex/

ToolBar стороннего приложения
http://purebasic.info/phpBB3ex/viewtopic.php?f=1&t=4939
Страница 1 из 1

Автор:  knower [ Чт сен 13, 2018 1:49 pm ]
Заголовок сообщения:  ToolBar стороннего приложения

Здравствуйте.
Подскажите как перечислить все кнопки на 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


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

Автор:  repeat [ Чт сен 13, 2018 7:39 pm ]
Заголовок сообщения:  Re: ToolBar стороннего приложения

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)


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

Автор:  knower [ Чт сен 13, 2018 8:01 pm ]
Заголовок сообщения:  Re: ToolBar стороннего приложения

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

Автор:  repeat [ Чт сен 13, 2018 8:25 pm ]
Заголовок сообщения:  Re: ToolBar стороннего приложения

Если не рисованный то можно SendMessage_(hWndToolBar, #TB_BUTTONCOUNT, 0, 0) далее OpenProcess, VirtualAllocEx, WriteProcessMemory что-то вроде этого только вместо TB_HITTEST нужно TB_GETBUTTON или TB_GETBUTTONINFO, вот. Наверное есть вариант и проще :roll:

Автор:  knower [ Сб сен 15, 2018 9:05 am ]
Заголовок сообщения:  Re: ToolBar стороннего приложения

Спасибо за наводку. Попробую.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/