1

Тема: AHK: WinSpy++, WinSpector

Добрый вечер, может кто подсказать как работать в WinSpy++ или же в WinSpector. Почему-то при каждой попытке считать сообщение поля пустые. Цель "totalcommander" может ли быть у него защита anti-hook?

2

Re: AHK: WinSpy++, WinSpector

Проблема может быть в разности битностей. Если перехватчик 32-битный, он не может перехватить сообщения 64-битного приложения.

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

3

Re: AHK: WinSpy++, WinSpector

teadrinker  00E00230 S WM_COMMAND wNotifyCode:0004 wID:1786 hwndCtl:030706FA вышла вот такая строка, возможно ли как-то сделать из этого postmessage команду?

4 (изменено: teadrinker, 2019-11-28 02:11:33)

Re: AHK: WinSpy++, WinSpector

Наверно, как-то так:

SendMessage, 0x111, (4 << 16)|1786, 0x30706FA,, ahk_id [здесь хэндл окна, которому отправлять, возможно подойдёт 0x30706FA]

Значения 0x30706FA и возможно 1786 будут меняться после каждой перезагрузки приложения.
Но что такое 00E00230 S не знаю.

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

5

Re: AHK: WinSpy++, WinSpector

00E00230 - хендл окна.
S - сообщение послано функцией SendMessage.

6

Re: AHK: WinSpy++, WinSpector

Использую ГК для копирования сообщения в один клик сразу в нашем формате (сообщение должно быть выделено) и прицела в один клик:

Hotkey("^C", "Microsoft Spy++ - Messages (", "spyCopy")
Hotkey("^C", "Microsoft Spy++ - [Messages (", "spyCopy")
Hotkey("^W", "Microsoft Spy++", "spyClose")
Hotkey("^N", "Microsoft Spy++", "spyWindows")
Hotkey("!F", "Microsoft Spy++", "spyAim")
Hotkey("+^!Space",, "doNotDelete")
Return

doNotDelete() { ; for spyAim work
}
spyCopy() {
	Send !{Enter}
	WinWaitActive Message Properties,, 5
	If ErrorLevel
		Return
	ControlGetText CommandComm, Static4
	CommandNum := SubStr(CommandComm, 1, 4)
	CommandType := SubStr(CommandComm, 8, -1)
	ControlGetText CommandName, Static5
	ControlGet Params, List,, ListBox1
	Sleep 10
	WinClose ;ControlClick Button2
	aLine := StrSplit(Params, "`n", "`r")
	wParam := "0x" SubStr(aLine[1], -7)
	lParam := "0x" SubStr(aLine[2], -7)
	; MsgBox % CommandNum "`n" CommandName "`n" CommandType "`n" wParam " " lParam
	ComTypeTransl := {Sent: "SendMessage", Posted: "PostMessage"}
	; MsgBox % ComTypeTransl[CommandType] " 0x" CommandNum ", " dec(wParam) ", " dec(lParam)
	Clipboard := ComTypeTransl[CommandType] " " hex("0x" CommandNum) ", " hex(wParam) ", " hex(lParam)
	; SendMessage, Msg, wParam, lParam
}
spyClose() {
	WinMenuSelectItem, Microsoft Spy++,, 5&, 5&
}
spyWindows() {
	Send ^w
}
spyAim() {
	CoordMode, Mouse, Screen
	MouseGetPos, x, y, OutputVarWin
	CoordMode, Mouse, Relative
	If (OutputVarWin != WinExist("Microsoft Spy++"))
		MouseMove 0, 0, 0
	WinMenuSelectItem, Microsoft Spy++,, 1&, 7&	; Send ^f
	WinWaitActive, Find Window ahk_class #32770,, 3
	If ErrorLevel
	{
		MsgBox Find Window not found
		Return
	}
	Control Check,, Button5 ;&Messages
	ControlClick, Static3,,,,, NA D ;Take AIM
	Click D
	Hotkey LButton, SpyAimLButton, On
	DllCall("SetCursorPos", int, x, int, y)
}
SpyAimLButton:
	KeyWait, LButton
	Click U
	Hotkey LButton, SpyAimLButton, Off
	ControlSend,, {Enter}, Find Window ahk_class #32770
	Return

dec(n) {
	Return Format("{:u}", n)
}
hex(n) {
	Return Format("{:#0x}", n)
}
Hotkey(keyName, winTitle:="", func:="", args*)  {
	funcObj := Func(func).Bind(args*)
	Hotkey IfWinActive, % winTitle
	Hotkey % keyName, % funcObj
}

Стоит наверно сделать лаунчер со своим прицелом и автоматическим выбором разрядности spyxx, и сразу установить (HKEY_CURRENT_USER\Software\Microsoft\Spy++) дефолтный фильтр сообщений с галкой на General (или ограничиться WM_Command? А может наоборот General недостаточно?). Пишите что надо будет.

7

Re: AHK: WinSpy++, WinSpector

Кстати, отследить окно spyxx им же самим у меня не вышло. А чтобы запустить второй экземпляр видимо надо менять Original Filename или класс окна.

8

Re: AHK: WinSpy++, WinSpector

teadrinker пишет:

SendMessage, 0x111, (4 << 16)|1786, 0x30706FA,, ahk_id [здесь хэндл окна, которому отправлять, возможно подойдёт 0x30706FA]

Ничего не получилось, хоть и пытался подставлять значения которые были актуальны на время открытия программы, но всё равно спасибо за попытку помочь)

9

Re: AHK: WinSpy++, WinSpector

А хэндл окна правильно подставили? Если, например, значение было 00E00230, то ahk_id 0x00E00230.

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

10

Re: AHK: WinSpy++, WinSpector

teadrinker Сначала нет, но потом исправил и всё равно ничего не заработало

11

Re: AHK: WinSpy++, WinSpector

У меня выбирало только первый пункт меню в totalcommander в поисках файлах (как пример). Затем значения поменялись и вообще ничего не выбирает.