kkuzil.own@gmail.com

Posted
Filed under Development/Delphi

function GetWndHandleFromPID(dwPID: DWORD): HWND;
var
  h: HWND;
  dwCheckPID: DWORD;
begin
  Result := 0;
  h:= FindWindow(nil, nil);
  while h <> 0  do
  begin
    if GetParent(h) = 0 then
    begin // 최상위 핸들 체크 (컨트롤 무시)
      GetWindowThreadProcessId(h, @dwCheckPID);
      if dwCheckPID = dwPID then
      begin
        Result := h;
        exit;
      end;
    end;
    h:= GetWindow(h, GW_HWNDNEXT);
  end;
end;
2012/09/21 16:44 2012/09/21 16:44
Posted
Filed under Development/Delphi

  PEntry = ^TEntry;
  TEntry = packed record
    case Integer of
    0 : (Head: TEntryHead);
    1 : (Data: array [0..511] of AnsiChar);
  end;
이런 구조체가 있을때,
...
..

var
  e: TEntry;
begin
  ReadData(...., ...., @e);
end;

이 경우 포인터가 잘못 되었다는 메시지가 뜨면서 에러가 발생한다.
코드상.. 아무런 잘못도 없는거 같아서..
ReadData(...., ...., @e.Data[0]);

머 이렇게 해도 안되고..

그래도 계속 트라이 하는중에 알아냈다.

 TEntry = packed record

여기서 packed  빼 주니깐 된다는..

기본 바이트 정렬을 사용하지 않고 packed를 해주면
컴파일러가 내부 포인터를 어떻게 써야하는지 헷갈리나보다..

아무튼 다음에도 이런문제가 생기면 기억나도록 이렇게 기록함.
2012/07/31 16:00 2012/07/31 16:00
Posted
Filed under Windows
비스타 이상 부터는 시스템 폴더(System32)의 파일들은 삭제, 변경 할때
TrustedInstaller의 권한으로만 할 수 있다고 한다.

이게.. 아무리 찾아봐도 API로는 없고.. 따라서 시스템 파일들을 건드릴 방법이 없다.
하지만 방법은 있다. takeown.exe로 권한을 바꿔줄수 있다는..

사용방법

> takeown /F "파일경로"
이렇게 하면 해당 파일이 현재 계정의 권한으로 소유할 수 있게 된다.
> takeown /F "디렉토리경로" /R /D Y
이건 디렉토리 권한 설정이다. /R 은 하위까지, /D Y 는 물어보지말꼬 모두 Yes다


이렇게 파일을 소유 했으면 icacls.exe 권한을 부여 할 수 있게된다.

> icacls "경로" /grant administrators:F
요렇게 하면 administrators그룹에 모든권한 (F)를 줄 수 있게 된다.
특정 권한만 주고 싶으면 F를 다르게 설정 하면되겠지?

끝.
2012/07/23 17:53 2012/07/23 17:53
Posted
Filed under Windows
Invalid image size

난 아직 이 에러 메시지를 한번도 겪어보지 못했지만..
이런 경우가 발생하는 경우가 있다.
보통 이메세지가 뜨면 UI가 뜨지 않으며 프로그램이 그대로 종료되어 버린다.

대략 적인 원인은 윈도우 타이틀바 폰트를 너무 작게 해서 타이틀바에 아이콘을 우겨넣을
공간이 없을경우로 생각된다.

타이틀 폰트를 줄인다고 무조건 발생하는것도 아니고 해당 OS에서 지원되지 않는
사이즈를 프로그램 아이콘(*.ICO) 넣어다던가 했을때 나타날 수 있다.

사용자가 할 수 있는 해결 방법은 윈도우 디스플레이 설정창에서 바탕화면 설정에서
타이틀바 폰트를 크게 해주면 해결된다.

개발자가 할 수 있는 해결 방법은 정상적인 프로그램 아이콘(*.ICO)을 사용하면
별 문제 없다.

참고 : http://koban5555.blog9.fc2.com/blog-entry-687.html

끝.
2012/07/23 17:44 2012/07/23 17:44