Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Узнать запущена ли игра на компьютере ...

Ответить
Настройки темы
[решено] Узнать запущена ли игра на компьютере ...

Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Как мне с помощью AutoIt узнать запущена ли на компьютере (2D, 3D) игра ? (я подозреваю нужно обратиться к библиотеке DX9-10...)

Пасибо за внимание .

Отправлено: 00:49, 25-05-2009

 

Аватара для Yashied

Старожил


Сообщения: 206
Благодарности: 88

Профиль | Отправить PM | Цитировать


Как это сделать по "человечески" я не знаю, но вот тебе функция, которую я написал только что. Она возвращает 1, если приложение запущено в полноэкранном режиме (не максимизированно), в противном случае - 0. Только что проверил на F.E.A.R. 2 и S.T.A.L.K.E.R. Clear Sky в разных разрешениях. Работает.



Код: Выделить весь код
Func _IsFullScreen()

    Local $hWnd = DllCall('user32.dll', 'hwnd', 'GetForegroundWindow')

    $hWnd = $hWnd[0]

    If (@error) Or ($hWnd = 0) Then
        Return SetError(1, 0, -1)
    EndIf

    If (StringInStr(WinGetClassList($hWnd), 'SHELLDLL_DefView') = 0) And (BitAND(WinGetState($hWnd), 2) = 2) And (_WinAPI_GetClientWidth($hWnd) = @DesktopWidth) And (_WinAPI_GetClientHeight($hWnd) = @DesktopHeight) Then
        Return 1
    EndIf
    Return 0
EndFunc   ;==>_IsFullScreen
Немножко поправил.

Последний раз редактировалось Yashied, 25-05-2009 в 01:16.

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:00, 25-05-2009 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Огооо вот это я понимаю ПО человечески - работает!!! +1
Решение по виду простое но WinAPI я незнаю совсем

Отправлено: 01:27, 25-05-2009 | #3


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Yashied, а можно еще как нибудь сделать чтобы скрипт все время висел в памяти, отслеживал и когда запускается игра принудительно выключал ее?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 19:46, 25-05-2009 | #4


Аватара для Yashied

Старожил


Сообщения: 206
Благодарности: 88

Профиль | Отправить PM | Цитировать


Цитата Pozia:
Yashied, а можно еще как нибудь сделать чтобы скрипт все время висел в памяти, отслеживал и когда запускается игра принудительно выключал ее? »
Я думаю, что в этом случае проще в цикле отслеживать появление определенного процесса и при появлении такового предпринять какие-либо действия. Моя функция не определяет наличие запущенной игры, а просто проверяет в полноэкранном или нет режиме работает текущее приложение. Это так же относится и к Windows Media Player, запущенном в полноэкранном режиме (хотя не проверял).

Отправлено: 11:05, 26-05-2009 | #5


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Yashied, не. хотелось бы рубить все полноэкранные процессы. Можно в принципе задать список исключений. Можете такое реализовать? Сам профан в этом деле.

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 18:14, 26-05-2009 | #6


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Так чтоль ?

Код: Выделить весь код
#include <WinAPI.au3>

$DiRT = "DiRT.exe" ; Если запущена игра DIRT - то отрубаем её.

While 1
    If _IsFullScreen() = 1 Then
        Sleep(3000)
        If ProcessExists($DiRT) Then ProcessClose($DiRT)
    EndIf
WEnd

Func _IsFullScreen()

    Local $hWnd = DllCall('user32.dll', 'hwnd', 'GetForegroundWindow')
    $hWnd = $hWnd[0]

    If (@error) Or ($hWnd = 0) Then
        Return SetError(1, 0, -1)
    EndIf

    If (StringInStr(WinGetClassList($hWnd), 'SHELLDLL_DefView') = 0) And (BitAND(WinGetState($hWnd), 2) = 2) And (_WinAPI_GetClientWidth($hWnd) = @DesktopWidth) And (_WinAPI_GetClientHeight($hWnd) = @DesktopHeight) Then
        Return 1
    EndIf
    Return 0
EndFunc

Отправлено: 02:21, 27-05-2009 | #7


Аватара для Yashied

Старожил


Сообщения: 206
Благодарности: 88

Профиль | Отправить PM | Цитировать


Цитата FlatX007:
Так чтоль ? »
Да, FlatX007 прав, но только здесь совершенно нет необходимости использовать _IsFullScreen(). Вообще, я бы не рекомендовал таким радикальным способом закрывать игру (довольно сложное приложение). Что, если в этот момент происходит запись на диск или в реестр. Может быть лучше просто заблокировать основные клавиши, присущее данной игре или мышь. Можно попробывать WinClose(), правда я не уверен, что это сработает. Я думаю, лучший способ для блокировки игры - изменить права доступа в самой Windows.

Отправлено: 11:38, 27-05-2009 | #8


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


FlatX007, так как у вас не интересно. По чем я знаю какие юзер решит игры поставить? Лучше чтобы скрипт все рубил, за исключением заданных мною прог

Отправлено: 19:46, 27-05-2009 | #9


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


А, что обратные исключения трудно задать ? ... темже самым способом. Я ради примера ...

Отправлено: 19:11, 28-05-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Узнать запущена ли игра на компьютере ...

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
узнать что делали в твоём компьютере в твоё отсутствие? Terry Хочу все знать 5 25-01-2010 15:21
Службы - [решено] Сеть отсутствует или не запущена mti_ Microsoft Windows 2000/XP 2 22-05-2009 17:40
Использование - [решено] На конечном компьютере не запущена служба учета лицензий SilentGeorge Лицензирование продуктов Microsoft 5 12-05-2009 08:09
Интерфейс - [решено] Сеть отсутствует или не запущена trager Microsoft Windows 2000/XP 5 24-04-2009 23:04
Ошибка - [решено] Свойства учетной записи: ошибка "Служба рабочей станции не запущена" zeroua Microsoft Windows 2000/XP 6 13-03-2009 13:56




 
Переход