Как получить ID Explorer
От: AndrT  
Дата: 17.03.05 11:20
Оценка:
Всем привет.
Кто-нибудь знает, как можно получить id процесса explorer. Если быть точнее, то не именно explorer, а оболочки, активной сейчас (ведь оболочка может быть и другой).
Логичная идея — взять окно десктопа и по нему получить id его процесса. Но проблема — как получить окно десктопа. GetDesktopWindows возврвщает окно, родитель которого csrss.exe. Реальный десктоп оболочки (тот который мы видим на экране), является порожденным от указанного выше, но как его получить, я так и не смог придумать. Может кто что подскажет.
Re: Как получить ID Explorer
От: al Россия  
Дата: 17.03.05 13:57
Оценка:
Я думаю, чт стоит в Реестре посмотреть, кто именно является оботочкой? Какой именно ключ это определяет, я не знаю, но думаю что в MSDN это найти не составит труда. После этого надо преьбрать все процессы и найти explorer по эьтому имени файла. Правда со времен Windows 3.1 (чот-то типа Norton Desktop?) я не видал алтернативных оботочек Windows.


Re[2]: Как получить ID Explorer
От: rus blood Россия  
Дата: 17.03.05 14:07
Оценка:
Здравствуйте, al, Вы писали:

al>Я думаю, чт стоит в Реестре посмотреть, кто именно является оботочкой? Какой именно ключ это определяет, я не знаю, но думаю что в MSDN это найти не составит труда.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Shell"="Explorer.exe"


Для explorer-а иерархия окон всегда одна и та же.

  • "#32769" (GetDesktopWindow)
  • "Progman"
  • "SHELLDLL_DefView"
  • "SysListView32"

    SysListView32 можно найти сразу среди дочерних окна Progman.
  • Имею скафандр — готов путешествовать!
    Re[2]: Как получить ID Explorer
    От: Аноним  
    Дата: 17.03.05 14:21
    Оценка:
    Здравствуйте, al, Вы писали:

    al>Я думаю, чт стоит в Реестре посмотреть, кто именно является оботочкой? Какой именно ключ это определяет, я не знаю, но думаю что в MSDN это найти не составит труда. После этого надо преьбрать все процессы и найти explorer по эьтому имени файла.

    Где имеено это посмотреть я тоже не знаю, но этот вариант считаю менее предпочтительным. Дело в том что в WinXP может быть несколько explorer одновременно загружено (когда несколько пользователей залогинено одновременно). А мне нужен тот, который сейчас на дисплее виден. Поэтому я сразу и подумал получать id через окно, но....

    al>Правда со времен Windows 3.1 (чот-то типа Norton Desktop?) я не видал алтернативных оботочек Windows.

    Да сколько угодно. Для примера, самые распространенные это Aston и Talisman. Сам я такой ерундой не маюсь, но мало ли кто на чем повернут.

    Может еще какие предложения есть? Буду рад любым, так как сам уже вымучился, ничего не получается.
    Re[3]: Как получить ID Explorer
    От: AndrT  
    Дата: 17.03.05 14:28
    Оценка:
    Здравствуйте, rus blood, Вы писали:

    RB>
    RB>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
    RB>"Shell"="Explorer.exe"
    RB>

    Большое спасибо. Если не смогу найти другой способ, то прийдется воспользоваться этим.
    Почему этот способ мне не нравиться я описал ниже (это я там под анонимом написал, забыл залогинится).

    RB>Для explorer-а иерархия окон всегда одна и та же.

    RB> "#32769" (GetDesktopWindow)
    RB> "Progman"
    RB> "SHELLDLL_DefView"
    RB> "SysListView32"
    RB>SysListView32 можно найти сразу среди дочерних окна Progman.
    Это конечно хорошо, но если будет другая оболочка стоять, то и иерархия может быть другой.
    А нужно чтоб всегда работало.
    Re[3]: Как получить ID Explorer
    От: al Россия  
    Дата: 17.03.05 15:12
    Оценка:
    RB>Для explorer-а иерархия окон всегда одна и та же.

    Где то в MSDN я читал статейку от MS о том, что на имена классов окон следует завязываться в свмом крайнем случае (правдв это было сказано про IE), т.к. они не гарантируют их постоянство в разных версиях. Я конечно понимаю, что они десять раз подумают прежде чем это сделать, но все таки.


    Re[3]: Как получить ID Explorer
    От: al Россия  
    Дата: 17.03.05 15:26
    Оценка: 1 (1)
    Здравствуйте, Аноним, Вы писали:

    > Дело в том что в WinXP может быть несколько explorer одновременно загружено (когда несколько пользователей залогинено одновременно).


    Перебирайте окна текущего пользователя и смотрите какой процесс их создал


    Re[4]: Как получить ID Explorer
    От: AndrT  
    Дата: 18.03.05 14:48
    Оценка:
    Здравствуйте, al, Вы писали:

    al>Перебирайте окна текущего пользователя и смотрите какой процесс их создал


    Приблизительно так я и сделал.
    Спасибо всем за помощь.

    Если кому интересно, то алгоритм получился следующий:
    1. Получить из реестра имя процесса текущей оболочки ([HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell])
    2. Взять окно текущего десктопа (GetDesktopWindows)
    3. Пребирать все дочерние окна для десктопа
    4. Для каждого дочернего окна получить процесс, породивший его. Если этот процесс совпадает с тем, которое получено в (1), то это и есть процесс оболочки, т.е. то что искал.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.