musicstashall
Знающий
- Сообщения
- 322
- Репутация
- 7
Код:
#include <APISysConstants.au3>
#include <WinAPISysWin.au3>
#include <Process.au3>
#include <File.au3>
#include <Array.au3>
#include <Math.au3>
Opt('TrayAutoPause', 0)
OnAutoItExitRegister('OnAutoItExit')
Global $MainName = 'Блокнот - 1' ; главный файл, имя задай здесь
Global $FileList[4] = ['Блокнот А', 'Блокнот - 2', 'Блокнот - 3', 'Блокнот - X'] ; прочие файлы, имя задай здесь (без расширения .txt)
Global $Path = @ScriptDir & '\' ; путь к файлам, задай свой
Global $g_hForm = GUICreate('')
GUIRegisterMsg(_WinAPI_RegisterWindowMessage('SHELLHOOK'), 'WM_SHELLHOOK')
_WinAPI_RegisterShellHookWindow($g_hForm)
Global $aList[1], $pos, $X, $Y, $W, $H
While 1
Sleep(1000)
WEnd
Func WM_SHELLHOOK($hWnd, $iMsg, $wParam, $lParam)
#forceref $iMsg
Local $procc = _ProcessGetName(WinGetProcess($lParam))
Local $class = _WinAPI_GetClassName($lParam), $file
Local $title = StringSplit(WinGetTitle($lParam), '.txt', 3)[0]
Switch $wParam
Case $HSHELL_WINDOWCREATED
If $procc = 'notepad.exe' And StringInStr($title, $MainName) Then
$aList[0] = $lParam
WinSetState($lParam, '', @SW_MAXIMIZE)
$pos = WinGetPos($lParam)
$W = $pos[2]/4
$H = $pos[3]/4
$X = $pos[2] - $W
$Y = -$H
For $i = 0 To Ubound($FileList) -1
Run('notepad.exe ' & $Path & $FileList[$i] & '.txt')
Next
ElseIf $procc = 'notepad.exe' And StringInStr(_ArrayToString($FileList), $title) Then
If UBound($aList) = 5 Then Return 1 ; число 5 в этой строке — это общее количество файлов, включая главный, можно заменить на Ubound($FileList) +1, тогда автоматом будет ставить
Local $index = _ArrayAdd($aList, $lParam)
If _MathCheckDiv($index, 2) = 1 Then $Y += $H
If _MathCheckDiv($index, 2) = 2 Then $X -= $W
;_WinAPI_SetParent($lParam, $aList[0])
WinMove($lParam, '', $X, $Y, $W, $H)
WinSetOnTop($lParam, '', 1)
$X = $pos[2] - $W
EndIf
Case $HSHELL_WINDOWDESTROYED
If $lParam = $aList[0] Then
For $i = 1 To Ubound($aList) -1
WinClose($aList[$i])
Next
EndIf
Case Else
If Not BitAND($wParam, $HSHELL_WINDOWACTIVATED) = $HSHELL_WINDOWACTIVATED Then Return 1
; здесь можно обрабатывать активированные окна, поставь сюда ConsoleWrite(....) и смотри, что происзодит в этой секции
EndSwitch
EndFunc ;==>WM_SHELLHOOK
Func OnAutoItExit()
_WinAPI_DeregisterShellHookWindow($g_hForm)
EndFunc ;==>OnAutoItExit
Последнее редактирование: