500分请教!!高手请进!关于WINDOWS消息及WIN API函数的问题?在线等待!急!!!!!!!

hcy8004 2002-05-12 10:57:25
500分请教!!高手请进!关于WINDOWS消息及WIN API函数的问题?在线等待!急!!!!!!!
我编写一个工具,在不同的程序下,都可以取得当前的颜色,我想当鼠标离开此程序时,在别的应用程序下当击键盘上的一个键或鼠标左键,就可以使得Timer1.Enabled:=false;怎样设置????如有那一位仁兄赐教,小弟不胜感激!!!!程序代码如下:
procedure TForm1.Timer1Timer(Sender: TObject);
var
vhdc:hdc;
fetchcolor:Tcolor;
begin
vhdc:=getdc(0);
try
fetchcolor:=getpixel(vhdc,mouse.cursorpos.x,mouse.cursorpos.y);
edit1.text:=inttostr(getRvalue(colortoRGB(fetchcolor)));
edit2.text:=inttostr(getGvalue(colortoRGB(fetchcolor)));
edit3.text:=inttostr(getBvalue(colortoRGB(fetchcolor)));
finally
releaseDc(0,vhdc);
end;
end;
...全文
42 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyboy 2002-05-13
  • 打赏
  • 举报
回复
O!方才没看到你的程序代码,
你点了一下其它的程序你的程序不是活动的了,所以代码不好用了。
HOOK应该可以
火鸟李国平 2002-05-13
  • 打赏
  • 举报
回复
应该用键盘HOOK,我给你个例子:

//keyhook
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
Function KeyHook(iCode: Integer; wParam: Longint; var Msg: TMsg): Longint; stdcall;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

Function KeyHook(iCode: Integer; wParam: Longint; var Msg: TMsg): Longint; stdcall;
begin
messagebox(0,pchar(inttostr(icode)),pchar(inttostr(wParam)),mb_ok);
Keyhook:=1;//为1时应收窗口将收不到键盘消息
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
tag:=SetWindowsHookEx(WH_KEYBOARD, @Keyhook, hInstance, 0);
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(tag);
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);
end;

end.
happyboy 2002-05-13
  • 打赏
  • 举报
回复
我想是不是要用HOOK呀?不太清楚你要做什么?
也许HOOK可以达到你的目的。
星之瀚海 2002-05-13
  • 打赏
  • 举报
回复
我仔细想了想,我的第一个想法是行不通的,
因为当应用程序不是当前激活程序时,它是不接受消息的(我是这样认为的),所以只能在程序被禁止时进行控制。
星之瀚海 2002-05-13
  • 打赏
  • 举报
回复
在你的OnTimer事件中加入这样一句代码:
procedure TForm1.Timer1Timer(Sender: TObject);
var
vhdc:hdc;
fetchcolor:Tcolor;
begin
if Application.Active then
begin
//your code.........
end;
end;
星之瀚海 2002-05-12
  • 打赏
  • 举报
回复
写一个函数
MyMessage(var Msg:TMsg;handled:Boolean);
在其中加入你的判断条件,就是程序是否被激活的条件,
在程序的主窗体的onCreate事件中加入:
Application.Message:=MyMessage;
应该可以的。
今天没法给你实现代码,如果还没法解决,请写信给我:
My E-mail:xieguozheng@163.com
我一定会给你解决的。

1,184

社区成员

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

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