::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2005-07-21 17:09:41, Hit : 6923, Vote : 1517
 http://www.howto.pe.kr
 시스템 대기모드/화면 보호기/모니터 끄기 이벤트 감지하기

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
  private
    { Private declarations }
  public
    { Public declarations }
    procedure WMSyscommandBroadcast(var Msg: TMessage); message WM_SYSCOMMAND;
    procedure WMPowerBroadcast(var Msg: TMessage); message WM_POWERBROADCAST;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSyscommandBroadcast(var Msg: TMessage);
var
  SSStr: String;
begin
  if (Msg.wParam and $FFF0) = SC_SCREENSAVE then // 화면 보호기 시작
  begin
    with TRegistry.Create do
    begin
      RootKey := HKEY_CURRENT_USER;
      OpenKey('Control Panel\Desktop',False);
      SSStr := ReadString('SCRNSAVE.EXE'); // Windows NT 기반
      Free;
    end;
    if not FileExists(SSStr) then
    begin
      with TIniFile.Create('system.ini') do
      begin
        SSStr := ReadString('boot','SCRNSAVE.EXE',''); // Windows 98
        Free;
      end;
    end;

    // 사용자가 윈도우즈에서 화면 보호기를 껐다
    // Windows2000은 화면보호기를 사용자가 꺼도 이벤트가 발생하므로 프로그램에서도 화면보호기를 꺼야함
    if FileExists(SSStr) then
      Memo1.Lines.Add('SC_SCREENSAVE: 화면 꺼짐')
    else
      SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, ord(FALSE), nil, SPIF_SENDCHANGE); // 화면보호기 OFF

    Msg.Result := Integer(True);
  end
  else if ((Msg.wParam and $FFF0) = SC_MONITORPOWER) and (Msg.lParam = 2) then // 모니터 꺼짐 (2=turn off the monitor)
  begin
    Memo1.Lines.Add('SC_MONITORPOWER: 화면 꺼짐');
    Msg.Result := Integer(False);
  end;

  inherited;
end;

procedure TForm1.WMPowerBroadcast(var Msg: TMessage);
const
  PBT_APMQUERYSUSPEND        = $0000;
  PBT_APMQUERYSTANDBY        = $0001;
  PBT_APMQUERYSUSPENDFAILED  = $0002;
  PBT_APMQUERYSTANDBYFAILED  = $0003;
  PBT_APMSUSPEND             = $0004;
  PBT_APMSTANDBY             = $0005;
  PBT_APMRESUMECRITICAL      = $0006;
  PBT_APMRESUMESUSPEND       = $0007;
  PBT_APMRESUMESTANDBY       = $0008;
  PBTF_APMRESUMEFROMFAILURE  = $00000001;
  PBT_APMBATTERYLOW          = $0009;
  PBT_APMPOWERSTATUSCHANGE   = $000A;
  PBT_APMOEMEVENT            = $000B;
begin
  if Msg.wParam = PBT_APMSUSPEND then // 시스템 대기모드 시작
  begin
    Memo1.Lines.Add('PBT_APMSUSPEND: 대기모드 시작');
    Msg.Result := Integer(True);
  end
  else if Msg.wParam = PBT_APMRESUMESUSPEND then // 시스템 대기모드 복귀
  begin
    Memo1.Lines.Add('PBT_APMRESUMESUSPEND: 대기모드 끝');
    Msg.Result := Integer(True);
  end;

  inherited;
end;

end.





971   [윈도우즈 API] 작업 표시줄에 보이는 프로그램의 아이콘 정보  김영대 2008/12/09 6055 1469
970   [윈도우즈 API] 실행 파일의 아이콘 바꾸기  김영대 2008/11/27 7571 1408
969   [네트웍/인터넷] TClientSocket 에 Local IP 바인딩하기  김영대 2008/11/25 6362 1530
968   [알고리즘] Boyer-Moore-Horspool Text Searching  김영대 2008/11/24 5081 1373
967   [일반/컴포넌트] Tab, Shift+Tab 키 이벤트 사용하기  김영대 2008/11/21 5004 1411
966   [일반/컴포넌트] TStringList vs. THashedStringList  김영대 2008/11/04 5276 1399
965   [시스템] 프로세스가 원도우즈 원격 터미널에서 실행중인지 검사  김영대 2008/11/04 5262 1503
964   [시스템] 원도우즈 도메인 이름 구하기  김영대 2008/11/04 6072 1375
963   [시스템] 사용중인 USB 포트의 장치정보 구하기  김영대 2008/11/04 12273 1487
962   [일반/컴포넌트] Treeview의 수평 스크롤바 감추고 스크롤 막기  김영대 2006/03/22 5505 1264
961   [윈도우즈 API] 바탕화면의 모든 창 최소화하기  김영대 2006/02/28 5460 1316
960   [일반/컴포넌트] 일정시간 경과후 없어지는 MessageBox  김영대 2006/02/28 6493 1624
959   [시스템] System의 Idle 상태를 알아내는 API  김영대 2006/02/28 6128 1464
958   [일반/컴포넌트] ListBox에 Edit 올려 항목 편집하기  김영대 2006/02/28 4841 1233
957   [일반/컴포넌트] 폼 흔들기  김영대 2006/02/28 5304 1217
956   [일반/컴포넌트] 마우스로 ProgressBar의 Position 바꾸기  김영대 2006/02/28 4883 1273
955   [일반/컴포넌트] ListBox 드래그하여 아이템 이동하기  김영대 2006/02/28 4922 1204
954   [시스템] 폼의 Move/Resize 시작,종료 이벤트 감지하기  김영대 2006/02/28 5220 1380
953   [COM/OLE] IE의 속성을 변경하여 뛰우기  김영대 2006/02/28 5313 1253
952   [윈도우즈 API] 세로 글꼴 제거한 FontDialog  김영대 2006/02/28 5208 1371
951   [시스템] CPU 이름 구하기2  김영대 2005/09/13 5680 1368
950   [네트웍/인터넷] IP Helper API 를 이용한 네트워크 카드 Enable/Disable 시키기  김영대 2005/09/10 6111 1339
949   [일반/컴포넌트] 폼에 자석효과 주기 (Delphi 6 이하)  김영대 2005/08/04 6072 1317
948   [일반/컴포넌트] 객체의 valid검사 Assigned() 대체  김영대 2005/07/29 4778 1267
  [시스템] 시스템 대기모드/화면 보호기/모니터 끄기 이벤트 감지하기  김영대 2005/07/21 6923 1517
946   [시스템] 윈도우즈 GUI 기본 폰트정보 구하기  김영대 2005/07/14 5523 1376
945   [시스템] 윈도우즈 입력도구모음의 한/영 토글하기  김영대 2005/06/24 5310 1401
944   [COM/OLE] ActiveForm의 OnDestroy 대용  김영대 2005/04/21 5313 1250
943   [일반/컴포넌트] ListView의 타이틀 폰트 바꾸기  김영대 2005/03/31 5223 1257
942   [일반/컴포넌트] 일정시간 경과후 없어지는 MessageDlg/ShowMessage  김영대 2005/03/26 5907 1294
941   [일반/컴포넌트] 프로그램의 bitmap을 MS 그림판으로 편집하여 다시 불러오기  김영대 2005/03/22 5233 1352
940   [일반/컴포넌트] RichEdit 2.0 줄간격 조정  김영대 2005/02/11 7345 1295
939   [COM/OLE] 탐색기에서 파일을 선택하여 ActiveX(ActiveFortm)에 Drag&Drop 하기  김영대 2005/01/06 7611 1293
938   [윈도우즈 API] TDownloadURL를 사용한 파일 다운받기  김영대 2004/12/26 6474 1284
937   [COM/OLE] TWebBrowser에 직접 HTML 소스코드 넣기  김영대 2004/12/26 6112 1290
936   [윈도우즈 API] 윈도우즈 시스템 전체에서 사용자의 마우스와 키보드 입력이 있는지 검사하기  김영대 2004/12/26 6123 1374
935   [일반/컴포넌트] 다이얼로그 박스가 이미 떠있는지 검사하여 강제로 닫기  김영대 2004/12/22 5106 1234
934   [윈도우즈 API] URLDownloadToFile()를 사용한 파일 다운받기  김영대 2004/12/15 7720 1412
933   [COM/OLE] 내 프로그램에서 선택한 text를 다른 프로그램에 Drag&Drop으로 주기  김영대 2004/12/10 5431 1120
932   [COM/OLE] 다른 프로그램에서 선택한 text를 내 프로그램에서 Drag&Drop으로 받기  김영대 2004/12/09 5565 1226

1 [2][3][4][5][6][7][8][9][10]..[25] [다음 10개]
 

Copyright 1999-2018 Zeroboard / skin by zero