Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

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

Posted on 2013-01-17
6
Medium Priority
?
1,137 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:Richard Kreidl
[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:Richard Kreidl
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 2000 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
NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

 
LVL 2

Author Closing Comment

by:Richard Kreidl
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:Richard Kreidl
ID: 38792299
Thanks again for all your help.
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

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 …
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …

636 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