Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pristup podacima iz drugog programa

[es] :: .NET :: Pristup podacima iz drugog programa

[ Pregleda: 2631 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Pristup podacima iz drugog programa07.01.2011. u 15:00 - pre 161 meseci
Dakle zanima me sledece. Imam neki pokrenuti program, a ja treba da iz svog programa pristupim njemu i da iscitam neke podatke sa njegovog textboxa(ustvari verovatno je u pitanju nesto tipa html a ne text). Koji je najbezbolniji (koderski i sto se tice opterecenja CPU) nacin da to odradim. Da li mogu nekako preko procesa lepo da mu pristupim, da li moram da ceprkam po memoriji ili moram da hvatam sliku prozora pa da detektujem slova?
Radio bi u C#, ali u obzir dolazi i C++.
Predlozi?
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa07.01.2011. u 22:16 - pre 161 meseci
Jos 1 pitanje - da li je preko user32 ili nekog drugog dll-a moguce dobiti sliku prozora(image ili bitmap) ili deo neke njegove regije ako prozor nije onTop?
 
Odgovor na temu

lan-mi
Lukic Milan
Zrenjanin

Član broj: 156359
Poruke: 140
*.dynamic.sbb.rs.

Sajt: https://lanmisoft.com


+1 Profil

icon Re: Pristup podacima iz drugog programa07.01.2011. u 23:46 - pre 161 meseci
Predlozi:

Windows API FindWindow funkcija ili Process.GetProcessesByName: http://stackoverflow.com/quest...ows-of-a-window-given-its-hwnd
Arduino Control Center
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa08.01.2011. u 09:47 - pre 161 meseci
Ma nasao sam to odavno i lepo izdvojim procese po imenu prozora npr.:
Code:
Process[] processes = Process.GetProcessesByName("No Limit");
foreach (Process p in processes)
{
        IntPtr thWnd = p.MainWindowHandle;
        // dalja obrada
}

Ali mene zanima da li postoji nacin da pristupim sadrzaju neke kontrole na prozoru (u mom slucaju chat, odnosno tok igre u donjem levom uglu pokera):


Da li postoji drugi nacin sem da radim image forme pa da radim image to text?
Gledao sam sa process explorer-om, nigde ne pravi log igre, vec mu bude samo u memoriji.
Dakle, da li postoji nacin da se pristupi toj kontroli, ili da ceprkam po memoriji, ili najlosija opcija da grab-ujem image pa obradjujem?
 
Odgovor na temu

lan-mi
Lukic Milan
Zrenjanin

Član broj: 156359
Poruke: 140
*.dynamic.sbb.rs.

Sajt: https://lanmisoft.com


+1 Profil

icon Re: Pristup podacima iz drugog programa08.01.2011. u 10:11 - pre 161 meseci
Pa kad si nasao prozor moras naci i child kontrole i pristupiti im. Ja koristim programcic KomponentScan kojim nadjes klasu kontrole (TEdit, TListbox..), ali vidim da svi na net-uspominju Spy++ program, i zatim pomocu windows funkcije EnumChildwindows in sendmessage (SET_TEXT,GET_TEXT) upisujes ili citas sadrzaj kotrole.

[Ovu poruku je menjao lan-mi dana 08.01.2011. u 17:52 GMT+1]
Arduino Control Center
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa08.01.2011. u 10:20 - pre 161 meseci
Hvala puno na savetu, pokusacu sada tako...
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa08.01.2011. u 10:23 - pre 161 meseci
Gde mogu da nadjem taj component scan? Jel free?
 
Odgovor na temu

lan-mi
Lukic Milan
Zrenjanin

Član broj: 156359
Poruke: 140
*.dynamic.sbb.rs.

Sajt: https://lanmisoft.com


+1 Profil

icon Re: Pristup podacima iz drugog programa08.01.2011. u 11:11 - pre 161 meseci
Nemam pojma gde sam ga nasao (freeware with source za delphi), imam kompajliran exe, ali ne znam da li mogu da ga okacim(i kako) ...
Arduino Control Center
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa08.01.2011. u 11:19 - pre 161 meseci
Nasao sam ja jednu veoma korisnu stvarcicu za C# i sve koji imaju problem kao ja:
http://www.vbaccelerator.com/h...numerating_Windows/article.asp
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa08.01.2011. u 13:05 - pre 161 meseci
Kada pogledam klase u pitanju je ATL...
http://msdn.microsoft.com/en-us/library/x1c35cc3(VS.80).aspx
Jel moguce na isti princip izvuci podatke?
 
Odgovor na temu

lan-mi
Lukic Milan
Zrenjanin

Član broj: 156359
Poruke: 140
*.dynamic.sbb.rs.

Sajt: https://lanmisoft.com


+1 Profil

icon Re: Pristup podacima iz drugog programa08.01.2011. u 16:09 - pre 161 meseci
Evo sam iskombinovao jedan primer sa windows Calculator programom da upise npr. br 55 u edit polje

Code (csharp):

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.IO;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public delegate bool EnumWindowProc(IntPtr hWnd, IntPtr parameter);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowProc lpEnumFunc, IntPtr lParam);

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

        [DllImport("user32.dll", SetLastError = true)]
        static extern uint GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);

        public Form1()
        {
            InitializeComponent();
        }
        [DllImport("user32.dll", SetLastError = true)]
    private static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);
     
        public static List<IntPtr> GetChildWindows(IntPtr parent)
        {
            List<IntPtr> result = new List<IntPtr>();
            GCHandle listHandle = GCHandle.Alloc(result);
            try
            {
                EnumWindowProc childProc = new EnumWindowProc(EnumWindow);
                EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));
            }
            finally
            {
                if (listHandle.IsAllocated)
                    listHandle.Free();
            }
            return result;
        }

        private static bool EnumWindow(IntPtr handle, IntPtr pointer)
        {
            GCHandle gch = GCHandle.FromIntPtr(pointer);
            List<IntPtr> list = gch.Target as List<IntPtr>;
            if (list == null)
            {
            }
            list.Add(handle);
                    return true;
        }

     
        public static string GetClassName(IntPtr hWnd)
        {
            StringBuilder className = new StringBuilder(100);
            //Get the window class name
            GetClassName(hWnd, className, className.Capacity);

            return className.ToString();
        }
     

        private void button1_Click(object sender, EventArgs e)
        {
         

            foreach (Process process in Process.GetProcesses())
            {
                if (process.MainWindowTitle == "Calculator")
                {
                    IntPtr handle = process.MainWindowHandle;

                    List<IntPtr> wndList = GetChildWindows(handle);

                     foreach (IntPtr item in wndList)
                    {
                       if (GetClassName(item)=="Edit")
                    {
                       const int WM_SETTEXT = 0x0C;
                         int z = 55;
             SendMessage(item, WM_SETTEXT, 0, z.ToString());
                   }
 }
                     
                 
                }

           }
        }
    }
}


[Ovu poruku je menjao Shadowed dana 12.01.2011. u 09:13 GMT+1]
Arduino Control Center
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa08.01.2011. u 22:41 - pre 161 meseci
Nije mi htelo tako kako si ti napisao (npr. u Notepadu)- ja sam deklarisao ovako:
Code:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, StringBuilder lParam);


A radio ovako:
Code:
const Int32 WM_GETTEXT = 0xD;
StringBuilder sb = new StringBuilder(256);
SendMessage(item, WM_GETTEXT, (IntPtr)256, sb);


E sad, problem je sledeci - ovo izgleda nije standardni TextBox - kao sto se vidi i jednostavno WM_GETTEXT nece da izvuce podatke... Da li postoji neki drugi wParam mozda ili neki drugi nacin da se izvuku ukoliko imam IntPtr na zeljenu kontrolu? Ako neko ima vremena da proveri program neka ga skine na betxpoker.com a user i pass cu da posaljem preko private message (mada mozete i sami da napravite free account).
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.zaslon-telecom.si.



+14 Profil

icon Re: Pristup podacima iz drugog programa11.01.2011. u 16:12 - pre 161 meseci
Ukoliko kontrola ima svoje crtanje (owner draw), a sudeci po slici izgleda da ima, bojim se da nema te poruke koja ce da izvuce sadrzaj. Njen datasource za custom crtanje moze da bude bilo sta, uopste ne mora da bude uokvireni objekat (u memorijskom smislu) i mozda se sadrzaj sastavlja u samom Paint hendleru.

Ako je to sto hoces da hekujes .Net aplikacija onda probaj sa Reflectorom i HawkEye da procackas malo property-je kontrole.
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa11.01.2011. u 22:43 - pre 161 meseci
O kontroli nema nikakvih podataka - sve je zatutuljeno, zamumuljeno... Izgleda da je radjeno u C++ 6.0 sa modifikovanim kontrolama, tako da ne postoji nacin da se dodje do podataka. Uspeo sam se preko kernela ubaciti u memoriju aplikacije i naci podatke iz toga, ali su ispreturani - verovatno je u pitanju dinamicka lista povezana pointer-ima, tako da nema bas neke teorije da se prati lepo. Posto projekat radim za klijenta, ostala je samo jos jedna stvar na koju je pristao, a to je lociranje prozora, lociranje chata, grab-ovanje image-a i konverzija u text (ne koristim open source resenja jer presporo rade, vec pisem svoj). :/
 
Odgovor na temu

lan-mi
Lukic Milan
Zrenjanin

Član broj: 156359
Poruke: 140
*.dynamic.sbb.rs.

Sajt: https://lanmisoft.com


+1 Profil

icon Re: Pristup podacima iz drugog programa12.01.2011. u 06:49 - pre 161 meseci
Uspelo mi je ovako:

Code (csharp):

foreach (Process process in Process.GetProcesses())
{
string MainString = process.MainWindowTitle;
string SearchString = "No Limit";
int FirstChr = MainString.IndexOf(SearchString);
if (FirstChr>0)
{
MessageBox.Show("Nasao main window");
IntPtr handle = process.MainWindowHandle;
List<IntPtr> wndList = GetChildWindows(handle);
foreach (IntPtr item in wndList)
{
if (GetClassName(item)=="ATL:6279D510")
{
const int WM_SETTEXT = 0x0C;
string z ="Ubacen tekst" ;
SendMessage(item, WM_SETTEXT, 0, z);
const Int32 WM_GETTEXT = 0xD;
StringBuilder sb = new StringBuilder(256);
SendMessage(item, WM_GETTEXT, (IntPtr)256, sb);
this.Text = sb.ToString();
}
}
}
}
 

Srecno!

[Ovu poruku je menjao Shadowed dana 12.01.2011. u 09:13 GMT+1]
Arduino Control Center
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12848



+4784 Profil

icon Re: Pristup podacima iz drugog programa12.01.2011. u 08:13 - pre 161 meseci
A da usniffas saobracaj? Ipak se te poruke prenose preko mreze.
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa12.01.2011. u 09:54 - pre 161 meseci
Citat:
lan-mi: Uspelo mi je ovako:

Code (csharp):

foreach (Process process in Process.GetProcesses())
{
string MainString = process.MainWindowTitle;
string SearchString = "No Limit";
int FirstChr = MainString.IndexOf(SearchString);
if (FirstChr>0)
{
MessageBox.Show("Nasao main window");
IntPtr handle = process.MainWindowHandle;
List<IntPtr> wndList = GetChildWindows(handle);
foreach (IntPtr item in wndList)
{
if (GetClassName(item)=="ATL:6279D510")
{
const int WM_SETTEXT = 0x0C;
string z ="Ubacen tekst" ;
SendMessage(item, WM_SETTEXT, 0, z);
const Int32 WM_GETTEXT = 0xD;
StringBuilder sb = new StringBuilder(256);
SendMessage(item, WM_GETTEXT, (IntPtr)256, sb);
this.Text = sb.ToString();
}
}
}
}
 

Srecno!

[Ovu poruku je menjao Shadowed dana 12.01.2011. u 09:13 GMT+1]

Milane ovo hvata dole onaj EditBox sta korisnik pise, a meni treba citav onaj chat prozor gde izlaze i poruke od dealera i drugih igraca... :/
A to sve je ustvari jedan prozor, dakle nije izdvojeno kao kontrola nazalost i nema sanse doci do toga... :(

Citat:
Shadowed: A da usniffas saobracaj? Ipak se te poruke prenose preko mreze.

Pravo da ti kazem nisam petljao sa tim, nisam nesto previse radio sa tim, a klijent(koji je C++ programer) kaze da je on tako pokusao ali da je enkriptovan sadrzaj i da pretpostavlja da kljuc menjaju sa svakim update-om programa, a program se update-uje cesto... :/
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.zaslon-telecom.si.



+14 Profil

icon Re: Pristup podacima iz drugog programa12.01.2011. u 10:34 - pre 161 meseci
Enkriptovan sadržaj mora nekako da se dekriptuje. PEExplorer ili Win32dasm u šake pa udri. Uključi aplikaciju u disasm. po izboru, prijavi se kao igrač sa specifičnim imenom i onda traži to ime po memoriji procesa pa idi od tamo. Ako ima i ostatke debug informacija videćeš čak i nazive funkcija i varijabli. Srećno!
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
*.dynamic.isp.telekom.rs.

Sajt: grubicv.iz.rs


+2 Profil

icon Re: Pristup podacima iz drugog programa12.01.2011. u 11:33 - pre 161 meseci
Ne moze, izbacuje stalno error neki u disasemblerima... Ne znam da li treba nesto dodatno podesiti, ali jednostavno desi se taj error i ne ucita citavu aplikaciju, i ne moze ni da se pokrene.
Radio sam sam neki program da cupa iz memorije sadrzaj i dosao do nekog sadrzaj stola ali problem je bio sto je sadrzaj bio izmesan - tipa u chat prozoru ide ovako:
----Hand#123123----
D: Player1 folds
D: Player2 check
D: Player3 check
D: Dealing turn

a u memoriji bude:
----Hand#123123----($&(!@*$ayer1 folds(@)*@*!^*$(Dealing turn*#@$*!Player1 fo@!#@!($----Hand#123123----@$#Player3 check#$@()$@#
U sustini nemam ideju kako iz toga izvuci tacne podatke + da budu poredjani po vremenu dogadjanja...
 
Odgovor na temu

[es] :: .NET :: Pristup podacima iz drugog programa

[ Pregleda: 2631 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.