Q&A

  • 키보드를 훅킹하다가 특정키가 들어오면 한영전환...
한영전환키가 없는 일제 노트북을 구입했습니다.

일본자판이라 사용하지 않는 키가 있어서 고놈을 keydown event때 코드를 보니까

255가 넘어오더라고요..

그래서 키보드 훅킹을 해서 255가 넘어오면 한영전환을 할려고 하는데...

내가 만든 원래프로그램에서는 잘되는데 다른프로그램에서 하면 한영전환결과가

false가 됩니다. 고수님들 이유좀 알려주세요...

아래는 프로그램 소스입니다.





unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, imm, tlhelp32 ;



type

TForm1 = class(TForm)

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

{ Private declarations }

procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;

public

{ Public declarations }

function aaa : integer;

end;



var

Form1: TForm1;

FAtom: TAtom;

hangul : boolean = false; //처음은 영어로 세팅.

implementation



{$R *.DFM}



const

id_SnapShot = 255;



procedure TForm1.WMHotKey (var Msg : TWMHotKey);

var

{ hIMC: HIMC;}

// hIMC: integer;

dwSentence : DWORD;

dwConversion : DWORD;

tMode : HIMC;

winname : himc;

b : boolean;

begin

if Msg.HotKey = id_SnapShot then

begin

tMode := ImmGetContext(handle);

winname := aaa;

tMode := ImmGetContext(winname);

getwindow(tmode, GW_HWNDPREV);



//한영전환 처리

hangul := not hangul;

if hangul then

b:=ImmSetConversionStatus(tMode, IME_CMODE_HANGEUL,

IME_CMODE_HANGEUL)

else

b:=ImmSetConversionStatus(tMode, IME_CMODE_ALPHANUMERIC,

IME_CMODE_ALPHANUMERIC);

end;



//처리결과 확인

if b then showmessage('true') //현재는 자기폼일때는 성공하고

else showmessage('false'); // 다른폼일때는 실패합니다.

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

FAtom := GlobalAddAtom('hangul');

RegisterHotKey(Form1.Handle,id_SnapShot, 0, 255);

end;



procedure TForm1.FormDestroy(Sender: TObject);

begin

UnRegisterHotKey (Form1.Handle, id_SnapShot);

end;





//현재 커런트한 윈도우의 핸들구하기..

function TForm1.aaa : integer;

var

hw: integer;

TID,

PID,

hIns: DWORD;

acBuf: array[0..259] of char;

Snap: Integer;

Data: TProcessEntry32;

begin

hw := GetForegroundWindow();

if ( hw <> 0 ) then

begin

FillChar( acBuf, 260, #0 );

GetClassName( hw, @acBuf[0], 260 );

TID := GetWindowThreadProcessID( hw, @PID );

Snap:=CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

try

Data.dwSize := SizeOf( Data );

if( Process32First( Snap, Data ) )then

begin

repeat

if ( Data.th32ProcessID = PID ) then

begin

hIns := Data.th32ModuleID;

strCopy( acBuf, Data.szExeFile );

Memo1.Lines.Add(strpas(acBuf) + ';' + inttostr(hw));

GetClassName( hw, @acBuf[0], 260 );

result := hw;

Break;

end;

until not( Process32Next( Snap, Data ) );

end;

finally

Windows.CloseHandle( Snap );

end;



end;



end;





end.

0  COMMENTS
    • loke
      2001.06.24 08:58
      쿼리 컴포넌트를 더블 클릭하면 쿼리 필드 정의 창이 나오져... 그곳에서 calculated 로 필드를 만드셨다면...
    • 최용일
      2001.06.23 21:23
      안녕하세요. 최용일입니다. 에디트박스의 OnKeyPress이벤트에서 아래와 같이 코딩하세요... procedur...
    • 김동수
      2001.06.23 22:37
      와우....^^ 대단히 감사합니다. 근데.....이 코딩을 백퍼센트 이해하지 못햇습니다. if Key in ['1'..'9...
    • 최용일
      2001.06.23 23:05
      Sender는 이벤트를 발생시키는 넘... 예를 들어 에디트 박스에서 이벤트가 발생했다면 Sender는 에디트박스...
    • 강대구
      2001.06.25 09:25
      FinalData라는 프로그램이 있습니다. 포멧된 데이터를 살려내는 기능입니당.. 잘만하면(?) 데이터를 100%...
    • 알 수 없어
      2001.06.23 20:25
      미스터킴 wrote: > 안녕하세요 > 컴에익숙하지 않은 놈인데요 > > 메일을 받았던것을 백업 받지 않고...
    • 김동수
      2001.06.23 21:18
      하드포맷했으면 살릴수 없을겁니다.(아웃룩을 쓰신다면...) 메일을 전송받는방식에는 크게 두가지가 있습...
    • 백승환
    • 2001.06.23 19:28
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.06.23 19:42
      안녕하세요. 최용일입니다. > Result := -lstrcmp(PChar(str1), PChar(str2)); 위코드에서 값들을 ...
    • 백승환
      2001.06.23 21:13
      에궁.. 답변 감사한데요... 제 질문은 왜 Sort하면 두개값만 비교하는게 아니고 치환하고 그런 작업이 ...
    • 최용일
      2001.06.23 23:07
      네. CustomSort에서 API함수를 호출해서 API함수내부에서 합니다. 백승환 wrote: > 에궁.. 답변 감사한...
    • 주삼식
      2001.07.18 19:01
      안녕하세요. 메타파일과 비트맵은 구조적으로 그림을 처리하는 방법이 다릅니다. 메타파일은 엠에스에...
    • 최혜정
      2001.07.18 19:26
      먼저 답변 감사합니다. 그런데, 제가 비트맵으로 자료를 저장한 후 윈도우의 이미징 프로그램을 띄운 후 ...
    • 주삼식
      2001.07.18 20:52
      안녕하세요. 제가 테스트 해본 것은 아니라서 확신은 할 수 없지만 될 것 같습니다. 먼저 메타 그림을 ...
    • loke
      2001.06.24 09:15
      procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if key = #43 then beg...
    • 김태용
      2001.06.23 18:04
      파이파이 wrote: > " + "키를 눌렀을때 " 000 "을 넣는 방법이 없는지요.??? > Edit 컴포넌트에서 숫자뒤...
    • 정성훈
      2001.06.23 18:15
      김태용 wrote: > 파이파이 wrote: > > " + "키를 눌렀을때 " 000 "을 넣는 방법이 없는지요.??? > > Edi...
    • 김델초
    • 2001.06.23 04:23
    • 3 COMMENTS
    • /
    • 0 LIKES
    • loke
      2001.06.24 09:19
      TMemo 는 size 의 한계가 있습니다. TRichEdit 를 사용하심이.... 김델초 wrote: > rs232c를 통해...
    • 정성훈
      2001.06.23 18:17
      김델초 wrote: > rs232c를 통해 메모장으로 문자열을 출력받슴니다 > 메모장에 출력되는 line수가 한계치...
    • 김델초
      2001.06.25 18:29
      정성훈 wrote: > 김델초 wrote: > > rs232c를 통해 메모장으로 문자열을 출력받슴니다 > > 메모장에...
    • 김동기
    • 2001.06.23 03:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강호규
      2001.06.25 18:44
      연결외 되지 않는다면 그 때 발생하는 에러메시지를 올려주시기 바랍니다. 오라클은 정상적으로 설치가...
    • hobakpa
    • 2001.06.23 03:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이경문
      2001.06.23 04:26
      Image1.Picture := nil; 요렇게 하면 되지여... Image1.Picture.Assign(nil); 요렇게 해도 되구여... ...
    • hobakpa
      2001.06.23 19:04
      .
    • 델초보
    • 2001.06.23 03:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 갱민이
      2001.06.23 05:42
      폼에 올려진 컴포넌트를 헬프에서 찾아 보세요.. 여기 추가되는 unit명이 있으니까.. 이만.. 델초보...
    • 강호규
      2001.06.25 18:45
      이곳에서 검색을 해보세요. 관련 자료가 많이 있습니다. 자료실에도 좋은 콤포넌트가 올라와 있구요......
    • 김기환
    • 2001.06.23 02:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • .
      2001.06.26 01:34
      김기환 wrote: > 흠..잘 모르겠어서 이렇게 질문 드립니다. > 현재 ms-sql7.0을 구매해서 사용하고 있는...
    • 백승환
    • 2001.06.23 02:08
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이경문
      2001.06.23 02:13
      ListView1.Font.Charset = DEFAULT_CHARSET; 백승환 wrote: > 글씨가 깨지는데 왜 그렇죠? > > 아시...
    • 초보
    • 2001.06.23 03:16
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 짱아
    • 2001.06.23 01:31
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 지니
      2001.06.26 01:40
      델파이에서 기본 재공되는 쿼리 컴포넌트와 업데이트 컴포넌트를 사용하셨다면..... 쿼리컴포넌트(Q...
    • 갱민이
      2001.06.23 05:45
      DB가 Read only라서 수정, 삭제등이 안돼는 것 같습니다.. 그럼 이만.. 짱아 wrote: > 이에러의 정체...
    • blackjewel
      2001.06.23 02:17
      짱아 wrote: > 이에러의 정체는 무엇인지... ^^;; 갈켜주세염~ > > > Project Korm03pe.exe raised ...