Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. windows not in focus

windows not in focus

Scheduled Pinned Locked Moved C#
questiontutorial
32 Posts 8 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M michaelgr1

    Hello, I have a textbox in my window application. I want to be able to write into the textbox even if the application window not in focus (not "first" on the screen). How can i do it? If i need to use events for it , i don't know exacly how to write an event and where to put each code piece (the event handler etc.)

    D Offline
    D Offline
    dan sh
    wrote on last edited by
    #2

    Sounds like a weird requirement. Don't you think it will be weird for the users? I mean you type in something on a form and it is shown at a very different location.

    50-50-90 rule: Anytime I have a 50-50 chance of getting something right, there's a 90% probability I'll get it wrong...!!

    1 Reply Last reply
    0
    • M michaelgr1

      Hello, I have a textbox in my window application. I want to be able to write into the textbox even if the application window not in focus (not "first" on the screen). How can i do it? If i need to use events for it , i don't know exacly how to write an event and where to put each code piece (the event handler etc.)

      OriginalGriffO Offline
      OriginalGriffO Offline
      OriginalGriff
      wrote on last edited by
      #3

      I am trying to understand what you want to achieve. Is it: "I have a windows app which contains a textbox. Even if the windows app does not have the focus, but Notepad does, I want user input to go into my textbox" or "I have a windows app which contains a textbox. Even if the windows app does not have the focus, but Notepad does, I want my app to be able to insert text into my textbox" The former is not normal at all - and I don't think it can be done. The latter happens without any work at all. If these do not describe what your problem is, then please try to restate it and we'll see what we can do.

      All those who believe in psycho kinesis, raise my hand.

      "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
      "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

      M 1 Reply Last reply
      0
      • OriginalGriffO OriginalGriff

        I am trying to understand what you want to achieve. Is it: "I have a windows app which contains a textbox. Even if the windows app does not have the focus, but Notepad does, I want user input to go into my textbox" or "I have a windows app which contains a textbox. Even if the windows app does not have the focus, but Notepad does, I want my app to be able to insert text into my textbox" The former is not normal at all - and I don't think it can be done. The latter happens without any work at all. If these do not describe what your problem is, then please try to restate it and we'll see what we can do.

        All those who believe in psycho kinesis, raise my hand.

        M Offline
        M Offline
        michaelgr1
        wrote on last edited by
        #4

        The purpose of it is that i want the program will read data from a barcode reader and then display it on the textbox, even if the window is not it focus

        OriginalGriffO 1 Reply Last reply
        0
        • M michaelgr1

          The purpose of it is that i want the program will read data from a barcode reader and then display it on the textbox, even if the window is not it focus

          OriginalGriffO Offline
          OriginalGriffO Offline
          OriginalGriff
          wrote on last edited by
          #5

          If the barcode reader emulates a keyboard, then you can't - at least not without hooking into the OS and diverting every keystroke to your app, which may annoy the user, and probably not work in anything with a virus scanner running! How does your BC reader work? Does it have a serial or USB interface that does not emulate a keyboard?

          All those who believe in psycho kinesis, raise my hand.

          "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
          "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

          M 1 Reply Last reply
          0
          • OriginalGriffO OriginalGriff

            If the barcode reader emulates a keyboard, then you can't - at least not without hooking into the OS and diverting every keystroke to your app, which may annoy the user, and probably not work in anything with a virus scanner running! How does your BC reader work? Does it have a serial or USB interface that does not emulate a keyboard?

            All those who believe in psycho kinesis, raise my hand.

            M Offline
            M Offline
            michaelgr1
            wrote on last edited by
            #6

            Yes, It works as keyboard amulator...

            OriginalGriffO M 2 Replies Last reply
            0
            • M michaelgr1

              Yes, It works as keyboard amulator...

              OriginalGriffO Offline
              OriginalGriffO Offline
              OriginalGriff
              wrote on last edited by
              #7

              Then you have a problem. all the Keyboard emulating BCRs I have seen read teh BC and just provide a datastream as if the barcode data had been typed by the user. For example, if the BC was 092939201610 then the BCR fakes teh keyboard keystrokes for '0' down, '0 up, '9' down, '9' up, etc. There is no way to tell if the real KB or the BCR provided the data, so would have to feed all keyboard data to your progam. As a user this would: 1) be very annoying and 2) look like a memory resident key logger. Your best bet is to talk to the manufacturer and see if they have done similar before.

              All those who believe in psycho kinesis, raise my hand.

              "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
              "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

              H 1 Reply Last reply
              0
              • OriginalGriffO OriginalGriff

                Then you have a problem. all the Keyboard emulating BCRs I have seen read teh BC and just provide a datastream as if the barcode data had been typed by the user. For example, if the BC was 092939201610 then the BCR fakes teh keyboard keystrokes for '0' down, '0 up, '9' down, '9' up, etc. There is no way to tell if the real KB or the BCR provided the data, so would have to feed all keyboard data to your progam. As a user this would: 1) be very annoying and 2) look like a memory resident key logger. Your best bet is to talk to the manufacturer and see if they have done similar before.

                All those who believe in psycho kinesis, raise my hand.

                H Offline
                H Offline
                Heinzzy
                wrote on last edited by
                #8

                OriginalGriff wrote:

                Then you have a problem. all the Keyboard emulating BCRs I have seen read teh BC and just provide a datastream as if the barcode data had been typed by the user.

                I feel it's all ok. User such as a cashier isn't supposed to use a keyboard very often. So we can redirect BC stream to the textbox. In the textbox handler we can validate BC/user input. For example - user always start typing session with "A" char, else it's BC's chars.

                1 Reply Last reply
                0
                • M michaelgr1

                  Yes, It works as keyboard amulator...

                  M Offline
                  M Offline
                  MickCurley
                  wrote on last edited by
                  #9

                  I can understand if you are developing a POS system you may want this input to be directed to the textbox. You could always try setting the KeyPreview to True on the Form. Then on the KeyPress you could try

                      private void YourForm\_KeyPress(object sender, KeyPressEventArgs e)
                      {
                          ScannerFirstKeyValue = e.KeyChar.ToString();
                  
                          if (this.ActiveControl != this.YourTextBox)
                          {
                              YourTextBox.AppendText(ScannerFirstKeyValue);
                          }
                          this.ActiveControl = YourTextBox;
                      }
                  

                  This would ensure all input is placed in correct textbox. Remember if you have multiple textboxes this will be a problem!! Unless the BC Reader has some sort of prefix that can distinguish it from a keyboard.

                  Regards Mick Curley :)

                  L 1 Reply Last reply
                  0
                  • M MickCurley

                    I can understand if you are developing a POS system you may want this input to be directed to the textbox. You could always try setting the KeyPreview to True on the Form. Then on the KeyPress you could try

                        private void YourForm\_KeyPress(object sender, KeyPressEventArgs e)
                        {
                            ScannerFirstKeyValue = e.KeyChar.ToString();
                    
                            if (this.ActiveControl != this.YourTextBox)
                            {
                                YourTextBox.AppendText(ScannerFirstKeyValue);
                            }
                            this.ActiveControl = YourTextBox;
                        }
                    

                    This would ensure all input is placed in correct textbox. Remember if you have multiple textboxes this will be a problem!! Unless the BC Reader has some sort of prefix that can distinguish it from a keyboard.

                    Regards Mick Curley :)

                    L Offline
                    L Offline
                    Luc Pattyn
                    wrote on last edited by
                    #10

                    doesn't that prevent people from typing anything in any other Control? :)

                    Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                    I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


                    H M 2 Replies Last reply
                    0
                    • L Luc Pattyn

                      doesn't that prevent people from typing anything in any other Control? :)

                      Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                      I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


                      H Offline
                      H Offline
                      Heinzzy
                      wrote on last edited by
                      #11

                      But we still can distinguish BC from user by using prefixes. What do you think?

                      1 Reply Last reply
                      0
                      • L Luc Pattyn

                        doesn't that prevent people from typing anything in any other Control? :)

                        Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                        I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


                        M Offline
                        M Offline
                        michaelgr1
                        wrote on last edited by
                        #12

                        Hi, I need this thing only to read data from barcode reader. Is there a way so only data from it (COM1 port for example) will be insereted to that textbox or the clipboard even if the application is not in focus (in background)?

                        H 1 Reply Last reply
                        0
                        • M michaelgr1

                          Hello, I have a textbox in my window application. I want to be able to write into the textbox even if the application window not in focus (not "first" on the screen). How can i do it? If i need to use events for it , i don't know exacly how to write an event and where to put each code piece (the event handler etc.)

                          W Offline
                          W Offline
                          wjp_auhtm
                          wrote on last edited by
                          #13

                          I think that you need create a windows service. When the computer got data, the service app show the data on the form's textbox, even the form unfocused.

                          M R 2 Replies Last reply
                          0
                          • W wjp_auhtm

                            I think that you need create a windows service. When the computer got data, the service app show the data on the form's textbox, even the form unfocused.

                            M Offline
                            M Offline
                            michaelgr1
                            wrote on last edited by
                            #14

                            OK how can i do it using my application?

                            W 1 Reply Last reply
                            0
                            • M michaelgr1

                              Hi, I need this thing only to read data from barcode reader. Is there a way so only data from it (COM1 port for example) will be insereted to that textbox or the clipboard even if the application is not in focus (in background)?

                              H Offline
                              H Offline
                              Heinzzy
                              wrote on last edited by
                              #15

                              Although it's rather unwieldy task I guess I know a way to perform it. To interact with an application that is not in focus I recommend you to use windows application log. Create the window service to handle BC input and write it down to the Log. In the application - check the Log for new entries on timer event and if it exists put it into your textbox. So despite your application might be not in focuse it still can achieve data from BC.

                              M 1 Reply Last reply
                              0
                              • H Heinzzy

                                Although it's rather unwieldy task I guess I know a way to perform it. To interact with an application that is not in focus I recommend you to use windows application log. Create the window service to handle BC input and write it down to the Log. In the application - check the Log for new entries on timer event and if it exists put it into your textbox. So despite your application might be not in focuse it still can achieve data from BC.

                                M Offline
                                M Offline
                                michaelgr1
                                wrote on last edited by
                                #16

                                i think a better way is to create a windows service that will read the data from the Barcode reader and then put in in the clipboard. But i don't know how to create such service and how to read from this device (USB port)

                                H 1 Reply Last reply
                                0
                                • M michaelgr1

                                  Hello, I have a textbox in my window application. I want to be able to write into the textbox even if the application window not in focus (not "first" on the screen). How can i do it? If i need to use events for it , i don't know exacly how to write an event and where to put each code piece (the event handler etc.)

                                  H Offline
                                  H Offline
                                  Heinzzy
                                  wrote on last edited by
                                  #17

                                  To capture Keyboard stream use hooks Read this http://msdn.microsoft.com/en-us/library/ms632589(VS.85).aspx[^] Simple example using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Runtime.InteropServices; namespace hook { class Program { private const int WH_KEYBOARD_LL = 13; private const int WM_KEYDOWN = 0x0100; private static LowLevelKeyboardProc _proc = HookCallback; private static IntPtr _hookID = IntPtr.Zero; static void Main() { _hookID = SetHook(_proc); Application.Run(); UnhookWindowsHookEx(_hookID); } private static IntPtr SetHook(LowLevelKeyboardProc proc) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0); } } private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if ((nCode >= 0) && (wParam == (IntPtr)WM_KEYDOWN)) { int vkCode = Marshal.ReadInt32(lParam); if (((Keys)vkCode == Keys.LWin) || ((Keys)vkCode == Keys.RWin)) { Console.WriteLine("{0} blocked!", (Keys)vkCode); return (IntPtr)1; } } return CallNextHookEx(_hookID, nCode, wParam, lParam); } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]

                                  M 1 Reply Last reply
                                  0
                                  • M michaelgr1

                                    i think a better way is to create a windows service that will read the data from the Barcode reader and then put in in the clipboard. But i don't know how to create such service and how to read from this device (USB port)

                                    H Offline
                                    H Offline
                                    Heinzzy
                                    wrote on last edited by
                                    #18

                                    So, we have a result here. To accomplish the mission you should definitly create a service. With hooks! ;)

                                    1 Reply Last reply
                                    0
                                    • H Heinzzy

                                      To capture Keyboard stream use hooks Read this http://msdn.microsoft.com/en-us/library/ms632589(VS.85).aspx[^] Simple example using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Runtime.InteropServices; namespace hook { class Program { private const int WH_KEYBOARD_LL = 13; private const int WM_KEYDOWN = 0x0100; private static LowLevelKeyboardProc _proc = HookCallback; private static IntPtr _hookID = IntPtr.Zero; static void Main() { _hookID = SetHook(_proc); Application.Run(); UnhookWindowsHookEx(_hookID); } private static IntPtr SetHook(LowLevelKeyboardProc proc) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0); } } private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if ((nCode >= 0) && (wParam == (IntPtr)WM_KEYDOWN)) { int vkCode = Marshal.ReadInt32(lParam); if (((Keys)vkCode == Keys.LWin) || ((Keys)vkCode == Keys.RWin)) { Console.WriteLine("{0} blocked!", (Keys)vkCode); return (IntPtr)1; } } return CallNextHookEx(_hookID, nCode, wParam, lParam); } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]

                                      M Offline
                                      M Offline
                                      michaelgr1
                                      wrote on last edited by
                                      #19

                                      how do i use this code? where do i put in? in the program.cs ? and is it a windows service?

                                      1 Reply Last reply
                                      0
                                      • W wjp_auhtm

                                        I think that you need create a windows service. When the computer got data, the service app show the data on the form's textbox, even the form unfocused.

                                        R Offline
                                        R Offline
                                        Ravi Bhavnani
                                        wrote on last edited by
                                        #20

                                        A Windows service almost never has access to the desktop.  See this[^] article. /ravi

                                        My new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com

                                        W 1 Reply Last reply
                                        0
                                        • M michaelgr1

                                          OK how can i do it using my application?

                                          W Offline
                                          W Offline
                                          wjp_auhtm
                                          wrote on last edited by
                                          #21

                                          Oh! I try to open a win app from a windows service, but I was failed. I consider that creating a socket connect between the windows service and the win app may be practicable. creating windows service like this. creating socket like this.

                                          M H 2 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups