如何在别的程序中建立一个按钮? ( 积分: 300 )

  • 主题发起人 主题发起人 xxhadsg
  • 开始时间 开始时间
X

xxhadsg

Unregistered / Unconfirmed
GUEST, unregistred user!
我想使用钩子注入到一个程序中并在其窗口中建立一个按钮,可总也调试不出来,哪位大侠能帮帮?最好给我实现代码!谢谢!
 
不用钩子 找到该窗口的句柄就可以了
以QQ登录窗口为例



implementation
var
OldBtnProc: Pointer;
QQWindow,BtnExit: HWND;
{$R *.dfm}
function ButtonProc(hwnd: HWND; Msg: UINT;wparam: WPARAM;lparam: LPARAM):LRESULT;Stdcall;
begin
if Msg = WM_LBUTTONDOWN then
begin
SendMessage(QQWindow,WM_SYSCOMMAND,SC_CLOSE,0);
Result:= 0;
end
else
Result:= CallWindowProc(OldBtnProc,hwnd,Msg,wparam,lparam);
end;
procedure TForm1.Button1Click(Sender: TObject);

begin
QQWindow:= FindWindow(nil,'QQ用户登录');
if QQWindow = 0 then exit;
BtnExit:= CreateWindow('Button','退出',WS_VISIBLE or WS_CHILD or BS_PUSHBUTTON,10,10,80,50,
QQWindow,1,GetWindowLong(QQWindow,GWL_HINSTANCE),nil);
Windows.SetParent(BtnExit,QQWindow);
OldBtnProc:= Pointer(SetWindowLong(BtnExit,GWL_WNDPROC,Longint(@ButtonProc)));
end;
 
delphi居然如此神奇
 
这么神奇!delphi真是出乎意料
 
不神奇,接管消息而已,任何语言都可以做,看看对系统的了解程序罢了。
 
反汇编后自己改汇编代码也可以实现
 
ysp娃娃 老师能 解释一下
function ButtonProc(hwnd: HWND; Msg: UINT;wparam: WPARAM;lparam: LPARAM):LRESULT;Stdcall;
函数的这样表达是什么意思? LRESULT<=>longInt; 后面加个Stdcall;又表示什么?
 
这个是标准的Windows事件处理定义, stdcall 是参数传送方式, windows 就是用 stdcall 约定的。
 
function ButtonProc(hwnd: HWND; Msg: UINT;wparam: WPARAM;lparam: LPARAM):LRESULT;Stdcall;
这个是窗口过程函数
白河愁,说的没错

To:liuguilg,
不是delphi神奇 其他语言也可以
多看看Windows SDK 就知道了
这些又不是多么难的东东
 
Windows.SetParent(BtnExit,QQWindow);
就是用这个实现窗口化程序的
 
呵呵!哈哈!
 
ysp娃娃 能把此程序改成QQ盗号的程序吗?
 
鄙视盗号者.
 
学习啊......
 
谢谢ysp娃娃,试验通过!接分![:D]
 
如果加一个按钮在一个窗口中,那可不可以用按钮来操作窗口的控件,如为MEMO1填充数据、特别是向DBGRID控件填充数据,数据来源是一个数据库吧!可不可以这样实现!要怎样实现,“ysp娃娃、白河愁...”等高人提点一、二,我现在要作一个东西就是要向另一个程序的一个窗口中DBGRID控件填充数据,请问有没有办法?
 
如果加一个按钮在一个窗口中,那可不可以用按钮来操作窗口的控件,如为MEMO1填充数据、特别是向DBGRID控件填充数据,数据来源是一个数据库吧!可不可以这样实现!要怎样实现,“ysp娃娃、白河愁...”等高人提点一、二,我现在要作一个东西就是要向另一个程序的一个窗口中DBGRID控件填充数据,请问有没有办法?
 
后退
顶部