关于sendmessage发送WM_GETTEXT消息的参数问题(50分)

  • 主题发起人 Sword_Sharp
  • 开始时间
S

Sword_Sharp

Unregistered / Unconfirmed
GUEST, unregistred user!
var
fomSpy: TfomSpy;
MousePos: TPOINT;
hWindow: HWND;
WindowName: array[0..255]of char;
WindowText: array[0..255]of char;
implementation

{$R *.dfm}

procedure TfomSpy.TimerTimer(Sender: TObject);
begin

GetCursorPos(MousePos);
hWindow := WindowFromPoint(MousePos);
GetClassName(hWindow, WindowName, 255);
SendMessage(hWindow, WM_GETTEXT, 255, WindowText);//此处有问题,WindowText
处该为何类型?如何该?
MouseX.Text := IntToStr(MousePos.X);
MouseY.Text := IntToStr(MousePos.Y);
WndHandle.Text := IntToStr(hWindow);
WndName.Text := WindowName;
WndText.Text := WindowText;
end.
我试过:integer(WindowText)、integer(@WindowText)编译可以通过但是运行时会出问题[:)][:D][8D][:(][:(!][^][?]
 
我照你的代码,使用Integer(@WindowText)很正常啊。
你不是其他地方出问题了。
 
var
s:string
begin
setlength(s,50);
SendMessage(hWindow, WM_GETTEXT,longint(50),longint(s));
// ~~~~~~~~~~~~~~~~~~~~~~~~用longint()
showmessage(s);
end;
 
To zeewoo:
在Win32中,Integer与Longint是一致的,都是占4个字节啦。
 
这到没注意过.
不过我上面的代码肯定能用..
 
真确的应该是Integer(@WindowText)
因为我也这么用的
 
WindowText);//
在d6中不能。。。。
改为 integer(WindowText)
WndText.Text := WindowText;中无内容
——————————————————————
下面的那里错了
procedure TForm1.Timer1Timer(Sender: TObject);
var
m1, m: HWnd;
Text: PChar;
begin
GetMem(Text, 255);
m := FindWindow('TForm1', '消息');
if m <> 0 then
begin
m1 := FindWindow(nil, 'memo1');
SendMessage(m1, WM_GETTEXT, 255, integer(text));
WndText.Text := text;//反回的怎么是乱码???pchar()
end
 
搞不懂。。。继续解答阿。
 
to lshong:
用WndText.text:=strpas(text)就可以了。
to Sword_Sharp:
用lparam(@Windowtext[0]) 试试.
 
接受答案了.
 

Similar threads

I
回复
0
查看
514
import
I
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
顶部