Автор вопроса: Grayich | Web-сайт:grayich.narod.ru | ICQ: 208280504
1 Есть form1- поверх всех окон,полупрозрачная
Как сделать так чтобы при наведении мыши на нее форма не принимала на себя клик, а клик происходил на объекте под находящемся под формой ??
2 Есть индификатор процеса например rc=shell ("calc",4)
как по индификатору процеса узнать хендл главного окна ??
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
 im 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
а) Можно не показывать форму, а всего-лишь рисовать ее на видимой части экрана... вот только для этого прийдется ставить глобальный хук на все окна в системе, и рисовать на АПИ соответствующие части твоего окна
При кликах вычислять координаты, и соответственно реагировать на них
Это был жудкий способ, но он бы сработал
б) Можно установить на свое окно хук, как только ловим события MouseDown/MouseUp/MouseMove не отдаем их ни кому, даже старой оконной процедуре, а нагло зажимаем их и выходим из КаллБаэк функции до вызова CallWindowProc...
В то же время, посылаем SendMessage'ем сообщения присланные нажему окошку, тому, что находится под формой...
Вот... а теперь одна запарка я не знаю, как можно получит хандл не активного окна, находящегося под нашей формой
GetActiveWindows - не поможет...
GetWindowFromPoint - вернет свое окно...
Так что я предложил два варианта и оба не рабочих
нужно вызывать гуру программирования... не иначе
Единственное что могу предложить по второму варианту:
залочить обновление окна LockWindowUpdate, скрыть свою форму на время, с пом. GetWindowFromPoint получить окошко, опять появиться, разлочить перерисовку окна...
Т.о. можно получить hWnd окна под формой...
ЗЫ
Это все чисто теоретически возможно, как ты все это будешь проделывать на практике - я не знаю ))
Искренне тебе сочувствую, если ты все выше написанное решишь реализовать
sne, блин че с асей пишет не могу проверить базу данных...ну короче не работает...блин как же нам с тобой обг8оворить идею.............надо гдениб...в чате........напиши мне линк на чат если найдеш подходящи...