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
Solved

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

Posted on 2013-01-17
6
1,122 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
  • 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
Resolve Critical IT Incidents Fast

If your data, services or processes become compromised, your organization can suffer damage in just minutes and how fast you communicate during a major IT incident is everything. Learn how to immediately identify incidents & best practices to resolve them quickly and effectively.

 
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

How our DevOps Teams Maximize Uptime

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us. Read the use case whitepaper.

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…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

809 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