kkuzil.own@gmail.com

Posted
Filed under Development/Delphi
출처 : http://oranke.elogin.co.kr/wiki/index.php/델파이

var
  Soo: DWORD;
 
...
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Soo := RegisterWindowMessage('TaskbarCreated'); // 메시지를 등록...
end;
 
...
 
procedure TForm1.WndProc(var wpMessage: TMessage);
begin
  if (wpMessage.Msg = Soo) then // 쉘이 다시 시작된 것이면...
  begin
     ShowMessage('쉘 다시 시작!!');
  end
  else
    inherited WndProc(wpMessage);
end;
2010/05/24 12:46 2010/05/24 12:46
Posted
Filed under Development/C++
출처 : http://likehood.tistory.com/69

오랜만에 '개발' 카테고리에 글을..ㅋ

엄밀히 말하자면 프로세스의 워킹셋 사이즈를 가져오는 루틴이라고 봐야죠.

NT 4.0에서는 GetProcessMemoryInfo()을 호출할 때
"The program issued a command but the command lenght is incorrect" 라는 메세지 박스를 띄우는군요. Windows 업데이트문제인듯 한데..혹시 아시는 분 지혜를 부탁드릴께요~



#pragma comment(lib,"Psapi.lib")
#include "psapi.h"

DWORD GetUsingMemorySize(CString strProcessName)
{
 DWORD pid[1024];
 DWORD cb;
 EnumProcesses(pid,sizeof(DWORD)*1024,&cb);
 HMODULE hMo;
 CString strAll;
 for(int i = 0 ; i < 1024 ; ++i)
 {
  char szFileName[1024];
  HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE,pid[i]);
  if(!hProcess)
   continue;
  BOOL bb=EnumProcessModules(hProcess,&hMo,sizeof(hMo),&cb);
  if(!bb)
  {
   DWORD error=GetLastError();
   LPVOID lpMsgBuf;
   FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
      |FORMAT_MESSAGE_FROM_SYSTEM
      |FORMAT_MESSAGE_IGNORE_INSERTS
      , NULL,error,0,(LPSTR)&lpMsgBuf,0,NULL);
   CString strLastErrMsg=static_cast<LPCSTR>(lpMsgBuf);
   LocalFree(lpMsgBuf);
   CloseHandle(hProcess);
   continue;
  }
  GetModuleFileNameEx(hProcess,hMo,szFileName,1024);
  CString strProcName(szFileName);
  if(strProcName.Find(strProcessName) != -1 )
  {
   PROCESS_MEMORY_COUNTERS mem;
   GetProcessMemoryInfo(hProcess,&mem,sizeof(PROCESS_MEMORY_COUNTERS));
   CloseHandle(hProcess);
   return mem.WorkingSetSize;
  }
  CloseHandle(hProcess);
 }
 return NULL;
}
2009/05/08 10:53 2009/05/08 10:53
Posted
Filed under Development/Delphi

기존의 패치들을 보면 VMT를 얻어서 테이블을 수정하거나 하는 등의 복잡한 방법이지만, 이 새로운 트릭에서는 이러한 구현없이 수정없이 그냥 간단한 구현 유닛을 uses 절 맨 마지막에 추가하는 것만으로 쉽게 해결을 할 수 있습니다.

실질적인 패치 코딩에서도 아주 간단하게 구현을 할 수 있습니다. 따로 패치를 위한 추가적인 코드도 필요없게 됩니다.

unit HVProgressBarVistaFix;

interface

uses Messages, ComCtrls;

type
TProgressBar = class(ComCtrls.TProgressBar) // 이곳의 선언이 이 코드의 핵심. 새로 선언된 아래의 핸들러가 적용됩니다.
private
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd);
message WM_ERASEBKGND;
end;

implementation

procedure TProgressBar.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
DefaultHandler(Message);
end;

end.

사용 방법은

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


일반적으로 우리들은 이 문제를 해결하기 위해 TProgressBar를 계승해서 이러쿵저러쿵 해야 한다고 생각할 것입니다. 하지만 유닛 이름을 머리에 붙인 클래스 이름(위의 경우에는 ComCtrls.TProgressBar)을 사용하면 기존의 해당 클래스(위의 경우 TProgressBar)를 치환하는 효과가 일어납니다.


참고하시길.

내용 출처 : http://hallvards.blogspot.com/2007/04/hack16-published-field-rtti-replacement.html

2009/03/03 18:13 2009/03/03 18:13
Posted
Filed under Development/IT 용어등

ICMP(Internet Control Message Protocol:인터넷 제어 메세지 프로토콜)

네트워크 내에 발생 할 수 있는 여러 문제를 제어하기 위한 프로토콜.
ICMP 패킷의 대표적인 경우가 ping패킷으로, 특정 호스트가 동작하는지 알아보려고 ping 명령을
통해 대상 호스트로 ping을 보낸다. 이때 ping 패킷을 받은 대상 호스트는 다시 응답 패킷을 보내주는데
이렇게 돌아오는 응답을 통해서 대상 호스트의 동작상태를 확인할 수 있다.

ICMP는 이처럼 데이터 교환이 목적이 아닌, 네트워크 상황/상태를 알아보고 거기에서 발생되는
문제를 처리하기 위해 존재하는 프로토콜이다.

2008/11/19 10:05 2008/11/19 10:05
Posted
Filed under Development/IT 용어등
MTU(Maximum Transmission Unit)란 TCP/IP네트웍 등과 같이 패킷 또는 프레임 기반의 네트웍에서 전송될 수 있는 최대 크기의 패킷 또는 프레임을 말합니다. 한번에 전송할 수 있는 최대 전송량(Byte)인 MTU 값은 매체에 따라 달라집니다. 예를 들어 Ethernet 환경이라면 MTU default 값은 1500 이고 FDDI 인 경우 FDDI는 4000 정도 되고, X.25는 576, Gigabit MTU는 9000 정도 등 매체 특성에 따라 한번에 전송량이 결정됩니다.


원문 및 자세한 내용 : http://www.redwiki.net/wiki/wiki/MTU
2008/11/18 11:05 2008/11/18 11:05