Sendkeys komutu ile klavyede istediğimiz tuşun basılmasını sağlayabiliyoruz. Ancak sendkeys ile fare imlecini haraket ettiremiyor ve farenin butonlarına tıklatamıyoruz.
"mouse_event" ve "SetCursorPos" APIlerini kullanılarak fare imlecini istediğimiz noktaya taşıyabilir ve o noktada istediğimiz butona tıklatabiliriz. Bunu yaparken kullanıcının giriş yapmasını engellemek de mümkün (BlockInput). Aşağıdaki kodları boş bir forma bir command butonu ekleyip, formun kod penceresine yapıştırabilirsiniz. Bu kod örneği, yüksekliği 768 olan ekranda, başlat menüsüne gelinip başlata tıklanmasını sağlar.
Private Declare Sub Fare Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, _ ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) Private Declare Function ImlecPoz Lib "user32" Alias "SetCursorPos" (ByVal X As Integer, _ ByVal Y As Integer) As Integer Private Declare Function GirisiEngelle Lib "user32" Alias "BlockInput" (ByVal fBlock As _ Long) As Long Const SolTus_Tikla = &H2 Const SolTus_Birak = &H4 Const OrtaTus_Tikla = &H20 Const OrtaTus_Birak = &H40 Const SagTus_Tikla = &H8 Const SagTus_Birak = &H10 Private Sub CiftTikla() Fare SolTus_Tikla + SolTus_Birak, 0, 0, 0, 0 Fare SolTus_Tikla + SolTus_Birak, 0, 0, 0, 0 End Sub Private Sub TekTikla() Fare SolTus_Tikla + SolTus_Birak, 0, 0, 0, 0 End Sub Private Sub SagTikla() Fare SagTus_Tikla + SagTus_Birak, 0, 0, 0, 0 End Sub Private Sub Command1_Click() GirisiEngelle 1 'Girişi engelle ImlecPoz 40, 750 TekTikla GirisiEngelle 0 'Giris engelini kaldır End Sub
Burada GirisiEngelle fonksiyonu 1 değeri alınca kullanıcı tüm kontrolü kaybeder, klavye ve fare kilitlenir ve tüm denetim programa bırakılır. Bu yüzden program işini tamamladıktan sonra mutlaka GirisiEngele fonksiyonu, parametresi sıfıra ayarlanarak tekrar çağırılmalıdır.
Dikkat edilmesi gereken bir diğer nokta; her butonun tıklandıktan sonra bırakılmasının sağlanması gerekir. Bu yüzden her basıştan sonra "...Birak" sabitleri "...Tikla" sabitlerine eklenmelidir. Tıklama ve bırakmanın ayrı yapılması, sürükleme gibi bazı işlemlerin program denetiminde gerçekleştirilebilmesini sağlar.
çok makbule geçti ALLAH RAZI OLSUN
güzel bir paylaşım hocam :D kullanıcam
süper bişey elinize sağlık
64 bit için aşağıdaki değişiklikleri yaptım ama çalışmadı.
Sub or Function not defined hatası veriyor.
Private Declare PtrSafe Sub Fare Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, _
ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare PtrSafe Function ImlecPoz Lib "user32" Alias "SetCursorPos" (ByVal X As Integer, _
ByVal Y As Integer) As Integer
Private Declare PtrSafe Function GirisiEngelle Lib "user32" Alias "BlockInput" (ByVal fBlock As _
Long) As Long
Private Const SolTus_Tikla = &H2
Private Const SolTus_Birak = &H4
Private Const OrtaTus_Tikla = &H20
Private Const OrtaTus_Birak = &H40
Private Const SagTus_Tikla = &H8
Private Const SagTus_Birak = &H10
Birşey değiştirmenize gerek olmaması lazım. İsmi sizi yanıltmasın, 64 bitlik windowslardaki user32.dll aslında 64 bitlik derlenmiş.