Miten saan että ohjelma tekee jotain jos se huomaa että hiiren oikeanpuoleinen nappula on pohjassa, muualla kuin formissa?
GetAsyncKeyState-API lukee nimestään huolimatta myös hiirtä.
Blaze kirjoitti:
GetAsyncKeyState-API lukee nimestään huolimatta myös hiirtä.
Oho tuota en tiennyt minäkään :D
Vähän tarkemmin? Miten saan että:
Private Sub Nappula_Timer() If VK_LBUTTON = Pohjassa (vasen hiiren painike pohjassa) Then 'jotain else 'jotain end if end sub
Tietoa ko. funktiosta: http://msdn.microsoft.com/library/default.asp?
Näppäinkoodit: http://msdn.microsoft.com/library/default.asp?
(Gah, mitä osotteita -_-)
Käytännön käyttöesimerkkejä löytyy Putkastakin vaikka kuinka.
Miks toi hiiri menee aina samaa vauhtia alaspäin vaikka tota AMsetupin text1.textiä muuttais?
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Private Declare Sub mouse_event Lib "user32" _ (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, _ ByVal cButtons As Long, ByVal dwExtraInfo As Long) Private 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) Private Const MOUSEEVENTF_RIGHTDOWN = &H8 Private Const MOUSEEVENTF_RIGHTUP = &H10 Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long Private Const VK_ESCAPE = &H1B Private Const VK_LBUTTON = &H1 Private Const VK_RBUTTON = &H2 Private Type POINTAPI x As Long y As Long End Type Private Sub Form_click() Me.Hide Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&) Timer2.Enabled = True End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Timer1.Enabled = True End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) Timer1.Enabled = False End Sub Private Sub Form_Paint() SetTransparent Me.hWnd, 1 End Sub Sub SetTransparent(hWnd As Long, Transparent As Byte) Dim N As Long N = GetWindowLong(Me.hWnd, (-20)) Or &H80000 SetWindowLong hWnd, (-20), N SetLayeredWindowAttributes hWnd, 0, Transparent, &H2 End Sub Private Sub Form_Load() App.TaskVisible = False SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, 3 End Sub Private Sub Timer1_Timer() Dim kohta As POINTAPI, x As Long x = GetCursorPos(kohta) kohta.y = kohta.y + AMsetup.Text1.Text x = SetCursorPos(kohta.x, kohta.y) End Sub Private Sub Timer2_Timer() Timer2.Enabled = False Me.Show End Sub Private Sub Timer3_Timer() If (GetAsyncKeyState(VK_LBUTTON)) Then Timer1.Enabled = True Else Timer1.Enabled = False End If End Sub
Epäilys liikkuu vääränlaisten muuttujatyyppien yhdistämisestä. Kannattaa yleensä käyttää tiettyjä muuttujia tiukasti keskenään, esim. string on aivan eri asia kuin long. Joten:
kohta.y = kohta.y + CLng(Val(AMsetup.Text1.Text))
Aihe on jo aika vanha, joten et voi enää vastata siihen.