• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[C#] IE Prozess

Status
Für weitere Antworten geschlossen.

gollum1990

Neues Mitglied
Hallo liebes Forum,

ich bin grad ein Tool am programmieren. Das ist ganz einfach aufgebaut, bei einem bestimmten Tastendruck, soll das Tool eine Tastatur Eingabe Folge an einen laufenden Prozess schicken. Beispiel:

Ich drücke "A": dann soll das folgende passiere, es werden folgende Tastendrücke simuliert;
9
STRG
8
STRG

usw...


Hab das Tool auch fertig so weit, aber dies scheint nicht zu klappen. Es wird zwar vom Programm wahrgenommen das man A drückt, aber es werden nicht die entsprechenden Befehle an den Prozess geschickt. Allerdings funktioniert dies im Windows Explorer, irgendwo unlogisch.

Noch nen paar Hintergrund Informationen: Habe das Tool für ein Onlinegame gemacht, die einzelnen Zahlen beschreiben verschiedene Waffen und mit STRG feuert man. Spiel ist eine Flash Form.

Den Prozess finde ich per FindWindow und die dazugehörige Klasse ist der IEFrame, aber dies scheint einfach nicht zu klappen. *GG*

Hier der Code:

Code:
int ie = FindWindow("IEFrame", null);

SendMessage(ie, VK_8, 0, 0);
SendMessage(ie, VK_CONTROL, 0, 0);
SendMessage(ie, VK_5, 0, 0);
SendMessage(ie, VK_CONTROL, 0, 0);

DIe Virtual Key Codes sind alle oberhlab definiert und sind vorallem richtig definiert. Der Unmanaged Code ist auch eingebunden.

Ich denke das Problem liegt beim Prozess aber ich weiß nicht, wie ich das machen soll.

Hoffe ihr könnt ihr mir helfen.

Edit///

Man könnte in FindWindow mit der zweiten Variable (Titel des Fenster) auch was anfangen, aber sobald ich die Flashform geladen habe, sieht man oben nur die Url mit Session-URI. Das wäre wohl unmöglich zu bewerkstelligen.
 
Werbung:
Sorry für den Doppel Post.

Hab es jetzt anders versucht, aber das klappt auch nicht so wie ich mir das vorstelle. Der Code Teil sieht jetzt wie folgt aus:

Code:
SendMessage((IntPtr)ie, WM_SYSKEYDOWN, Convert.ToUInt64(Keys.D8), 0);
SendMessage((IntPtr)ie, WM_SYSKEYDOWN, Convert.ToUInt64(Keys.ControlKey), 0);
SendMessage((IntPtr)ie, WM_SYSKEYDOWN, Convert.ToUInt64(Keys.D5), 0);
SendMessage((IntPtr)ie, WM_SYSKEYDOWN, Convert.ToUInt64(Keys.ControlKey), 0);

Die SendMessage Methode wurde auch geändert, damit der auch Kompiliert, was hab ich diesmal falsch gemacht?
 
Hallo,

erwischt FindWindow denn auch den richtigen Prozess? Nicht das da noch ein anderer rumgeistert. Falls es nicht den richtigen Prozess findet, dann kannst du ja mit deinem Programm selber den IE laden und hast dadurch auf jeden Fall das richtige Handle.

N43
 
Werbung:
Nein keinerlei Reaktion vom IE, aber komischer Weise funktioniert das beim WIndows Explorer.

Nette Idee, werd ich mir anschauen :D

Edit///

Hab grad gemerkt, dass mein Systen noch meint dass die 8,5 und STRG gedrückt halte ^^

Hab das mal schnell gefixxt. Hab das mal so gemacht, werd ich mal nachher testen.
 
Zuletzt bearbeitet:
Dieser funktioniert nicht ganz folgendes hab ich bisher zusammmen:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;

namespace XblasterToolzZ.Klassen
{
    class Send
    {
        // Unmanaged Code einbinden
        #region unmanaged code
        [DllImport("user32.dll", EntryPoint = "SendMessage")]
        static extern bool SendMessage(IntPtr hwnd, int msg, UInt64 wParam, int lParam);

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("User32.dll", SetLastError = true)]
        public static extern int SetForegroundWindow(IntPtr hwnd);

        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
        private static extern IntPtr FindWindowEx(IntPtr _Parent, int _ChildAfter, string _ClassName, string _WindowName);

        [DllImport("user32.dll")]
        public static extern IntPtr GetForegroundWindow();

        #endregion

        // Tastatur Variablen definieren
        #region Tastatur
        int WM_SYSKEYDOWN = 0x0104;
        int WM_SYSKEYUP = 0x0105;
        #endregion

        // Methoden
        #region Methods

        public void send()
        {
            IntPtr ie = FindWindow("IEFrame", null);
            if (ie != IntPtr.Zero)
            {

                IntPtr ie_t = FindWindowEx(ie, 0, "TabWindowClass", null);
                if (ie_t != IntPtr.Zero)
                {
                    IntPtr ie_s = FindWindowEx(ie_t, 0, "Shell DocObject View", null);
                    if(ie_s != IntPtr.Zero)
                    {
                        IntPtr ie_i = FindWindowEx(ie_s, 0, "Internet Explorer_Server", null);
                        if (ie_i != IntPtr.Zero)
                        {
                            SetForegroundWindow(ie_i);
                            IntPtr ie_u = GetForegroundWindow();
                            if (ie_u != IntPtr.Zero)
                            {
                                SendMessage(ie_i, WM_SYSKEYDOWN, Convert.ToUInt64(Keys.D8), 0);
                                SendMessage(ie_i, WM_SYSKEYUP, Convert.ToUInt64(Keys.D8), 0);
                                SendMessage(ie_i, WM_SYSKEYDOWN, Convert.ToUInt64(Keys.ControlKey), 0);
                                SendMessage(ie_i, WM_SYSKEYUP, Convert.ToUInt64(Keys.ControlKey), 0);
                                SendMessage(ie_i, WM_SYSKEYDOWN, Convert.ToUInt64(Keys.D5), 0);
                                SendMessage(ie_i, WM_SYSKEYUP, Convert.ToUInt64(Keys.D5), 0);
                                SendMessage(ie_i, WM_SYSKEYDOWN, Convert.ToUInt64(Keys.ControlKey), 0);
                                SendMessage(ie_i, WM_SYSKEYUP, Convert.ToUInt64(Keys.ControlKey), 0);
                            }
                            else
                            {
                                MessageBox.Show("Der Fokus wurde nicht gesetzt");
                            }
                        }
                        else
                        {
                            MessageBox.Show("Child: Internet Explorer_Server wurde nicht gefunden.");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Child: Shell DocObjectView wurde nicht gefunden.");
                    }

                }
                else
                {
                    MessageBox.Show("Child: TabWindowClass wurde nicht gefunden.");
                }
            }
            else
            {
                MessageBox.Show("Anwendung ist nicht aktiv.");
            }

        }
        #endregion
    }
}
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben