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

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


Category

  김영대(2004-07-24 22:35:09, Hit : 9667, Vote : 4048
 http://www.howto.pe.kr
 마우스 아래의 윈도우 핸들 구하기

// 아래처럼 타이머를 사용하지 않고 마우스 후킹을 사용하면 좀더 간결한 프로그램을 만들 수 있습니다
// SetWindowsHookEx(WH_MOUSE,...) 를 찾아보세요

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  PROCESS_MURDER = $0001;
  
var
  Form1: TForm1;

implementation

{$R *.dfm}

function ForceForegroundWindow(hwnd: THandle): boolean;
const
  SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
  ForegroundThreadID: DWORD;
  ThisThreadID: DWORD;
  timeout: DWORD;
begin
  if IsIconic(hwnd) then
    ShowWindow(hwnd, SW_RESTORE);
  if GetForegroundWindow = hwnd then
    Result := true
  else
  begin
    {Windows 98/2000 doesn't want to foreground a window when some
    other window has keyboard focus}
    if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4))
       or ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and ((Win32MajorVersion > 4)
       or ((Win32MajorVersion = 4) and (Win32MinorVersion > 0)))) then
    begin
      {Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
      Converted to Delphi by Ray Lischner
      Published in The Delphi Magazine 55, page 16}
      Result := false;
      ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow,nil);
      ThisThreadID := GetWindowThreadProcessId(hwnd,nil);
      if AttachThreadInput(ThisThreadID, ForegroundThreadID, true) then
      begin
        BringWindowToTop(hwnd);  {IE 5.5 related hack}
        SetForegroundWindow(hwnd);
        AttachThreadInput(ThisThreadID, ForegroundThreadID, false);
        Result := (GetForegroundWindow = hwnd);
      end;
      if not Result then
      begin
        {Code by Daniel P. Stasinski}
        SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
                                                     SPIF_SENDCHANGE);
        BringWindowToTop(hwnd);  {IE 5.5 related hack}
        SetForegroundWindow(hWnd);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout),
                                                     SPIF_SENDCHANGE);
      end;
    end
    else
    begin
      BringWindowToTop(hwnd);  {IE 5.5 related hack}
      SetForegroundWindow(hwnd);
    end;
    Result := (GetForegroundWindow = hwnd);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ForceForegroundWindow(Self.Handle);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  APoint: TPoint;
  AHwnd: HWND;
  c, P: array[0..256] of Char;
begin
  GetCursorPos(APoint);
  AHwnd := WindowFromPoint(APoint);

  P[0] := #0;
  GetWindowText(AHwnd, P, 255); {window's title bar를 알아낸다}
  if (P[0] <> #0) then
  begin
    Memo1.Lines.Add(P);

    if GetClassName(AHwnd, c, SizeOf(c)) > 0 Then
      Memo1.Lines.Add(c);
  end;
end;

end.





611   [일반/컴포넌트] 모서리가 둥근(rounded ends) TMemo 만들기  김영대 2004/07/25 4643 1191
610   [윈도우즈 API] 모서리가 둥근(rounded ends) TEdit 만들기  김영대 2003/03/07 4958 1288
609   [윈도우즈 API] 모든 창을 아이콘 표시/취소  김영대 2003/03/07 4329 1236
608   [일반/컴포넌트] 모든 드라이브,디렉토리 검색하여 파일 찾기  김영대 2003/03/07 4809 1189
607   [네트웍/인터넷] 모든 TCP/IP interfaces 의 IP/Netmask 구하기  김영대 2003/03/07 5726 1258
606   [데이터베이스] 몇가지 BDE 환경정보 구하기  김영대 2003/03/07 4457 1175
605   [일반/컴포넌트] 명령행 인자(command line argument) 사용하기  김영대 2003/03/05 4985 1334
604   [일반/컴포넌트] 명령행 인자 받아오기  김영대 2003/03/05 7296 1885
603   [일반/컴포넌트] 메인메뉴가 팝업될때 이벤트를 탈수있는방법  김영대 2003/03/07 6606 1725
602   [시스템] 메모리 부하(load)량 측정해 보기  김영대 2003/03/05 5351 1274
601   [윈도우즈 API] 메모(TMemo)의 커서(캐럿)모양 바꾸기  김영대 2003/03/05 5032 1925
600   [일반/컴포넌트] 메뉴의 잘못된 accelerator 를 선택했을때  김영대 2003/03/05 6436 1829
599   [일반/컴포넌트] 메뉴 아이템의 동적 추가와 그림넣기  김영대 2003/03/04 7982 1270
598   [시스템] 마이크 볼륨 조절하기  김영대 2003/03/06 4678 1289
597   [일반/컴포넌트] 마우스커서를 특정위치로 이동시키기  김영대 2003/03/05 5948 1216
596   [시스템] 마우스의 좌/우 기능설정과 버튼갯수 알기  김영대 2003/03/06 7500 2033
595   [시스템] 마우스의 좌,우 버튼의 동작 바꾸기  김영대 2003/03/07 4310 1207
594   [윈도우즈 API] 마우스의 이동범위 제한하기  김영대 2003/03/05 6050 1496
593   [윈도우즈 API] 마우스의 모양 바꾸고 이동범위 제한하기  김영대 2003/03/05 5145 1268
592   [일반/컴포넌트] 마우스영역 제어하기  김영대 2003/03/05 3710 985
591   [일반/컴포넌트] 마우스를 특정 콤포넌트 위로 위치시키기  김영대 2003/03/05 4359 1113
590   [일반/컴포넌트] 마우스로 ProgressBar의 Position 바꾸기  김영대 2006/02/28 5344 1372
589   [일반/컴포넌트] 마우스가 폼위에 있는지 여부를 알아내려면...  김영대 2003/03/05 5312 1447
588   [시스템] 마우스가 설치되어 있는지 검사하기  김영대 2003/03/07 6908 1849
587   [시스템] 마우스 포인터 속도 바꾸기  김영대 2003/03/06 5075 1260
586   [시스템] 마우스 포인터 속도 구하기  김영대 2003/03/06 5597 1722
585   [일반/컴포넌트] 마우스 커서 보이기/감추기  김영대 2003/03/05 6344 1700
584   [시스템] 마우스 자취(trails)의 갯수 조정하기  김영대 2003/03/06 5976 1845
583   [윈도우즈 API] 마우스 위치의 콘트롤(콤포넌트)을 조사하기  김영대 2003/03/07 4662 1122
582   [윈도우즈 API] 마우스 위치(Desktop)의 색상값 구하기  김영대 2003/03/05 6332 1590
  [시스템] 마우스 아래의 윈도우 핸들 구하기  김영대 2004/07/24 9667 4048
580   [시스템] 마우스 두 번 누르기 속도 조정하기  김영대 2003/03/06 6046 1832
579   [일반/컴포넌트] 리스트뷰에서 동적으로 칼럼삭제하기  김영대 2003/03/05 6958 1412
578   [일반/컴포넌트] 루틴의 처리시간(경과시간) 구하기  김영대 2003/03/05 4301 1110
577   [시스템] 로컬 가상 드라이버(substitution device) 만들고 제거하기  김영대 2004/07/25 6254 1337
576   [일반/컴포넌트] 레코드 구조를 배열요소로 갖는 정적인 배열  김영대 2003/03/05 4089 1099
575   [윈도우즈 API] 레지스트리의 특정키를 파일로 저장/복원하기  김영대 2003/03/07 6621 1495
574   [윈도우즈 API] 레지스트리의 변경여부 알리는 2가지 방법  김영대 2003/03/06 4786 1286
573   [일반/컴포넌트] 레지스트리의 기본 RootKey 바꾸기  김영대 2003/03/05 4222 1278
572   [일반/컴포넌트] 레지스트리의 "(기본값)" 에 읽고/쓰기  김영대 2003/03/07 4005 1138

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

Copyright 1999-2023 Zeroboard / skin by zero