![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить активен ли сейчас рабочий стол???? [D7]
WaS © (2004-10-29 10:49:00)Все и так ясно. Большая просьба помочь...
WaS (2004-10-29 14:21:00) [1]2 -SeM-
Это именно то что нужно!!!
Прибольшое спасибо и дай бог тебе здоровьечка... ;)
-SeM- (2004-10-29 14:01:00) [2]if GetForegroundWindow = FindWindow('Progman', nil) then ...
WaS (2004-10-29 13:17:00) [3]Эгегегей, может кто-нить таки поможет???
Предыдущий пример не подходит.
Так, как предположим что (любая) программа не активна и в то же время не свернута, а активен рабочий стол - на него щелкнули мышью. Как быть?
WaS (2004-10-29 12:29:00) [4]Желательно осле клика мышью, дабы в приведенном выше примере тока на свернутые окна.
Grundic (2004-10-29 11:31:00) [5]посмотри...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids, ValEdit;
type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Button2: TButton;
ValueListEditor1: TValueListEditor;
Timer2: TTimer;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i:Byte;
implementation
procedure AddItemInIfNotEq(V:TValueListEditor;Item:string);
var
DateTime : TDateTime;
str : string;
begin
if Item='Program Manager' then Item:='[Нет открытых окон]';
if Item='SysFader' then Exit;
if V.Cells[1,V.RowCount-1]<>Item then
begin
DateTime := Time;
str := TimeToStr(DateTime);
DateTime := Date;
str :=str+' '+DateToStr(DateTime);
V.InsertRow(str,Item,True);
end;
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var Wnd : hWnd;
buff: array [0..127] of char;
s:String;
err:Cardinal;
begin
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do begin {Не показываем:}
if (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков}
and IsWindowVisible(Wnd) {Невидимые окна}
// and (GetWindow(Wnd, GW_OWNER) = 0) {Дочерние окна}
// and (Wnd <> Application.Handle) {Собственное окно}
then
begin
GetWindowText(Wnd, buff, sizeof(buff));
AddItemInIfNotEq(ValueListEditor1,StrPas(buff));
Exit;
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
Form1.Caption:='Форма';
AddItemInIfNotEq(ValueListEditor1,'NONE');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button1Click(Self);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=NOT Timer1.Enabled;
if Timer1.Enabled then Button2.Caption:='pause' else Button2.Caption:='play';
end;
procedure TForm1.FormCreate(Sender: TObject);
var
DateTime : TDateTime;
str : string;
begin
i:=0;
DateTime := Time;
str := TimeToStr(DateTime);
DateTime := Date;
str :=str+' '+DateToStr(DateTime);
ValueListEditor1.Keys[1]:=str;
ValueListEditor1.Values[str]:='START';
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
i:=(i+1) mod 10;
Label1.Caption:=IntToStr(i);
Label1.Refresh;
if i>5 then Self.Hide
else Self.Visible:=True;
end;
end.
[lamer]Barmaglot (2004-10-29 11:30:00) [6]GetForegroundWindow?
Grundic (2004-10-29 11:30:00) [7]не. Кажись - даст последнее свернутое. Хотя попробуй. Ща попроюсь у себя................
[lamer]Barmaglot (2004-10-29 11:28:00) [8]GetActiveWindow?
WaS (2004-10-29 11:19:00) [9]И то, и другоеможно без хлеба ;)
А точнее при свернутых окнах.
Grundic (2004-10-29 11:12:00) [10]ативен - если нет открытых окон или все окна свернуты или когда на стол жмакнули мышой?