![]() |
|
Модераторы: Akina |
![]()
|
|
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
кто- нибудь знает, как можно 2 файла, открытие с помощью ShellExecute, программно расположить на экране определенным образом?(например, чтобы 1-й файл занимал левую треть экрана, а второй- всю остальную часть?)
|
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
По идее - это возможно. Функция возвращает указатель на экземпляр приложения.
Вот по нему можно получить указатель на окно. И екго уже разместить. Но все это - по идее. -------------------- Я желаю всем Счастья! |
|||
|
||||
| ~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 10 Всего: 68 |
kb-nn
А может тебе Split нужен? |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
это как?
сплит вроде разбивает строки? при чем он тут? |
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
А еще, можно использовать FindWindow для получения окна.
-------------------- Я желаю всем Счастья! |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
а подробнее можно?
|
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
Ну тогда начнем с конца.
Чтобы задать размер/координаты окна, используется АПИ функция SetWindowPos:
Параметр, указывающий над каким окном производится действие - hwnd. Значит нам нужно получить этот hwnd. А тут возможны варианты. Напиши подробнее что и как ты запускаеш через ShellExecute. Это сообщение отредактировал(а) Naghual - 24.1.2005, 17:20 -------------------- Я желаю всем Счастья! |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
о! спасибо!
на первый взгляд- понятно. |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
слушайте,
я открываю файл с помощью ShellExecute. потом использую SetWindowPos с полученным дескриптором. и от функции SetWindowPos никакого эффекта. что обозначают параметры hWndInsertAfter, wFlags у функции SetWindowPos ? |
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
А дескриптор ты откуда получил? -------------------- Я желаю всем Счастья! |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
из ShellExecute
|
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
А это не дескриптор hWnd!
Это "... instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application". А проще - это указатель на приложение (или сообщение об ошибке). Вот основной вопрос: Как из указателя приложения, получить дескриптор его окна. -------------------- Я желаю всем Счастья! |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
ну хорошо
я пишу id=SelleExecute (...) myHWnd=FindWindow(0,id) SetWindowPos(myHWnd,0,0,0,400,500,1) и не работает |
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
Не правильно. Потому и не работает.
FindWindow ищет по заголовку окна, соответствующего классу (первый параметр). А вот как правильно - я пока не знаю. Буду думать. Это сообщение отредактировал(а) Naghual - 27.1.2005, 16:22 -------------------- Я желаю всем Счастья! |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
Запустили шелэкзекут, да?
Потом:
Вот: купи Программирование в Win32 API на Visual Basic Дена Эпплмана. 500 руб, зато большинство винапи знаешь! Это сообщение отредактировал(а) Run-time error - 2.2.2005, 15:20 |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
но он неизвестен, вот в чем вопрос!
Добавлено @ 15:33 известно только имя файла. Добавлено @ 15:34 кстати. спасибо за книжку. |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
По моему была какаято апи функция для получения hwnd по process handle. Завтра напишу сегодня нет времени
|
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
спасибо тебе
|
|||
|
||||
| __Sergey__ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 21.1.2005 Репутация: 4 Всего: 4 |
Для запуска процесса используй CreateProcess.
В возвращяемой структуре PROCESS_INFORMATION есть параметры, для ф-ции EnumThreadWindows. |
|||
|
||||
| Exception |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
Точно!
dwThreadId - идентификатор нити. Потом с помощью EnumThreadWindows получаем список окон этой проги(их hwnd) и setwinpos Описание EnumThreadWindows:
lpfn - callback определенный через AddressOf Ну вощем дальше поймёшь. ЗЫ Книжка зовётся "Win32 API и Visual Basic" Дена Эпплмана. Это сообщение отредактировал(а) Run-time error - 3.2.2005, 18:40 |
||||
|
|||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
что- то я ничего не понял.
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
Ты когда-нить AddressOf использовал?
Смотри! Объявляешь структуру PROCESS_INFORMATION, таскаешь из нее dwThreadId (идентификатор нити). То есть процесс запускаешь не через ShellExecute а чрез CreateProcess(описание в win32api.txt) ну и все структуры там же. Поищи в MSDN CreateProcess. Так вот потом создаёшь модуль с функцией типа EnumThreadWindowsProc. Параметры не помню, порою. Потом из кода вызываешь EnumThreadWindows с парам.: dwThreadId - ид. нити lpfn - пишешь прямо в вызове AddressOf EnumThreadWindowsProc lparam оставляй 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 Короче завтра покопаюсь напишу код |
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
Странно, но у меня не работает CreateProcess!
Т.е. функция завершается успешно и даже имеется коекакая информация о процессе. Но вот запущенного приложения нет. Ни в исполняемых программах ни в процессах. Как-бы и не запустилось вовсе оно. Возможно я делаю что-то не так... -------------------- Я желаю всем Счастья! |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
Не знаю что у тебя не так, смотри мои параметры.
Приведенный ниже код почти работает.ПОЧТИ. Трабл: при запуске управление передается другому процессу => не вызывается EnumThreadWindows. КСТАТИ: заметь, в объявлении КрэйтПроцесс я lpProcessAttributtes и lpThreadAttributes заменил типом Long и передаю 0. Код:
Подскажите, кто-нить, КАК ЗАПУСТИТЬ ПРОЦЕСС БЕЗ ПЕРЕДАЧИ УПРАВЛЕНИЯ. Это сообщение отредактировал(а) Run-time error - 5.2.2005, 22:26 |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
слушайте.
вроде бы работает. спасибо! но неправильно отсчитываются координаты. нельзя ли сделать так, чтобы они были абсолютными, а не относительно дочернего окна? |
|||
|
||||
| __Sergey__ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 21.1.2005 Репутация: 4 Всего: 4 |
Используй ф-ции преобразования координат, сейчас точно нескажу,
но примерно ClientToScreen and ScreenToClient |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
ничего не получается.
|
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
Пересчитывай новое положение учитывая положение родительского окна
-------------------- Я желаю всем Счастья! |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
Короче если выйдет перешли исходники мне на мыло pls. Всё равно считай отчасти это мои исходники
|
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
дело в том, что я не очекнь понял функцию ClientToScreen.
она берет координаты, и что дальше? а возвращает лишь успешен ли результат... я не понимаю... вы меня простите.... |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Возвращает (изменяет) в переданную тобой структуру POINT.
|
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
я делаю вот так
и при этом хочу, чтобы окно занимало две трети экрана |
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
pa2.x = 2 * ((Screen.Width / Screen.TwipsPerPixelX) / 3)
И не нужно никаких ClientToScreen Это сообщение отредактировал(а) Naghual - 15.2.2005, 14:37 -------------------- Я желаю всем Счастья! |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
не работает
|
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 26 Всего: 49 |
Ну так и ЧТО не работает?
-------------------- Я желаю всем Счастья! |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
ну не в том месте окно открывается.
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
А ты проверь Pointapi. Может данные изменились. Функция берет твои коорд. а в той же переменной возвр screen
|
|||
|
||||
| Гость___Sergey__ |
|
|||
|
Unregistered |
Когда я двигал оконца, то использовал вместо SetWindowPos,
MoveWindow. С ней получалось. |
|||
|
||||
| Exception |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
Простите 3ю страницу не заметил Добавлено @ 18:51
Вполне логично. В SetWPos есть парам. hwndInsertAfter а в moveWindow его нет. А нам он и не нужен |
||||
|
|||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
слушайте, простите, ну почему у меня не работает....
Option Explicit Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long 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 Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, _ ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint 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 Public Type POINTAPI x As Long y 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:\WINDOWS\EXPLORER.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 Dim pa1 As POINTAPI Dim pa2 As POINTAPI pa1.x = 0 pa1.y = 0 pa2.x = 2 * ((Screen.Width / Screen.TwipsPerPixelX) / 3) pa2.y = Screen.Height '/ Screen.TwipsPerPixelY MoveWindow hwnd, pa1.x, pa1.y, pa2.x, pa2.y, True End Function Добавлено @ 11:37 вот, лучше так. извиняюсь. для удобства чтения
|
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
хочу, чтобы окно занимало левые две трети экрана. (и левый верх был в левом верхнем углу)
|
|||
|
||||
| Guest |
|
||||
|
Unregistered |
Попробуй передать необходимые параметры окна
в STARTUPINFO, а потом CreateProcess. И я так подозреваю, не
а
|
||||
|
|||||
| Guest |
|
|||
|
Unregistered |
Или так
|
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
но окно открывается!
только не в том месте. и в ширину оно занимает не 2/3, а больше так?
увы, всё тоже самое.... |
|||
|
||||
| Гость___Sergey__ |
|
|||
|
Unregistered |
Вставь до вызова EnumThreadWindows
Sleep 1000, можеть меньше, может больше. Пробуй методом тыка. По моему окно не успевает создаться, а ты уже его энумить собрался |
|||
|
||||
| valex13 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 29.1.2003 Где: Иркук. область, г . Иркутск Репутация: 1 Всего: 1 |
Можно воспользоваться универсальной функцией поиска окна. Она описана в MSDN
Выкладываю:
А искать окно можно так:
Таким образом, ты можешь найти hWND обоих окон. В качестве параметра поиска окна по заголовку передай *FileName1 и *FileName2, а затем воспользуйся API функции для изменения размеров. Однако, для этого нужно знать размеры экрана. Расширение! |
||||
|
|||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
что- то я ничего не понимаю.
у меня вообще, как будто от функции MoveWindow толку не видно. что бы я ей не давал, она ничего не меняет... |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
Ну ты попробуй с разными hwnd, эйчвинд вэбэ попробуй...
Может и правда
|
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
что- то я не понял.
что значит с разными hwnd? |
|||
|
||||
| Гость_Run-time Error |
|
|||
|
Unregistered |
Ну может у тебя конкретно с этим окном не выходит
а с окном vb может выйти. тогда будешь знать, где ошибка |
|||
|
||||
| __Sergey__ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 21.1.2005 Репутация: 4 Всего: 4 |
Ну ты и растянул эту бадягу
Я уже пробовал. Вставь Sleep, как я выше писал и расслабся. Добавлено @ 16:01 Со Sleep все работает |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
со sleep у меня окно сворачивается через указанное время.
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 7 Всего: 186 |
__Sergey__,
kb-nn, просто сраыните друг с другом свой код и все |
|||
|
||||
| kb-nn |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 23.12.2003 Где: Нижний Новгород Репутация: нет Всего: 1 |
простите, я всё о своем, о наболевшем....
у меня начало работать, но SetWindowPos срабатывает не для всех файлов. (вручную для них размеры меняются и перемещаются без проблем) может у вас появится мысля- от чего это может зависеть?
|
|||
|
||||
![]()
|
| Правила форума "VB6" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB6 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |