Option Explicit
Private Const SW_SHOWNORMAL = 1
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type WINDOWPLACEMENT
length As Long
flags As Long
showCmd As Long
ptMinPosition As POINTAPI
ptMaxPosition As POINTAPI
rcNormalPosition As RECT
End Type
Private Declare Function GetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
Private Declare Function SetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
Private Sub Tut_Focus()
Dim hWndToActivate As Long
Dim currRect As RECT
Dim currWinP As WINDOWPLACEMENT
hWndToActivate = Form1.hwnd
currWinP.length = Len(currWinP)
Call GetWindowPlacement(hWndToActivate, currWinP)
currWinP.length = Len(currWinP)
currWinP.flags = 0&
currWinP.showCmd = SW_SHOWNORMAL
Call SetWindowPlacement(hWndToActivate, currWinP)
List1.SetFocus
End Sub
sosed213 писал(а):Ребята, получилось!!!!
sosed213 писал(а):Так и тут, этот "грязный способ", он работает, а лучше пока нету...
Кстати меня такие слова никогда не пугали, наоборот чем то всегда завораживали и притягивали, может потому, что моим первым языком был язык машинных кодов (даже не ассемблер) еще под 8080 процессор.VBTerminator писал(а):Хакер, зачем мучить человека страшными словами "отладка" и "ассемблер"?
Хакер писал(а):sosed213. Ты же нашёл способ с временным TOPMOST-ом. Полагаю, что и остальные «нарушители порядка» так делают.
Sub ShowWindow(hWnd As Long)
Dim WinP As WINDOWPLACEMENT
WinP.Length = Len(WinP)
Call GetWindowPlacement(hWnd, WinP)
WinP.Length = Len(WinP)
WinP.flags = 0&
WinP.showCmd = vbNormalFocus
Call SetWindowPlacement(hWnd, WinP)
End Sub
If Not (Me.WindowState = 0) Then Me.WindowState = 0
Me.Show
SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
Me.Show
SetWindowPos hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
ShowWindow(me.hwnd,SW_RESTORE)
Сейчас этот форум просматривают: Yandex-бот и гости: 66