[C#] SendKeys werkt maar 1x

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Woef
  • Registratie: Juni 2000
  • Niet online
Ik heb een programma geschreven dat op de achtergrond kijkt of er een bepaalde sneltoets wordt gebruikt. In dit geval CTRL+T. Dan is het de bedoeling dat het programma dan door middel van Sendkeys een bepaalde string in het op dat moment ingevoerde inputveld geeft.
Dit gaat echter maar 1x goed. Bij de 2e aanroep van de sneltoets komt er geen resultaat.
Nu heb ik via Google al meerdere resultaten gevonden maar daarin wordt verwezen naar console.WriteLine. Dat is nou juist niet wat ik wil omdat ik dan de naam van de applicatie moet weten.
Iemand enig idee om meer dan 1x Sendkeys te gebruiken?

Onderstaande werkt beiden maar 1x.
C#:
1
2
SendKeys.Send();
SendKeys.SendWait();

[ Voor 2% gewijzigd door Woef op 07-09-2009 15:54 . Reden: - ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 22:59

Reptile209

- gers -

Tot waar komt je code als je in een debugger kijkt hoe de afhandeling van je sneltoets verloopt? Onder welk OS ben je bezig?

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

Verwijderd

SendKeys.SendWait() stuurt de messages naar de op dat moment actieve applicatie. Handig als je weet dat de goede applicatie op dat moment topmost is, maar zo nee, dan is 't handiger om FindWindow en SendMessage te gebruiken (allebei in user32.dll, zul je in je C# app moeten importeren via DllImport).

Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 13-09 21:30
SendKeys is een beetje een dirty oplossing vind ik.
Je kunt beter kijken welke control de focus heeft, en daar de Text property van zetten.

Bijvoorbeeld:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public class FormWithGetFocusControl : Form
{
  // Import GetFocus() from user32.dll
  [ DllImport( "user32.dll", CharSet=CharSet.Auto,
      CallingConvention=CallingConvention.Winapi ) ] 
  internal static extern IntPtr GetFocus(); 

  protected Control GetFocusControl() 
  { 
    Control focusControl = null; 
    IntPtr focusHandle = GetFocus(); 
    if ( focusHandle != IntPtr.Zero ) 
      // returns null if handle is not to a .NET control
      focusControl = Control.FromHandle( focusHandle );
    return focusControl; 
  } 

  private void SnelToetsPressed()
  {
     // Stuur een tekst naar de control die de focus heeft.
     Control c = GetFocusControl();
     if (c != null) c.Text = "bepaalde tekst";
  }
}

  • LoekD
  • Registratie: Augustus 2000
  • Laatst online: 27-08 19:22
sorry..onzin..

[ Voor 93% gewijzigd door LoekD op 10-09-2009 17:24 . Reden: onzin ]

Hoe meer je drinkt, hoe korter je leeft, hoe minder je drinkt


Acties:
  • 0 Henk 'm!

Verwijderd

@MasterMind: hij wil in een andere applicatie tekst plaatsen als er op een sneltoets wordt gedrukt. Jouw oplossing gaat daarom niet werken.
Pagina: 1