Позиция и размер окна windows explorer

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Позиция и размер окна windows explorer

Сообщение caa2000 » 11.03.2015 (Ср) 14:37

Здравствуйте.
windows explorer открывает окна размером и в позиции на момент последнего закрытия окна.
Нужно окрыть окно explorer-a в определённом месте на десктопе и определённого размера с помощью
Shell ("explorer.exe")
Есть ли какие-то системные переменные или параметры и как их изменить ?
Спасибо.
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Позиция и размер окна windows explorer

Сообщение ger_kar » 11.03.2015 (Ср) 17:21

Ну вообще, если бы передо мной стояла такая задача, то я бы решая её примерно так:
Нашел открытое через Shell ("explorer.exe") окно и получил его хендл.
Ну и далее просто отправил бы этому окну оконные сообщения на изменение положения и размера.

Может можно как то проще.
Бороться и искать, найти и перепрятать

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 11.03.2015 (Ср) 23:22

ger_kar,спасибо.А можно поподробнее - как отловить handle ?
Как отправить окну сообщение ?
Если не сложно - можно примерчик, пожалуйста. Или в каком направлении искать.
Последний раз редактировалось caa2000 12.03.2015 (Чт) 2:20, всего редактировалось 1 раз.
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 12.03.2015 (Чт) 1:56

Мне нужно открыть два окна так, чтобы они распологались рядом, не наезжая друг на друга.
Код: Выделить всё
Private Sub Form_Load()
Form1.Hide
Shell "explorer /select,C:", vbNormalNoFocus
Shell "explorer /select,C:", vbNormalNoFocus
End Sub

Накладывает их друг на друга.
Может есть ещё какие-то параметры Shell ?
Если узнать ID процесса, то что с ним можно делать ?
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Позиция и размер окна windows explorer

Сообщение Хакер » 12.03.2015 (Чт) 12:04

caa2000 писал(а):Shell "explorer /select,C:", vbNormalNoFocus

ОПЯТЬ ЧТО-ЛИ???

Только что, несколькими темами ниже обсуждалось:
viewtopic.php?f=1&t=4729

caa2000 писал(а):Если узнать ID процесса, то что с ним можно делать ?

Перечислить окна.

Только лучше всё это решать через Shell-интерфейсы, а не ковыряясь с хендлами.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Позиция и размер окна windows explorer

Сообщение ger_kar » 12.03.2015 (Чт) 16:07

Хакер писал(а):Только лучше всё это решать через Shell-интерфейсы, а не ковыряясь с хендлами.
Shell-интерфейсы это интерфейсы начинающиеся с IShell?
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Позиция и размер окна windows explorer

Сообщение Хакер » 12.03.2015 (Чт) 16:10

ger_kar писал(а):Shell-интерфейсы это интерфейсы начинающиеся с IShell?

Не обязательно. Просто относящиеся к Shell-у по своей природе.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 13.03.2015 (Пт) 9:56

Хакер писал(а):
caa2000 писал(а):Shell "explorer /select,C:", vbNormalNoFocus

ОПЯТЬ ЧТО-ЛИ???

Только что, несколькими темами ниже обсуждалось:
viewtopic.php?f=1&t=4729

Я смотрел ту тему, но вопрос в том,что
caa2000 писал(а):Мне нужно открыть два окна так, чтобы они распологались рядом, не наезжая друг на друга.

Смотрел Shell interfaces, но ничего не нашёл про размер и позицию открываемого окна.
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 13.03.2015 (Пт) 10:16

Нашёл что-то похожее, но на VB.NET
Код: Выделить всё
Код Visual Basic .NET

Imports System.Runtime.InteropServices

Public Class Form1

    <DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, _
     ByVal hWndInsertAfter As IntPtr, _
     ByVal X As Integer, _
     ByVal Y As Integer, _
     ByVal cx As Integer, _
     ByVal cy As Integer, _
     ByVal uFlags As UInteger) As Boolean
    End Function

    Const SWP_HIDEWINDOW = &H80
    Const SWP_SHOWWINDOW = &H40

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As IntPtr
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim HWND = FindWindow(vbNullString, "Выполнить")
        SetWindowPos(HWND, 0, 100, 100, 100, 100, SWP_SHOWWINDOW)
    End Sub

End Class

Может кто знает, как перевести это на VB6?
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Позиция и размер окна windows explorer

Сообщение Хакер » 13.03.2015 (Пт) 10:19

caa2000 писал(а):Смотрел Shell interfaces, но ничего не нашёл про размер и позицию открываемого окна.


Вызвать IOleWindow::GetWindow, и, получив хендл, двинуть окно куда угодно с помощью SetWindowPos.

Это работает, в отличие от способа с вызовом Shell(), потому что она возвращает PID процесса, но в случае с explorer /select это будет процесс, который умрёт сразу же после запуска, как описано в той теме, на которую я давал ссылку выше, — откуда следует, что PID полностью бесполезный.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Позиция и размер окна windows explorer

Сообщение Хакер » 13.03.2015 (Пт) 10:20

caa2000 писал(а):Может кто знает, как перевести это на VB6?

Ууу... как оказывается всё плохо... Т.е. ты нашёл некий код на VB.NET, в котором единственное полезное и релевантное для данного — это вызов функции SetWindowPos, и тебя уже радует этот огрызок кода и ты уже мечтаешь его перевести, при том, что не можешь сам?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.03.2015 (Пт) 11:56

caa2000 писал(а):Может кто знает, как перевести это на VB6?

Api Text Viewer...

Хакер писал(а):в котором единственное полезное и релевантное для данного

Ну это как посмотреть.
При желании сделать жирный костыль, можно найти окно проводника по имени папки в заголовке...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Позиция и размер окна windows explorer

Сообщение Хакер » 13.03.2015 (Пт) 12:57

Qwertiy писал(а):При желании сделать жирный костыль, можно найти окно проводника по имени папки в заголовке...

Как ты себе это представляешь?
В заголовке окна может быть, без преувеличения, что угодно, но в самом конце мы разбиваемся о тот факт, что может быть 10 окон с одинаковым заголовком, и только одно окно будет тем, в котором мы заинтересованы. Как отличить?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.03.2015 (Пт) 13:27

Хакер писал(а):может быть 10 окон с одинаковым заголовком, и только одно окно будет тем, в котором мы заинтересованы. Как отличить?

Фраза "сделать жирный костыль" как бы должна намекать, что так делать не стоит ;)
А фраза "при желании" - что извратиться всегда можно :D
Например, найти все окна с нужным заголовком, потом открыть новое, снова найти и выделить нужное из списка. Вероятность, что за время запуска появятся ещё несколько окон с тем же заголовком почти нулевая, а даже если появятся, то можно просто ничего не двигать.

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 13.03.2015 (Пт) 18:53

А как с помощью API получить hwnd окна, открытого Shell "explorer ,C:",vbNormalFocus ?
FindWindow не прокатывает т.к. у окна нет названия.GetActiveWindow - работает,но с предидущим окном.
Последний раз редактировалось caa2000 13.03.2015 (Пт) 18:56, всего редактировалось 1 раз.
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Позиция и размер окна windows explorer

Сообщение Хакер » 13.03.2015 (Пт) 18:55

caa2000 писал(а):А как с помощью API получить hwnd окна

Такое впечатление, что ты не читаешь, что тебе пишут.

Получать надо с помощью объектной модели Shell.

И да, не Shell "explorer ,C:", а Shell "explorer /select,C:"
И да, не Shell "explorer /select,C:", а Shell "explorer /select,C:\", потому что без обратного слеша item не будет выделен.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 13.03.2015 (Пт) 18:59

Мне не обязательно вылелять . мне нужно открыть окно в определённой позиции.
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.03.2015 (Пт) 19:43

Хакер, ты уже на explorer согласен? :shock: Хм.. Кажется понял, что ты имел в виду в ответе :)
Ты же говорил, что процесс завершится? Впрочем, я тут поэкспериментировал немного (запускал просто из консоли) и получилась какая-то фигня. Остаётся охапка мусорных процессов проводника, в смысле, остаётся даже после закрытия его окон. Точнее, через какое-то время после закрытия они исчезают, но не сразу (подозреваю, что проходит примерно полминуты). Почему??
Что касается завершающего слеша - у меня одинаково работает с ним и без него.
Английская Windows 7 Enterprise SP 1.
explorers.png

caa2000, а ты пишешь для себя или не только?
Может тебе отказаться от этой идеи с проводником, поставить Q-Dir, настроить его на запуск с двумя панелями (1+1) и запускать передавая 2 пути?
Кстати, назвал именно Q-Dir из-за того, что у него панели сделаны из вью проводника. А вообще, я есть более удобные файловые менеджеры.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Позиция и размер окна windows explorer

Сообщение Хакер » 13.03.2015 (Пт) 21:05

Qwertiy писал(а):Что касается завершающего слеша - у меня одинаково работает с ним и без него.
Английская Windows 7 Enterprise SP 1.


А у меня процессы мрут сразу, а завершающий слеш влияет на то, будет ли выделен диск в «Моём компьютере» или просто будет открыт «Мой компьютер».
Windows XP SP3, русская.

Qwertiy писал(а):Может тебе отказаться от этой идеи с проводником, поставить Q-Dir,

Тогда можно просто сделать форму, положить на неё два контрола WebBrowser, в обоих вызвать метод Navigate, указав нужные пути, и показывать экземпляр такой формы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.03.2015 (Пт) 22:48

Хакер писал(а):А у меня процессы мрут сразу

Проверил внимательнее. На этот раз на Windows 7 Профессиональная 64-bit SP1
Сначала:
1. 3апускается explorer с ключом select
2. Запускается explorer с ключом factory (тот, охапка которых на скриншоте)
3. Завершается explorer с ключом select
После закрытия окна
4. Проходит около 30 секунд
5. Завершается explorer с ключом factory
Посмотрел свойства папки - отмечен флажок Запускать окна с папками в отдельном процессе. Возможно, в семёрке изменили его дефаултное состояние.

Хакер писал(а):а завершающий слеш влияет на то, будет ли выделен диск в «Моём компьютере» или просто будет открыт «Мой компьютер»

Похоже, в семёрке поведение изменилось.

Хакер писал(а):Тогда можно просто сделать форму, положить на неё два контрола WebBrowser, в обоих вызвать метод Navigate, указав нужные пути, и показывать экземпляр такой формы.

Хм.. Да, я что-то про такой способ не подумал.
Только.. Вроде была проблема с открытием в нём окна Мой компьютер. По крайней мере, когда-то давно у меня так сделать не получилось - папка без проблем, а вот Мой компьютер - никак...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Позиция и размер окна windows explorer

Сообщение Хакер » 13.03.2015 (Пт) 22:49

Qwertiy писал(а):Мой компьютер - никак...

Надо использовать Navigate2 и передавать PIDL.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Позиция и размер окна windows explorer

Сообщение ALX_2002 » 05.04.2015 (Вс) 1:25

Как вариант:
Код: Выделить всё
Option Explicit
Private Sub Form_Load()
    Dim oExplorer As Object
    Set oExplorer = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
    With oExplorer
        'Двигаем окно эксплорера
        .Left = 200
        .Top = 200
        .Width = 600
        .Height = 500
        .Visible = True
        .Navigate "C:\Windows"
        'Дожидаемся окончания загрузки
        Do While .Busy
            DoEvents
        Loop
    End With
End Sub

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 16.04.2015 (Чт) 23:29

Здравсствуйте всем.
Извиняюсь,что не было долго на форуме.
Переезжал на другое место жительства :)
Спасибо за ответы,многое почерпнул для себя.
Пишу для себя - не нравятся мне commander-ы,а так перетащил (распаковал,скопировал,и т.д) из одного окна в другое-просто и удобно.
Taskbar внизу,Rocket Dock сверху,два или три окошка одинаковые в ряд-душа радуется :)
Надоело их передвигать и расширять(изменять)
Последний раз редактировалось caa2000 17.04.2015 (Пт) 0:35, всего редактировалось 1 раз.
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 16.04.2015 (Чт) 23:55

Аааа!!
ALX_2002 !! Спасибо !! Это то,что было нужно !!
Спасибо всем за предложенные решения.
ALX_2002 - respect !
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 17.04.2015 (Пт) 2:29

Ещё вопрос.
Как попасть в "My computer"?
.Navigate "(path)" откывает окно,указанное в (path) или ,если не правильный путь - открывает Library,интернет или ругается.
Пробовал менять в настройках Explorer-a путь с %SystemRoot%\explorer.exe на
%SystemRoot%\explorer.exe /root,::{20D04FE0-3AEA-1069-A2D8-08002B30309D} (My computer), всё равно открывает Library.
Как на VB указать путь,чтобы открылось окно My computer?
Или что изменить в реесте ?
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 17.04.2015 (Пт) 3:44

Ух...
Метод научного тыка оправдался.
Код: Выделить всё
    Option Explicit
    Private Sub Form_Load()
        Dim oExplorer As Object
        Set oExplorer = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
        With oExplorer
            'Двигаем окно эксплорера
            .Left = 200
            .Top = 200
            .Width = 600
            .Height = 500
            .Visible = True
            .Navigate "C:\Windows"_________.Navigate "\\"  Откывает окно  "My computer"________
            'Дожидаемся окончания загрузки
            Do While .Busy
                DoEvents
            Loop
        End With
    End Sub


Если кому интересно :-?
Итого получилось примерно так:
Код: Выделить всё
    Dim oExplorer As Object
    Dim WinCount As Integer
    Dim WinDown As Long
    Dim WinUp As Long
    Dim WinLeft As Long
    Dim WinWidth As Long
    Dim i As Integer
    Dim ScrHeight As Long
    Dim ScrWidth As Long

Private Sub Form_Load()
   
                 WinCount = 2 'Number of windows to open
                 WinUp = 70   'Offset from top
ScrHeight = Screen.Height / Screen.TwipsPerPixelX
ScrWidth = Screen.Width / Screen.TwipsPerPixelY
                 WinDown = ScrHeight - 100 'Offset from bottom
WinLeft = 0
WinWidth = ScrWidth / WinCount
   
For i = 1 To WinCount
        Set oExplorer = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
        With oExplorer
            .Left = WinLeft
            .Top = WinUp
            .Width = WinWidth
            .Height = WinDown
            .Visible = True
            .Navigate "\\"
            WinLeft = WinLeft + WinWidth
            Do While .Busy
                DoEvents
            Loop
        End With
Next
    End
End Sub


Дальше дело техники :)
Спасибо всем , кто помог.
ALX_2002 огромное спасибо!
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 19.04.2015 (Вс) 1:06

Ну... и если кому интересно :roll:
Код: Выделить всё
.Navigate "https://www.google.com"

Открывает окна в браузере.
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Позиция и размер окна windows explorer

Сообщение iGrok » 19.04.2015 (Вс) 1:08

А я успел, я успел! :mrgreen:

caa2000 писал(а):Открывает окна в интернете.

В мемориз, однозначно.
label:
cli
jmp label

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 19.04.2015 (Вс) 1:31

Только вместе с Explorer-ом в Libraries :shock:
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

caa2000
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 14.05.2009 (Чт) 4:50

Re: Позиция и размер окна windows explorer

Сообщение caa2000 » 19.04.2015 (Вс) 1:36

iGrok :lol:
Ладно, очепятка :D
В мемориз,так в мемориз :D Я согласен :D
Имеющий уши, да услышит.. (с) Новый Завет От Матфея святое благовествование

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 12

    TopList  
cron