Что нового

Определение дескрипторов процесса для Гаджетов Windows

mv6677

Новичок
Сообщения
105
Репутация
0
Есть в Windows7 такой инструмент - как "гаджет рабочего стола".
Это могут быть часы, фотозаставки и т.д.
Их открыто несколько.

Обычно у любых окон есть опознавательные знаки - Title, Class, Название процесса в диспетчере задач.
Три окна имеют одинаковый класс SideBar_HTMLHostWindow больше никаких опознавательных знаков у них нет.
Процесс называется Sidebar.exe

При помощи дескриптора рабочего процесса определил параметры представленные на скриншоте.

Как определить нужный $iPID, по этим данным - если данные всех трех гаджетов - одинаковы ?
 

Вложения

  • скриншот.jpg
    скриншот.jpg
    82.3 КБ · Просмотры: 11

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
У класса BasicWindow есть Title.
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
InnI , тогда как узнать этот Title ?

Почему, когда навожу на окно гаджета Windows - AutoitInfo - поле Title - остается пустым ?
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
"Наводить нужно на кнопки управления при отключённом режиме Freeze (Ctrl+Alt+F)."
Отключил режим Freeze в AutoitInfo (нажав Ctrl+Alt+F).
Все равно не показывает Title гаджетов.

Использовал ваш скрипт и получил вот такое окно.
(перечислено три окна - названия которых похожи друг на друга).
Как определить $iPID определенного окна - если все три окна называются одинаково ?
 

Вложения

  • скриншот -2.jpg
    скриншот -2.jpg
    42 КБ · Просмотры: 11
A

Alofa

Гость
mv6677 сказал(а):
... Как определить $iPID определенного окна...
Никак, у окна не может быть PID — process ID (идентификатор процесса).

mv6677 сказал(а):
... если все три окна называются одинаково ?
А их дескрипторы уникальны.
Используйте:
Код:
WinGetProcess()
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
Alofa, вы написали что следует использовать WinGetProcess()
Я прочитал справку по WinGetProcess().
Там написано - что WinGetProcess получает идентификатор процесса (Process ID, PID), связанного с указанным окном.

Но я уже писал в первом сообщении что у гаджета windows нет уникального названия окна.
Собственно с этим и был связан мой вопрос.

Три окна открытых гаджетов Windows - имеют одинаковый класс SideBar_HTMLHostWindow больше никаких опознавательных знаков у них нет.
Процесс у всех трех окон - одинаковый - называется Sidebar.exe, класс одинаковый, даже названия у них одинаковые - BasicWindow.

Как определить хоть какой-нибудь опознавательный знак, для этих трех окон (чтобы скрипт отличал одно окно от другого) - если данные всех трех гаджетов - одинаковы ?
 

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
mv6677
чтобы скрипт отличал одно окно от другого
Скрипт может отличать эти окна по дескриптору. Но если для вас это сложно, можете установить этим окнам собственные заголовки и различать их по этим заголовкам
Код:
#include <Array.au3>

; находим все окна с нужным заголовком
$aList = WinList("Показ слайдов")
; проверяем
_ArrayDisplay($aList)

; устанавливаем всем найденным окнам новые заголовки
For $i = 1 To $aList[0][0]
  WinSetTitle($aList[$i][1], "", "Win" & $i)
Next

; проверяем
_ArrayDisplay(WinList("[class:BasicWindow]"))
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
InnI, спасибо за содержательный ответ.
Буду разбираться.
 
Верх