Ответы на часто задаваемые вопросы по Windows .

Ответы на часто задаваемые вопросы по Windows .

Как определить размер рабочего стола?

 

  // Размер рабочего стола без Тaskbar'а
procedure TForm1.Button1Click(Sender: TObject);
var
r: TRect;
begin
SystemParametersInfo( SPI_GETWORKAREA, 0, @r, 0 );
Memo1.Lines.Add( IntToStr( r.Top ) );
Memo1.Lines.Add( IntToStr( r.Left ) );
Memo1.Lines.Add( IntToStr( r.Bottom ) );
Memo1.Lines.Add( IntToStr( r.Right ) );
end;

Как узнать версию Windows?

// Способ первый
// Win95 или выше и NT3.5 или выше
function GetWinVer: string;
var
temp1, temp2, temp3: integer;
OsVer: OSVERSIONINFO;
begin
OsVer.dwOSVersionInfoSize := SizeOf( OSVERSIONINFO );
GetVersionEx( OsVer );
temp1 := OsVer.dwMajorVersion;
temp2 := OsVer.dwMinorVersion;
temp3 := OsVer.dwPlatformId;

if temp1 = 4 then
if temp2 = 0 then
if temp3 = VER_PLATFORM_WIN32_WINDOWS then
Result := 'Windows 95';

if temp1 = 4 then
if temp2 = 10 then
Result := 'Windows 98';

if temp1 = 4 then
if temp2 = 90 then
Result := 'Windows Me';

if temp1 = 3 then
if temp2 = 51 then
Result := 'Windows NT 3.51';

if temp1 = 4 then
if temp2 = 0 then
Result := 'Windows NT 4.0';

if temp1 = 5 then
if temp2 = 0 then
Result := 'Windows 2000';

if temp1 = 5 then
if temp2 = 1 then
Result := 'Windows XP';

if temp1 = 6 then
if temp2 = 0 then
Result := 'Windows Vista';

if temp1 = 6 then
if temp2 = 1 then
Result := 'Windows 7';
end;

// Способ второй
{true = Win9x}{false = NT}
function isWin9x: Bool;
asm
xor eax, eax
mov ecx, cs
xor cl, cl
jecxz @@quit
inc eax
@@quit:
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if isWin9x then
Form1.Caption := 'Win9x'
else
Form1.Caption := 'WinNT';
end;

// Способ третий
procedure TForm1.FormCreate(Sender: TObject);
begin
case Win32Platform of
VER_PLATFORM_WIN32s: ShowMessage( 'System is Win32s' );
VER_PLATFORM_WIN32_WINDOWS: ShowMessage( 'System is Windows 95' );
VER_PLATFORM_WIN32_NT: ShowMessage( 'System is Windows NT' );
end;
end;

// Способ четвертый
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s := 'Win32Platform = ' + IntToStr( Win32Platform ) + #13 +
'Win32MajorVersion = ' + IntToStr( Win32MajorVersion ) + #13 +
'Win32MinorVersion = ' + IntToStr( Win32MinorVersion ) + #13 +
'Win32BuildNumber = ' + IntToStr( Win32BuildNumber );
ShowMessage( s );
end;


Как вызвать диалог

SendMessage( FindWindow( 'Progman', 'Program Manager' ),
WM_CLOSE, 0, 0 );

Как заставить рабочий стол Windows обновится?


// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
var
Desktop: HWND;
begin
Desktop := FindWindow( 'Progman', 'Program Manager' );
Desktop := FindWindowEx( Desktop, 0, 'SHELLDLL_DefView', '' );
Desktop := FindWindowEx( Desktop, 0, 'SysListView32', '' );
PostMessage( Desktop, WM_KEYDOWN, VK_F5, 0 );
PostMessage( Desktop, WM_KEYUP, VK_F5, 1 shl 31 );
end;

// Способ второй
uses
..., ShlObj, ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject( CLSID_ActiveDesktop ) as IActiveDesktop;
ActiveDesktop.ApplyChanges( AD_APPLY_ALL or AD_APPLY_FORCE );
end;

Как получить список всех запущенных приложений?

procedure TForm1.Button1Click(Sender: TObject);
var
Wnd: hWnd;
buff: array [0..127] of Char;
begin
ListBox1.Clear;
// Получаем hWnd первого окна
Wnd := GetWindow( Handle, gw_HWndFirst );
// Цикл поиска окон
while Wnd <> 0 do
begin
// Исключаем невидимые окна
if IsWindowVisible( Wnd ) and
// Исключаем дочернии окна
( GetWindow( Wnd, gw_Owner ) = 0 ) and
// Исключаем окна без заголовков
( GetWindowText( Wnd, buff, sizeof( buff ) ) <> 0 ) then
begin
GetWindowText( Wnd, buff, sizeof( buff ) );
ListBox1.Items.Add( StrPas( buff ) );
end;
// Ищем следующее окно
Wnd := GetWindow( Wnd, gw_hWndNext );
end;
ListBox1.ItemIndex := 0;
end;

Как программно нажать на кнопку

// Способ первый
SendMessage( GetWindow( FindWindow( 'Shell_TrayWnd', nil ), GW_CHILD ),
WM_LBUTTONDOWN, MK_LBUTTON, LOWORD( 5 ) + HIWORD( 20 ) );

// Способ второй
SendMessage( Self.Handle, WM_SYSCOMMAND, SC_TASKLIST, 0 );

Как спрятать панель задач?

// Убрать панель задач
procedure TForm1.Button1Click(Sender: TObject);
var
TaskBar: HWND;
begin
TaskBar := FindWindow( 'Shell_TrayWnd', nil );
ShowWindow( TaskBar, SW_HIDE );
end;

// Вернуть панель задач
procedure TForm1.Button2Click(Sender: TObject);
var
TaskBar: HWND;
begin
TaskBar := FindWindow( 'Shell_TrayWnd', nil );
ShowWindow( TaskBar, SW_SHOW );
end;

Как узнать стиль картинки рабочего стола

uses
..., Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
TileWallpaper: string;
WallpaperStyle: string;
begin
Reg := TRegIniFile.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey( 'Control Panel\Desktop', false );
TileWallpaper := Reg.ReadString( 'TileWallpaper' );
WallpaperStyle := Reg.ReadString( 'WallpaperStyle' );
Reg.CloseKey;
Reg.Free;
case StrToInt( TileWallpaper ) of
0: case StrToInt( WallpaperStyle ) of
0: Edit1.Text := 'По центру';
2: Edit1.Text := 'Растянуть';
end;
1: if StrToInt( WallpaperStyle ) = 0 then Edit1.Text := 'Рядом';
else Edit1.Text := 'Без понятия';
end;
end;

Как узнать, отключена перерисовка окна при его перетаскивании или нет?

// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
var
b: bool;
begin
SystemParametersInfo( SPI_GETDRAGFULLWINDOWS, 0, @b, 0 );
if b then
ShowMessage( 'Перерисовка включена' )
else
ShowMessage( 'Перерисовка отключена' );
end;

// Способ второй
uses
..., Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
temp: string;
DragFull: byte;
begin
with TRegistry.Create do
begin
RootKey := HKEY_CURRENT_USER;
OpenKey( 'Control Panel\Desktop', false );
DragFull := StrToInt( ReadString( 'DragFullWindows' ) );
case DragFull of
0: ShowMessage( 'Перерисовка отключена' );
1: ShowMessage( 'Перерисовка включена' );
end;
CloseKey;
Free;
end;
end;

Как узнать, сколько времени работает Windows?

// Вариант первый
// Timer1.Interval = 1000
procedure TForm1.Timer1Timer(Sender: TObject);
var
Time, h, m, s: integer;
begin
Time := GetMessageTime div 1000;
s := Time mod 60;
m := ( Time div 60 ) mod 60;
h := ( Time div 3600 );
Form1.Caption := Format( '%d:%.2d:%.2d', [h,m,s] );
end;

// Вариант второй
// Timer1.Interval = 1000
procedure TForm1.Timer1Timer(Sender: TObject);
var
Time, h, m, s: integer;
begin
Time := GetTickCount div 1000;
s := Time mod 60;
m := ( Time div 60 ) mod 60;
h := ( Time div 3600 );
Form1.Caption := Format( '%d:%.2d:%.2d', [h,m,s] );
end;


 

 

 

Добавить комментарий


Защитный код
Обновить