[C#] Webcontrol mouseclick dmv SendMessage

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Hey mensen,
Ik ben bezig met een stukje code waarmee ik op internet een tekening automatisch kan tekenen.
Dit doe ik op Sumopaint.
Ik heb een simpel form, 1 webcontrol en 1 knop. (makkelijk hea :P)

Het idee is dat de webbrowser opent, en als ik op de knop druk, dat er dan wat getekend word.
Nu begin ik door gewoon een punt ergens te tekenen, fancy dingen komen later wel.
Maar hier gaat het mis. ik krijg geen foutmeldingen, maar krijg het ook niet voor elkaar om de mouseclick door te sturen naar de webcontrol, wie kan me hiermee opweg helpen.

Als ik alle voorbeelden/google doorloop, dan kom ik steeds dit soort stukjes code tegen, komen allemaal redelijk overeen.
Heb ook SendMessageA geprobeerd, dit mocht ook niet baten, de hex code's voor mousedown komen van:
http://msdn.microsoft.com/en-us/library/ms645607.aspx


code:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public partial class Form1 : Form
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.Navigate("http://www.sumopaint.com/app/");
        }

        private void button1_Click(object sender, EventArgs e)
        {

            int x = hScrollBar1.Value;
            int y = vScrollBar1.Value;
            
            IntPtr handle = webBrowser1.Handle;
            StringBuilder className = new StringBuilder(100);

            while (className.ToString() != "Internet Explorer_Server") // your mileage may vary with this classname
            {
                handle = GetWindow(handle, 5);          // 5 == child
                GetClassName(handle, className, className.Capacity);
            }

            IntPtr lParam = (IntPtr)((y << 16) | x);    // X and Y coordinates of the click
            IntPtr wParam = IntPtr.Zero;                // change this if you want to simulate Ctrl-Click and such

            const uint downCode = 0x201;                // these codes are for single left clicks
            const uint upCode = 0x202;

            SendMessage(handle, downCode, wParam, lParam); // mousedown
            SendMessage(handle, upCode, wParam, lParam);    // mouseup
        }

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16-09 15:42

Sebazzz

3dp

Heb je als SendMessage faalt ook naar GetError** functies gekeken om het foutbericht te achterhalen?

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Sebazzz schreef op zondag 20 juni 2010 @ 16:32:
Heb je als SendMessage faalt ook naar GetError** functies gekeken om het foutbericht te achterhalen?
SendMessage gaat wel goed, GetError geeft ook geen error terug. Dus het SendMessage gaat wel, maar er gebeurt niets.

Acties:
  • 0 Henk 'm!

  • jmzeeman
  • Registratie: April 2007
  • Laatst online: 12-09 16:17
Alhoewel het niet echt logisch klinkt verwachten veel controls om een of andere duistere reden geen mouse down (iig toolbars en buttons in IE contols). Probeer het is door alleen een mouse up te sturen. Anders zou je nog SendInput kunnen bekijken die doet alles op een iets lager niveau waardoor de cursor ook daadwerkelijk meebeweegt.
edit:
Ik denk eigenlijk dat de SendInput optie je beste kans is om dit op te lossen.
edit2:
Daarnaast welke paint tool gebruik je, de meeste doen uberhaupt niks met een klik en reageren alleen op een drag.

[ Voor 36% gewijzigd door jmzeeman op 22-06-2010 11:28 ]


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Allereerst bedankt voor je reactie en het meedenken :)
Helaas kan ik hier niet echt een oplossing uit halen, want:
Probeer het is door alleen een mouse up te sturen.
Ik stuur eerst een 0x201 en daarna een 0x202, die laatste is een mouse up.
Anders zou je nog SendInput kunnen bekijken die doet alles op een iets lager niveau waardoor de cursor ook daadwerkelijk meebeweegt.
Dit zal wel werken, maar het hele idee is dat de app draait en ik zelf verder kan gaan waar ik mee bezig was.
Daarnaast welke paint tool gebruik je, de meeste doen uberhaupt niks met een klik en reageren alleen op een drag.
http://www.sumopaint.com/app/
Ik heb deze getest, en deze werkt ook met alleen kliks.

Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Komt het niet gewoon omdat dit flash is en de mouse extern wordt afgehandeld door een plugin?
Dus dat je mouse events wel goed doorkomen naar de webBrowser1, maar niet door 'bubbelen' naar de embedded flash.

Ik zou dit testen door in je webBrowser een html pagina te laden met een <body onmousedown="alert();"> ofzo om te zien of dat wel een alert geeft. Dan kun je uitsluiten dat het komt doordat de mouse niet door wordt gegeven naar de Flash embed.

//edit:

Ik denk dat je de handle door moet geven van de 'MacromediaFlashPlayerActiveX' (een child window van de 'Internet Explorer_Server').

//edit2:

Het werkt bij mij ;)

[ Voor 32% gewijzigd door DanielG op 22-06-2010 19:48 ]

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
DanielG schreef op dinsdag 22 juni 2010 @ 15:51:
//edit:
Ik denk dat je de handle door moet geven van de 'MacromediaFlashPlayerActiveX' (een child window van de 'Internet Explorer_Server').
_/-\o_
Thx, werkt nu hier ook, klein beetje dom van me.
Pagina: 1