Announcement

Collapse
No announcement yet.

SendMessage/PostMessage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SendMessage/PostMessage

    Hallo,

    ich arbeite gerade mit SendMessage und PostMessage...

    Ich sende dabei Buchstaben an ein anderes Fenster, z.B. NotePad. Dies funktioniert auch wenn ich mit ASCII Codes arbeite.

    Ich habe aber gesehen dass es auch Virutal-Key-Codes gibt. Kann mir einer den Unterschied erklären?

    Und, was noch viel wichtiger ist: Wie kann ich Tastenkombinationen mit SendMessage machen? Und wie spreche ich die Windows-Taste an?

    Ich möchte eine Bildschirmtastatur nachprogrammieren. Leider finde ich im Netz nichts direktes dazu.

    mit SendKeys möchte ich nicht arbeiten, da es eine "reine" WPF-Anwendung wird.

    Danke für eure Hilfe!
    Die Taschenlampe!

    Die perfekte Taschenlampe für Ihr Windows Phone!

    - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
    - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


    Hier gehts zu APP!

  • #2
    Ich habe aber gesehen dass es auch Virutal-Key-Codes gibt. Kann mir einer den Unterschied erklären?
    Nicht jeder Key ist ein darstellbares Zeichen, z.B. F1 oder die Maustasten. Ein Virtual- Key-Codes mapped also ein eingebbares Zeichen oder genauer eingebbare Taste was etwas anderes ist als ein in einem Text darstellbares Zeichen(wie z.b. das ASCII Encoding).

    mit SendKeys möchte ich nicht arbeiten, da es eine "reine" WPF-Anwendung wird.
    SendKeys liegt zwar im Namespace von Winforms(und in dessen Assembly) hat aber ansonsten keinen Zusammenhang zu Winforms. Du holst dir also nicht irgendwelche bösen Abhängigkeiten in deine WPF Anwendung wenn du SendKeys benutzt.

    Und, was noch viel wichtiger ist: Wie kann ich Tastenkombinationen mit SendMessage machen? Und wie spreche ich die Windows-Taste an?
    Du sendest ja per SendMessage(oder besser Postmessage) explizite KeyDown und KeyUp Messages. Für eine Tastenkombination müßtest du also für alle beteiligten Tasten erstmal jeweils ein KeyDown senden und anschließen für alle ejeweils ein KeyUp (für 2 Tasten also z.B. 4 Messages).

    Ich habe jetzt nicht nachgeguckt aber in den von der angesprochenen Virtual-Key-Codes solltest du für die linke und rechte Windowstaste jeweils einen eigenen Code finden.

    Comment


    • #3
      Hi,

      erstmal danke!

      Bei Virtual keys gibt es die Windowstasten, wenn ich diese Aufrufe, schreibt er aber z.B. die "[" anstatt die linke Win-Taste. Als ich mal geforscht habe, habe ich gesehen dass der Keycode von ASCII und Virtual Keys zwei verschiedene bedeutungen haben für ein Zeichen: Eben die Win-Taste (links) und die eckige Klammer...

      Vielleicht kannst mir ein kurzes Beispiel geben??

      Danke wíedermal!
      Die Taschenlampe!

      Die perfekte Taschenlampe für Ihr Windows Phone!

      - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
      - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


      Hier gehts zu APP!

      Comment


      • #4
        Bei Virtual keys gibt es die Windowstasten, wenn ich diese Aufrufe, schreibt er aber z.B. die "[" anstatt die linke Win-Taste.
        Wie meinst du das. Was sollte er den bei der Windows-Taste schreiben? Für die Taste gibt es kein darstellbares Zeichen(zumindest ist mir das nicht bewusst).

        Vielleicht kannst mir ein kurzes Beispiel geben??
        Ein Beispiel habe ich gerade nicht aber wenn du zeigst was du probiert hast sehe ich vielleicht wo man ansetzten kann.

        Comment


        • #5
          Code:
          namespace WpfApplication2
          {
              /// <summary>
              /// Interaktionslogik für Window1.xaml
              /// </summary>
              public partial class Window1 : Window
              {
                  
                  [DllImport("user32.dll")]
                  public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
          
                  [DllImport("user32.dll")]
                  public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
          
                  private const int GWL_EXSTYLE = -20;
                  private const int WS_EX_NOACTIVATE = 0x08000000;
          
                  [DllImport("user32")]
                  public static extern IntPtr GetForegroundWindow();
          
                  [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
                  static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
          
                  [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
                  static extern int GetWindowTextLength(IntPtr hWnd);
          
                  [DllImport("user32.dll")]
                  private static extern IntPtr FindWindowEx(IntPtr hWnd, IntPtr hWnd2, string splz, string splz2);
          
                  [DllImport("user32.dll")]
                  private static extern IntPtr FindWindowA(string name1, string name2);
          
                  [DllImport("User32.Dll", EntryPoint = "PostMessageA")]
                  static extern bool PostMessage(IntPtr hWnd, uint msg, UInt64 wParam, Int64 lParam);
          
                  [DllImport("user32.dll")]
                  static extern byte VkKeyScan(char ch);
          
                  [DllImport("user32.dll")]
                  public static extern int SendMessage(
                        IntPtr hWnd,      // handle to destination window
                        uint Msg,       // message
                        long wParam,  // first message parameter
                        long lParam   // second message parameter
                        );
          
                  public enum VirtualKeys
                  : ushort
                  {
                      LeftButton = 0x01,
                      RightButton = 0x02,
                      Cancel = 0x03,       
                      MiddleButton = 0x04,
                      ExtraButton1 = 0x05,
                      ExtraButton2 = 0x06,
                      Back = 0x08,
                      Tab = 0x09,
                      Clear = 0x0C,
                      Return = 0x0D,
                      Shift = 0x10,
                      Control = 0x11,
                      Menu = 0x12,
                      Pause = 0x13,
                      Kana = 0x15,
                      Hangeul = 0x15,
                      Hangul = 0x15,
                      Junja = 0x17,
                      Final = 0x18,
                      Hanja = 0x19,
                      Kanji = 0x19,
                      Escape = 0x1B,
                      Convert = 0x1C,
                      NonConvert = 0x1D,
                      Accept = 0x1E,
                      ModeChange = 0x1F,
                      Space = 0x20,
                      Prior = 0x21,
                      Next = 0x22,
                      End = 0x23,
                      Home = 0x24,
                      Left = 0x25,
                      Up = 0x26,
                      Right = 0x27,
                      Down = 0x28,
                      Select = 0x29,
                      Print = 0x2A,
                      Execute = 0x2B,
                      Snapshot = 0x2C,
                      Insert = 0x2D,
                      Delete = 0x2E,
                      Help = 0x2F,
                      N0 = 0x30,
                      N1 = 0x31,
                      N2 = 0x32,
                      N3 = 0x33,
                      N4 = 0x34,
                      N5 = 0x35,
                      N6 = 0x36,
                      N7 = 0x37,
                      N8 = 0x38,
                      N9 = 0x39,
                      A = 0x41,
                      B = 0x42,
                      C = 0x43,
                      D = 0x44,
                      E = 0x45,
                      F = 0x46,
                      G = 0x47,
                      H = 0x48,
                      I = 0x49,
                      J = 0x4A,
                      K = 0x4B,
                      L = 0x4C,
                      M = 0x4D,
                      N = 0x4E,
                      O = 0x4F,
                      P = 0x50,
                      Q = 0x51,
                      R = 0x52,
                      S = 0x53,
                      T = 0x54,
                      U = 0x55,
                      V = 0x56,
                      W = 0x57,
                      X = 0x58,
                      Y = 0x59,
                      Z = 0x5A,
                      LeftWindows = 0x5B,
                      RightWindows = 0x5C,
                      Application = 0x5D,
                      Sleep = 0x5F,
                      Numpad0 = 0x60,
                      Numpad1 = 0x61,
                      Numpad2 = 0x62,
                      Numpad3 = 0x63,
                      Numpad4 = 0x64,
                      Numpad5 = 0x65,
                      Numpad6 = 0x66,
                      Numpad7 = 0x67,
                      Numpad8 = 0x68,
                      Numpad9 = 0x69,
                      Multiply = 0x6A,
                      Add = 0x6B,
                      Separator = 0x6C,
                      Subtract = 0x6D,
                      Decimal = 0x6E,
                      Divide = 0x6F,
                      F1 = 0x70,
                      F2 = 0x71,
                      F3 = 0x72,
                      F4 = 0x73,
                      F5 = 0x74,
                      F6 = 0x75,
                      F7 = 0x76,
                      F8 = 0x77,
                      F9 = 0x78,
                      F10 = 0x79,
                      F11 = 0x7A,
                      F12 = 0x7B,
                      F13 = 0x7C,
                      F14 = 0x7D,
                      F15 = 0x7E,
                      F16 = 0x7F,
                      F17 = 0x80,
                      F18 = 0x81,
                      F19 = 0x82,
                      F20 = 0x83,
                      F21 = 0x84,
                      F22 = 0x85,
                      F23 = 0x86,
                      F24 = 0x87,
                      NumLock = 0x90,
                      ScrollLock = 0x91,
                      NEC_Equal = 0x92,
                      Fujitsu_Jisho = 0x92,
                      Fujitsu_Masshou = 0x93,
                      Fujitsu_Touroku = 0x94,
                      Fujitsu_Loya = 0x95,
                      Fujitsu_Roya = 0x96,
                      LeftShift = 0xA0,
                      RightShift = 0xA1,
                      LeftControl = 0xA2,
                      RightControl = 0xA3,
                      LeftMenu = 0xA4,
                      RightMenu = 0xA5,
                      BrowserBack = 0xA6,
                      BrowserForward = 0xA7,
                      BrowserRefresh = 0xA8,
                      BrowserStop = 0xA9,
                      BrowserSearch = 0xAA,
                      BrowserFavorites = 0xAB,
                      BrowserHome = 0xAC,
                      VolumeMute = 0xAD,
                      VolumeDown = 0xAE,
                      VolumeUp = 0xAF,
                      MediaNextTrack = 0xB0,
                      MediaPrevTrack = 0xB1,
                      MediaStop = 0xB2,
                      MediaPlayPause = 0xB3,
                      LaunchMail = 0xB4,
                      LaunchMediaSelect = 0xB5,
                      LaunchApplication1 = 0xB6,
                      LaunchApplication2 = 0xB7,
                      OEM1 = 0xBA,
                      OEMPlus = 0xBB,
                      OEMComma = 0xBC,
                      OEMMinus = 0xBD,
                      OEMPeriod = 0xBE,
                      OEM2 = 0xBF,
                      OEM3 = 0xC0,
                      OEM4 = 0xDB,
                      OEM5 = 0xDC,
                      OEM6 = 0xDD,
                      OEM7 = 0xDE,
                      OEM8 = 0xDF,
                      OEMAX = 0xE1,
                      OEM102 = 0xE2,
                      ICOHelp = 0xE3,
                      ICO00 = 0xE4,
                      ProcessKey = 0xE5,
                      ICOClear = 0xE6,
                      Packet = 0xE7,
                      OEMReset = 0xE9,
                      OEMJump = 0xEA,
                      OEMPA1 = 0xEB,
                      OEMPA2 = 0xEC,
                      OEMPA3 = 0xED,
                      OEMWSCtrl = 0xEE,
                      OEMCUSel = 0xEF,
                      OEMATTN = 0xF0,
                      OEMFinish = 0xF1,
                      OEMCopy = 0xF2,
                      OEMAuto = 0xF3,
                      OEMENLW = 0xF4,
                      OEMBackTab = 0xF5,
                      ATTN = 0xF6,
                      CRSel = 0xF7,
                      EXSel = 0xF8,
                      EREOF = 0xF9,
                      Play = 0xFA,
                      Zoom = 0xFB,
                      Noname = 0xFC,
                      PA1 = 0xFD,
                      OEMClear = 0xFE
                  }
          
          
          
                  protected override void OnActivated(EventArgs e)
                  {
                      base.OnActivated(e);
          
                      //Set the window style to noactivate.
                      WindowInteropHelper helper = new WindowInteropHelper(this);
                      SetWindowLong(helper.Handle, GWL_EXSTYLE,
                      GetWindowLong(helper.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
                  }
          
                  public Window1()
                  {
                      InitializeComponent();
                  }
          
                  public static string GetText(IntPtr hWnd)
                  {
                      // Allocate correct string length first
                      int length = GetWindowTextLength(hWnd);
                      StringBuilder sb = new StringBuilder(length + 1);
                      GetWindowText(hWnd, sb, sb.Capacity);
                      return sb.ToString();
                  }
          
                  private void button1_Click(object sender, RoutedEventArgs e)
                  { IntPtr kk = GetForegroundWindow();
                
                     IntPtr winhandle = FindWindowA(null, GetText(kk));
                      IntPtr alleshandle = FindWindowEx(winhandle, IntPtr.Zero, "edit", null);
          
                      string s = "A";
                      for (int i = 0; i < s.Length; i++)
                      {
                          char c = new char();
             
                        
                      //    SendMessage(alleshandle, 0x100,0x11, 0);
                          SendMessage(alleshandle, 0x100, 0x49, 0);
               //
                          SendMessage(alleshandle, 0x101, 0x49, 0);
          
                       //  SendMessage(alleshandle, 0x101, 0x11, 0);
                      }
                          //PostMessage(alleshandle, 0x102,VkKeyScan((char)"?"), 0);
                  
                  }
          
              }
          }
          Das ist mal ein Code wild zusammengewürfelt als Test.

          Bei Windows-Taste kommt die Eckige Klammer...

          einfach in WPF einen Button erstellen und ihm die Button1_click zuweisen.
          Ein weiteres Problem ist auch die Groß und Kleinschreibung...


          MfG und Danke nochmal
          Die Taschenlampe!

          Die perfekte Taschenlampe für Ihr Windows Phone!

          - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
          - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


          Hier gehts zu APP!

          Comment

          Working...
          X