Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.06;
Скачать: CL | DM;

Вниз

Класс окна   Найти похожие ветки 

 
ATLANTIDO   (2002-04-20 20:55) [0]

Что такое класс окна (чем он определяется) и как его узнать ?
Делаю так :

procedure TForm1.Timer1Timer(Sender: TObject);
var
buffer : PChar;
H : HDC;
begin
H:=GetForegroundWindow;
GetClassName(h, buffer, sizeof(buffer));
Memo1.Lines.Add(buffer);
end;

Получаю, что имя класса любого окна - "Sfѓx:"
В чем ошибка ?


 
Anatoly Podgoretsky   (2002-04-20 21:00) [1]

Память будет Пушкин выделять?


 
ATLANTIDO   (2002-04-20 21:05) [2]

Ок ! Исправил, работает :

procedure TForm1.Timer1Timer(Sender: TObject);
var
buffer : array [0..254] of char;
H : HDC;
begin
H:=GetForegroundWindow;
GetClassName(h, buffer, sizeof(buffer));
Memo1.Lines.Add(buffer);
end;

А как быть с первой половиной вопроса ?



 
Anatoly Podgoretsky   (2002-04-20 21:13) [3]

Класс окна - это текст (тип/имя), которые ты сам задаешь, например для форм это имя класса.


 
ATLANTIDO   (2002-04-20 21:15) [4]

Т.е. класс окна можно считать уникальным для каждого окна ?


 
ION T   (2002-04-20 21:35) [5]

Низзя:(( Например TMainForm скорее всего будет во всех приложниях сделанных на Дельфи.....


 
ATLANTIDO   (2002-04-20 21:39) [6]

А где можно подробнее узнать какой класс к каким окнам относится ?


 
ION T   (2002-04-20 21:48) [7]

Да просто в большинстве проэктов главную форму называют MainForm, вот и получится если два таких приложения одновременно запущены, то FindWindow("TMainForm", nil) выдаст хендл окна первого запушенного из них....

А зачем надо?


 
Anatoly Podgoretsky   (2002-04-20 21:52) [8]

ATLANTIDO © (20.04.02 21:15)
Неверно, окон класса "Edit, Button" весьма много, хочешь уникальность то будь добр позаботить о ней сам.


 
ATLANTIDO   (2002-04-20 21:55) [9]

Пишу программу ограничения действий пользователя. Вот и хотел узнать какие окна какие классы имеют, чтобы убивать опасные.
Я конечно могу и сам єто узнать, но вдруг существуют не опасные окна с точно такиме классом.


 
Anatoly Podgoretsky   (2002-04-20 21:59) [10]

Ты должен шпионом определить классы окон опасных для тебя программ, но опасные программы обычно не используют уникальных классов, что бы их некоторые не ограничивали.


 
ATLANTIDO   (2002-04-20 22:06) [11]

Еще момент : нужно запретить пользователю пользоваться меню "Вид/Панели обозревателя/Папки" IE. Так вот, имеет ли эта панель свой класс или еще какую другую уникальную хернь, по которой ее можно найти ?


 
Anatoly Podgoretsky   (2002-04-20 22:17) [12]

Посмотри шпионом


 
ATLANTIDO   (2002-04-20 22:24) [13]

Эта панель - дочернее окно (Да ?). А как получить ее хэндл ?
(GetForegoundWindow тут уже не при делах)


 
Song   (2002-04-21 09:54) [14]

FindWindow()
GetWindowLong()


 
ATLANTIDO   (2002-04-21 23:06) [15]

Воспользовавшись этой статьей написал следующий код:

unit Unit2;
interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
ListBox1: TListBox;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
function EnumProc (Wd: HWnd; Param: LongInt): Boolean; stdcall; // Обязательно stdcall !!!
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.EnumProc (Wd: HWnd; Param: LongInt): Boolean; stdcall; // Обязательно stdcall !!!
var
buffer: array [0..255] of char;
Begin
GetClassName(Wd, buffer, SizeOf(Buffer));
if Buffer<>"" then ListBox1.Items.Add(buffer);
EnumProc := TRUE;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
H : HDC;
begin
H:=GetForegroundWindow;
if H<>0 then
begin
EnumChildWindows(h, @TForm1.EnumProc, 0);
ListBox1.items.Add("----------------");
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items.Clear;
end;

end.

В ListBox"e выводятся тоько "-----------";
В чем ошибка ?



Страницы: 1 вся ветка

Текущий архив: 2002.05.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
3-17471
Ежик
2002-04-12 09:54
2002.05.06
DbGrid как сделать строки разноцветными?


6-17660
Morozik
2002-02-18 12:57
2002.05.06
Winsock


1-17578
Чужой
2002-04-22 14:03
2002.05.06
Реестр


1-17556
Ptushenko Denis
2002-04-22 10:02
2002.05.06
Как сделать чтоб прога стала видимой после полной загрузки всех


14-17680
-=CrazyFish=-
2002-03-26 15:09
2002.05.06
АОН