和系统相关的几个不算复杂的问题吧……给1000——CJ (200分)

  • 主题发起人 主题发起人 CJ
  • 开始时间 开始时间
C

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
1、随时监视系统摊出的对话筐,知道它的标题是什么字,其内容是什么,这个应该有办法的。
2、知道当前得到焦点的是什么东西(按钮,组合筐……),最重要的是要知道它的标题文字,如果得到hint更好;
3、当然所有的程序未必都是Delphi写的,可能是vc、vb或者其它工具写的。
4、非标准windows类可以暂时不考虑;
5、当选择菜单时,得知当前得到焦点的是什么菜单,是不是有字菜单等……
6、在IE也实现这样的功能
 
关注……
 
思考中、、、
 
最好给个思考结果什么的……另外,承诺,解决问题后有份礼物送的
 
定义一个TIMER.
procedure TForm1.Timer1Timer(Sender: TObject);
var
fwnd: THandle;
buf2, buf: array[0..250] of char;
begin
fwnd := GetForegroundWindow; //得到前置窗口
Getclassname(fwnd, buf, sizeof(buf));
Getwindowtext(fwnd, buf2, sizeof(buf2));
if (strpas(buf) = 'CabinetWClass') or (strpas(buf) = 'IEFrame') or
(pos('Netscape', strpas(buf2)) > 0) or (pos('Opera', strpas(buf2)) > 0) or
(pos('Tencent', strpas(buf2)) > 0) or (pos('TFastBrowserForm', StrPas(buf2))
> 0) then
EnumChildWindows(fwnd, @enumchildproc, 0); //遍历子CLASS
end;

function EnumChildProc(
hwnd: HWND;
IParam: LPARAM
): bool; stdcall;
var
buf: array[0..255] of char;
EditText: integer;
begin
result := true;
GetClassName(hwnd, buf, SizeOf(buf));
if StrPas(buf) = 'Edit' then //得到控件为Edit (ComboBox)
begin
EditText := SendMessage(hwnd, WM_GETTEXT, sizeof(buf), integer(@buf));
//得到Edit内文字
if EditText > 0 then
if StrPas(buf) <> Form1.NewUrl.Text then
if Filter(buf) then
begin
SendMessage(hwnd, WM_SETTEXT, 0, Integer(Form1.NewUrl.Text));
PostMessage(hwnd, WM_KEYDOWN, $D, $1C0001);
PostMessage(hwnd, WM_KEYUP, $D, $C01C0001);
end;
result := false;
end;
end;

这是临控IE、EXPLORE、FASTBROWER等,防止防问指定网址的例程。
 
呵呵。只有用全程hook,用timer显然是不可能的。
 
timer肯定成问题,呵呵,得到最新的window我也能搞定,问题是:2、5
 
呵。只有用全程hook,!!就是
 
>>2、知道当前得到焦点的是什么东西(按钮,组合筐……),最重要的是要知道它的标题文字,如果得到hint更好;
当前得到焦点的是什么東西呢還有點希望﹐但是标题文字就難了﹐一般兩者是兩個控件來的

 
2:getfocus???
5:MenuItemFromPoint
调用这两个api的程序最好在所有的进程里面
这样才不会出问题
 
我是个实用主义者,用得着的才去研究,这些东西对我来说太深奥了。
 
To CJCJC:

好久不见了,你还好吗?
看到你的问题,正好以前做过,有思路。
应该是用Hook做。
1和2可以用WH_CBT钩子跟到,5可以用WH_CALLWNDPROC钩子跟到。

本来开始做一个Demo,做到一半,发现人家已经做好的钩子demo,很全。
我改了一下,给你发过来。

收到以后,把5个dpr都编译一遍,执行可执行文件就好了。
主要处理的代码在HookDemo_f.pas里面,别的都是钩子处理程序,通用的
格式,没什么可看的。
我改的地方很好找,有中文的便是,呵呵。

1和2都实现了,但是5有点问题。
理论上说我已经找到了选中MenuItem的hmenu,但是好像不对......
没能把caption抓出来,但是理论上是对的... 共同探讨!

不知道出了1000分以外还有什么礼物,光盘吗?

你的问题挂在DelphiBBS上有半个月了,会不会你早就做出来了?
我可是才看到,呵呵。
 
收到了给我回封信,看看合不合要求......
 
2 茶叶蛋:
贡献给大家吧,偶也要! 6013 @ telekbird.com.cn
 
没有什么好保密的,只是代码又多,又没有创意,不好意思发上来污染环境。
要就发给你吧。
 
用全程hook[8D]
 
后退
顶部