在使用MSN过程中发现,如果张三和李四都在线而且互相加入了好友,当张三离开座位并“锁定计算机”,那么很快李四那里就显示张三的状态为“离开”。分析其原因,当张三锁定计算机的时候,MSN捕捉了某个消息,然后向在线的所有好友发送“该用户已经锁定计算机,当前状态为离开”,那么其他人看到这个人的状态就是“离开”。这两天找了很多windows系统消息相关的资料,可惜都没有找到这个“锁定计算机”的消息。(也可能使用了其他机制来完成这个工作)找到了这个锁定计算机API函数,LockWorkStation; 那么,如何判断用户是否锁定计算机?望有线索的网友不吝赐教!
当检测到该消息时通过UDP向服务器发送“离开”消息。
服务器端检测到了该消息后再做相应的处理 (入给他的在线好友发送“离线”通知).
--------------------------------------
这个可能是张三在锁定计算机的时候发送消息给李四
然后李四接到锁定消息
确定张三离开function LockWorkStation; external user32 name 'LockWorkStation';
(user32.dll, func:LockWorkStation())
这个函数我觉得在执行的时候是会触发一个消息反馈的
MSN可以定期去捕获这个消息
来判断系统状态
var
hDesktop: HDESK;
begin
Result := False;
hDesktop := OpenDesktop('default',
0, False,
DESKTOP_SWITCHDESKTOP);
if hDesktop <> 0 then
begin
Result := not SwitchDesktop(hDesktop);
CloseDesktop(hDesktop);
end;
end;http://lysoft.7u7.net