Q&A

  • 시스템 전역 훅이 안걸려요..그놈..걸리기만 하면 영창감인데..ㅡ.ㅡ;;
안녕하세요?
WM_PAINT를 시스템 전역후킹하려고 하는데 어려움이 있어서 이렇게 쓰게 됬슴돠..^^;;
질문의 요지는 WH_CALLWNDPROC을 후킹해서 화면에 보내지는 WM_PAINT를 모두 후킹하려고 하는데 화면의 모든 윈도우의 WM_PAINT가 걸려지지 않고 dll을 로드시킨 APP에서만 WM_PAINT가 걸려지는데 그 이유가 뭔가 하는것 인데요(키보드는 잘걸리는뎅..ㅡ.ㅡ),, 아마 제가 쓴 방법이 잘못된거 같아서요.. 부디 이 초보에게 한수 가르쳐 주세용~ ^-^;;

다음은 dll소스의 일부분입니다.

var
  hKBHook: HHook; // 키보드 훅 핸들
  hCallWndHook: HHook; // 모니터 메세지 훅 핸들
  hVeneto: THandle; // dll을 로드시킨 App의 핸들

// 키보드 훅 프로시져
function MyKBHook(nCode : Integer; wParam : WPARAM; lParam : LPARAM) : LongInt; stdcall;
begin
  if nCode >= 0 then
  begin
     Result := Integer(true);
     Exit;
  end;
  Result := CallNextHookEx(hKBHook, nCode, wParam, lParam);
end;

// 모니터 메세지 훅 프로시저
function CallWndProc(nCode : Integer; wParam : WPARAM; lParam : LPARAM) : LongInt; stdcall;
var
  cwpStruct: PCWPStruct;
begin
  if (nCode = HC_ACTION) then
  begin
     cwpStruct := PCWPStruct(lParam);
     if (hVeneto <> 0) then
     begin
        case cwpStruct^.message of
           WM_PAINT:
              begin
                 SendMessage(hVeneto, WM_USER + 50, 0, 0);
              end;
        end;
     end;
  end;

  Result := CallNextHookEx(hCallWndHook, nCode, wParam, lParam);
end;

// 훅 시작하기
function SetHook(hWnd: THandle): boolean;
begin
   Result := false;
   if (hWnd = 0) then Exit;

   hKBHook := SetWindowsHookEx(WH_KEYBOARD, MyKBHook, HInstance, 0);
   hCallWndHook := SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, HInstance, 0);

   if (hKBHook > 0) and (hCallWndHook > 0) then
   begin
      hVeneto := hWnd;  
      Result := true;
   end;
end;

// 훅 끝내기
function UnHook: Boolean;
begin
  Result := UnhookWindowsHookEx(hKBHook) and UnhookWindowsHookEx(hCallWndHook);
end;

Exports
  SetHook,
  UnHook;

begin
  hVeneto := 0;
end.
0  COMMENTS
    • 브래드
    • 2002.10.08 00:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김수경
      2002.10.08 22:40
      3D 구현시 직접 프로그래밍하여 구현 할 수도 있지만 계산(특히 행열부분) 부분도 많고 속도도 빠르지 않...
    • ybkim
    • 2002.10.07 23:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김해우
      2002.10.09 02:38
      그냥 가기가 뭐해서... 팁란에 ADO라고 검색해보세요... 그럼...
    • 조건일
    • 2002.10.07 23:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.10.08 20:20
      안녕하세요. 최용일입니다. 그냥 API로 하시던가 델파이파일입출력 표준함수를 사용하시던가 하면 됩니...
    • 조건일
      2002.10.09 19:07
      흠.. 훨씬 더 간단한 방법이 있었군여.. 혼자서 고민하다가.. 코드를 막 섞어서 일단은 해결은 했씁니다.....
    • 김상수
    • 2002.10.07 20:28
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 오병주
      2002.10.07 20:57
      만약 벤드 속석이 디테일이라고 가정해봅시다 그러면 쿼리의 내용이든지 어떤내용이던지 한번 찍히고 ...
    • 김상수
      2002.10.07 21:26
      잘은 모르겠네여 ^^;;; 공부를 많이 해야 할텐데... 멀 보고 해야할지도...^^;;; 암튼 답변...
    • 시베리아들개
      2002.10.07 20:55
      Print를 하고 났는데...무슨 AfterPrint이벤트냐고요... AfterPrint이벤트는 이렇게 한번 접근을...
    • 강민수
    • 2002.10.07 20:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • r김해
      2002.10.07 20:44
      안녕하세요... 김해우입니다.. 그냥 지나가기가 그래서 간단하게 코딩합니다. 마우스가 폼 영역밖에 ...
    • 김상수
    • 2002.10.07 19:57
    • 4 COMMENTS
    • /
    • 0 LIKES
    • KYH
      2002.10.07 20:36
      좀 엽기적인방법이 있긴한데여 --;;;;;;;;;; (-----)---------  1번 | (중식)| 짜장면| ...
    • 김상수
      2002.10.07 21:21
      procedure TForm4.여기가아니구여 라인before(Sender: TCustomQuickRep;   var PrintReport:...
    • KYH
      2002.10.08 19:14
      --;;;; 좀더 엽기적으루 가보지여 페이지 footer 의 afterprint 에서 linechk := ''; 하시면 ...
    • 김상수
      2002.10.09 03:56
      신경써주셔서 감사합니다.. 첫Row에 찍히는 것은 안되는군요 첫Row에 찍히는게 아니라 두번째 Row...
    • 안두식
    • 2002.10.07 19:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • blackjewel
      2002.10.08 02:07
      안녕하세여? 저도 그거 때문에 오래 고생해서 몇자적습니다. dbgrid에서 다중선택을 한다고 해도 qui...
    • 신양수
    • 2002.10.07 19:46
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박준영
    • 2002.10.07 19:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강형철
      2002.10.08 19:29
      이문제는 기존 델파이 5.0에서 MS Access를 연결할때 Native Access 드라이브를 사용해서 한걸로 보입니다....
    • 송재진
    • 2002.10.07 03:43
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최병철
      2002.10.07 21:52
      자료실에 특정 화일을 검색하여 경로명을 출력하는 예제 자료가 있읍니다. 참고 하세요.
    • 최용일
      2002.10.07 11:49
      안녕하세요. 최용일입니다. 질문안에 해답이 있네요... 이미지파일 불러올때 아래와 같이 하시죠? ...
    • 이추형
      2002.10.08 02:30
      access툴 자체에 비밀번호 설정이 있습니다. 비밀번호를 지정하시고 ODBC에서 확인하시면 될것 같습니다.
    • 송득보
      2002.10.08 04:56
      답변주셔서 감사한데요.. 그런 문제가 아니라.. 프로그램 내부에서 동적으로 .mdb 파일을 만들어 테...
    • 이추형
      2002.10.08 02:36
      데이타 타입이 datetime 또는 date형의 경우 아래와 같이 입력이 가능합니다. 참고로 datetime의 경우 '20...
    • 이성근
      2002.10.08 18:03
      님께서 말씀하시는 Date형식이 아니라 제가 원하는 방식은 문자형(string)으로 정의가 되어있는 필드를 ...
    • 최용일
      2002.10.07 12:01
      안녕하세요. 최용일입니다. interface나 implementation섹션에서 변수 하나 선언하시고 유닛의 initiali...
    • 김헌주
      2003.02.19 04:05
      ole.ole.CompactDataBase(s, App_Path + 'db1.$$$', , , ';pwd=xxxx');
    • 최용일
      2002.10.07 12:14
      안녕하세요. 최용일입니다. 쫌 질문이 막연한거 같은데... 얻어오고 싶다는 웹브라우져가 웹브라우져의 ...
    • kholeeyo
    • 2002.10.06 09:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.10.07 12:16
      안녕하세요. 최용일입니다. 델파이 소켓이나 인디소켓을 사용하세요. 둘다 예제 있으니까 예제보시면서 ...
    • 김세형
    • 2002.10.06 07:37
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김동완
    • 2002.10.06 02:57
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.10.07 12:50
      안녕하세요. 최용일입니다. 동적배열 쓰셨는데... 메모리 할당하고 해제하는 부분이 없네요... 그리...
    • 김동완
      2002.10.07 19:04
      제가 워낙 초짜라서...죄송...-_-; 최용일님께서 알려주신 방법대로... 다시 코딩해 봤는데요... SizeOf...
    • 최용일
      2002.10.07 19:47
      안녕하세요. 최용일입니다. 어떤 에러가 난다는 말씀이신지??? 테스트 다 해보고 올린건데... SizeOf...
    • 김동완
      2002.10.07 19:57
      sizeof는 제가 이해를 잘못햇군여...쪽팔리당...-_-;;죄송.. sizeof는 아니구여... BlockWrite(MyFile2...
    • 김동완
      2002.10.07 20:39
      AssignFile(MyFile2, ListBox1.Items.Strings[i]+'.sec'); Rewrite(MyFile2,1);  <== 여기에...