Форум: "WinAPI";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизКак определить активен ли сейчас рабочий стол???? Найти похожие ветки
← →
WaS © (2004-10-29 10:49) [0]Все и так ясно. Большая просьба помочь...
← →
Grundic © (2004-10-29 11:12) [1]ативен - если нет открытых окон или все окна свернуты или когда на стол жмакнули мышой?
← →
WaS © (2004-10-29 11:19) [2]И то, и другое можно без хлеба ;)
А точнее при свернутых окнах.
← →
[lamer]Barmaglot © (2004-10-29 11:28) [3]GetActiveWindow?
← →
[lamer]Barmaglot © (2004-10-29 11:30) [4]GetForegroundWindow?
← →
Grundic © (2004-10-29 11:30) [5]не. Кажись - даст последнее свернутое. Хотя попробуй. Ща попроюсь у себя................
← →
Grundic © (2004-10-29 11:31) [6]посмотри...
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.
← →
WaS © (2004-10-29 12:29) [7]Желательно осле клика мышью, дабы в приведенном выше примере тока на свернутые окна.
← →
WaS © (2004-10-29 13:17) [8]Эгегегей, может кто-нить таки поможет???
Предыдущий пример не подходит.
Так, как предположим что (любая) программа не активна и в то же время не свернута, а активен рабочий стол - на него щелкнули мышью. Как быть?
← →
-SeM- (2004-10-29 14:01) [9]if GetForegroundWindow = FindWindow("Progman", nil) then ...
← →
WaS © (2004-10-29 14:21) [10]2 -SeM-
Это именно то что нужно!!!
Прибольшое спасибо и дай бог тебе здоровьечка... ;)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c