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

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


Category

  김영대(2003-03-04 20:36:22, Hit : 5094, Vote : 1322
 Windows NT 에서 한글 NT인지 영문 NT인지 구분하는 방법


> 이거 작업 하다보니 필요해서요.
> nt Server에서 한글 nt인지 영문 nt인지 구분하는 방법이 필요 합니다.
> 한글/영문을 구분해서 Message를 출력할려고 합니다.
>

Windows System에서 글자입력에 대해서는 기본으로 키보드(영어)와
한국어,일본어,중국어등 한글자를 입력하기 위해서 여러번의 키 입력이
필요한 언어를 지원하기 위해 IME(Input Method Editor)를 도입했습니다.
이 IME를 지원하는 시스템이면 시스템 디렉토리에 IMM32.DLL이 존재해야 하고
시스템이 시작할때 메모리로 로드됩니다.(32bit 운영체제 일때)
이 IMM32.DLL의 존재여부를 확인하시는 것이 그래도 쉬운 방밥이겠죠.
아니면 레지스트리를 찾아서 IME에 관한 KEY나 VALUE가 있는지 보면 될거구요.

그 밖의 한글과 관련한 다른 자세한 정보는 다음 사이트를 참고하세요.
      http://pantheon.yale.edu/~jshin/faq/index-orig.html

그리고 아래 source는 현재 시스템의 IME정보를 알 수 있게 테스트한겁니다.
혹시 source에 문제가 있으시면 편지주세요.
도움이 되었으면 좋겠는데....

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Edit5: TEdit;
    Edit6: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  {운영체제 정보에 사용}
  verInfo    :TOSVERSIONINFO;
  str        :String;
  i          :Word;

  {IMM32.DLL의 존재여부에 사용}
  hDLL       : THandle;
  aName      : array[0..10] of char;

  {현재 IME상태에 사용}
  tMode      :HIMC;
  Sentence   :DWORD;
  Conversion :DWORD;
begin
  // 운영체제 관련정보
  verInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  if GetVersionEx(verInfo) then
  begin
    Edit1.Text := IntToStr(verInfo.dwMajorVersion);  {Major 번호}
    Edit2.Text := IntToStr(verInfo.dwMinorVersion);  {Minor 번호}
    Edit3.Text := IntToStr(verInfo.dwBuildNumber);   {finer level}
    case verInfo.dwPlatformId of
       VER_PLATFORM_WIN32s         : Edit4.Text :=
                                           'Win16 running Win32s';
       VER_PLATFORM_WIN32_WINDOWS  : Edit4.Text :=
                                           'Win32 Windows, probably Win95';
       VER_PLATFORM_WIN32_NT       : Edit4.Text :=
                                           'WinNT, full 32-bit';
     end;
     str := '';
     for i := 0 to 127 do
       str := str + verInfo.szCSDVersion[i];  {Service Pack 정보}
     Edit5.Text := str;
   end;

  // 현재 메모리에 IMM32.DLL이 떠있는지 확인
  // 화일은 WIN95는 windowssystem에, NT는 winntsystem32 디렉토리에 있음
  StrPCopy(aName, 'IMM32.DLL');
  hDLL := GetModuleHandle(aName);
  if hDLL <> 0 then
  begin
    tMode := ImmGetContext(Handle);
    if ImmGetConversionStatus(tMode, Conversion, Sentence) then
    begin  {현재 한글 입력상태의 확인}
      if Conversion = IME_CMODE_HANGEUL then
        Edit6.Text := '현재 한글모드'
      else if Conversion = IME_CMODE_ALPHANUMERIC then
        Edit6.Text := '현재 영문모드';
    end
    else
    begin
      Edit6.Text := '사용불가'; {메모리에 IMM32.DLL이 있으나 사용못함}
    end;
  end
  else
  begin
    Edit6.Text := '사용불가';   {메모리에 IMM32.DLL이 없음}
  end;
end;

end.





971   [네트웍/인터넷] Internet에 연결중인지 여부를 알려면...  김영대 2003/03/04 5166 1329
970   [윈도우즈 API] 델파이 3.0에서 한글변환을 하는법....  김영대 2003/03/04 5492 1386
969   [시스템] 떠 있는 프로그램 죽이기...  김영대 2003/03/04 5615 1374
968   [시스템] 다른 Application 생성과 소멸에 대하여...  김영대 2003/03/04 4811 1298
967   [윈도우즈 API] 도구모음 Bar는 어떻게 만드는지...  김영대 2003/03/04 4685 1325
966   [일반/컴포넌트] StringGrid의 Cell에 입력 값 제한 하기  김영대 2003/03/04 5795 1272
965   [데이터베이스] DB의 Blob필드에 화일을 저장하기  김영대 2003/03/04 5094 1223
  [시스템] Windows NT 에서 한글 NT인지 영문 NT인지 구분하는 방법  김영대 2003/03/04 5094 1322
963   [시스템] 오직 하나의 프로그램만 실행...  김영대 2003/03/04 4999 1350
962   [데이터베이스] TBlobField에 대한 사용법  김영대 2003/03/04 4869 1251
961   [멀티미디어] TMedia Player에서 BMP파일로 저장하기(화면 capture)  김영대 2003/03/04 4428 1246
960   [일반/컴포넌트] StringGrid에서 Enter Key를 Tab Key와 같은 효과  김영대 2003/03/04 5081 1177
959   [데이터베이스] Stored Procedure 작성을 어떻게 하나  김영대 2003/03/04 4887 1260
958   [윈도우즈 API] 날짜변형에 대해서...  김영대 2003/03/04 4778 1212
957   [윈도우즈 API] 델파이에서 시간을 기다리는 함수  김영대 2003/03/04 5817 1347
956   [데이터베이스] DBGrid에서 MultiSelect된것 알아내려면...  김영대 2003/03/04 5268 1238
955   [윈도우즈 API] 외부 프로그램의 윈도우 크기 조절  김영대 2003/03/04 4868 1238
954   [윈도우즈 API] 클립보드로 복사  김영대 2003/03/04 5619 1394
953   [일반/컴포넌트] VB Left$(), Right$(), LTrim$() ...  김영대 2003/03/04 4791 1189
952   [윈도우즈 API] 화면캡처하기 Delphi3.0에서...  김영대 2003/03/04 4691 1265
951   [데이터베이스] 엑셀자료를 읽어서 DB에 UPDATE  김영대 2003/03/04 5134 1249
950   [시스템] 프린터 상태가 Ready인지 아닌지 검사  김영대 2003/03/04 5739 1650
949   [데이터베이스] DBGrid 에서 선택된 필드의 타이틀을 굵게  김영대 2003/03/04 4703 1288
948   [윈도우즈 API] bitmap을 JPEG로 변환  김영대 2003/03/04 4903 1310
947   [데이터베이스] DBGrid의 Column, Record 의 위치 저장/이동  김영대 2003/03/04 9210 1384
946   [데이터베이스] ORACLE 나 SQL Server 에서 레코드 번호  김영대 2003/03/04 4932 1252
945   [윈도우즈 API] 키보드의 임의키 발생  김영대 2003/03/04 5175 1324
944   [데이터베이스] BDE 버전정보  김영대 2003/03/04 3987 1126
943   [일반/컴포넌트] 문자열의 암호화(Password 처리)  김영대 2003/03/04 4371 1076
942   [일반/컴포넌트] Image의 90도 회전  김영대 2003/03/04 5081 1160
941   [윈도우즈 API] 파일정보(생성,변경,접근일자,속성,종류...)  김영대 2003/03/04 5325 1236
940   [윈도우즈 API] 윈도우즈 탐색기와의 연동  김영대 2003/03/04 5438 1323
939   [시스템] 절약형 모니터의 켜기/끄기  김영대 2003/03/04 4671 1285
938   [시스템] 드라이브 포맷(Format) API 함수  김영대 2003/03/04 4709 1278
937   [일반/컴포넌트] virtual keys 리스트  김영대 2003/03/04 4134 1181
936   [윈도우즈 API] short/long file name 변환  김영대 2003/03/04 4170 1224
935   [일반/컴포넌트] 메뉴 아이템의 동적 추가와 그림넣기  김영대 2003/03/04 4541 1184
934   [윈도우즈 API] 파일의 확장명으로 실행화일 연결  김영대 2003/03/04 4961 1316
933   [시스템] CD-ROM 문 열기/닫기  김영대 2003/03/04 4711 1333
932   [일반/컴포넌트] QReport에서 출력된 자료를 Text화일로 저장  김영대 2003/03/04 4395 1216

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

Copyright 1999-2019 Zeroboard / skin by zero