高手进,隐藏外部程序中文本框的内容,显示一不断变化新内容

Radar2006 2011-07-30 09:05:27


假设上图是外部程序中一部分,现在想要隐藏或是覆盖文本部分,在那个区域显示变化的时间
外部程序不作改动,要随时能恢复显示的.有什么好解决办法,求思路
...全文
189 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Radar2006 2011-08-30
  • 打赏
  • 举报
回复
最终用SetParent+hook搞定。结贴给分!
lhs203203 2011-08-17
  • 打赏
  • 举报
回复
你可以自己花个和他一样的文本框 然后置前就好了啊
Radar2006 2011-07-31
  • 打赏
  • 举报
回复
这个方法其实我也考虑过
不知道行不行得通?
在绘制时屏幕会不会变花?
Radar2006 2011-07-31
  • 打赏
  • 举报
回复
有道理。自绘的话要画得和它一样。可能有难度。
我之前也是想用窗口遮住
稳定不影响它原程序运行
如果一屏有好几个文本框,那得多个窗口?
浩南_哥 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 radar2006 的回复:]

to 8楼,10楼:

注入会不会造成不稳定?
我要虚拟的界面只有这个文本框部分。其它部分还有大量控件在动作。不作修改

直接贴图:是贴在哪?屏慕还是?像手写笔那样?
[/Quote]
我个人感觉有点想手写笔那样的,其实只需要得到那个编辑框的位置就行了,其他的控件不管它。
littlestone08 2011-07-31
  • 打赏
  • 举报
回复
我感觉吧,其实拦WM_PAINT代码上要多写点,毕竟是只有句柄一个东西,自绘会很麻烦,不如注入后,把一个差不多样子的窗口给盖上去来得简单,自绘的话,还要取DC,计算Edit的形状位置等等,想想都麻烦
littlestone08 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 radar2006 的回复:]

to 楼上:
拦截WM_PAINT,然后自绘?这样不会影响它取值吧?
如果行得通,这个方法也不错
[/Quote]
放心吧,肯定不会影响取值,它的值是放在内存中的,图像是根据文本值来绘的,而文本值不是据图像来得到的
dinoalex 2011-07-31
  • 打赏
  • 举报
回复
获取位置大小, 一个窗体独立在那个RECT显示并画东西
Radar2006 2011-07-31
  • 打赏
  • 举报
回复
to 楼上:
拦截WM_PAINT,然后自绘?这样不会影响它取值吧?
如果行得通,这个方法也不错
littlestone08 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 radar2006 的回复:]

to 8楼,10楼:

注入会不会造成不稳定?
我要虚拟的界面只有这个文本框部分。其它部分还有大量控件在动作。不作修改

直接贴图:是贴在哪?屏慕还是?像手写笔那样?
[/Quote]
注入应该不会不稳定,当然你的方法得得当,你可以注入后直接去拦截那个EDIT的WM_PAINT消息,然后不去作默认的绘图,直接用你的代码画上去,如果是标准的EDIT,肯定是一个带够柄的,应该是没问题
Radar2006 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 m617105 的回复:]
也可以是透明窗口覆盖,只覆盖编辑框。
http://topic.csdn.net/u/20110519/18/a26217be-2347-435d-8c25-8ebe91ef6400.html?9306
[/Quote]
这样不错。试试看。
忘了讲了,那台电脑只运行外部程序,且全屏。
山东蓝鸟贵薪 2011-07-31
  • 打赏
  • 举报
回复
注入模式应该是没有问题
浩南_哥 2011-07-31
  • 打赏
  • 举报
回复
也可以是透明窗口覆盖,只覆盖编辑框。
http://topic.csdn.net/u/20110519/18/a26217be-2347-435d-8c25-8ebe91ef6400.html?9306
cyistudio 2011-07-30
  • 打赏
  • 举报
回复
搞不懂要的是什么效果,如果是隐藏显示或者恢复显示直接用控件的visible属性不行吗?
纯冰糖 2011-07-30
  • 打赏
  • 举报
回复
Copy来的,看看有没有思路了。


使用下面这个程序可以获得其他窗体上的Tedit控件并清空它的值

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
ListBox2: TListBox;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
function EnumWindowsProc( Hwnd: HWND; MyForm: TForm1): Boolean; stdcall; //回调函数
function EnumChildControlProc( Hwnd: HWND; MyForm: TForm1): Boolean; stdcall; //回调函数, 处理返回来的窗体控件的句柄

implementation

{$R *.dfm}

function EnumWindowsProc( Hwnd: HWND; MyForm: TForm1): Boolean; stdcall;
var
WndWindowText: array[0..254] of char; //用来存储窗口名
begin
GetWindowText(Hwnd,WndWindowText,254);
MyForm.ListBox1.Items.Add('窗口名: '+StrPas(WndWindowText));
Result:= True;
end;

function EnumChildControlProc( Hwnd: HWND; MyForm: TForm1): Boolean; stdcall;
var
ComponentClassName, ComponentText: array[0..254] of char;
Buffer:array[0..255]of char;
begin
GetClassName(Hwnd,ComponentClassName,254);
GetWindowText(Hwnd, ComponentText, 254);
if StrPas(ComponentClassName)='TEdit' then
begin
Buffer='';
SendMessage(Hwnd,WM_SETTEXT,0,Longint(@Buffer)); //使用 WM_SetText消息设置Tedit的值.

end;
Result:= True;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Clear;
EnumWindows(@EnumWindowsProc, Longint(self)); // 注册回调函数入口地址的函数
end;


procedure TForm1.Button2Click(Sender: TObject);
var
Hwn: HWND;
begin
Form1.ListBox2.Items.Clear;
ListBox2.Items.Add('有如下控件名称');
Hwn:= FindWindow(nil,PChar(Label2.Caption));
if Hwn<>0 then
EnumChildWindows(Hwn,@EnumChildControlProc,LongInt(Self))
else
MessageBox(self.Handle,'没有获得该窗口句柄','提示',0);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
Label2.Caption:=Copy(ListBox1.Items.Strings[ListBox1.itemIndex],9,Length(ListBox1.Items.Strings[ListBox1.itemIndex]));
end;

end.
Radar2006 2011-07-30
  • 打赏
  • 举报
回复
to 8楼,10楼:

注入会不会造成不稳定?
我要虚拟的界面只有这个文本框部分。其它部分还有大量控件在动作。不作修改

直接贴图:是贴在哪?屏慕还是?像手写笔那样?
Radar2006 2011-07-30
  • 打赏
  • 举报
回复
8楼到10楼的终于弄懂我的意思了。。。
Radar2006 2011-07-30
  • 打赏
  • 举报
回复
再强调下,不能干涉外部程序,不直接更改它的内容
因为它一直会取文本框的内容
我要的就是它像在后台运行
但界面上数值我可任意指定
Radar2006 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rouqing 的回复:]
不知道通过获取窗体、控件句柄,再发送消息的方法可以实现不
[/Quote]
不是要这样的效果。不能影响外部程序的运行
只是想表面上看起来是我模拟的一个数
浩南_哥 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rouqing 的回复:]
不知道通过获取窗体、控件句柄,再发送消息的方法可以实现不
[/Quote]
应该可以,楼主可以试试
加载更多回复(5)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧