能不能用程序在桌面上放一面"镜子"? ( 积分: 200 )

  • 主题发起人 主题发起人 hellohha
  • 开始时间 开始时间
H

hellohha

Unregistered / Unconfirmed
GUEST, unregistred user!
能不能用程序在桌面上放一面"镜子",当有鼠标或图片(例桌面精灵)从"镜子"上移过时,"镜子"里也显示出鼠标或图片,有可能吗?请谈谈实现思路
 
能不能用程序在桌面上放一面"镜子",当有鼠标或图片(例桌面精灵)从"镜子"上移过时,"镜子"里也显示出鼠标或图片,有可能吗?请谈谈实现思路
 
复制图像,镜像,偏移显示,光线处理........

很多游戏的水中倒影就很逼真,不过要做出来的话肯定要很高的技术吧。

 
意思是只有半边显示真实的画面?
 
当然能喽,不要说“镜子”,连梳子,刮胡刀都能做。要知道程序是万能的,只有你想不到,没有程序做不到的!
 
是想做一个桌面精灵,当我的桌面精灵'走'过镜子时,在镜子里同时显示相应精灵
 
转问题:看看我为什么抓不到QQ的消息内容?
我用下面代码,能抓到QQ窗体上的许多内容,可惜最需要的消息文本抓不到,哪位大虾给看看:

form1上放两个按钮和一个Tmemo控即可测试下面代码:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls,tlhelp32;

type
TForm1 = class(TForm)
Memo1: TMemo;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure GetQQTXT;
private
{ Private declarations }
public
{ Public declarations }
end;

var
MySendMSg:string;
Form1: TForm1;
function FindQQSon(ahwnd:hwnd;w:integer):boolean;stdcall;
function GetWndText(hWnd: HWND): String;
procedure GetQQ(mynd:hwnd);
implementation

{$R *.dfm}
procedure GetQQ(mynd:hwnd);
var
ihand:hwnd;
begin
try
if mynd<>0 then
begin
ihand:=GetDlgItem(mynd,0);
EnumChildWindows(ihand,@FindQQSon,0);
end;
except
end;
end;
function FindQQSon(ahwnd:hwnd;w:integer):boolean;stdcall;
var
buffer: array[0..255] of Char;
NeedClassName:string;
NeedString:string;
begin
Result:=true;
GetClassName(ahwnd,buffer,256);
NeedClassname:=StrPas(Buffer);
NeedString:=trim(GetWndText(ahwnd));
// if pos(Uppercase('EDIT'),Uppercase(NeedClassname))>0 then
// begin
// if NeedString<>'' then
// begin
MySendMSg:=MySendMSg+#13+#10+NeedClassname+'-->:'+NeedString;
// end;
// end;
EnumChildWindows(ahwnd,@FindQQSon,0);
end;

procedure Tform1.GetQQTxt;
var
hCurrentWindow: HWnd;
WndText:String;
begin
MySendMSg:='';
hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
WndText:=GetWndText(hCurrentWindow);
if (Pos('聊天中',WndText)>0) or (Pos('发送消息',WndText)>0) then
begin
MySendMSg:=MySendMSg+#13+#10+WndText+':';
GetQQ(hCurrentWindow);
end;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;
Memo1.text:=MysendMsg;
end;
function GetWndText(hWnd: HWND): String;
Var
Ret:LongInt;
mText:PChar;
Buf:Integer;
begin
Ret:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0)+1;
GetMem(mText,Ret);
try
Buf:=LongInt(mText);
SendMessage(hWnd,WM_GETTEXT,Ret,Buf);
Result:=StrPas(mText);
finally
FreeMem(mText,Ret);
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
GetQQTXT;
end;


end.
 
哥们 上面的代码 能找到 发送消息的句柄吗
我刚研究完 发消息的句柄时 #32770 下的 #32770 中的句柄
我找到了句柄 但是通过SendMessage(hWnd,WM_GETTEXT,Ret,Buf); 不好使 好像已经屏蔽了WM_GETTEXT消息 而且复制 粘贴等消息好像都屏蔽了
 
可以实现复杂
 
以前有个pcanywhere式的时时抓屏可以借用,就是抓取桌面然后显示在一个image图片框里,不过只显示一半的桌面,但是要自己处理图片做到左右交换之后再贴上去,估计会有一些闪
 
看看最新一期的《科学》杂志,连黑洞都是超级计算机。何况镜子。
 
孤独之孤说的对,呵呵
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部