Solved

How to use "SendKeys" with FindWindow with a DropDown control?

Posted on 2013-01-17
6
1,126 Views
Last Modified: 2013-01-18
I have an application that I'd like to automate the process in using FindWindow to SendKeys to a DropDown control to pick an item from the list in the dropdown.

The X & Y coordinates for the mouse are: 145, 200

Here is what I have so far...

Public Class Form1

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetActiveWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hWnd As Long) As Long


 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim myTest As Long
        myTest = FindWindow(Nothing, "CSS - New Search - Windows Internet Explorer")
        SetActiveWindow(myTest)
      '  SendKeys.Send  ???????
    End Sub


I attached two screen prints to show you the dropdown..
Initial-screen.JPG
DropDown---Personal-Name.jpg
0
Comment
Question by:rkckjk
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 9

Expert Comment

by:sognoct
ID: 38787297
can use mouse click

Private Declare Sub mouse_event Lib "user32.dll" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As IntPtr)

    Private Sub PerformMouseClick(ByVal LClick_RClick_DClick As String, ByVal x As Int32, ByVal y As Int32)
    Const MOUSEEVENTF_LEFTDOWN As Integer = 2
    Const MOUSEEVENTF_LEFTUP As Integer = 4
    Const MOUSEEVENTF_RIGHTDOWN As Integer = 6
    Const MOUSEEVENTF_RIGHTUP As Integer = 8
    If LClick_RClick_DClick = "RClick" Then
      mouse_event(MOUSEEVENTF_RIGHTDOWN, x, y, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_RIGHTUP, x, y, 0, IntPtr.Zero)
    ElseIf LClick_RClick_DClick = "LClick" Then
      mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, IntPtr.Zero)
    ElseIf LClick_RClick_DClick = "DClick" Then
      mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, IntPtr.Zero)
    End If
  End Sub

Open in new window


and use it with
  PerformMouseClick("LClick", x, y)
0
 
LVL 2

Author Comment

by:rkckjk
ID: 38787413
Not Working...

Here's what I got with your code and mine:

Public Class Form1
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetActiveWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hWnd As Long) As Long

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim myTest As Long
          myTest = FindWindow(Nothing, "CSS - New Search - Windows Internet Explorer")
        SetActiveWindow(myTest)
        PerformMouseClick("LClick", 145, 200)
    End Sub

    Private Declare Sub mouse_event Lib "user32.dll" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As IntPtr)

    Private Sub PerformMouseClick(ByVal LClick_RClick_DClick As String, ByVal x As Int32, ByVal y As Int32)
        Const MOUSEEVENTF_LEFTDOWN As Integer = 2
        Const MOUSEEVENTF_LEFTUP As Integer = 4
        Const MOUSEEVENTF_RIGHTDOWN As Integer = 6
        Const MOUSEEVENTF_RIGHTUP As Integer = 8
        If LClick_RClick_DClick = "RClick" Then
            mouse_event(MOUSEEVENTF_RIGHTDOWN, x, y, 0, IntPtr.Zero)
            mouse_event(MOUSEEVENTF_RIGHTUP, x, y, 0, IntPtr.Zero)
        ElseIf LClick_RClick_DClick = "LClick" Then
            mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, IntPtr.Zero)
            mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, IntPtr.Zero)
        ElseIf LClick_RClick_DClick = "DClick" Then
            mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, IntPtr.Zero)
            mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, IntPtr.Zero)
            mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, IntPtr.Zero)
            mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, IntPtr.Zero)
        End If
    End Sub
 End Class
0
 
LVL 9

Accepted Solution

by:
sognoct earned 500 total points
ID: 38792238
I had to study mouse_event, initially I though it was easier, but now it works (really funny function)

Private Sub PerformMouseClick(ByVal Operation As String, ByVal x As Int32, ByVal y As Int32)
    Const MOUSEEVENTF_MOVE As Integer = 1
    Const MOUSEEVENTF_LEFTDOWN As Integer = 2
    Const MOUSEEVENTF_LEFTUP As Integer = 4
    Const MOUSEEVENTF_RIGHTDOWN As Integer = 6
    Const MOUSEEVENTF_RIGHTUP As Integer = 8
    Const MOUSEEVENTF_ABSOLUTE As Integer = &H8000
    Dim OnePixelX As Double
    Dim OnePixelY As Double
    Dim xX, yY As Int32
    OnePixelX = 65535 / (Screen.PrimaryScreen.Bounds.Width)
    OnePixelY = 65535 / (Screen.PrimaryScreen.Bounds.Height)
    xX = CInt(Math.Ceiling(OnePixelX * CDbl(x)))
    yY = CInt(Math.Ceiling(OnePixelY * CDbl(y)))

    If Operation = "position" Then
      mouse_event(MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, xX, yY, 0, IntPtr.Zero)
    ElseIf Operation = "Move" Then
      mouse_event(MOUSEEVENTF_MOVE, x, y, 0, IntPtr.Zero)
    ElseIf Operation = "RClick" Then
      mouse_event(MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, xX, yY, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, IntPtr.Zero)
    ElseIf Operation = "LClick" Then
      mouse_event(MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, xX, yY, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, IntPtr.Zero)
    ElseIf Operation = "DClick" Then
      mouse_event(MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, xX, yY, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, IntPtr.Zero)
      mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, IntPtr.Zero)
    End If
  End Sub

Open in new window

0
Forrester Webinar: xMatters Delivers 261% ROI

Guest speaker Dean Davison, Forrester Principal Consultant, explains how a Fortune 500 communication company using xMatters found these results: Achieved a 261% ROI, Experienced $753,280 in net present value benefits over 3 years and Reduced MTTR by 91% for tier 1 incidents.

 
LVL 2

Author Closing Comment

by:rkckjk
ID: 38792263
Thanks!!!! Quick Question could I use the same routine: PerformMouseClick for events on Right click mouse???
0
 
LVL 9

Expert Comment

by:sognoct
ID: 38792287
yes ... I implemented right , left and double click
0
 
LVL 2

Author Comment

by:rkckjk
ID: 38792299
Thanks again for all your help.
0

Featured Post

The Orion Papers

Are you interested in becoming an AWS Certified Solutions Architect?

Discover a new interactive way of training for the exam.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It’s quite interesting for me as I worked with Excel using vb.net for some time. Here are some topics which I know want to share with others whom this might help. First of all if you are working with Excel then you need to Download the Following …
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
In this video, viewers will be given step by step instructions on adjusting mouse, pointer and cursor visibility in Microsoft Windows 10. The video seeks to educate those who are struggling with the new Windows 10 Graphical User Interface. Change Cu…
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…

688 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question