Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: 2 вопроса по окошкам Добавлено: 30.06.04 17:35  

Автор вопроса:  Grayich | Web-сайт: grayich.narod.ru | ICQ: 208280504 
1 Есть form1- поверх всех окон,полупрозрачная
   Как сделать так чтобы при наведении мыши на нее форма не принимала на себя клик, а клик происходил на объекте под находящемся под формой ??

2 Есть индификатор процеса например rc=shell ("calc",4)
   как по индификатору процеса узнать хендл главного окна ??

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 30.06.04 18:40
2. Главного - никак... ну точнее я не знаю :)
А вот перечислить их все, это вполне реально:

' Эта штука закрывает все окошки указанного приложения!
' (c) HomeWork 2003 (sne)

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long

Private Const WM_CLOSE As Long = &H10

Public Sub CloseByPID(ByVal target_pid As Long)
    Call EnumChildWindows(ByVal GetDesktopWindow, AddressOf ChildWindowProc, target_pid)
End Sub

Private Function ChildWindowProc(ByVal hWnd As Long, ByVal lpData As Long) As Long
    ;Dim pID As Long
    
    Call GetWindowThreadProcessId(hWnd, pID)
    If pID = lpData Then If GetParent(hWnd) = &H0 Then Call PostMessage(hWnd, WM_CLOSE, &H0, &H0)
    
    ChildWindowProc = True
End Function

Public Function AppRun(sFullPath As String, Optional WindowStyle As VbAppWinStyle = vbNormalFocus) As Long
    AppRun = Shell(sFullPath, vbNormalFocus)
End Function

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 30.06.04 19:08
1. Придумал два способа... один кривее другого %)

а) Можно не показывать форму, а всего-лишь рисовать ее на видимой части экрана... вот только для этого прийдется ставить глобальный хук на все окна в системе, и рисовать на АПИ соответствующие части твоего окна :)
При кликах вычислять координаты, и соответственно реагировать на них ;)

Это был жудкий способ, но он бы сработал :)

б) Можно установить на свое окно хук, как только ловим события MouseDown/MouseUp/MouseMove не отдаем их ни кому, даже старой оконной процедуре, а нагло зажимаем их и выходим из КаллБаэк функции до вызова CallWindowProc...
В то же время, посылаем SendMessage'ем сообщения присланные нажему окошку, тому, что находится под формой...

Вот... а теперь одна запарка :( я не знаю, как можно получит хандл не активного окна, находящегося под нашей формой :(
GetActiveWindows - не поможет...
GetWindowFromPoint - вернет свое окно...



Так что я предложил два варианта и оба не рабочих ;)
нужно вызывать гуру программирования... не иначе ;)

Единственное что могу предложить по второму варианту:
залочить обновление окна LockWindowUpdate, скрыть свою форму на время, с пом. GetWindowFromPoint получить окошко, опять появиться, разлочить перерисовку окна...
Т.о. можно получить hWnd окна под формой...

ЗЫ
Это все чисто теоретически возможно, как ты все это будешь проделывать на практике - я не знаю :)))
Искренне тебе сочувствую, если ты все выше написанное решишь реализовать ;)

Ответить

Номер ответа: 3
Автор ответа:
 TERMIT



ICQ: 5297101 

Вопросов: 16
Ответов: 93
 Web-сайт: xtec.ru
 Профиль | | #3
Добавлено: 30.06.04 20:46
sne, блин че с асей пишет не могу проверить базу данных...ну короче не работает...блин как же нам с тобой обг8оворить идею.............надо гдениб...в чате........напиши мне линк на чат если найдеш подходящи...:)

Ответить

Номер ответа: 4
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 30.06.04 21:29
можно найти меня на http://myrybinsk.ru/
или можно в PM на форуме: http://crts.ru

Ответить

Номер ответа: 5
Автор ответа:
 Grayich



ICQ: 208280504 

Вопросов: 56
Ответов: 164
 Web-сайт: grayich.narod.ru
 Профиль | | #5
Добавлено: 01.07.04 21:04
2 sne

мне надо захайдить запускаемое мной приложение и расхайдить, точнее окно приложения

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 01.07.04 21:22
впервый раз я лучше вопрос понеяло :) сейчас я запутался...

че за приложение, зачем его хайдить/анхайдить...
все что в голову пришло, то написал...

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 01.07.04 21:41
а, ты про второй вопрос...

ну что же, бери и используй заместо
Call PostMessage(hWnd, WM_CLOSE, &H0, &H0)
функцию
call ShowWindow(hWnd, SW_SHOW/SW_HIDE)

Ответить

Номер ответа: 8
Автор ответа:
 Grayich



ICQ: 208280504 

Вопросов: 56
Ответов: 164
 Web-сайт: grayich.narod.ru
 Профиль | | #8
Добавлено: 01.07.04 22:39
спасибо

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам