Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> программное размещение окон на экране 
:(
    Опции темы
kb-nn
Дата 2.2.2005, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



но он неизвестен, вот в чем вопрос!
Добавлено @ 15:33
известно только имя файла.
Добавлено @ 15:34
кстати. спасибо за книжку.

PM MAIL ICQ   Вверх
Exception
Дата 2.2.2005, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



По моему была какаято апи функция для получения hwnd по process handle. Завтра напишу сегодня нет времени smile
PM   Вверх
kb-nn
Дата 2.2.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



спасибо тебе
PM MAIL ICQ   Вверх
__Sergey__
Дата 3.2.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 21.1.2005

Репутация: 4
Всего: 4



Для запуска процесса используй CreateProcess.
В возвращяемой структуре PROCESS_INFORMATION есть параметры,
для ф-ции EnumThreadWindows.
PM MAIL   Вверх
Exception
Дата 3.2.2005, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



Точно!
Код

Public Type PROCESS_INFORMATION
       hProcess As Long
       hThread As Long
       dwProcessId As Long
       dwThreadId As Long
End Type

dwThreadId - идентификатор нити. Потом с помощью EnumThreadWindows получаем список окон этой проги(их hwnd) и setwinpos
Описание EnumThreadWindows:
Код

Public Declare Function EnumThreadWindows Lib "user32" Alias "EnumThreadWindows" (ByVal dwThreadId As Long, ByVal lpfn As Long, ByVal lParam As Long) As Long

lpfn - callback определенный через AddressOf
Ну вощем дальше поймёшь.
ЗЫ Книжка зовётся "Win32 API и Visual Basic" Дена Эпплмана.

Это сообщение отредактировал(а) Run-time error - 3.2.2005, 18:40
PM   Вверх
kb-nn
Дата 4.2.2005, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



что- то я ничего не понял.
PM MAIL ICQ   Вверх
Exception
Дата 4.2.2005, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



Ты когда-нить AddressOf использовал?
Смотри! Объявляешь структуру PROCESS_INFORMATION, таскаешь из нее dwThreadId (идентификатор нити). То есть процесс запускаешь не через ShellExecute а чрез CreateProcess(описание в win32api.txt) ну и все структуры там же. Поищи в MSDN CreateProcess. Так вот потом создаёшь модуль с функцией типа EnumThreadWindowsProc. Параметры не помню, порою. Потом из кода вызываешь EnumThreadWindows с парам.:
dwThreadId - ид. нити
lpfn - пишешь прямо в вызове AddressOf EnumThreadWindowsProc
lparam оставляй 0.
Например:
Код

EnumThreadWindows OurThreadId, AddressOf EnumThreadWindowsProc, 0

Для каждого окна этой нити( а у нас оно одно) Винды вызовут фнкцию EnumThreadWindowsProc написанною тобой.
В вызове тебе и передадут hwnd.
Вроде так:
Public Function EnumThreadWindowsProc(ByVal hwnd as long, Byval lparam as long) As Long
SetWindowPos(hwnd, и т.д....)
'Чтоб прервать перечисление возврати ноль.
EnumThreadWindowsProc = 0
end Function
Насчет описания ф-ции не уверен смотри MSDN.
Добавлено @ 21:09
Короче завтра покопаюсь напишу код smile
PM   Вверх
Naghual
Дата 4.2.2005, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Странно, но у меня не работает CreateProcess!
Т.е. функция завершается успешно и даже имеется коекакая информация о процессе. Но вот запущенного приложения нет. Ни в исполняемых программах ни в процессах. Как-бы и не запустилось вовсе оно.
Возможно я делаю что-то не так...



--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Exception
  Дата 5.2.2005, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



Не знаю что у тебя не так, смотри мои параметры.
Приведенный ниже код почти работает.ПОЧТИ.
Трабл: при запуске управление передается другому процессу => не вызывается EnumThreadWindows. КСТАТИ:
заметь, в объявлении КрэйтПроцесс я lpProcessAttributtes и lpThreadAttributes
заменил типом Long и передаю 0.
Код:
Код

Public Declare Function EnumThreadWindows Lib "user32" (ByVal dwThreadId As Long, ByVal lpfn As Long, ByVal lParam As _
Long) As Long

Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, _
ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal _
lpCommandLine As String, lpProcessAttributes As Long, lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal _
dwCreationFlags As Long, lpEnvironment As Long, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long

Public Type PROCESS_INFORMATION
       hProcess As Long
       hThread As Long
       dwProcessId As Long
       dwThreadId As Long
End Type

Public Type STARTUPINFO
       cb As Long
       lpReserved As String
       lpDesktop As String
       lpTitle As String
       dwX As Long
       dwY As Long
       dwXSize As Long
       dwYSize As Long
       dwXCountChars As Long
       dwYCountChars As Long
       dwFillAttribute As Long
       dwFlags As Long
       wShowWindow As Integer
       cbReserved2 As Integer
       lpReserved2 As Long
       hStdInput As Long
       hStdOutput As Long
       hStdError As Long
End Type

Sub Main()
Dim OurThread As Long 'Нить запущенного процесса
Dim retval As Long 'Возвращаемое значение
Dim si As STARTUPINFO, pi As PROCESS_INFORMATION 'Структуры
si.cb = Len(si)
Dim AppName As String 'Имя приложения
AppName = "C:\CALC.EXE"
retval = CreateProcess(AppName, vbNullString, ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&,
vbNullString, si, pi) 'Запускаем приложение
If retval = 0 Then Exit Sub 'Если произошла ошибка, выходим
EnumThreadWindows pi.dwThreadId, AddressOf EnumFunc, ByVal 0& 'Передаём указатель на EnumFunc Виндам
End Sub

Public Function EnumFunc(ByVal hwnd As Long, ByVal lParam As Long) As Long
SetWindowPos hwnd, 0, 0, 0, 1000, 1000, 0
End Function

Подскажите, кто-нить, КАК ЗАПУСТИТЬ ПРОЦЕСС БЕЗ ПЕРЕДАЧИ УПРАВЛЕНИЯ.

Это сообщение отредактировал(а) Run-time error - 5.2.2005, 22:26
PM   Вверх
kb-nn
Дата 7.2.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



слушайте.
вроде бы работает.
спасибо!
но неправильно отсчитываются координаты.
нельзя ли сделать так, чтобы они были абсолютными, а не относительно дочернего окна?
PM MAIL ICQ   Вверх
__Sergey__
Дата 7.2.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 21.1.2005

Репутация: 4
Всего: 4



Используй ф-ции преобразования координат, сейчас точно нескажу,
но примерно ClientToScreen and ScreenToClient

PM MAIL   Вверх
kb-nn
Дата 10.2.2005, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



ничего не получается.
PM MAIL ICQ   Вверх
Naghual
Дата 10.2.2005, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Пересчитывай новое положение учитывая положение родительского окна


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Exception
Дата 10.2.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



Короче если выйдет перешли исходники мне на мыло pls. Всё равно считай отчасти это мои исходники smile smile
PM   Вверх
kb-nn
Дата 14.2.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород

Репутация: нет
Всего: 1



дело в том, что я не очекнь понял функцию ClientToScreen.
она берет координаты, и что дальше?
а возвращает лишь успешен ли результат...
я не понимаю...




вы меня простите....

PM MAIL ICQ   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.