-
출처 : http://cafe.naver.com/delphian/52
윈도우 캡션 깜박이게 하기
윈도우 디렉토리 알아내기
비퍼 ON/OFF 시키기
시스템 가동방법 알아내기
마우스버튼 역할바꾸기
스크린세이버 ON/OFF시키기
마우스버튼 개수 알아내기
WIN.INI파일에 문자열쓰기
WIN.INI파일에서 문자열읽어오기
INI파일에 문자열쓰기
특정 INI파일에서 문자열읽어오기
현재 실행중인 OS버전 알아내기
윈도우 배경화면바꾸기
CPU종류 알아내기
메모리상태 알아내기
OEM 코드페이지 알아내기
토글키 상태알아내기
윈도우즈 가동시간알아내기
날짜정보 리셋하기
윈도우즈 종료시키기
환경변수 알아내기
디스크 볼륨정보 알아내기
현재 작업디렉토리 알아내기/지정하기
해상도 알아내기
프로그램종료 방지하기(10/13/98)
실행중인 Application List알아내기(10/13/98)
--------------------------------------------------------------------------------
윈도우 캡션 깜박이게 하기
procedure TForm1.FormActivate(Sender: TObject);
begin
Timer1.Enabled := True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
FlashWindow(Form1.Handle, True);
end;
BOOL FlashWindow(
HWND hWnd, //폼의 Handle속성을 지정
BOOL bInvert //윈도우즈 95에서는 이 변수값을 무시하며,
//True로 지정된 경우 타이틀바가 활성/비활성 상태가 토글된다
);
--------------------------------------------------------------------------------
윈도우 디렉토리 알아내기
procedure TForm1.Button1Click(Sender: TObject);
var
Windir : array[0..30] of char;
begin
GetWindowsDirectory(Windir,sizeof(windir));
Label1.Caption := Windir;
end;
UNIT GetWindowDirectory(
LPTSTR lpBuffer, //시스템 디렉토리를 저장할 버퍼의 포인터
UINT uSize //디렉토리 버퍼의 크기
);
--------------------------------------------------------------------------------
비퍼 ON/OFF 시키기
procedure TForm1.Button1Click(Sender: TObject);
begin
SystemParametersInfo(SPI_SETBEEP, 1, Pchar(0), 0); //Beeper ON
Label1.Caption := 'Beep On';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SystemParametersInfo(SPI_SETBEEP, 0, Pchar(0), 0); //Beeper OFF
Label1.Caption := 'Beep Off';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
MessageBeep(MB_OK);
end;
BOOL SystemParametersInfo(
UINT uiAction, //조회하거나 변경할 시스템 파라미터변수
UINT uiParam, //시스템 파라미터 변수에 따라 지정
PVOID pvParam, //시스템 파라미터 변수에 따라 지정
UINT fWinini //시스템 파라미터 변수의 내용이 변경될 경우
//사용자프로파일의 변경여부를 지정
);BOOL MessageBeep(
UINT uType
);
--------------------------------------------------------------------------------
시스템 가동방법 알아내기
procedure TForm1.Button1Click(Sender: TObject);
var
boot : integer;
begin
boot := GetSystemMetrics(SM_CLEANBOOT);
case boot of
0 : Label1.Caption := 'Normal Boot';
1 : Label1.Caption := 'Fail-safe Boot';
2 : Label1.Caption := 'Fail-safe with Network Boot';
end;
end;
int GetSystemMetrics(
int nIndex //시스템에서 사용하는 정보에대한 변수값
);
--------------------------------------------------------------------------------
마우스버튼 역할바꾸기
procedure TForm1.Button1Click(Sender : TObject);
begin
SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, 1, PChar(0), 0);
Label1.Caption := 'Left : Popup Right : Pointing and Execute';
end;
procedure TForm1.Button2Click(Sender : TObject);
begin
SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, 0, PChar(0), 0);
Label1.Caption := 'Left : Pointing and Execute Right : Popup';
end;
BOOL SystemParametersInfo(
UINT uiAction, //조회하거나 변경할 시스템 파라미터변수
UINT uiParam, //시스템 파라미터 변수에 따라 지정
PVOID pvParam, //시스템 파라미터 변수에 따라 지정
UINT fWinini //시스템 파라미터 변수의 내용이 변경될 경우
//사용자프로파일의 변경여부를 지정
);
BOOL MessageBeep(
UINT uType
);
--------------------------------------------------------------------------------
스크린세이버 ON/OFF시키기
procedure TForm1.Button1Click(Sender : TObject);
begin
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, PChar(0), 0);
Label1.Caption := 'SCREEN SAVER ON';
end;
procedure TForm1.Button1Click(Sender : TObject);
begin
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, PChar(0), 0);
Label1.Caption := 'SCREEN SAVER OFF';
end;
BOOL SystemParametersInfo(
UINT uiAction, //조회하거나 변경할 시스템 파라미터변수
UINT uiParam, //시스템 파라미터 변수에 따라 지정
PVOID pvParam, //시스템 파라미터 변수에 따라 지정
UINT fWinini //시스템 파라미터 변수의 내용이 변경될 경우
//사용자프로파일의 변경여부를 지정
);
BOOL MessageBeep(
UINT uType
);
--------------------------------------------------------------------------------
마우스버튼 개수 알아내기
procedure TForm1.Button1Click(Sender: TObject);
var
ButtonNo : integer;
begin
ButtonNo := GetSystemMetrics(SM_CMOUSEBUTTONS);
Label1.Caption := IntToStr(ButtonNo)+'개입니다';
end;
int GetSystemMetrics(
int nIndex //시스템에서 사용하는 정보에대한 변수값
);
--------------------------------------------------------------------------------
WIN.INI파일에 문자열쓰기
procedure TForm1.Button1Click(Sender : TObject);
begin
WriteProfileString(Edit1.Text, Edit2.Text, Edit3.Text);
// Win.ini 파일에 Edit 컴포넌트에 입력된 문자열을 출력한다.
end;
BOOL WriteProfileString(
LPCTSTR lpszSection, //Win.ini파일 Section명
LPCTSTR lpszKey, //Section에 출력할 Key명
LPCTSTR lpszString //Key에 할당할 문자열
};
// INI파일의 Section, Key, String의 구성형태
// [Section]
// Key = String;
--------------------------------------------------------------------------------
WIN.INI파일에서 문자열읽어오기
procedure TForm1.Button1Click(Sender : TObject);
var
retstr : string;
begin
GetProfileString(Edit1.Text, Edit2.Text, Edit3.Text, retstr,sizeof(retstr));
Label1.Caption := retstr;
end;
DWORD GetProfileString(
LPCTSTR lpAppName, //Win.ini파일 Section명
LPCTSTR lpKeyName, //Section에 포함되어 있는 Key명
LPCTSTR lpDefault, //함수에러 발생시 되돌려지는 문자열
LPCTSTR lpReturnedString, //Key에 할당되어 있는 문자열을 읽어오는 문자열의 버퍼의 포인터
DWORD nSize //문자열 버퍼의 크기
);
--------------------------------------------------------------------------------
INI파일에 문자열쓰기
procedure TForm1.Button1Click(Sender : TObject);
begin
WritePrivateProfileString(Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text);
//Edit4에서 지정한 파일에 각 Edit컴포넌트에 입력된 문자열을 출력한다.
//출력하고자 하는 파일이 없을 경우 새로 만든다.
end;
BOOL WritePrivateProfileString(
LPCTSTR lpszSection, //INI파일 Section명
LPCTSTR lpszKey, //Section에 출력할 Key명
LPCTSTR lpszString, //Key에 할당할 문자열
LPCTSTR lpszFile //문자열을 출력할 INI파일명으로 확장자까지 입력해야한다.
);
--------------------------------------------------------------------------------
특정 INI파일에서 문자열읽어오기
procedure TForm1.Button1Click(Sender : TObject);
var
retstr : string;
begin
GetPrivateProfileString(Edit1.Text, Edit2.Text, Edit3.Text, retstr,sizeof(retstr),Edit4.Text);
//특정 INI파일의 지정한 Section 및 Key에 할당된 문자열을 읽어온다.
//GetPrivateProfileString함수에 지정한 Section이나 Key가 없을 경우
//Default String을 되돌린다.
Label1.Caption := retstr;
end;
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, //특정 INI파일 Section명
LPCTSTR lpKeyName, //Section에 포함되어 있는 Key명
LPCTSTR lpDefault, //함수에러 발생시 되돌려지는 문자열
LPTSTR lpReturnedString, //Key에 할당되어 있는 문자열을 읽어오는 문자열버퍼의 포인터
DWORD nSize, //문자열버퍼의 크기
LPCTSTR lpFileName // INI파일명으로 확장자까지 입력해야한다.
);
--------------------------------------------------------------------------------
현재 실행중인 OS버전 알아내기
procedure TForm1.Button1Click(Sender : TObject);
var
Version : LongInt;
begin
Version := GetVersion;
Label1.Caption := 'Windows ' + IntToStr(LoByte(LoWord(Version))) + '.' +
IntToStr(HiByte(LoWord(Version)));
Label2.Caption := 'DOS ' + IntToStr(HiByte(HiWord(Version))) + '.' +
IntToStr(LoByte(HiWord(Version)));
end;
DWORD GetVersion(VOID)
Platform High order bit Low order byte (major version number)
Windows NT zero 3 or 4
Windows 95 1 4
Win32s with Windows 3.1 1 3
--------------------------------------------------------------------------------
윈도우 배경화면바꾸기
procedure ChangeBatang;
var
Reg : TRegIniFile;
begin
Reg := TRegIniFile.Create('Control Panel');
Reg.WriteString('desktop','Wallpaper','c:\babo.bmp');
// 바탕화면으로 c:\babo.bmp를 사용함.
Reg.WriteString('desktop','TitleWallpaper','1');
Reg.Free;
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,
nil, SPIF_SENDWININICHANGE);
end;
BOOL SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);
--------------------------------------------------------------------------------
CPU종류 알아내기
procedure TForm1.Button1Click(Sender: TObject);
var
Sysinfo : TSysteminfo;
begin
GetSystemInfo(Sysinfo);
case Sysinfo.dwProcessorType of
386 : Label1.Caption := 'Intel 386 ';
486 : Label1.Caption := 'Intel 486 ';
586 : Label1.Caption := 'Intel Pentium';
4000 : Label1.Caption := 'MIPS R4000';
21046 : Label1.Caption := 'Alpha 21046'
end;
end;
VOID GetSystemInfo(
LPSYSTEM_INFO lpSystemInfo // address of system information structure
);
// SYSTEM_INFO 구조체 내용 - 자세한 사항은 도움말 참조
typedef struct _SYSTEM_INFO { // sinf
union {
DWORD dwOemId;
struct {
WORD wProcessorArchitecture;
WORD wReserved;
};
};
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
} SYSTEM_INFO;
--------------------------------------------------------------------------------
메모리상태 알아내기
procedure TForm1.Button1Click(Sender : TObject);
var
MemStat : TMemoryStatus;
begin
MemStat.dwLength := sizeof(TMemoryStatus);
GlobalMemoryStatus(MemStat);
with MemStat do
begin
Label1.Caption := Format('%d KB',[Trunc(dwTotalPhys/1024)]); //총메모리
Label2.Caption := Format('%d KB',[Trunc(dwAvailPhys/1024)]); //MemAvailable
Label3.Caption := Format('%d %%',[trunc(dwAvailPhys/dwTotalPhys*100)]); //사용메모리
Label4.Caption := Format('%d KB',[Trunc(dwTotalPageFile/1024)]); //SwapFileSetting
Label5.Caption := Format('%d KB',[Trunc((dwTotalPageFile-dwAvailPageFile)/1024)]); //SwapFileSize
Label6.Caption := Format('%d %%',[100-trunc(dwAvailPageFile/dwTotalPageFile*100)]); //SwapFileUsage
end;
BOOL GetDiskFreeSpace(
LPCTSTR lpRootPathName, // 디스크 루트 패스
LPDWORD lpSectorsPerCluster, // 클러스터당 섹터수
LPDWORD lpBytesPerSector, // 섹터당 바이트수
LPDWORD lpNumberOfFreeClusters, // 사용하지 않은 클러스터수
LPDWORD lpTotalNumberOfClusters // 총 클러스터수
);
--------------------------------------------------------------------------------
OEM 코드페이지 알아내기
procedure TForm1.Button1Click(Sender : TObject);
var
ret : integer;
begin
ret := GetOEMCP;
case ret of
437 : Label1.Caption := 'MS_DOS United States(CP 437)';
//리턴값은 아래 설명 참조
// .....
default : Label1.Caption := 'Etc';
end;
end;
UINT GetOEMCP(VOID);
// OEM 코드값 리턴
437 MS-DOS United States
708 Arabic (ASMO 708)
709 Arabic (ASMO 449+, BCON V4)
710 Arabic (Transparent Arabic)
720 Arabic (Transparent ASMO)
737 Greek (formerly 437G)
775 Baltic
850 MS-DOS Multilingual (Latin I)
852 MS-DOS Slavic (Latin II)
855 IBM Cyrillic (primarily Russian)
857 IBM Turkish
860 MS-DOS Portuguese
861 MS-DOS Icelandic
862 Hebrew
863 MS-DOS Canadian-French
864 Arabic
865 MS-DOS Nordic
866 MS-DOS Russian (former USSR)
869 IBM Modern Greek
874 Thai
932 Japan
936 Chinese (PRC, Singapore)
949 Korean
950 Chinese (Taiwan, Hong Kong)
1361 Korean (Johab)
--------------------------------------------------------------------------------
토글키 상태알아내기
procedure TForm1.Button1Click(Sender : TObjcet);
begin
if GetKeyState(VK_INSERT) = 1 then
Label1.Caption := 'ON'
else
Label1.Caption := 'OFF';
//Insert 키가 눌려졌으면 1, 아니면 0을 리턴
//다른 토글키도 마찬가지
end;
SHORT GetKeyState(
int nVirtKey // 가상키 코드
);
//키값
VK_CAPITAL Caps Lock키
VK_NUMLOCK Num Lock키
VK_SCROLL Scroll Lock키
--------------------------------------------------------------------------------
윈도우즈 가동시간알아내기
procedure TForm1.Button1Click(Sender : TObject);
var
hh, mm, ss : integer;
ret : LongInt;
buff : string;
begin
ret := GetTickCount/1000;
hh := ret/3600; //시간계산
ret := ret -(3600*hh);
mm := ret/60 //분 계산
ret := ret - (60*mm);
ss := ret; //초 계산
strcpy(buff,IntToStr(hh)+'시간 '+IntToStr(mm)+'분 '+IntToStr(ss'+초');
Label1.Caption := buff;
end;
--------------------------------------------------------------------------------
날짜정보 리셋하기
procedure TForm1.Button1Click(Sender: TObject);
var
s_time : TSystemTime;
begin
s_time.wYear := StrToInt(Edit1.Text);
s_time.wMonth := StrToInt(Edit2.Text);
s_time.wDay := StrToInt(Edit3.Text);
SetSystemTime(s_time);
Label1.Caption := DateToStr(Now);
end;
BOOL SetSystemTime(
CONST SYSTEMTIME *lpSystemTime // address of system time to set
);
// SYSTEMTIME 구조체
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
--------------------------------------------------------------------------------
윈도우즈 종료시키기
procedure TForm1.Button1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0 : ExitWindowsEx(EWX_FORCE, 0); //강제종료
1 : ExitWindowsEx(EWX_LOGOFF, 0); //LOG OFF
2 : ExitWindowsEx(EWX_POWEROFF,0); //Shut Down & Turn Off
3 : ExitWindowsEx(EWX_REBOOT, 0); //Shut Down & Reboot
4 : ExitWindowsEx(EWX_SHUTDOWN, 0); //ShutsDown
end;
end;
BOOL ExitWindowsEx(
UINT uFlags, // shutdown operation
DWORD dwReserved // reserved
);
--------------------------------------------------------------------------------
환경변수 알아내기
procedure TForm1.Button1Click(Sender: TObject);
var
Dosenv : Pchar;
len, i : Integer;
begin
Dosenv := GetEnvironmentStrings;
while Dosenv <> '\0' do
begin
len := StrLen(Dosenv);
if (len = 0) then break
else begin
Memo1.Lines.Add(Dosenv);
for i := 0 to len do
Inc(Dosenv);
end;
end;
end;
LPVOID GetEnvironmentStrings(VOID)
//환경변수에 대한 문자포인터를 리턴
--------------------------------------------------------------------------------
디스크 볼륨정보 알아내기
procedure TForm1.Button1Click(Sender: TObject);
var
RPName : Pchar;
VolBuf : Pchar;
VolSNum : Longint;
MaxLen : Longint;
FileFlags : Longint;
FileNameBuf : Pchar;
begin
GetVolumeInformation(RPName, VolBuf, sizeof(VolBuf), VolSNum, MaxLen,
FileFlags, FileNameBuf, sizeof(FileNameBuf));
Label1.Caption := RPName;
Label2.Caption := VolBuf;
Label3.Caption := IntToStr(VolSNum);
Label4.Caption := IntToStr(MaxLen);
end;
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // 디스크 루트 패스
LPTSTR lpVolumeNameBuffer, // 볼륨이름에 대한 버퍼 포인터
DWORD nVolumeNameSize, // 볼륨이름 버퍼 크기
LPDWORD lpVolumeSerialNumber, // 시리얼 넘버
LPDWORD lpMaximumComponentLength, // 지정 가능한 파일이름의 최대길이
LPDWORD lpFileSystemFlags, // 파일시스템 플래그
LPTSTR lpFileSystemNameBuffer, // 파일시스템 네임버퍼 포인터
DWORD nFileSystemNameSize // 파일시스템 네임버퍼 크기
);
--------------------------------------------------------------------------------
현재 작업디렉토리 알아내기/지정하기
procedure TForm1.Button1Click(Sender: TObject);
var
CurrDir : array[0..200] of char;
begin
GetCurrentDirectory(sizeof(CurrDir), CurrDir);
//현재 지정된 디렉토리를 알아낸다.
Label1.Caption := CurrDir;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SetCurrentDirectory(Pchar(Edit1.Text));
//새로운 디렉토리를 지정한다.
end;
DWORD GetCurrentDirectory(
DWORD nBufferLength, // 디렉토리 버퍼의 크기
LPTSTR lpBuffer // 디렉토리 버퍼에 대한 포인터
);
BOOL SetCurrentDirectory(
LPCTSTR lpPathName // 새로운 현재 디렉토리명
);
--------------------------------------------------------------------------------
해상도 알아내기
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(GetSystemMetrics(SM_CXSCREEN)) +
'*' + IntToStr(GetSystemMetrics(SM_CYSCREEN));
end;
--------------------------------------------------------------------------------
프로그램종료 방지하기private
procedure WMClose(var Msg : TWMClose); message WM_CLOSE;
publicend;
var
Form1: TForm1;
CloseDown : Boolean;implementation
{$R *.DFM}
procedure TForm1.WMClose(var Msg : TWMClose);
begin
if NOT CloseDown then
Msg.Result := 0
else
inherited;
end;
CloseDown의 상태를 True, False로 조정함으로써
종료를 방지, 허가할 수 있다.--------------------------------------------------------------------------------
실행중인 Application List알아내기function EnumWinProc(Wnd: HWND; frm: TForm1) : Boolean;
Export;{$IFDEF Win32}stdCall;{$ENDIF}
var
WinText : Array[0..255] of Char;
begin
GetWindowText(Wnd, WinText, 255);
Result := True;
if (StrPas(WinText) <> '') then
frm.ListBox1.Items.Add(StrPas(WinText));
end;procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumwinProc, Longint(self));
end;
--------------------------------------------------------------------------------