AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

anderes program auslesen

Ein Thema von napstar · begonnen am 2. Apr 2007 · letzter Beitrag vom 13. Mai 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: anderes program auslesen

  Alt 12. Mai 2007, 13:15
Zitat von Timi-loader:
ich hab mal probiert ein listview meines andern eigenen programmes auszulesen. bekomme ich auch nicht hin.
Ein Listview ist auch was komplett anderes.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#12

Re: anderes program auslesen

  Alt 12. Mai 2007, 13:54
Zitat von Timi-loader:
gutn morgen.

jo fenster wird gefunden. also handle ist beidemale <> 0 (wenn ich msn aktiv habe)

mfg

EDIT: mir kam die idee, dass vllt ja auch einfach mehrere der selben komponente drinnen sind. vllt ist ja die die ich dann grad bekomme leer. wie kann ich eine schleife baun die alle inneren komponenten (alle oder einer art) durchgeht? (also z.b. ne fensterschleife ging ja mit h := getnextwindow(h, GW_HWNDNEXT); )
Hi, hatte gestern abend mit deinem code noch ein wenig "rumgespielt", und hab auch festgestellt, das er nicht funktioniert, wenn mehrere gleiche komponenten in dem fenster sind.

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#13

Re: anderes program auslesen

  Alt 12. Mai 2007, 14:19
Für mehrere gleiche muss man sich halt EnumWindows bzw. EnumChildWindows anschauen, damit bekommt man alle Fenster (Controls sind auch Fenster) innerhalb von anderen Fensterna aufgelistet.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: anderes program auslesen

  Alt 12. Mai 2007, 17:17
Hier ist der Code um
1. alle Windowhandles im Process des Media-Players in Listbox aufzulisten (ListFensterButton)
2. Inhalt der in der Listbox ausgewählten sysListView anzuzeigen (GetListViewButton)

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, commctrl;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListFensterButton: TButton;
    GetListViewButton: TButton;
    procedure ListFensterButtonClick(Sender: TObject);
    procedure GetListViewButtonClick(Sender: TObject);
    procedure get_lv_items(wnd:hwnd);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function EnumChildProc(wnd:hwnd; lparam:integer):bool;stdcall;
var listbox:Tlistbox;
    classname:array[0..127] of char;
begin
  listbox:=TListbox(lparam);
  getclassname(wnd,classname,127);
  listbox.Items.add('$'+inttohex(wnd,8)+'='+classname);
end;


procedure TForm1.ListFensterButtonClick(Sender: TObject);
var wnd:hwnd;
begin
  wnd:=findwindow(nil,'Windows Media Player');
  listbox1.Items.Add(inttohex(wnd,8));
  enumchildwindows(wnd,@enumchildproc,integer(self.ListBox1));
end;

procedure TForm1.GetListViewButtonClick(Sender: TObject);
var wnd:hwnd;
    i,count:integer;
    item:lv_item;

    processid:integer;
begin
  wnd:=0;
  for i:=0 to listbox1.Count-1 do if listbox1.Selected[i] then
  begin
    wnd:=strtoint(listbox1.Items.Names[i]);
    break;
  end;

  listbox1.Clear;
  get_lv_items(wnd);


end;

procedure TForm1.get_lv_items(wnd:hwnd);
var i,count:integer;

    item:lv_item;
    pitem:pointer;

    process,processid:cardinal;

    text:array[0..127] of char;
    ptext:pointer;

    tmp:cardinal;

begin
  //Anzahl der Einträge in Listview ermitteln
  count:=sendmessage(wnd,lvm_getitemcount,0,0);
  listbox1.Items.Add('Anzahl: '+inttostr(count));

  //ID vom Zielprocess ermitteln
  getwindowthreadprocessid(wnd,processid);
  if processid=0 then raise Exception.create('Fehler bei ProcessID');
  //Handle auf Zielprocess bekommen
  process:=openprocess(PROCESS_ALL_ACCESS,false,processid);
  if process=0 then raise Exception.Create('Kein Zugriff auf Process');


  try

    //Speicher für String im fremden Process reservieren
    ptext:=virtualallocEx(process,nil,sizeof(text),mem_commit,PAGE_READWRITE);
    if ptext=nil then raise Exception.Create('Kein freier Speicher im Process');

    //Speicher für Record im fremden Process reservieren
    pitem:=virtualallocEx(process,nil,sizeof(lv_item),mem_commit,PAGE_READWRITE);
    if pitem=nil then
    begin
      virtualfreeEx(process,ptext,sizeof(text),mem_decommit);
      raise Exception.Create('Kein freier Speicher im Process');
    end;

    //Record füllen (mit pszText auf reservierten Speicher für String
    item.mask:=LVIF_TEXT;
    item.iSubItem:=0;
    item.pszText:=ptext;
    item.cchTextMax:=sizeof(text)-1;


    for i:=0 to count-1 do
    begin
      item.iItem:=i; //welchen Eintrag?

      //record in anderen Process kopieren
      if writeprocessmemory(process,pitem,@item,sizeof(item),tmp) then
      begin

        //Message senden (liest den record und füllt damit psztext,
        //also den reservierten "Stringspeicher")
        if bool(sendmessage(wnd,lvm_getitem,0,integer(pitem))) then
        begin

          //String auslesen
          if readprocessmemory(process,ptext,@text,sizeof(text),tmp) then
          begin
            //..und anzeigen
            listbox1.Items.Add(text);
          end;
        end;
      end;
    end;

    //Speicher im anderen Process freigeben
    virtualfreeEx(process,ptext,sizeof(text),mem_decommit);
    virtualfreeEx(process,pitem,sizeof(lv_item),mem_decommit);

  finally
    //Handle freigeben
    closehandle(process);
  end;

end;

end.
Damit kann man z.B. die Playlist auslesen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#15

Re: anderes program auslesen

  Alt 12. Mai 2007, 20:51
zu deinem code, hab nen getestet, und wenn ich erst die fenster buttons auflisten lass und dann die listview buttons, bekomm ich ne exception.

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: anderes program auslesen

  Alt 13. Mai 2007, 01:11
Hast du auch ein entspr Listview selektiert?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#17

Re: anderes program auslesen

  Alt 13. Mai 2007, 01:15
irgendwie listet er nu nichma mehr die henster handle auf ... es passiert einfach gar nix (windows media player is offen)



MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: anderes program auslesen

  Alt 13. Mai 2007, 11:52
Stimmt denn noch der Titel überein?

Du kannst auch die eine Funktion, welche das ListView ausliest in dein Programm kopieren und entsprechend einbinden
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz