Avatar billede Slettet bruger
24. november 2008 - 22:20 Der er 16 kommentarer og
1 løsning

Click x,y coordinat i program

Jeg skal lave en metode trykke på x,y coordinat i mit program, uden at det kommer i focus/kører i baggrunden.

Det er fordi jeg skal trykke på et java applet's knap. Det her virker ikke:
http://www.geekpedia.com/code139_Simulate-Mouse-Click-On-WebBrowser-Control.html

Så ville prøve at se om det er muligt at gøre det jeg spørger om :)
Avatar billede kalp Novice
24. november 2008 - 22:52 #1
http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_21298311.html

scroll ned og hiv det ud af koden.
Det skal gøres via. win32 API'et
Avatar billede Slettet bruger
25. november 2008 - 04:10 #2
Hey kalp,

Jeg kan ikke få noget positivt til at virke med den. Er du sikker på at den kan lave tryk, hvor i en webbrowser, uden at mit program kommer i focus? dvs hvis jeg sidder og skriver i word eller spiller et spil, så vil programmet ikke pludselig overtage styringen kortvarigt?
Avatar billede Slettet bruger
25. november 2008 - 10:53 #3
Må programmet ikke komme i fokus eller må det ikke køre i baggrunden? det er ret modsigende det du siger..
Avatar billede Slettet bruger
25. november 2008 - 14:19 #4
wb,
Det sværeste. Den må ikke komme i focus (dvs. den skal arbejde i baggrunden ;))
Avatar billede kalp Novice
25. november 2008 - 16:13 #5
Jeg har lavet nedenstående du kan arbejde videre med.
Du skal huske, at når du trykker på en knap - så skal du også slippe den igen;)

    class Program {

        [DllImport("user32.dll")]
        static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData,
          int dwExtraInfo);

        [Flags]
        public enum MouseEventFlags {
            LEFTDOWN = 0x00000002,
            LEFTUP = 0x00000004,
            MIDDLEDOWN = 0x00000020,
            MIDDLEUP = 0x00000040,
            MOVE = 0x00000001,
            ABSOLUTE = 0x00008000,
            RIGHTDOWN = 0x00000008,
            RIGHTUP = 0x00000010
        }

        public Program() {
            mouse_event((uint)MouseEventFlags.RIGHTDOWN, 0, 0, 0, 0);
            mouse_event((uint)MouseEventFlags.RIGHTUP, 0, 0, 0, 0);
        }

        static void Main(string[] args) {
            new Program();
            Console.Read();
        }
    }




Den er lavet på rightclick for at teste..
Lige den kode her vil højreklikke der hvor din mus peger.
uanset om det er i eller udenfor din applikation.
Avatar billede Slettet bruger
25. november 2008 - 16:55 #6
Lad os antage at mit program er minimeret eller gemt bag nogle andre programmer = working in the background og skal den skal ikke frem på skærmen og have focus. Så vil sådan en musseklik da ikke virke, da den jo bare trykker på hvad man ser på skærmen og ikke i den HWND/mit program man godt vil have
Avatar billede kalp Novice
25. november 2008 - 19:01 #7
misforstod dit spørgsmål..
men har tested og lavet denne kode..
spørg hvis du ikke kan finde ud af at hive det relevante ud..


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsApplication5 {
    public partial class Form1 : Form {
        public const int WM_LBUTTONDOWN = 513;
        public const int WM_LBUTTONUP = 514;
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam); 
        public Form1() {
            InitializeComponent();
            this.Click += new EventHandler(Form1_Click);
        }
        private void button2_Click(object sender, EventArgs e) {
            label1.Text = "button 2 was clicked";
        }
        private void button1_Click(object sender, EventArgs e) {
            Int32 lparam = MakeLong(100, 100);
            SendMessage(this.Handle, WM_LBUTTONDOWN, 0, lparam);
            SendMessage(this.Handle, WM_LBUTTONUP, 0, lparam);
        }
        void Form1_Click(object sender, EventArgs e) {
            MouseEventArgs b = (MouseEventArgs)e;
           
            Graphics graphics = this.CreateGraphics();
            Brush brush = new SolidBrush(Color.Red);
            Font font = (Font)(new FontConverter().ConvertFromString("Arial, 12pt"));
            graphics.DrawString("Clicked", font, brush, b.X, b.Y);
            this.Update();
        }
        static int MakeLong(int LoWord, int HiWord) {
            return (HiWord << 16) | (LoWord & 0xffff);
        }
    }
}
Avatar billede Slettet bruger
25. november 2008 - 23:01 #8
Kan ikke få det til at virke, når jeg sætter button2 i 100, 100. Den skal kunne i en webbrowser med java trykke på et link. Fandt et her: http://www.javaonthebrain.com/java/solitaire/ hvis man nu godt vil trykke på Reset knappen. En måde at teste om ens program ikke er i focus, er vel ved at sætte en thread.sleep i button1's start og så minimere det og så se om den har gjort det når man åbner ens program igen...

http://www.turboupload.com/files/get/HHBwV9xgs6/1.rar
Avatar billede Slettet bruger
26. november 2008 - 23:09 #9
Jeg har også så småt givet op. Virker ret håbløst :)
Avatar billede kalp Novice
27. november 2008 - 00:22 #10
Hvis det blot er et link eller noget andet "html" lignende i en webbrowser så kan man gøre det nemt.
Hvis det er en applet så går jeg ikke ud fra man kan se knappen i kildekoden.
Avatar billede Slettet bruger
27. november 2008 - 15:34 #11
Men er det ikke muligt at trykke x,y inde i mit program som er minimeret og ikke har focus? hvis ja. Så kan det vel ikke have betydning hvad den skal trykke på, når jeg vil have x,y
Avatar billede kalp Novice
27. november 2008 - 15:56 #12
Det har betydning fordi hvis det f.eks er en html knap i en webbrowser i din Applikation så ved jeg godt hvordan man kan klikke på den.
En applet.. ved jeg ikke.
Avatar billede kalp Novice
27. november 2008 - 15:57 #13
jeg misforstod desuden det oprindelige spørgsmål.. læste det som et klik uden for din applikation.

Den kode jeg pasted herind klikker på formen - men desværre ikke inde i et element på formen.
Avatar billede Slettet bruger
27. november 2008 - 17:36 #14
har du også givet op så ? Så jeg bare skal dræbe tråden her... MÅ da være muligt?
Avatar billede kalp Novice
27. november 2008 - 22:36 #15
ja det er via. win32 men har ikke tid til at finde ud af funktionen:)

og ellers skal du svare på om det er et html element der skal klikkes på i den webbrowser for så ved jeg godt hvordan det kan gøres.
Avatar billede Slettet bruger
28. november 2008 - 00:29 #16
Arh det ved jeg sørme ikke. Er det ikke til at se i /solitaire linket.
Vel ikke noget der haster, da jeg ikke kan finde andre som kan klare opgaven ;-)

Ellers ved jeg ikke om det ville være en anden løsning, hvis man sagde at den i stedet for at "webbrowseren...", gik ind og tog internet explorer (som som minimeret/working in the background/ude af focus) og trykkede på dens x,y koordinator? ville det så give os mulighed for ta lave det?
Avatar billede Slettet bruger
03. december 2008 - 17:57 #17
x
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester