Valerik писал(а):И как сделать так чтобы с программы нельзя было убрать фокус, чтобы нельзя было передать фокус другим приложениям. Чтобы форма нетеряла Фокус !
Ennor писал(а):Valerik писал(а):И как сделать так чтобы с программы нельзя было убрать фокус, чтобы нельзя было передать фокус другим приложениям. Чтобы форма нетеряла Фокус !
Странно, зарегистрировался ты здесь ажно в 2002-м, а таких вещей до сих пор не знаешь. Твое намерение противоречит идеологии мультизадачной ОС, каковой является винда. Не позволит она тебе такого.
Ennor писал(а):В мастдае, к коему я отношу 9x/ME, можно и не такое сделать. Только вот... грамотный пользователь все равно такие навороты обойти сможет. А вот в винде (то есть NT) - уже вряд ли сделаешь, если только не начнешь напрямую патчить ntoskrnl.exe, hal.dll, etc. Три пальца еще никто не отменял.
.................
2 CodeMaster: сделать модальную форму ты можешь только в пределах одного процесса (т.е., своего). А вот запретить юзеру переключиться на десктоп через, например, Win+D - я такого пока не встречал. Минимизируется все, даже MsgBox'ы - сам проверь.
Ennor писал(а):2 CodeMaster: Я что-то не въеду: это форум по VB 6 или по асму? И как ты собираешься в нулевое кольцо залезать?..
Valerik писал(а):И как сделать так чтобы с программы нельзя было убрать фокус, чтобы нельзя было передать фокус другим приложениям. Чтобы форма нетеряла Фокус ! ?..
'В модуль
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_TAB = &H9
Public Const VK_MENU = &H12
Private Sub tmrTimer_Timer()
If GetAsyncKeyState(VK_MENU) And GetAsyncKeyState(VK_TAB) Then
'Делаешь что то страшное
End If
End Sub
Эх, вы парень с просьбой к вам.....а вы к нему жопой......ну так тоже не делается.....тема была создана для того, чтобы решить вопрос, а вы решаете свои собственные проблеммы.
'В модуль
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_TAB = &H9
Public Const VK_MENU = &H12
Код:
Private Sub tmrTimer_Timer()
If GetAsyncKeyState(VK_MENU) And GetAsyncKeyState(VK_TAB) Then
'Делаешь что то страшное
End If
End Sub
Memfivosfey писал(а):'В модуль
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_TAB = &H9
Public Const VK_MENU = &H12
Код:
Private Sub tmrTimer_Timer()
If GetAsyncKeyState(VK_MENU) And GetAsyncKeyState(VK_TAB) Then
'Делаешь что то страшное
End If
End Sub
А за это спасибо...
Ты вроде гуру, а по делу говорить не умеешь...Sebas писал(а):Memfivosfey писал(а):'В модуль
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_TAB = &H9
Public Const VK_MENU = &H12
Код:
Private Sub tmrTimer_Timer()
If GetAsyncKeyState(VK_MENU) And GetAsyncKeyState(VK_TAB) Then
'Делаешь что то страшное
End If
End Sub
А за это спасибо...
Не успеешь ты не фига(((
Option Explicit
Private Hooked As Boolean
Public Event MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Public Event MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Public Event MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Public Event KeyDown(KeyCode As Integer, Shift As Integer)
Public Event KeyUp(KeyCode As Integer, Shift As Integer)
Public Event SystemKeyDown(KeyCode As Integer)
Public Event SystemKeyUp(KeyCode As Integer)
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function GetAsyncKeyState% Lib "user32" (ByVal vKey As Long)
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MBUTTONUP = &H208
Private Const WM_MBUTTONDBLCLK = &H209
Private Const WM_MOUSEWHEEL = &H20A
Private Const WM_SYSTEMKEYDOWN = &H104
Private Const WM_SYSTEMKEYUP = &H105
Private Const WH_JOURNALRECORD = 0
Private Const WH_GETMESSAGE = 3
Private Type EVENTMSG
wMsg As Long
lParamLow As Long
lParamHigh As Long
msgTime As Long
hWndMsg As Long
End Type
Dim EMSG As EVENTMSG
Public Function SetHook() As Boolean
On Error Resume Next
If Hooked Then Exit Function
hJournalHook = SetWindowsHookEx(WH_JOURNALRECORD, AddressOf JournalRecordProc, App.hInstance, 0)
'If hAppHook = 0 Then hAppHook = SetWindowsHookEx(WH_GETMESSAGE, AddressOf AppHookProc, App.hInstance, App.ThreadID)
SetHook = True
Hooked = True
End Function
Public Sub RemoveHook()
'Dim x As Long
On Error Resume Next
'UnhookWindowsHookEx hAppHook
If Not Hooked Then Exit Sub
Call UnhookWindowsHookEx(hJournalHook)
Hooked = False
End Sub
'Private Sub Class_Initialize()
'On Error Resume Next
'SHptr = ObjPtr(Me)
'End Sub
Private Sub Class_Terminate()
On Error Resume Next
If Hooked Then RemoveHook
'If hJournalHook Or hAppHook Then RemoveHook
End Sub
Friend Function FireEvent(ByVal lParam As Long)
On Error Resume Next
Dim i%, j%, k%
Dim s As String
If lParam = WM_CANCELJOURNAL Then
hJournalHook = 0
SetHook
Exit Function
End If
CopyMemory EMSG, ByVal lParam, Len(EMSG)
Select Case EMSG.wMsg
Case WM_KEYDOWN
j = 0
If GetAsyncKeyState(vbKeyShift) Then j = (j Or 1) 'fixed by JJ
If GetAsyncKeyState(vbKeyControl) Then j = (j Or 2) 'fixed by JJ
If GetAsyncKeyState(vbKeyMenu) Then j = (j Or 4) 'fixed by JJ
s = Hex(EMSG.lParamLow)
k = (EMSG.lParamLow And &HFF)
RaiseEvent KeyDown(k, j)
Case WM_KEYUP
j = 0 'fixed by JJ
If GetAsyncKeyState(vbKeyShift) Then j = (j Or 1) 'fixed by JJ
If GetAsyncKeyState(vbKeyControl) Then j = (j Or 2) 'fixed by JJ
If GetAsyncKeyState(vbKeyMenu) Then j = (j Or 4) 'fixed by JJ
s = Hex(EMSG.lParamLow)
k = (EMSG.lParamLow And &HFF)
RaiseEvent KeyUp(k, j)
's = Left$(s, 2) & Right$("00" & Hex(k), 2) 'fixed by JJ
'EMSG.lParamLow = CLng("&h" & s)
'CopyMemory ByVal lParam, EMSG, Len(EMSG)
'Case WM_MOUSEMOVE
' i = 0 'fixed by JJ
' If GetAsyncKeyState(vbKeyLButton) Then i = (i Or 1) 'fixed by JJ
' If GetAsyncKeyState(vbKeyRButton) Then i = (i Or 2) 'fixed by JJ
' If GetAsyncKeyState(vbKeyMButton) Then i = (i Or 4) 'fixed by JJ
' j = 0 'fixed by JJ
' If GetAsyncKeyState(vbKeyShift) Then j = (j Or 1) 'fixed by JJ
' If GetAsyncKeyState(vbKeyControl) Then j = (j Or 2) 'fixed by JJ
' If GetAsyncKeyState(vbKeyMenu) Then j = (j Or 4) 'fixed by JJ
' RaiseEvent MouseMove(i, j, CSng(EMSG.lParamLow), CSng(EMSG.lParamHigh))
'Case WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN
' i = 0 'fixed by JJ
' If GetAsyncKeyState(vbKeyShift) Then i = (i Or 1) 'fixed by JJ
' If GetAsyncKeyState(vbKeyControl) Then i = (i Or 2) 'fixed by JJ
' If GetAsyncKeyState(vbKeyMenu) Then i = (i Or 4) 'fixed by JJ
' RaiseEvent MouseDown(2 ^ ((EMSG.wMsg - 513) / 3), i, CSng(EMSG.lParamLow), CSng(EMSG.lParamHigh))
'Case WM_LBUTTONUP, WM_RBUTTONUP, WM_MBUTTONUP
' i = 0 'fixed by JJ
' If GetAsyncKeyState(vbKeyShift) Then i = (i Or 1) 'fixed by JJ
' If GetAsyncKeyState(vbKeyControl) Then i = (i Or 2) 'fixed by JJ
' If GetAsyncKeyState(vbKeyMenu) Then i = (i Or 4) 'fixed by JJ
' RaiseEvent MouseUp(2 ^ ((EMSG.wMsg - 514) / 3), i, CSng(EMSG.lParamLow), CSng(EMSG.lParamHigh))
Case WM_SYSTEMKEYDOWN
s = Hex(EMSG.lParamLow)
k = (EMSG.lParamLow And &HFF)
If k <> vbKeyMenu Then RaiseEvent SystemKeyDown(k)
's = Left$(s, 2) & Right$("00" & Hex(k), 2) 'fixed by JJ
'EMSG.lParamLow = CLng("&h" & s)
'CopyMemory ByVal lParam, EMSG, Len(EMSG)
Case WM_SYSTEMKEYUP
s = Hex(EMSG.lParamLow)
k = (EMSG.lParamLow And &HFF)
If k <> vbKeyMenu Then RaiseEvent SystemKeyUp(k)
's = Left$(s, 2) & Right$("00" & Hex(k), 2) 'fixed by JJ
'EMSG.lParamLow = CLng("&h" & s)
'CopyMemory ByVal lParam, EMSG, Len(EMSG)
Case Else
'Debug.Print "Hook code = " & EMSG.wMsg
End Select
End Function
Option Explicit
Type POINTAPI
x As Long
y As Long
End Type
Type TMSG
hwnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes As Long)
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public hJournalHook As Long ', hAppHook As Long
'Public SHptr As Long
Public Const WM_CANCELJOURNAL = &H4B
Public Function JournalRecordProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next
If nCode < 0 Then
JournalRecordProc = CallNextHookEx(hJournalHook, nCode, wParam, ByVal lParam)
Exit Function
End If
Call CallNextHookEx(hJournalHook, nCode, wParam, ByVal lParam)
frmMain.SystemHook.FireEvent lParam
'ResolvePointer(SHptr).FireEvent lParam
End Function
'Public Function AppHookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'On Error Resume Next
' If nCode < 0 Then
' AppHookProc = CallNextHookEx(hAppHook, nCode, wParam, ByVal lParam)
' Exit Function
' End If
' Dim msg As TMSG
'
' CopyMemory msg, ByVal lParam, Len(msg)
' Select Case msg.message
' Case WM_CANCELJOURNAL
' If wParam = 1 Then ResolvePointer(SHptr).FireEvent WM_CANCELJOURNAL
' End Select
'
' Call CallNextHookEx(hAppHook, nCode, wParam, ByVal lParam)
'End Function
'Private Function ResolvePointer(ByVal lpObj&) As clsHook
'On Error Resume Next
' Dim oSH As clsHook
' CopyMemory oSH, lpObj, 4&
' Set ResolvePointer = oSH
' CopyMemory oSH, 0&, 4&
'End Function
Сейчас этот форум просматривают: AhrefsBot и гости: 22