现在问问思路。2个问题。

huangjacky 2008-12-20 03:48:22
问题1:首先我程序后台监控 怎么监控到用户正在运行的窗口被切换了。
问题2:怎么检测到进程开的连接被改变了。

其实这2个问题 只要做个定时不停检测就可以了。
有没有更好的方法?
比如说第一个问题 我们用hook,就可以是吧。

说说具体怎么实现的过程。

新人 编程 只能靠大家指导一下咯,谢谢。
一个问题30分 额。
...全文
109 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangjacky 2008-12-23
  • 打赏
  • 举报
回复
ding
huangjacky 2008-12-22
  • 打赏
  • 举报
回复
谢谢各位.
小弟是这样
第一个问题:可以不停监控GetForegroundWindow 的句柄,但自己想用hook来弄
第二个问题:是这样的就是一个进程用到了网络,肯定会开网络连接,是吧.我用getExtendedTcpTable已经搞定了,能够看到它开了什么连接.
我现在要想解决的一个问题是,如果这个进程开的网络连接改变了.就通知我.比如说最先我ie的进程和163.com的80端口连上的,结果现在我换了网页换成sina.com了,它就应该通知我.当然不只是ie进程,只要是指定监控的进程都要实现这样的效果.我现在想到的办法就是不停的监控,比如timer里面.但感觉有点儿小傻.
最后关于分少的问题.解决了可以加分.谢谢.

然后自己贴一下第一个问题 我自己写的一点代码,还有点儿问题,希望高手指点

unit u_dllHook;

interface
uses
Windows,SysUtils,Messages;

const
WM_MYACTIVATENEW = WM_USER + 3326;

type
CBTACTIVATESTRUCT = record
FMouse:Boolean;
FHWND :HWND;
end;
PCBTACTIVATESTRUCT = ^CBTACTIVATESTRUCT ;


function installDLL(aWnd:HWND):Boolean;stdcall;
function uninstallDLL:Boolean;stdcall;

var
aHook:HHOOK;
aHWND:HWND;

implementation

function CBTProc(icode:Integer;awParam:WPARAM;alParam:LPARAM):LongInt;stdcall;
begin
Result:=0;
if icode<0 then
Result:=CallNextHookEx(aHook,icode,awParam,alParam);
case icode of
HCBT_ACTIVATE:
begin
PostMessage(aHWND,WM_MYACTIVATENEW,awParam,alParam);
end;
end;
end;

function installDLL(aWND:HWND):Boolean;stdcall;
begin
if aHOOK<>0 then // we have already hooked
begin
Result:=True;
Exit
end;
aHook:=SetWindowsHookEx(WH_CALLWNDPROC,CBTProc,HInstance,0);
Result:=aHook<>0;
aHWND:=aWnd;
end;

function uninstallDLL:Boolean;stdcall;
begin
if aHook<>0 then
begin
UnhookWindowsHookEx(aHook);
Result:=aHook=0;
end;
end;

周末没有网 所以 没有回复.
对不住了.
寒流来了,大家注意身体.
再一次谢谢了
wap21 2008-12-22
  • 打赏
  • 举报
回复
ding
huangjacky 2008-12-22
  • 打赏
  • 举报
回复
就是能不能别这么傻,非用timer来检测.
能不能用什么事件来驱动.
zhao_yong 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huangjacky 的回复:]
谢谢各位.
小弟是这样
第一个问题:可以不停监控GetForegroundWindow 的句柄,但自己想用hook来弄
第二个问题:是这样的就是一个进程用到了网络,肯定会开网络连接,是吧.我用getExtendedTcpTable已经搞定了,能够看到它开了什么连接.
我现在要想解决的一个问题是,如果这个进程开的网络连接改变了.就通知我.比如说最先我ie的进程和163.com的80端口连上的,结果现在我换了网页换成sina.com了,它就应该通知我.当然不只是ie进程,只…
[/Quote]
還有什麼問題?
okmnji79513 2008-12-21
  • 打赏
  • 举报
回复
没看明白 友情帮顶
starluck 2008-12-20
  • 打赏
  • 举报
回复
1。可以用 GetForegroundWindow 判断HANDLE

2. 第二个没看懂意思。是在说SOCKET方面的吗?那可以尝试用HOOK对DLL处理。不过线程有点难度。
qxf32 2008-12-20
  • 打赏
  • 举报
回复
用GetFocus()这样就可以返回当前窗口的句柄,然后跟上一个句柄比较,不同说明切换了窗口
无条件为你 2008-12-20
  • 打赏
  • 举报
回复
才30分,有些少。
gyk120 2008-12-20
  • 打赏
  • 举报
回复
第一个问题,我好象记得焦点切换有个消息可以进行拦截,具体是什么WM_KILLFOCUS的
第二个是什么。。。没弄懂

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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