Autor Beitrag
Payne85
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 53

Win2k
D3 Pers, D7
BeitragVerfasst: Di 25.11.03 15:40 
Hallo,
ich fange gerade an, mich mit der win api auseinanderzusetzen.
Also,ich hab mir schon die ganzen sachen mit send/get/peekmessage hier angeguckt,doch es half mir nicht wirklich weiter,genau wie das tutorial über die win32api. Naja, hier ein source schnipsel:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var msg:TMsg;
begin
sendmessage(getactivewindow(),WM_GETTEXT,0,0);
getmessage(msg,0,0,0);
Translatemessage(msg);
Dispatchmessage(msg);
end;


Also hier fehlt sicher noch ne ganze menge aber ich will eigentlich nur den Fenstertitel auslesen (hab mein fenster zum testen genommen). Muss ich hier erstmal irgendwie eine Message Registrieren oder so? Und wie bekomme ich aus der variable msg den fenstertitel?
Wenn es leichter geht den Fenstertitel von irgendeinem fenster auszulesen wäre ich auch mit was anderem zufrieden. GetWindowText geht ja leider nicht.
Mfg

edit:
Alles klar habs jetzt doch hinbekommen :D
gut das man garkein getmessage nehmen muss

_________________
Mitleid gibts umsonst, Neid muss man sich verdienen...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 25.11.03 18:33 
Kuck dir mal die Parameeter von WM_GETTEXT an:
msdn.microsoft.com/l...sages/wm_gettext.asp

Und was soll das
ausblenden Delphi-Quelltext
1:
2:
3:
getmessage(msg,0,0,0); 
Translatemessage(msg); 
Dispatchmessage(msg);

Noch danach?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  Buffer: array [0..255of Char;
begin
  SendMessage(hWnd, WM_GETTEXT, sizeof(Buffer), Integer(@Buffer));
  ShowMessage(String(Buffer));
Payne85 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 53

Win2k
D3 Pers, D7
BeitragVerfasst: Mi 26.11.03 14:22 
Danke für dein Posting aber ich dachte man muss die Antwort von sendmessage immer mit einer Peek/getmessage einfangen. So hatte ichs verstanden.
"Und was soll das noch danach?" ->wie du sicher bemerkt hast habe ich mich noch nicht allzulange mit der Materie beschäftigt, aber gut das du so nett nachfragst. Ich hab ja wirklich respekt vor denen die, wie du, gut programmieren können, doch deswegen kann man doch "normal" nachfragen wieso ich das geschrieben hab. z.B. "Das hättest du garnicht machen müssen, weil..." Aber wahrscheinlich beantwortest du hier soviel fragen das du auf sowas keine lust mehr hast, naja schade. Vieleicht sehe ichs ja auch ganz falsch, will hier ja keinen ärger machen.
mfg

_________________
Mitleid gibts umsonst, Neid muss man sich verdienen...
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 26.11.03 15:22 
Payne85 hat folgendes geschrieben:
Danke für dein Posting aber ich dachte man muss die Antwort von sendmessage immer mit einer Peek/getmessage einfangen. So hatte ichs verstanden.

SendMessage ist eine Funktion, d.h. das Ergebnis kannst du direkt abfragen. Manchmal brauch man es, manchmal nicht. Ein gutes Beispiel ist dein "WM_GETTEXT", weil SendMessage hierbei nämlich die Anzahl der kopierten Zeichen zurückliefert, so dass du auch mit einem String arbeiten könntest:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
SetLength(s,MAX_PATH);
SetLength(s,SendMessage(GetActiveWindow,
  WM_GETTEXT,length(s),LPARAM(@s[1])));

ShowMessage(
  Format('"%s" hat %d Zeichen',[s,length(s)])
);

:)

Manchmal gibt´s auch Makros (bzw. Funktionen, in Delphi gemeint), mit denen solche SendMessage-Anweisungen gekapselt werden. Vorteil: du musst dich nicht mehr groß darum kümmern, wie die Parameter übergeben werden müssen, und du erhältst das Ergebnis meist gleich in der für dich interessanten Form. Und mal ehrlich,
ausblenden Delphi-Quelltext
1:
ListView_SetSelectedColumn(hListview,1);					

ist doch übersichtlicher als
ausblenden Delphi-Quelltext
1:
SendMessage(hListview,LVM_SETSELECTEDCOLUMN,1,0);					


Zitat:
"Und was soll das noch danach?" ->wie du sicher bemerkt hast habe ich mich noch nicht allzulange mit der Materie beschäftigt, aber gut das du so nett nachfragst. Ich hab ja wirklich respekt vor denen die, wie du, gut programmieren können, doch deswegen kann man doch "normal" nachfragen wieso ich das geschrieben hab. z.B. "Das hättest du garnicht machen müssen, weil..." Aber wahrscheinlich beantwortest du hier soviel fragen das du auf sowas keine lust mehr hast, naja schade. Vieleicht sehe ichs ja auch ganz falsch, will hier ja keinen ärger machen.

Nimm´s mir nicht übel, aber als ich damals mit dem API angefangen habe, da habe ich mir auch die erst mal ganzen Parameter angeschaut, damit ich weiß was ich überhaupt tun muss. Luckies damalige Tutorials waren dabei übrigens eine große Hilfe.
Und ich habe dir in einem anderen Beitrag doch den Link zu Luckies Seite und den aktuellen Tutorials gegeben. Wenn du dir das der Reihe nach anschaust (angefangen von den Fenstern bis hin zu ...), dann weißt du auch, wann man GetMessage und Co. verwendet. ;)

Ich verrate mal ein Geheimnis: auch, als ich schon etwas geübt im Umgang mit API-Programmen war, musste ich doch ab und zu nachschauen, weil ich die Syntax der WndProc:
ausblenden Delphi-Quelltext
1:
2:
function WndProc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM):
  LRESULT; stdcall;

nicht unbedingt im Kopf hatte. :oops: Wie du siehst: jetzt ist das kein Problem mehr. :mrgreen:

Gruß.
Payne85 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 53

Win2k
D3 Pers, D7
BeitragVerfasst: Mi 26.11.03 15:35 
Danke für deine Antwort,
ich hatte leider noch nicht die ausreichende zeit dazu, luckies tut durchzulesen, aber ich werds mir mal zu herzen nehmen.
Mfg