0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 10
1

Нужно описание исходного кода скринсейвера, т.е. где что происходит, что чему и для чего присваивается и т.д

16.02.2015, 17:25. Показов 1100. Ответов 3
Метки нет (Все метки)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
unit unitMain;
 
interface
 
uses Windows, Classes, Graphics, Forms, Registry;
 
type
  TfrmMain = class(TForm)
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    procedure Start(Sender: TObject);
    procedure FormShow(Sender: TObject);
  end;
 
var
  frmMain: TfrmMain;
 
implementation
{$R *.dfm}
 
function isPreview: Boolean;
var S: String;
begin
  Result:=false;
  S:=ParamStr(1);
  if Length(S)>1 then begin
    Delete(S,1,1); 
    S[1]:=UpCase(S[1]);
    if S[1]='P' then Result:=true;
  end;
end;
 
procedure CheckPassword;
 
type TVSSP = function(Parent: hWnd): Bool; stdcall;
var
  Key: hKey;
  D1,D2: Integer;
  Value: Integer;
  Lib: THandle;
  VSSP: TVSSP;
begin
  SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,nil,0); 
  if RegOpenKeyEx(hKey_Current_User,'Control Panel\Desktop',0,Key_Read,Key)=Error_Success then begin
    D2:=SizeOf(Value);
    if RegQueryValueEx(Key,'ScreenSaveUsePassword',nil,@D1,@Value,@D2)=Error_Success then begin
     
      if Value<>0 then begin
        Lib:=LoadLibrary('Password.cpl'); 
        if Lib>32 then begin
          @VSSP:=GetProcAddress(Lib,'VerifyScreenSavePwd');
          ShowCursor(true);
          if @VSSP<>nil then VSSP(frmMain.Handle); 
          FreeLibrary(Lib);
        end;
      end;
    end;
    RegCloseKey(Key);
    SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,nil,0); 
  end;
end;
 
procedure TfrmMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
  CheckPassword;
  Close;
end;
 
procedure Delay(T: Cardinal);
var Start: Cardinal;
begin
  Start:=GetTickCount;
  repeat Application.ProcessMessages until (GetTickCount-Start)>=T;
end;
 
function StrToInt(Value: String): Integer;
var E: Integer;
begin
  Val(Value,Result,E);
  if E=0 then Exit;
  Result:=0;
end;
 
procedure TfrmMain.Start(Sender: TObject);
var
  R: TRegIniFile;
  Speed: Integer;
  ssCanvas: TCanvas;
  ssWnd: hWnd;
  ssRect: TRect;
  ssDC:HDC;
  MPos0,MPos: TPoint;
begin
  R:=TRegIniFile.Create;
  R.RootKey:=HKey_Local_Machine;
  if R.OpenKey('Software',false) then Speed:=R.ReadInteger('ScreenSaver','Speed',10);
  R.Free;
  Randomize;
  ssCanvas:=TCanvas.Create;
  if isPreview then begin
    ssWnd:=StrToInt(ParamStr(2));
    ParentWindow:=ssWnd;
    Windows.GetClientRect(ssWnd,ssRect);
    ssDC:=GetDC(ssWnd);
    ssCanvas.Handle:=ssDC;
    MPos.X:=0;
    repeat
      ssCanvas.Pen.Color:=Random(High(TColor));
      ssCanvas.Pen.Width:=10;
      ssCanvas.LineTo(Random(ssRect.Right),Random(ssRect.Right));
      Delay(10);
      Inc(MPos.X);
    until MPos.X>100;
  end
  else begin
    GetCursorPos(MPos0);
    ShowCursor(false);
    ssWnd:=0;
    Left:=0; Top:=0;
    Width:=Screen.Width; Height:=Screen.Height;
    ParentWindow:=ssWnd;
    ssDC:=GetDC(ssWnd);
    ssCanvas.Handle:=ssDC;
    repeat
      ssCanvas.Pen.Color:=Random(High(TColor));
      ssCanvas.Pen.Width:=10;
      ssCanvas.LineTo(Random(Width),Random(Height));
      Delay(Speed);
      GetCursorPos(MPos);
    until (abs(MPos.X-MPos0.X)>3) or (abs(MPos.Y-MPos0.Y)>3);
  end;
  ReleaseDC(ssWnd,ssDC);
  ssCanvas.Free;
end;
 
procedure TfrmMain.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle,SW_Hide);
end;
 
end.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2015, 17:25
Ответы с готовыми решениями:

Нюансы синтаксиса: объяснить что происходит в заданных строках кода и для чего нужны указанные конструкции
Наткнулся на урок по C++ в интернете, где был пример с перебором &quot;телефонной книги&quot;. Вот кусок...

Что такое md5? Для чего это нужно? Где используется?
Всем доброго времени суток! Что такое md5? Для чего это нужно? Где используется? Спасибо!

Культура оформления кода: что такое enum? Где, когда и для чего уместно применять этот тип?
не понял за что отвечают эти две строчки: enum ChosenOperation { ADD = 1, SHOW, SEARCH, EXIT };...

В этой части кода происходит объявление функций? Что такое void? Что в скобках?
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float...

3
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 10
17.02.2015, 17:07  [ТС] 2
Например, прога тестирования на делфи будет иметь след. организацию входных\выходных данных:
Входные данные поступают в систему в виде значений получаемых путём заполнения полей данных о тестируемом (фамилия, имя, отчество, группа в которой проходит обучение) до начала теста. Выходные данные имеют текстовый формат и сохраняются в отдельный файл специально отведённой папки.
А как будет при работе скринсейвера?
0
840 / 735 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
18.02.2015, 13:40 3
Не пойму, а зачем @ собачки в коде?
0
Заблокирован
18.02.2015, 20:06 4
"Собачка" то бишь @ означает адрес.
В данном случае адрес переменной.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2015, 20:06
Помогаю со студенческими работами здесь

Напишите, что это и для чего нужно
stk.IsFull stk.IsEmpty stk.Pop stk.GetNum Что это всё? Как это называется? Для чего...

Что такое событие, для чего оно нужно
Помогите разобраться, что ли Вчера пытался понять что же такое событие, для чего оно нужно, зачем...

1С.Программирование: для чего нужно? что необходимо знать?
для чего нужно? что необходимо знать?

Pragma link - что за зверь и для чего нужно?
Обычно, когда добавляешь к проекту сторонний компонент, то в тексте юнита появляется запись...

Разработка приложений для Андроид. С чего начать? Что нужно изучить?
Ребят, подскажите! Хочу стать разрабом для популярной ОС Андроид, с чего начать? Что нужно изучить,...

Oscillator Circuits / Clock Generation - что это и для чего нужно?
Oscillator Circuits / Clock Generation - что это и для чего нужно?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru