Autor Beitrag
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: So 13.02.05 21:50 
Hi,
ich möchte gerne ein Programm schreiben, dass einzelne Wörte zählt, und zwar die ich per ICQ zugeschickt bekomme.

Das bedeutet, dass ich erstmal das ICQ - Fenster finden muss, das ist ja kein Problem. Doch wie lese ich nun den Text aus? Da bin ich leider nicht fündig geworden bzw. ich weiß nicht genau wie ich den Text aus ICQ herausfiltern kann.

Wenn ich dann nämlich den Text habe, kann ich in diesem nach bestimmten Wörtern suchen und sie zählen.

thx hibbert


Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Di 08.03.2005 um 14:30

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
davidbaumann
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 39

Win XP
D7PE
BeitragVerfasst: So 13.02.05 22:01 
schonmal überlegt die einfach zwischen ICQ und das Internet zu klemmen?
Ich denke mal, dass das einfacher wäre..
oder du wertest einfach die logs von ICQ aus

Baumi
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: So 13.02.05 22:07 
baumi hat folgendes geschrieben:
schonmal überlegt die einfach zwischen ICQ und das Internet zu klemmen?

Mhh wenn mir einer sagt, wie das gehen soll.

baumi hat folgendes geschrieben:
oder du wertest einfach die logs von ICQ aus

mhh wäre auch ne möglichkeit, ich möchte das aber gerne anders machen....

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: So 13.02.05 22:39 
probiere mal mit enumchildwindows die dem icq handle untergeordneten fenster zu durchsuchen. eines von denen enthält dann den gewünshcten text.

du könntest dir mal dieses programm anschauen was etwas ähnlichen macht:
OpenPass: exe delphisoftware.narod.ru/OpenPass.rar
source delphisoftware.narod.ru/OpenPassSrc.rar
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: So 13.02.05 22:46 
mhh ist ja ganz nett, aber da bekomme ich immer nur die "Caption" des Fensters, aber nicht die Message (jedenfalls bei ICQ5)

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: So 13.02.05 23:05 
hmm weiss ich nicht so genau, frag mal die API-freaks. Luckie z.b. kann dir da sicher weiterhelfen.
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Di 15.02.05 16:05 
mhh hat jemand evtl. noch eine idee ??

thx hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Di 15.02.05 16:11 
mach das nochmal mit X-Spy oder win-spy

Da kannste dir sogar den findwindow code, direkt für die Memo-Klasse erzeugen lassen.
das funktioniert im übrigen auch nur solange das Fenster nicht minimiert ist.
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Di 15.02.05 16:26 
mhh naja, die beiden tools helfen mir auch nicht weiter :oops:

ich benötige doch eigentlich nur den Namen des Feldes, in dem der gesamte Text erscheint und den muss ich doch irgendwie auslesen könne, oder ??

das heißt ich brauche erstmal den namen, doch den habe ich noch net gefunden :cry:

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 15.02.05 16:50 
wie wäre es mit sendmessage und WM_GETTEXT ??? :wink:

ich dachte an sowas in etwa:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
var
  l : Integer;
  Handle : HWND;
  s: string;
begin
  Handle:=FindWindow('Name - Nachrichtensitzung',nil);
  if Handle <> 0 then
  begin
    l:= SendMessage(Handle, WM_GETTEXTLENGTH, 00);
    SetLength(s, l);
    Handle:=FindWindowEx(Handle,0,'Edit',nil);
    if Handle <> 0 then
      SendMessage(Handle, WM_GETTEXT, l + 1, lParam(@s[1]));
    showmessage(s);
  end;
end;

bei mir geht es nicht, ich glaub da muss noch etwas dran rumgeschnippelt werden :oops:
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Di 15.02.05 17:31 
ja an soetwas habe ich ja auch gedacht, doch dazu benötige ich doch den namen des feldes, wo der gesamte text angezeigt wird und der efhlt mir...


hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 15.02.05 17:48 
der braucht keinen namen, der ist vom typ edit und childwindow des chatfensters
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Di 15.02.05 18:10 
mhh dann habe ich jetzt folgendes beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button1Click(Sender: TObject);
var
  l : Integer;
  Handle : HWND;
  s: string;
begin
  Handle:=FindWindow(nil,'Name - Message Session');
  if Handle <> 0 then
  begin
    l:= SendMessage(Handle, WM_GETTEXTLENGTH, 00);
    SetLength(s, l);
    Handle:=FindWindowEx(handle,0,'childwindow',nil);
    if Handle <> 0 then
      begin
      SendMessage(Handle, WM_GETTEXT, l + 1, lParam(@s[1]));
      end;
    showmessage(s);
  end;
end;

so wenn das ICQ Fenster geschlossen ist passiert nichts - ist ja auch richtig so.
doch ist es geöffnet und ein Text steht drin, dann erhalte ich nur eine leere nachricht :oops:

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 15.02.05 19:19 
hibbert hat folgendes geschrieben:
mhh dann habe ich jetzt folgendes beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
<div class="syntaxContainer">  <div class="syntaxSelect">    <a class="genmed" style="text-decoration: none" href="javascript:selectAll(21820010)">markieren</a>  </div>  <div class="syntaxTitle genmed">        <a style="text-decoration: none" href="javascript:toggleCode(21820010)">            <span  id="minusFor21820010"><img class="codecollapse crispscaling" align="top" src="./graphics/bbcode/code_hide.png" border="0" alt="ausblenden" title="ausblenden"/></span>            <span style="display: none;" id="plusFor21820010"><img class="codecollapse crispscaling" align="top" src="./graphics/bbcode/code_show.png" border="0" alt="anzeigen" title="anzeigen"/></span>        </a>                <b>Delphi-Quelltext</b>        <span class="copyright" style="display: none" id="hintFor21820010">                       </span>  </div>  <div id="code21820010" class="syntax" style=" ">    <table cellspacing="0" cellpadding="0">      <tr>        <td valign="top" style="text-align: right; padding-right: 3px; border: #DBE4EB solid; border-width: 0px 1px 0px 0px;">          <pre>1:
2:
3:
4:
</pre>        </td>        <td valign="top" style="width: 100%; padding-left: 3px;">          <pre class="sourcecode">    <span class="codekey">if</span> Handle <> <span class="codenumber">0</span> <span class="codekey">then</span>
      <span class="codekey">begin</span>
      SendMessage(Handle, WM_GETTEXT, l + <span class="codenumber">1</span>, lParam(@s[<span class="codenumber">1</span>]));
      <span class="codekey">end</span>;          </pre>        </td>      </tr>    </table>  </div></div>



das macht keinen sinn, du brauchst kein begin und end dafür:

ausblenden Delphi-Quelltext
1:
2:
if Handle <> 0 then
  SendMessage(Handle, WM_GETTEXT, l + 1, lParam(@s[1]));

das ist das gleiche ^^
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Di 15.02.05 19:46 
schön das es das gleiche ist, aber trotzdem wird das auch nichts an meinem problem ändern, dass es noch immer net funzt :cry:

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 15.02.05 19:54 
ja warte bis einer von den experten hier aufkreuzt und dir den code perfektioniert (wenns am code liegt) :)

und was soll das childwindow ?

der text ist in einem fenster vom typ edit :wink:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button1Click(Sender: TObject);  
var
  l : Integer;
  Handle : HWND;
  s: string;
begin
  Handle:=FindWindowEx(FindWindow('Name - Nachrichtensitzung',nil),0,'Edit',nil);
  if Handle <> 0 then
    begin
      l:= SendMessage(Handle, WM_GETTEXTLENGTH, 00);
      SetLength(s, l);
      SendMessage(Handle, WM_GETTEXT, l + 1, lParam(@s[1]));
      showmessage(s);
    end;
end;

so, der code ist zwar vereinfacht, funzt aber imme noch net :(
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 15.02.05 20:10 
funktionierender Code(made by luckie):
ausblenden volle Höhe Delphi-Quelltext
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:
procedure TForm1.Button1Click(Sender: TObject);
var
  hMemo, hHandleDesFensters : HWND;
  Text : pchar;
  len: Integer;
begin
  SetLastError(0);
  hHandleDesFensters := FindWindow('notepad'nil);
  if hHandleDesfensters <> 0 then
  begin
    hMemo:= FindWindowEx(hHandleDesFensters, 0'EDIT'nil);
    if hMemo <> 0 then
    begin
      len := SendMessage(hMemo, WM_GETTEXTLENGTH, 00);
      GetMem(Text, len+1);
      try
        try
          SendMessage(hMemo, WM_GETTEXT, len+1, Integer(@Text[0]));
          ShowMessage(String(Text));
        except
          on E: EOutOfMemory do Messagebox(Handle, PChar(E.Message), 'Fehler', MB_ICONSTOP);
        end;  
      finally
        FreeMem(Text, len+1);  
      end;
    end
    else
      Messagebox(Handle, PChar(SysErrorMessage(GetLastError)), 'Fehler', MB_ICONSTOP);
  end
  else
    Messagebox(Handle, PChar(SysErrorMessage(GetLastError)), 'Fehler', MB_ICONSTOP);
end;
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Di 15.02.05 23:11 
cool für notepad funzt es jetzt, doch wie setzte ich das für ICQ um ?

dazu benötige ich sicherlich das ICQ - Handle, oder ?
wenn ja, welches ist das ?

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 15.02.05 23:19 
Stimmt, für Notepad funktioniert das, bei einem Mirandafenstertitel schon nicht mehr. Wo ist Luckie :wink:
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Mi 16.02.05 10:29 
zur umsetzung:
1. du must den namen des fensters umändern, nach welchem gesucht werdens soll
2. dann must du den vermutlich namen des objektes ändern, nach dem in dem fenster gesucht werden soll. evntl hast du ja glück und du bekommst ergebnisse wenn du den wert "edit" behälst :D


hier sidn ei paar befehle die man sich unbedingt agucken sollte, wenn man mit sowas arbeitet:

msdn.microsoft.com/l...w_89windowclasse.asp

damit man auch weiß was man da programmiert :wink:

_________________
Patrick
im zweifelsfall immer das richtige tun!!!