1 (изменено: Dalm, 2020-08-16 05:51:50)

Тема: AHK:Определение полного ClassNN по Title окна и части ClassNN

Приветствую всех.

Скажите - можно ли c помощью Autohotkey - по названию титла окна (например "Безымянный - Paint") и части ClassnameNN ("Afx:0") - определить его полный ClassnameNN, выведя через Msgbox?

2 (изменено: Alectric, 2020-08-16 08:06:34)

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Наверно можно как-нибудь через Accessible.
http://forum.script-coding.com/misc.php?action=pun_attachment&item=2000&download=1

Post's attachments

3504890.png 150.11 kb, 138 downloads since 2020-08-16 

You don't have the permssions to download the attachments of this post.
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3 (изменено: Dalm, 2020-08-16 11:42:00)

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

У меня совсем другое название ClassNN показывает.
Но я не об этом спрашивал.
Я спросил - как это скриптом сделать, чтобы ClassnameNN вывелся бы через msgbox ?

Post's attachments

Image.jpg 231.04 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

4

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Не уверен, что вы не путаете Class (он же ahk_class) и ClassNN. У окна пайнта (как и у других окон верхнего уровня) есть класс, а ClassNN есть у его «внутренних» окон — контролов. Их может быть много, и их ClassNN может отличаться только номером.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: Alectric, 2020-08-16 19:18:12)

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Dalm пишет:

части ClassnameNN ("Afx:0")

В паинте таких контролов несколько.

Run,mspaint,,,pid
Sleep 500
winget,hWnd,id,ahk_pid %pid%
WinGet,CL,ControlList,ahk_pid %pid%

Loop,Parse,CL,`n
{
  if instr(A_LoopField,"Afx:0")
    MsgBox,% A_LoopField
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

6

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

На десятке контрол рендера у меня Afx:00007FF6D9510000:81, причём как ни странно всегда одинаковый. Но что надо ТС мне всё равно не ясно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Alectric, скрипт выводит три сообщения.
Как выбрать только самое первое из этих сообщений?

8 (изменено: serzh82saratov, 2020-08-16 23:50:10)

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Alectric
Я написал сообщение потому что мне показалось что тут было написано что таких контролов нет.

Alectric пишет:

В паинте таких контролов несколько.

Dalm
А у вас эта часть бывает разной?

Afx:00007FF6D9510000:8
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Dalm
А у вас эта часть бывает разной?

Afx:00007FF6D9510000:8

Да

10

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Ribbon меню можно автоматизировать через такой хак:
http://forum.script-coding.com/viewtopi … 15#p120115

11

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Alectric, скрипт выводит три сообщения.
Как выбрать только самое первое из этих сообщений?

12

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

winget,hWnd,id, ahk_class MSPaintApp 
WinGet,CL,ControlList,ahk_id %hWnd%

first := ""
Loop,Parse,CL,`n
{
  if instr(A_LoopField,"Afx:0")
    first := A_LoopField
}
If first
	MsgBox % first

Malcev
Так у Ribbon класс UIRibbonWorkPane, а не Afx:***.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Можно ещё так попробовать, если нужен только класс или хэндл.


wid := WinExist("ahk_class MSPaintApp")
cid := ChildFromPath("5.1", wid)
WinGetClass, Class, ahk_id %cid%
MsgBox % Class

ChildFromPath(str, hwnd) 
{
	Static GW_HWNDNEXT := 2, GW_CHILD := 5
	hwnd := DllCall("GetWindow", "Ptr", hwnd, UInt, GW_CHILD, "Ptr")
	arr := StrSplit(str, "."), off := 1, i := 1
	Loop 
	{
		If (i = arr[off])
		{
			If (off = arr.Count())
				return hwnd
			hwnd := DllCall("GetWindow", "Ptr", hwnd, UInt, GW_CHILD, "Ptr"), ++off, i := 1 
		}
		Else If (++i) && !(hwnd := DllCall("GetWindow", "Ptr", hwnd, UInt, GW_HWNDNEXT, "Ptr"))
			return   
	}
} 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

serzh82saratov
Этот код определяет Class.

А нужен ClassnameNN - он такой: Afx:00000000FF690000:81

15

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

ClassnameNN начинается всегда на "Afx:" а заканчивается на ":81"

16

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Dalm пишет:

А нужен ClassnameNN

А зачем вам ClassNN, если есть хэндл?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Dalm, конкретно задача у вас какая - ради интереса выводить ClassnameNN?

18

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Вот это скрипт - выводит три сообщения:

Run,mspaint,,,pid
Sleep 500
winget,hWnd,id,ahk_pid %pid%
WinGet,CL,ControlList,ahk_pid %pid%

Loop,Parse,CL,`n
{
  if instr(A_LoopField,"Afx:0")
    MsgBox,% A_LoopField
}

Как оставить только самое первое из этих сообщений (а последующие два - не показывать) ?

19

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Я вам в 12 посте ответил.
Вы ни тему свою не читаете, ни на вопросы не отвечаете...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20 (изменено: Dalm, 2020-08-18 15:53:20)

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

serzh82saratov, да я читаю свою тему, просто не все коды тут срабатывают.

Вот код из сообщения 5 - выдает три сообщения.
Из них - самое первое - то что мне нужно:
тот самый ClassnameNN, который заканчивается на ":81"
То есть задача почти решена, но не так все просто.
Нужны не все эти три сообщения, а только одно - первое.

Я вижу - в вашем коде из сообщения 12 - стоит команда

If first
	MsgBox % first

Чтобы выводилось - первое сообщение, надо понимать.
Но почему-то выдается не первое сообщение (то что заканчивается на ":81"),  а третье (то что заканчивается на ":01").
Поэтому и спрашиваю.

21

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Dalm пишет:

да я читаю свою тему, просто не все коды тут срабатывают.

В таком случае надо написать что что то не работает, а не продолжать, как будто кода и не было.
Я ошибся на скорую руку, так должно работать.


winget,hWnd,id, ahk_class MSPaintApp 
WinGet,CL,ControlList,ahk_id %hWnd%

first := ""
Loop,Parse,CL,`n
{
  if instr(A_LoopField,"Afx:0") && (first := A_LoopField)
    break
}
If first
	MsgBox % first

If first

Тут только чтобы не выводить MsgBox когда контрол не найден.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

serzh82saratov теперь выводит нужное сообщение.

Этот параметр, который выводится - его можно как-нибудь в переменную сохранить (чтобы потом где-нибудь использовать) ?

23

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

Сейчас он в переменной first.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24

Re: AHK:Определение полного ClassNN по Title окна и части ClassNN

serzh82saratov, спасибо -  теперь срабатывает как нужно.