LonerD
![](images/avatars/95764259957fac0a69f40c.jpg)
|
Posted: Wed Apr 22, 2015 20:29 Post subject: |
|
|
Flasher wrote: | Предыдущый как-то покомпактней смотрится. А тут какие-то навороты отладочные, ну их. Нужно скомпоновать самый наипростейший и компактный вариант с записью в переменную и msgbox для одного значения. В данном случае SС больше всего интересует. |
Предыдущий - это вот этот имеешь в виду?
Не очень-то и компактно, если принять во внимание, что разные команды нужно отсылать - посмотри вначале скрипта конструкцию if A_IsUnicode ... else и доп. функцию StrPutVar
Flasher wrote: | А тут какие-то навороты отладочные, ну их. |
Что ты подразумеваешь под отладочными наворотами? Защиту от дурака можно просто убрать (или переделать по-своему).
Для меня туманным остаётся смысл проверки if( A_IsUnicode ). На первый взгляд все AutoHotkey.exe-шники работает и без неё.
Добавлено спустя 48 минут:
В общем, получился вот такой примерчик. Переключение панелей - определяем активную панель, и переходим на другую.
Основная суть достигнута - получено значение retVal использовано дальше в скрипте.
Code: | ; #Warn
#NoEnv
#NoTrayIcon
#SingleInstance, Force
;SetBatchLInes, -1
;SendMode, Input
If WinExist("ahk_class TTOTAL_CMD") && WinActive("ahk_class TTOTAL_CMD")
{
WinGet, TCHWND, ID, A
OnMessage(0x4a, "Receive_WM_COPYDATA") ; 0x4a is WM_COPYDATA
Send_WM_COPYDATA(cmd:="A")
if ( retVal = "R" )
SendMessage, 1075, 4001,,, % "ahk_id " TCHWND
else
SendMessage, 1075, 4002,,, % "ahk_id " TCHWND
}
ExitApp
Send_WM_COPYDATA(ByRef cmd, aWinID=0x0)
{
global TCHWND
Critical
if(!RegExMatch(cmd, "^(A|[LRST][PCIN]?)$"))
return
len:=StrLen(cmd) + 1
if( A_IsUnicode ) ; This needs to be done, as TC is expecting
{ ; "chars" for the cmd string.
cmdStr:=cmd
VarSetCapacity(cmd, StrPut(cmd, "cp0"))
Loop, % len
NumPut( Asc(SubStr(cmdStr, A_Index, 1)), cmd, A_Index - 1, "Char")
}
VarSetCapacity(CopyDataStruct, A_PtrSize * 3)
NumPut(Asc("G") + 256 * Asc(A_IsUnicode ? "W" : "A"), CopyDataStruct)
NumPut(len , CopyDataStruct, A_PtrSize)
NumPut(&cmd, CopyDataStruct, A_PtrSize * 2)
SendMessage, 0x4A, %A_ScriptHwnd%, &CopyDataStruct, , % "ahk_id " TCHWND
return ErrorLevel
}
Receive_WM_COPYDATA(wParam, lParam, msg, hwnd)
{
global retVal
retVal:=StrGet(NumGet(lParam + A_PtrSize * 2))
return 1
} |
_________________ Windows 11 | TC DreamLair eternal pre-α
Last edited by LonerD on Thu Apr 23, 2015 15:28; edited 1 time in total |
|