Win API   zodpovězená otázka

VB.NET

Dobrý den, mám tenhle kód:

  Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, ByVal lpRect As Rect) As Long

a 

Private Sub cmbtnCil_Click(ByVal hWnd As Long)
        GetWindowRect(cmbtnCil.hWnd, tRect)

        With tRect
            tCil.x = (.Left + (.Right - .Left) / 2) * (65535 / Y)
            tCil.y = (.Top + (.Bottom - .Top) / 2) * (65535 / Y)
        End With
        mouse_event(MOUSEEVENTF_MOVE Or MOUSEEVENTF_ABSOLUTE, tCil.x, tCil.y, 0, GetMessageExtraInfo)
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo)
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, GetMessageExtraInfo)



    End Sub

Vím, že GetWindowRect(cmbtnCil.hWnd, tRect) je špatně, ale nevím proč.

Mohl byste mi někdo poradit?

Děkuji

Marcel

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím proč používáte tuto API funkci, když stejnou hodnotu získáte z vlastnosti Bounds. Dále máte špatný typ u hWnd, správně by to mělo být IntPtr. A nemáte deklarovanou strukturu Rect.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Príklad použitia tejto funkcie si môžte pozrieť v tomto článku. Dúfam, že to aspoň trošku pomôže.

http://www.vbnet.cz/clanek--94-skodorado...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji mockrát za odpovědi.Jinak celý kód vypadá takto:

Public Class Form1
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    Private Const SM_CXSCREEN = 0
    Private Const SM_CYSCREEN = 1
    Private Declare Function GetCursorPos Lib "user32" (ByVal lpPoint As POINTAPI) As Long
    Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, ByVal lpRect As Rect) As Long
    Private Declare Function GetMessageExtraInfo Lib "user32" () As Long


    Structure POINTAPI

        Dim x As Long
        Dim y As Long
    End Structure
    Structure Rect
        Dim Left As Long
        Dim Right As Long
        Dim Top As Long
        Dim Bottom As Long
    End Structure
    Public Structure IntPtr



    End Structure

    Private Const MOUSEEVENTF_ABSOLUTE = &H8000
    Private Const MOUSEEVENTF_LEFTDOWN = &H2
    Private Const MOUSEEVENTF_LEFTUP = &H4
    Private Const MOUSEEVENTF_MOVE = &H1
    Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
    Private Const MOUSEEVENTF_MIDDLEUP = &H40
    Private Const MOUSEEVENTF_RIGHTDOWN = &H8
    Private Const MOUSEIVENTF_RIGHTUP = &H10

    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)
    Dim tRect As Rect
    Dim tPoint As POINTAPI
    Dim X As Long
    Dim Y As Long
    Dim tCil As POINTAPI




    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        X = GetSystemMetrics(SM_CXSCREEN)
        Y = GetSystemMetrics(SM_CYSCREEN)




    End Sub

    Private Sub cmbtnCil_Click(ByVal hWnd As Long)




GetWindowRect(cmbtnCil., tRect)

        With tRect
            tCil.x = (.Left + (.Right - .Left) / 2) * (65535 / Y)
            tCil.y = (.Top + (.Bottom - .Top) / 2) * (65535 / Y)
        End With
        mouse_event(MOUSEEVENTF_MOVE Or MOUSEEVENTF_ABSOLUTE, tCil.x, tCil.y, 0, GetMessageExtraInfo)
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo)
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, GetMessageExtraInfo)



    End Sub
End Class

Chtěl bych se naučit používat API funkce, tak proto ty obstrukce.

Budu vděčný za další odpovědi.

Marcel

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Windows API má smysl použít jen v případě, že to nelze řešit prostředky .NETu. Pokud na to .NET má třídu nebo funkci, nemá smysl se s API patlat a použít již vestavěné řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji za upozornění. Jediné, na co opravdu nemohu přijít, je zjistit polohu a rozměry buttonu ve formuláři, aby jej mohl kurzor myši najít a kliknout na něj. Tímto způsobem, tedy přes API GetWindowRect, mi to nejde a nevím, kde dělám chybu. Pokud existuje nějaké přímé řešení, pak mi prosím pomozte.

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback