Προς το περιεχόμενο

Επικοινωνια μεταξι προγραμματων (Win api)


Evgenios1

Προτεινόμενες αναρτήσεις

Δημοσ.

Πως θα παρω το περιεχομενο ενος EditBox απο ενα αλλο προγραμμα? Μεχρι τωρα δοκιμασα με FindWindow(EX/W) αλλα δεν βρισκω handle απο το editbox :cry:

>[color="Silver"]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;[/color]
namespace WindowsFormsApplication2
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
           var proc = Process.Start("calc.exe");
           richTextBox1.WriteLine("calc main handle:"+proc.Handle);
           var ptr = FindWindowEx(proc.Handle, IntPtr.Zero, "Edit","0.");
           richTextBox1.WriteLine("editbox handle:"+ ptr);
           
           //Message mesg = new Message();
           //GetMessage(ref mesg, proc.Handle, 0, 0);
           //richTextBox1.WriteLine("Message:" + mesg);
       }
      
       
       [DllImport("user32.dll")]
       private static extern IntPtr FindWindowEx(IntPtr phWnd, IntPtr chWnd, string clsName, string wndTitle);
       [DllImport("user32.dll")]
       private static extern int GetMessage(ref Message m, IntPtr hWnd, uint fin, uint fix);
   }
   public static class ExRTB
   {
       public static void WriteLine(this RichTextBox rtb, object line)
       {
           rtb.Text += line.ToString() + "\n";
       }
   }
}

 

Κανα παραδειγμα σε .net(c#) ή Win32(c++)

Δημοσ.

Σε Win SDK: EnumWindows,FindWindowsEx και Hooks.

Υπάρχει και ένα προγραμματάκι με όνομα SPY που είναι στα παραδείγματα της Microsoft και δίνεται μαζί με το Dev Studio (αλλά όχι το express).

Πρέπει να έχουν ακόμα το link που το κατεβάσεις στο site της microsoft.

Δημοσ.

Με ενα προγραμματακι τυπου spy++* ειδα τα cls names. Το θεμα ειναι οτι δε περνω το handle απο το control (το handle απο το app το περνω :-D ). Τεσπα θα το googlarw ακομα παραπανω για τα FindWindowW/EX.

 

Κατι αλλο. Μπορω να περνω τα message απο ενα προγραμμα?

 

 

*Δεν θυμομουνα το ονομα του, στο vs9 δεν το εχει :-(.

Δημοσ.
Κατι αλλο. Μπορω να περνω τα message απο ενα προγραμμα?

 

 

*Δεν θυμομουνα το ονομα του, στο vs9 δεν το εχει :-(.

 

Δεν έχω καταλάβει πώς ακριβώς το εννοείς αυτό, αλλά κάποια στιγμή είχα υλοποιήσει αποστολή μηνυμάτων μεταξύ διαφορετικών προγραμμάτων(WindowMessaging).

 

Αυτό μπορείς να το πετύχεις φτιάχνοντας μια κλάση WindowMessaging που κληρονωμεί από την System.Windows.Forms.NativeWindow και υλοποιεί μια συνάρτηση

>public virtual void SendMessage(string str, string destinationTitle)

είτε μία συνάρτηση

>public virtual void SendMessage(byte[] data, string destinationTitle)

.

 

Από την άλλη μεριά υπάρχει ένας listener

>MessageListener.StringReceived += new WindowMessaging.StringReceiveHandler(MessageListener_StringReceived);

 

Αν ψάξεις λίγο στο google θα βρεις και ολοκληρωμένο παράδειγμα.

Δημοσ.

Εστω οτι εχω αυτο εδω το προγραμμα

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

namespace oeo
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
           var t = new Timer { Interval = 2000, Enabled = true };
           var r = new Random();
           t.Tick += delegate
           {
               for (int i = 0; i < r.Next(10,15); i++)
               {
                   textBox1.Text += (char)r.Next((int)'a', (int)'z');
               }
           };
       }
   }
}

 

Θελω με ενα αλλο προγραμμα να παρακολουθω το συγκεκριμενο editbox, μεσου GetMessage(..)

 

edit: Θα μελετησω αυτο εδω

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...