Тема: AHK: Объединить 2 скрипта / Процессы
Доброго времени суток!
Нужна помощь в переносе одной функции из 1 скрипта, в мой скрипт.
Постараюсь объяснить максимально внятно.
Есть программка на AHK с GUI, в написании которой активно помогали serzh82saratov, __Михаил__ и stealzy (за что им большое спасибо)
Решил доработать в ней функцию поиска нужного мне процесса.
На текущий момент она просто ищет последние запущенные процессы после нажатия кнопки "Отследить игру" в моем GUI.
Но так как данная функция ищет часто ненужные процессы, я хочу её доработать.
Нашел почти то, что мне нужно, скрипт от teadrinker: http://forum.script-coding.com/viewtopi … 447#p40447
Он при наведении курсора на кнопку "Пуск" показывает ToolTip с названием наиболее загружающего процесса и процент процессорного времени, занимаемого данным процессом.
Мне из данной функции нужно как раз определение наиболее загружаемого процесса, и его название отображать в GroupBox'е в моем GUI.
Вот полная, доработанная версия моей программки:
#SingleInstance Force
#NoEnv
SetBatchLines -1
Name = Cam OverLay
GroupAdd, AppGroup, % Name
;Gui +ToolWindow
Gui -MaximizeBox
Gui Color, 0x000000
Gui Add, Button, x125 y50 w102 h23, 4. Подтвердить
Gui Add, ListBox, vG1 gПодтвердить hwndhListbox x25 y151 w196 h160
Gui Add, Button, gNewApp hwndhBut x125 y19 w102 h23, 3. Отследить игру
Gui Add, Button, gGames x15 y50 w102 h23, 2. Папка GAMES
Gui Add, Button, gOBS x15 y19 w102 h23, 1. Запустить OBS
Gui Add, Button, gReverse x125 y104 w102 h23, Реверс
Gui Add, Text, x18 y90 w210 h2 +0x10
Gui Font, c0xFFFFFF
Gui Add, GroupBox, x18 y134 w211 h188, Выбрать процесс
Gui Font
Gui Add, Edit, hwndhSear gGet vPoisk x17 y105 w100 h21, Поиск процесса...
for Process in ComObjGet("Winmgmts:").ExecQuery("Select * From Win32_Process")
Txt .= Process.Caption "|"
GuiControl,, % hListbox, % Txt ; Вставить из переменной.
Gui Show, w246 h340, % Name
Return
GuiEscape:
GuiClose:
ExitApp
Games:
Run, C:\Users\Администратор\Desktop\Games
Return
OBS:
Run, C:\Program Files\obs-studio\bin\64bit\obs64.exe, C:\Program Files\obs-studio\bin\64bit\
Sleep, 4000
WinSetTitle, ahk_class Qt5152QWindowIcon, , OBS
Sleep, 1000
MouseMove, 100, 745
Sleep, 200
MouseClick, left, 100, 745
MouseClick, right, 100, 745
Sleep, 200
MouseMove, 200, 635
MouseClick, left, 200, 635
Sleep, 200
If Not ОкноБезРамокДляВебки
{
WinMove Оконный проектор (Источник) - Cam,, 0, 0, 408, 308 ; перемещаем окошко в угол + ресайз
WinSet Style, -0x800000, Оконный проектор (Источник) - Cam ; -рамка
WinSet Style, -0x40000, Оконный проектор (Источник) - Cam ; -рамка
WinSet Style, -0x400000, Оконный проектор (Источник) - Cam ; -рамка
ОкноБезРамокДляВебки := true
}
;Sleep, 200
;WinMinimize OBS
Sleep, 200
WinActivate Cam OverLay
#IfWinActive, Ahk_Group AppGroup
; Перехват клавиши Enter в своём окне:
Enter::
KeyWait, %A_ThisHotkey%, U
ControlGetFocus, F_Now, % Name ; Получить текущий выбранный контрол.
If (F_Now = "ListBox1") ; Если фокус на списке сохранить пункт и выйти:
{
Gui, Submit, NoHide
ToolTip, Переменная = %G1%
Sleep, 300
ToolTip
Return
}
Else If (F_Now = "Edit1") ; Поиск в списке:
{
GoTo, Get
}
;Else
; Send, {%A_ThisHotkey%} ; Нажать Enter если нет совпадений.
Return
#If
Get:
Gui, Submit, NoHide
T=
Loop, Parse, Txt, |
{
If InStr(A_LoopField, Poisk)
{
SendMessage, 390, A_Index-1, 0,, ahk_id %hListbox% ; Выделить найденный пункт.
T := A_Index
Break
}
}
If !T
{
ToolTip, Нет такого.,0,0
Sleep, 400
}
ToolTip
Return
Подтвердить:
Gui, Submit, NoHide
;ToolTip, Пункт: %G1% ; отображение выбранного пункта
Return
Reverse:
Reverse := !Reverse
GoSub, App
If Reverse
Sort, Txt, R D|
GuiControl,, % hListbox, | ; Очистить список.
GuiControl,, % hListbox, % Txt ; Вставить из переменной.
Return
NewApp:
Txt2 := Txt ; Резерв тек. списка.
GuiControl,, % hListbox, | ; Очистить список.
GuiControl,, % hListbox, "Ожидание..."
GuiControl, Disable, % hBut ; Блок кнопки.
GuiControl, Disable, % hSear ; Разблок поиска.
SetTimer, NewP, 1000 ; Тест каждую секунду.
Return
NewP: ; Отсев новых программ.
GoSub, App
Txt_New =
D = |
Loop, Parse, Txt, %D%
{
If !InStr(D Txt2 D, D A_LoopField D)
Txt_New := A_LoopField "|"
}
If Txt_New
{
Txt := Txt_New
SetTimer, NewP, Off ; Выключить тестер.
GuiControl,, % hListbox, | ; Очистить список.
GuiControl,, % hListbox, % Txt_New ; Вставить из переменной.
GuiControl, Enable, % hBut ; Разблок кнопки.
GuiControl, Enable, % hSear ; Разблок поиска.
}
Return
App: ; Создать список запущенных.
Txt =
for Process in ComObjGet("Winmgmts:").ExecQuery("Select * From Win32_Process")
Txt .= Process.Caption "|"
Return
F9::
If Not ОкноБезРамокДляИгр
{
BorderSize:=0
WinMove, ahk_exe %G1%,, -BorderSize, -BorderSize, 1920+2*BorderSize, 1080+2*BorderSize
WinSet, Style, -0xC00000, ahk_exe %G1% ; убрать рамку
ОкноБезРамокДляИгр := true
}
; If Not ОкноБезРамокДляВебки
; {
; WinMove Оконный проектор (Источник) - Cam,, 0, 0, 408, 308 ; перемещаем окошко в угол + ресайз
; WinSet Style, -0x800000, Оконный проектор (Источник) - Cam ; -рамка
; WinSet Style, -0x40000, Оконный проектор (Источник) - Cam ; -рамка
; WinSet Style, -0x400000, Оконный проектор (Источник) - Cam ; -рамка
; ОкноБезРамокДляВебки := true
; }
; IfWinExist ahk_class Qt5152QWindowIcon ahk_exe obs64.exe
IfWinExist, Оконный проектор (Источник) - Cam
{
WinGet ExStyle, ExStyle
if Not (ExStyle & 0x8) ; 0x8 is WS_EX_TOPMOST. The window is always-on-top.
{
WinSet ExStyle, +0x20 ; чтобы клики проходили сквозь окошко
WinSet Transparent, 255 ; прозрачность окна: 0 - максимальная, 255 - непрозрачное
WinSet AlwaysOnTop, On
} else
{
WinSet ExStyle, -0x20
WinSet Transparent, 255
WinSet AlwaysOnTop, Off
; переключаем режим "поверх всех" в окне игры, чтобы окошко ушло на задний план
WinSet AlwaysOnTop, On, A
WinSet AlwaysOnTop, Off, A
}
}
Return
F12::
Run, R:\VIDEOS\РОЛИКИ НА ОБРАБОТКУ
Return
Прошу помощи в реализации данной идеи, заранее огромное спасибо!