Solved

Onscreen keyboard focus issues

Posted on 2004-10-05
8
448 Views
Last Modified: 2007-12-19
Hi

I have created an onscreen keyboard and

topmost = true
and i use the sendkeys.send(data) to send

but my program keeps setting focus back on the keyboard when pressed

how do I stop that from happening

Thanks
Adam
0
Comment
Question by:adam_pedley
  • 4
  • 3
8 Comments
 
LVL 18

Accepted Solution

by:
armoghan earned 500 total points
ID: 12225212
get the process ID of the other window and set it active
0
 
LVL 18

Expert Comment

by:armoghan
ID: 12225225
following links may help in getting the handle of the window and making focus on it
http://www.codeproject.com/csharp/windowhider.asp
http://www.error-bank.com/microsoft.public.dotnet.framework/71290_Thread.aspx
0
 
LVL 18

Expert Comment

by:armoghan
ID: 12225236
0
 
LVL 27

Expert Comment

by:planocz
ID: 12226716
Try this sample to catch key strokes before it gets to your keypress events....


  Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
        Const WM_KEYDOWN As Integer = &H100
        Const WM_SYSKEYDOWN As Integer = &H104
        Dim e As System.EventArgs

        If ((msg.Msg = WM_KEYDOWN) Or (msg.Msg = WM_SYSKEYDOWN)) Then
            Select Case (keyData)
                'The Number Key Pads, 10 key and regular 0-9 keys
            Case Keys.A
                    'DO SomeThing
                Case Keys.NumPad1, Keys.D1
                                   'DO SomeThing
                Case Keys.NumPad2, Keys.D2
                                   'DO SomeThing
                Case Keys.B
                                  'DO SomeThing
            End Select
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 4

Author Comment

by:adam_pedley
ID: 12233183
Public Class Keypad
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Private Declare Function GetForegroundWindow Lib "user32" () As Long
    Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
    Private first_time As Boolean = False
    Private This_App As Long
    Private last_app As Long

    'Enables light when caps lock button is pressed
    Private Sub Caps_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Caps.Click
        If lblCaps.BackColor.Equals(Color.Silver) Then
            lblCaps.BackColor = Color.LightGreen
        Else
            lblCaps.BackColor = Color.Silver
        End If
    End Sub

    Private Sub Keypad_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()
    End Sub

    'Detects a button is clicked and gives the value of the button pressed to the key press function (Only keys A-Z 0-9)
    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles A.Click, B.Click, C.Click, D.Click, E.Click, F.Click, G.Click, H.Click, I.Click, J.Click, K.Click, L.Click, M.Click, N.Click, O.Click, P.Click, Q.Click, R.Click, S.Click, T.Click, U.Click, V.Click, W.Click, X.Click, Y.Click, Z.Click, _0.Click, _1.Click, _2.Click, _3.Click, _4.Click, _5.Click, _6.Click, _7.Click, _8.Click, _9.Click, _Dot.Click
        Key_Press(sender.text)
    End Sub

    'Displays the key pressed on the screen
    Private Sub Key_Press(ByVal value As String)
        'Detects if caps lock is on, if so it converts the character to uppercase or lowercase
        If lblCaps.BackColor.Equals(Color.LightGreen) Then
            value = value.ToUpper()
        Else
            value = value.ToLower()
        End If
        'Displays the keypressed on the screen
        'txtText.Text = txtText.Text & value
        set_focus()
        SendKeys.Send(value)
    End Sub


    'Removes a character from the screen
    Private Sub BackSpace__Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BackSpace_.Click
        set_focus()
        SendKeys.Send(Chr(8))
    End Sub

    'Adds a space to the screen
    Private Sub Space_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Space.Click
        set_focus()
        SendKeys.Send(" ")
    End Sub

    'Creates a new line to the screen
    Private Sub Enter__Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Enter_.Click
        set_focus()
        SendKeys.Send(Chr(13))
    End Sub

    Public Sub set_focus()
        SetForegroundWindow(last_app)
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If first_time = False Then
            first_time = True
            This_App = GetForegroundWindow
        End If
        If This_App <> GetForegroundWindow Then
            last_app = GetForegroundWindow
        End If
    End Sub
End Class

Ok that is my code, I managed to work out the getforegroundwindow function, but my problem now, is that it requires a timer to keep detecting the current window and will switch focus back to the other one if the keypad is pressed. I have seen an example in Delphi (not .NET) that you can open a window with no_activate. This would be my preferred preference. I wouldnt have to have the timer and stupid holes in my code.

Does anyone know how to do this?
0
 
LVL 4

Author Comment

by:adam_pedley
ID: 12233687
I have found out some additional information on the no_activate which i will share here, hopefully someone will be able to figure the rest out

This URL has a few people explaining it slightly but no examples or anything
http://www.eggheadcafe.com/ng/microsoft.public.vb.winapi.graphics/post558542.asp

This URL shows a code example of calling a form and setting the no activate function
http://vbnet.mvps.org/index.html?code/forms/setlayeredwindowattributes.htm

Here is the MSDN link for it
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcemfc/htm/cwnd_192.asp

hope this helps in someway
0
 
LVL 4

Author Comment

by:adam_pedley
ID: 12234164
this question is obviously stumping people, i have never had a question open so long

I am upping the points to 1000 (i will open another 500 point question for the user to get the rest of the points once this is answered)
0
 
LVL 4

Author Comment

by:adam_pedley
ID: 12244916
Ok im going to repost the question with the new twist to it
0

Featured Post

Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

This article explains how to create and use a custom WaterMark textbox class.  The custom WaterMark textbox class allows you to set the WaterMark Background Color and WaterMark text at design time.   IMAGE OF WATERMARKS STEPS Create VB …
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This tutorial demonstrates a quick way of adding group price to multiple Magento products.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

759 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now