Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 팁&트릭
Delphi Programming Tip&Tricks
[369] 강제 종료된 어플리케이션의 트레이 아이콘 지우기 (잘못 올려 다시 올립니다.)
첫눈 [hadugo] 94 읽음    2017-01-04 18:03
앞에서 강제로 종료된 어플리케이션의 트레이아이콘을 지우는 소스코드를 올렸는데
제가 착각하여 이미 오래전 부터 온라인상에서 떠돌던 소스코드를 그대로 올려 버렸네요.

말씀드린것 처럼 윈도우98에서나 통하지 Win7에서는 트레이아이콘 박스가 생기면서 부터 그 방법은 통하지 않습니다.

그래서 제가 약간 수정했습니다.

다시 올리니 참고하세요.

Procedure MouseMove(WinHandle : THandle);
Var
  rec : TRect;
  w,h : DWORD;
  x,y : DWORD;
Begin
  if WinHandle <> 0 then
  begin

    GetClientRect(WinHandle, rec);

    w := DWORD(GetSystemMetrics(sm_cxsmicon));
    h := DWORD(GetSystemMetrics(sm_cysmicon));

    y := w shr 1;
    while y < rec.Bottom do
    begin
      x := h shr 1;
      while x < rec.Right do
      begin
        SendMessage(WinHandle, wm_mousemove, 0, y shl 16 or x);
        x := x + w;
      end;
      y := y + h;
    end;
  end;
End;

procedure RemoveDeadIcons;
var
  FSysTrayHandle, FSysTrayHandleEx: THandle;
  TrayNotifyHandle, OSDependence: THandle;
begin
  FSysTrayHandle := 0;
  FSysTrayHandleEx := 0;

  TrayNotifyHandle := FindWindow('Shell_TrayWnd', nil);
  if TrayNotifyHandle = 0 then Exit;
  MouseMove(TrayNotifyHandle);

  TrayNotifyHandle := FindWindowEx(TrayNotifyHandle, 0, 'TrayNotifyWnd', nil);
  if TrayNotifyHandle = 0 then Exit;
  MouseMove(TrayNotifyHandle);

  OSDependence := FindWindowEx(TrayNotifyHandle, 0, 'SysPager', nil);
  if OSDependence = 0 then
    OSDependence := TrayNotifyHandle;
  MouseMove(OSDependence);

  FSysTrayHandle := FindWindowEx(OSDependence, 0, 'ToolbarWindow32', nil);
  MouseMove(FSysTrayHandle);

  FSysTrayHandleEx := FindWindow('NotifyIconOverflowWindow', nil);
  if FSysTrayHandleEx = 0 then Exit;
  MouseMove(FSysTrayHandleEx);

  FSysTrayHandleEx := FindWindowEx(FSysTrayHandleEx, 0, 'ToolbarWindow32', nil);
  if TrayNotifyHandle = 0 then Exit;
  MouseMove(FSysTrayHandleEx);
end;

+ -

관련 글 리스트
369 강제 종료된 어플리케이션의 트레이 아이콘 지우기 (잘못 올려 다시 올립니다.) 첫눈 94 2017-01-04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.