1 (изменено: Indomito, 2016-12-03 07:07:19)

Тема: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

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

И так код, т.е. фрагмент.

WinName:="Asterios Phoenix"
SetTitleMatchMode, 3
LA2Win00  := WinExist("A")
WinGet, LA2Win01 ,id, %WinName%
WinGet, La2Win02 ,IDLast, %WinName%

Получается одноименное окно, с разными HWND, а процесс называется AsteriosGame.exe с разными PID, т.е. PID соответствует HWND.

А теперь, что у меня не получается.

1. Узнать какому HWND соответствует PID.
2. Узнать какой PID не имеет HWND, т.е. задача от обратного - процесс AsteriosGame.exe просто висит.

Я попытался разобраться в команде Process при Cmd=List... и запутался.

Процесс AsteriosGame.exe без окна не считается зависшим, то сильно замедляет остальные процессы AsteriosGame.exe.


Надеюсь всё правильно объяснил.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

2 (изменено: stealzy, 2016-12-03 12:17:31)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

1. Открываем справку → работа с окнами → WinGet вроде подходит.
Дано: HWND=ID, найти: PID. И наоборот.

WinGet, LA2pid, pid, ahk_id %LA2id%
WinGet, LA2id, id, ahk_pid %LA2pid%

2. В справке написано, что команда Process, List еще не реализована, но дан пример с DllCall. Думаю можно получить список PID всех процессов с вашим именем. Останется только пройтись по ним циклом и завершить все PID, не имеющие ID.

3. Думается мне, окна есть у всех процессов, просто у зависших они скрыты. Тогда:
1) Используя WinGet, IDs, List, ahk_exe myName получаете список ID видимых окон.
2) Включаете DetectHiddenWindows On и теперь получаете список всех окон.
3) Находите ID, который есть во втором списке, но нет в первом, и прибиваете его.
4) PROFIT!

3

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito, не создавайте темы по играм в ветке Autohotkey.

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

4 (изменено: Indomito, 2016-12-03 23:54:59)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

teadrinker
Я просто с этой задачей сталкивался часто. но актуальной она стала в LA2 и на конкретном сервере.
Посчитал что она имеет к играм такое же значение, что и не имеет.

Перенести в игры?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

5

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito, если делается для игры, значит должно быть в ветке для игр.

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

6 (изменено: Indomito, 2016-12-04 01:02:52)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

-del

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

7 (изменено: Indomito, 2016-12-04 01:04:30)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

stealzy

WinGet, LA2pid, pid, ahk_id %LA2id%
WinGet, LA2id, id, ahk_pid %LA2pid%

Твой код не работает без указания имени окна и писать ahk_id и ahk_pid не обязательно, достаточно указать имя окна, но имена окон одинаковые  - вот в чём засада.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

8

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Winget, List, List, Untitled - Notepad
loop % list
{
   WinGet, Pid, Pid, % "ahk_id " list%A_Index%
   msgbox % list%A_Index% " - " Pid
}

9

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

teadrinker пишет:

Indomito, если делается для игры, значит должно быть в ветке для игр.

Я считаю, что это не совсем верная формулировка.
А вот в правилах как-раз таки верная:

Если Ваш вопрос касается автоматизации игр, задавайте его в соответствующей ветке, не создавайте тему здесь.

Так как данный вопрос не касается автоматизации конкретной игры, то и находиться ему следует в ветке по AHK.
Так было бы правильнее для последующих подобных вопросов, не касающихся игр.

10

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Не совсем тебя понял. Если скрипт делается для игры (AsteriosGame.exe), значит он касается автоматизации игр. Считаю, что подобные вопросы обязательно должны быть в этой ветке, во-первых, из-за специфики взаимодействия скриптов и игр, во-вторых, из-за специфики здешнего контингента (не относится к ТС) — «я полный нуб, сделайте мне так-то и так-то».

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

11

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Согласен с тобой.
Но в данном конкретном случае, кроме названия игры в имени процесса ничего больше связанного с играми нету.
А сам вопрос касается перечисления процессов.
Что может пригодится в последующих поисковых запросах пользователей в ветке по автохотки.

12

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

может пригодится в последующих поисковых запросах пользователей в ветке по автохотки

Так можно практически про любую тему из ahk-games сказать. Но разве точно так же не может пригодиться и здешним пользователям?

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

13

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Так можно практически про любую тему из ahk-games сказать

Ну тут уже сам топикстартер решает, где запостить свою тему.
И если она касается автоматизации игр, то такую тему конечно же не следует постить в ветке по автохотки.

Но разве точно так же не может пригодиться и здешним пользователям?

Может, конечно. Я просто не вижу объективной причины для переноса темы.
Например, если меня интересуют скрипты по игре AsteriosGame, и мне поиск выдаст эту тему, то она мне вряд ли пригодится, так как обсуждается общий вопрос.

14

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Malcev пишет:

Ну тут уже сам топикстартер решает, где запостить свою тему.

Да нет, не думаю, что на это у посетителей этого раздела хватит компетенции.

Malcev пишет:

Я просто не вижу объективной причины для переноса темы.

Ну, просто так решили: скрипт требуется для игры — значит, должен быть здесь.

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

15

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Malcev

Этот код работает.

Winget, List, List,  Безымянный — Блокнот
loop % list
{
   WinGet, Pid, Pid, % "ahk_id " list%A_Index%
   ;msgbox % list%A_Index% " - " Pid
   msgbox % list%A_Index% ;hwnd
   msgbox % Pid           ;PID
}

А как найти процессы без активного окна?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

16

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito
Неактивное окно - это то, которое не выставлено на передний план. Скрипт с таким прекрасно работает.
Ежели речь о скрытом окне (максимум есть значок в области уведомлений), то выше уже писали:

stealzy пишет:

2) Включаете DetectHiddenWindows On и теперь получаете список всех окон.

17 (изменено: Indomito, 2016-12-05 06:04:02)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher
Проблема в том, придётся перебрать кучу окон основываясь на алгоритме.

stealzy пишет:

3. Думается мне, окна есть у всех процессов, просто у зависших они скрыты. Тогда:
1) Используя WinGet, IDs, List, ahk_exe myName получаете список ID видимых окон.
2) Включаете DetectHiddenWindows On и теперь получаете список всех окон.
3) Находите ID, который есть во втором списке, но нет в первом, и прибиваете его.
4) PROFIT!

И так получаем вот такой скрипт.

DetectHiddenWindows Off
Winget, List, List ,  Безымянный — Блокнот
loop % list
{
  WinGet, Pid, Pid, % "ahk_id " list%A_Index% 
  msgbox % Pid           ;PID
}

DetectHiddenWindows On
Winget, List, List ;,  Безымянный — Блокнот
loop % list
{
   WinGet, Pid, Pid, % "ahk_id " list%A_Index%
   msgbox % Pid           ;PID
}

Остаются вопросы.

1. Я не убью ничего лишнего?
2. Может проверять по ID, или есть более простой метод?

Проверку не писал - это просто.

P.S. У NotePad только одно окно, сколько у меня - не знаю и процесс не зависший.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

18

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito
Тут не надо комментировать заголовок:

Winget, List, List ;,  Безымянный — Блокнот

Все окна искать не надо, только с заданным заголовком или лучше классом:

Winget, List, List, ahk_class Notepad

19 (изменено: Indomito, 2016-12-05 08:04:45)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher
Да, получается проще.

DetectHiddenWindows, On
Winget, List, List, ahk_class Notepad
loop % list
{
   WinGet, Pid, Pid, % "ahk_id " list%A_Index%
   msgbox % list%A_Index% " - " Pid
}

А если нет окна, то закрываем процесс по PID?
Может и не стоит писать DetectHiddenWindows, On?

Я уж хотел писать Winget, List, List, ahk_class Default IME.

MSCTFIME UI - пользовательский интерфейс к редактору метода ввода.
Default IME нужен, чтобы, например, писать на японском, корейском языках в операционной системе, т.е. на нестандартной знаковой системе.

Они всегда есть, ну почти, а там где требуется что либо писать -  обязательно

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

20 (изменено: Flasher, 2016-12-05 08:32:16)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito пишет:

А если нет окна, то закрываем процесс по PID?
Может и не стоит писать DetectHiddenWindows, On?

Стоит. По id:

Winget, List, List, ahk_class Notepad
DetectHiddenWindows, On
Winget, Hidd, List, ahk_class Notepad
loop % Hidd
{  id := Hidd%A_Index%
   If % List%A_Index% = ""
      WinKill, ahk_id %id%
}

21

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher

Работает только на блокноте.

Так не работает.

Winget, List, List, ahk_class Asterios

А так работает.

Winget, List, List, ahk_class MSCTFIME UI
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

22

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito пишет:

Так не работает.

А точно класс "Asterios"?

23

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher
Чем смотреть класс?
В реестре?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

24

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito
Нет, конечно. Полно чем. Например, этим или этим.

25

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher
Сейчас проверю - у меня была утилита WinSight, но кудато пропала.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

26 (изменено: Indomito, 2016-12-05 09:21:03)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher

▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ ( Window: Class & ProcessName & HWND )
ahk_class 353677648몽匢�凫슜纾̓囿彣椱껶≊웒嵤ᰘ㢩神Քൣ ahk_exe AsteriosGame.exe ahk_id 0x205a2

Да, уж легче не стало - это точно.

Может как то извратится и через MSCTFIME UI, только надо узнать у какого класса MSCTFIME UI нет окна Asterios Phoenix.

Это возможно?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

27

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

visibleWinPIDs:=[], allWinPIDs:=[], Pids:=[]
exeName := "calc.exe", n:=5

Loop % n
{
	Run % exeName,,, Pid
	Pids.Push(Pid)
	Sleep 100
}
MsgBox Запущено %n% процессов %exeName%
WinHide % "ahk_pid" Pids[2]
WinHide % "ahk_pid" Pids[4]
MsgBox Скрыты окна 2 и 4 процессов,`nПодсчитайте кол-во процессов %exeName% в диспетчере и закройте его.
RunWait taskmgr.exe

; список PID видимых
Winget, list, List, ahk_exe %exeName%
loop % list
{
	WinGet, Pid, Pid, % "ahk_id " list%A_Index%
	If !indexOf(Pid, visibleWinPIDs) ; У процесса может быть много окон. Записываем только те процессы, которых еще нет в списке.
		visibleWinPIDs.Push(Pid)
}
; список PID всех
DetectHiddenWindows On
Winget, list, List, ahk_exe %exeName%
loop % list
{
	WinGet, Pid, Pid, % "ahk_id " list%A_Index%
	If !indexOf(Pid, allWinPIDs)
		allWinPIDs.Push(Pid)
}

MsgBox % "Процессов с видимыми окнами: " visibleWinPIDs.MaxIndex() "`nПроцессов с окнами: " allWinPIDs.MaxIndex() "`nПроцессы без видимых окон закрыты."
; убийства
If ( visibleWinPIDs.MaxIndex() != allWinPIDs.MaxIndex() )
	Loop % allWinPIDs.MaxIndex()
	{
		If !indexOf(allWinPIDs[A_Index], visibleWinPIDs) ; Убиваем те процессы из первого списка, которых нет во втором.
			Process Close, % allWinPIDs[A_Index]
	}

RunWait taskmgr.exe
WinClose % "ahk_pid" Pids[1]
WinClose % "ahk_pid" Pids[3]
WinClose % "ahk_pid" Pids[5]
Exit
Return

indexOf(var, Arr, fromIndex:=1) {
	for index, value in Arr {
		if (index < fromIndex)
			Continue
		else if (value = var)
			return index
	}
	return false
}

28 (изменено: Malcev, 2016-12-05 19:10:50)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

По-моему подход неверный.
Так как если окно невидимо - не значит, что программа зависла.
Да и у процесса может быть несколько окон, некоторые из которых скрытые.
Я бы посылал сообщение окну и дожидался ответа.
Если ответа нету - значит закрываем.

#Persistent
Menu, Tray, Icon, User32.dll, 2
SMTO_NOTIMEOUTIFNOTHUNG := 8      
Delay = 200                    
SetTimer, CheckAllWindows, 10
Return

CheckAllWindows:
  SetTimer, CheckAllWindows, Off
  WinGet, hWnd, List

  Loop, %hWnd%           {

        ID := hwnd%A_Index%

        DllCall("SendMessageTimeout", UInt,ID, UInt, 0, Int,0, Int,0
                , UInt, SMTO_NOTIMEOUTIFNOTHUNG, Int,3, "UInt *", Result )

        WinGetTitle, Title, ahk_id %ID%
        IfNotEqual,Result,0, GoSub,Alert

        Sleep %Delay%
                         }
  SetTimer, CheckAllWindows, %Delay%
Return

Alert: ; This routine can be used to repeat testing & offer a WinKill.
MsgBox,64,Alert: Window probably hung?!, Window Title: %Title%, 3
Return

29 (изменено: stealzy, 2016-12-05 19:14:36)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Мопед не мой, ТЗ поставлено ТС.
Интересно, как ваш код отработает с DetectHiddenWindows On?
В текущем виде он ТС не поможет (см. 1 сообщение).

30 (изменено: Malcev, 2016-12-05 19:15:16)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Тогда уж проще так:

WS_VISIBLE := 0x10000000
DetectHiddenWindows On
Winget, List, List, ahk_exe notepad.exe
loop % list
{
   WinGet, Style, Style, % "ahk_id " list%A_Index%
   if (Style & WS_VISIBLE)
      Continue
   WinClose, % "ahk_id " list%A_Index%
}

31 (изменено: stealzy, 2016-12-05 19:20:12)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Ок, но мне часто встречаются программы, имеющие несколько окон, некоторые причем обычно невидимы.
Ваш код, очевидно, закроет их всех.
Мой код закрывает только те процессы, у которых нет видимых окон (но есть невидимые, как получить список PID по имени процесса я не знаю).

32 (изменено: Malcev, 2016-12-06 00:32:15)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Вот еще так можно попробовать:
https://msdn.microsoft.com/en-us/librar … s.85).aspx

DetectHiddenWindows On
Winget, List, List, ahk_exe notepad.exe
loop % list
{
   if IsHungAppWindow(list%A_Index%)
      WinClose, % "ahk_id " list%A_Index%
}
return

IsHungAppWindow(hwnd) { ; 0 - normally, 1 - on the contrary
return DllCall("user32\IsHungAppWindow", "Ptr", hwnd)
}

как получить список PID по имени процесса я не знаю

http://forum.script-coding.com/viewtopi … 157#p90157

33

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Malcev пишет:
   if (Style & WS_VISIBLE)
      Continue

А чем Continue лучше "!"?

34

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Ничем.

35 (изменено: Indomito, 2016-12-05 22:45:11)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Так... я запутался если честно.
Можно хоть один рабочий пример?
Для моего случая.... всё не работает с данной версией LAII.

P.S. ТЗ от ТС - перепишу и упрощу..

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

36

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

А код из 34 поста не работает?

37 (изменено: Indomito, 2016-12-06 00:23:28)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Malcev пишет:

А код из 34 поста не работает?

Не проверял, просто занят... сорри.

Можно добавить комментарии(минимальные), я его до конца не понимаю, а?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

38

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

for process in ComObjGet("winmgmts:").InstancesOf("Win32_Process where Name='notepad.exe'")
{
   if !WinExist("ahk_pid " process.ProcessId)
      process.Terminate
}

39

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

stealzy пишет:

Ок, но мне часто встречаются программы, имеющие несколько окон, некоторые причем обычно невидимы.
Ваш код, очевидно, закроет их всех.

А если всё-таки ahk_class брать, а не ahk_exe? Класс основного окна с дочерними вряд ли совпадает.

40

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

ahk_class 353677648몽匢�凫슜纾̓囿彣椱껶≊웒嵤ᰘ㢩神Քൣ?
我不会用这样的一个类.

41

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

С юникодным интерпретатором и .ahk в UTF-16 работает?

stealzy пишет:

我不会用这样的一个类.

Вот этого только не надо. Напишите по-русски.

42 (изменено: Indomito, 2016-12-08 05:24:47)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher пишет:

Вот этого только...

Видимо ahk_class зашифрован - это и в UTF-8 и UTF-16.


Обфускация точки входа (OEP) Themida прячет точку входа в библиотеку или приложение. Шифрование ресурсов. Если в ваше приложение включены какие-либо ресурсы (иконки, файлы и так далее), они будут зашифрованы и расшифрованы только при обращении к ним.

C Themida я и воюю.

Post's attachments

2.png
2.png 17.11 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

43 (изменено: Indomito, 2016-12-08 05:24:10)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

-del

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

44 (изменено: Indomito, 2016-12-08 04:57:46)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Malcev пишет:

А код из 34 поста не работает?

Твой код не закрывает Блокнот.

F1::
DetectHiddenWindows On
Winget, List, List, ahk_exe notepad.exe
loop % list
{
   if IsHungAppWindow(list%A_Index%)
      WinClose, % "ahk_id " list%A_Index%
}
return

IsHungAppWindow(hwnd) { ; 0 - normally, 1 - on the contrary
return DllCall("user32\IsHungAppWindow", "Ptr", hwnd)
}

Есть ещё предложения, просто ни один код не срабатыват.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

45

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Из 34 поста код закрывает блокнот, только если система посчитает, что блокнот завис.
Из 40 поста код закроет все процессы блокнота у которых нет видимых окон.

46

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito пишет:

Видимо ahk_class зашифрован - это и в UTF-8 и UTF-16.

Данная отсебятина - не класс.

ahk_class <возвращаемый класс> в код #32 вместо ahk_exe notepad.exe подставлялся? Какой результат?

47

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Malcev пишет:

1. Из 34 поста код закрывает блокнот, только если система посчитает, что блокнот завис.
2. Из 40 поста код закроет все процессы блокнота у которых нет видимых окон.

1. У меня LAII - не зависает, а просто идёт утечка памяти - у него просто нет основного окна Asterios Phoenix.
2. Видимые окна есть, только нет основного окна Asterios Phoenix

Пост №34. Просто не срабатывает.
Пост №40. Не срабатывает, т.к. видимые окна есть.

Flasher пишет:

ahk_class <возвращаемый класс> в код #32 вместо ahk_exe notepad.exe подставлялся? Какой результат?

надо проверить... сейчас.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

48 (изменено: Indomito, 2016-12-09 05:36:03)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher
Твой код закрывает все окна кроме Безымянный — Блокнот и процесса notepad.exe, т.е. работает как написано.

F1::
WS_VISIBLE := 0x10000000
DetectHiddenWindows On
Winget, List, List, ahk_exe notepad.exe
loop % list
{
   WinGet, Style, Style, % "ahk_id " list%A_Index%
   if (Style & WS_VISIBLE)
      Continue
   WinClose, % "ahk_id " list%A_Index%
}
Return

Мне нужно убить процесс(ы) notepad.exe без окна Безымянный — Блокнот.
А процесс(ы) notepad.exe  с окном Безымянный — Блокнот - не трогать.


P.S. Я проверил это на LAII и язык стал у окна стал родной (корейский язык ввода) .

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

49

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito
Это не мой код. Это код Malcevа. Я предложил использовать класс.
А здесь я вижу чистый копипаст (причём с обсуждаемой программой). О чём речь вообще?

Indomito пишет:

P.S. Я проверил это на LAII и язык стал у окна стал родной (корейский язык ввода) .

Не понял. Что проверил, и как вообще данный код может влиять на язык программы?

50 (изменено: Indomito, 2016-12-09 06:17:15)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher
Он убивает языковые окна...
Хотя по сути не важно, мне нужно убить процесс(ы) без основного окна.

Я попытался модифицировать код - ничего не получилось.

F1::
WS_VISIBLE := 0x10000000
;DetectHiddenWindows On
Winget, List, List, ahk_exe notepad.exe
loop % list
{
   WinGetTitle, this_title, % "ahk_id " list%A_Index%
   If (this_title="Безымянный — Блокнот")
          Break
   MsgBox %this_title% 
   WinGet, Style, Style, % "ahk_id " list%A_Index%
   if (Style & WS_VISIBLE)
      Continue
   WinClose, % "ahk_id " list%A_Index%
}
Return

Надо использовать массив:
- Основное окно
- Процесс
А потом убивать процессы без основного окна, не окна, процесс - по сути то всё просто.


P.S. К играм отношение косвенное.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

51

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito
Я не понимаю, о чём речь. Я не пользуюсь программой (игрой или что там).

52

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher
Я исправил пост - задача то тривиальная.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

53

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito пишет:

надо проверить... сейчас.

Где в скрипте использование класса, о котором я писал?

54 (изменено: Indomito, 2016-12-09 06:49:45)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher

В моём случае подстановка ahk_class <возвращаемый класс> не срабатывает.

Winget, List, List, ahk_class notepad.exe

Это только для блокнота, но не для LAII.

Я понял алгоритм, и он достаточно простой.

Шаг №1. В массив заносим процессы.

Winget, List, List, ahk_exe notepad.exe
loop % list
{

}


Шаг №2. В массив заносим окна.

SetTitleMatchMode, 3
WinGet, List, list,Безымянный — Блокнот
loop % list
{

}

Шаг №3. Процессы notepad.exe без окна Безымянный — Блокнот - убиваем

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

55 (изменено: Flasher, 2016-12-09 06:47:20)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito пишет:

В моём случае подстановка ahk_class <возвращаемый класс> не срабатывает.

Это условие выполнено?:

Flasher пишет:

С юникодным интерпретатором и .ahk в UTF-16

Речь идёт только об указанной мной правке, без ..title...

56 (изменено: Indomito, 2016-12-09 07:03:46)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher пишет:

Это условие выполнено?:

Да.

Flasher пишет:

С юникодным интерпретатором и .ahk в UTF-16

Нет, в NotePad++ только UTF-8.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

57

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito пишет:

Нет, в NotePad++ только UTF-8.

Это неправда (знаю, хоть и не пользуюсь). Впрочем, никто не отменял блокнот (Юникод - это UTF-16).

58

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher
У мне только это.

Post's attachments

1.png
1.png 10.13 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

59

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito
UCS-2 - то же самое.

60 (изменено: Indomito, 2016-12-09 07:39:21)

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher пишет:

UCS-2 - то же самое.

А какую оптимально использовать? Их там две.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

61

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Без разницы.

62

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher пишет:

Без разницы.

Спасибо.

Ещё вопросик..... сек напишу.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

63

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher
Что я не верно написал?

F1::
;DetectHiddenWindows On
;SetTitleMatchMode, 3
Winget, List, List, ahk_exe notepad.exe
loop % list
{
  WinGetTitle, this_title, % "ahk_id " list%A_Index%
  WinGetTitle, this_PID,   % "AHK_pid " list%A_Index%
  MsgBox %this_title% = %this_PID%
}
Return

F2::
exitapp

Или PID нельзя получить таким способом?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

64

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito
Неверно в отношении чего? PID как к делу относится? Имя процесса и PID - два поля ягоды.
WinGetTitle никак PID не возвращает. Это делается через WinGet, выше примеры приводились.
list%A_Index% в данном коде - это дескриптор окна, поэтому с AHK_pid оно никак не может рядом стоять.

65

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Indomito, у вас сам подход к поставленной задаче неверный.

for process in ComObjGet("winmgmts:").InstancesOf("Win32_Process where Name='notepad.exe'")
{
   Winget, List, List, % "ahk_pid " process.ProcessId
   loop % list
   {
      WinGetTitle, title, % "ahk_id " list%A_Index%
      if (title = "Asterios Phoenix")
         Continue 2
   }
   process.Terminate
}

66

Re: AHK: Есть HWND окна, надо определить PID соответствуещего процесса.

Flasher, Malcev и другие. Спасибо, я решил задачу свою.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download