C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[76454] Re:Re:Re:Re:Re: 2010화상키보드실행에러
[] 352 읽음    2023-04-17 04:32
빌더님은 천재....   그래도 혹 아직도 저처럼 C++Builder6 사용하시는 분들 참고하시라고....

typedef BOOL (WINAPI *LPFN_Wow64DisableWow64FsRedirection) (PVOID *OldValue);
typedef BOOL (WINAPI *LPFN_Wow64RevertWow64FsRedirection)  (PVOID  OldValue);

LPFN_Wow64DisableWow64FsRedirection fnWow64DisableWow64FsRedirection  = NULL;
LPFN_Wow64RevertWow64FsRedirection  fnWow64RevertWow64FsRedirection   = NULL;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  PVOID was;

  HMODULE hModule = ::GetModuleHandle("kernel32.dll");     //kernel32.dll은  Windows가 시작될 때 이미 보호메모리 공간에 Load 됩니다.
                                                           //그러므로 if( hModule==NULL ) { } 할 필요가 없겠지요. 당연히히 핸들을 둘려줄 것입니다.

  fnWow64DisableWow64FsRedirection  = (LPFN_Wow64DisableWow64FsRedirection)::GetProcAddress( hModule, "Wow64DisableWow64FsRedirection" );
  fnWow64RevertWow64FsRedirection   = (LPFN_Wow64RevertWow64FsRedirection)::GetProcAddress ( hModule, "Wow64RevertWow64FsRedirection" );

  if( fnWow64DisableWow64FsRedirection && fnWow64RevertWow64FsRedirection )
  {
    fnWow64DisableWow64FsRedirection(&was);

    ::ShellExecute(NULL, "open", "osk.exe", NULL, NULL, SW_SHOWNORMAL);

    fnWow64RevertWow64FsRedirection(was);
  }

                                                           //::FreeLibrary( hModule ); 사용하면 안됨, LoadLibrary와 쌍으로 사용,  GetModuleHandle은 이미 불러진 핸들을 그냥 참조...
}


빌더 님이 쓰신 글 :
: 다음 부터 질문 올릴 때는, 사용하는 OS 버전이 XP인지 아니면 Win 7 인지..
: 그리고 Win 7이라면 32비트 버전인지 아니면 64비트 버전인지 그런 내용도 적어줘야
: 답변하는 분들도 편합니다.
:
: 이미 말씀드린 대로... Vista 이후 호환성 문제 때문에 Shell 펑션을 사용해 보라고 답변 드렸었죠.
:
:
: Window 7  64 비트 OS라면... 코드를 다음과 같이 작성해서 컴파일 해보세요.
:
:
: 
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:     Wow64DisableWow64FsRedirection(&prevSet);
:     ShellExecuteW(0, L"open", L"osk.exe",0,0,SW_SHOW);
:     Wow64RevertWow64FsRedirection(prevSet);
: }
: 
: 
: 

:
: 위의 코드는...
:
: 64비트 OS 환경에서 32비트 프로그램이 시스템 디렉토리를 액세스하게 될 경우...
: 시스템 디렉토리의 Redirection 문제가 일어나는데.. 그런 문제를 피해서 동작이 제대로
: 될수 있도록 처리해주는 겁니다.

+ -

관련 글 리스트
66237 2010화상키보드실행에러 열공해야하는.. 1040 2012/02/11
66240     Re:2010화상키보드실행에러 빌더 1565 2012/02/12
66250         Re:Re:2010화상키보드실행에러 (원인 찾았는데....) 열공해야하는.. 1211 2012/02/13
66251             Re:Re:Re:2010화상키보드실행에러 (원인 찾았는데....) 빌더 1007 2012/02/13
66256                 Re:Re:Re:Re:2010화상키보드실행에러 (원인 찾았는데....) 열공해야하는.. 971 2012/02/13
66257                     Re:Re:Re:Re: 2010화상키보드실행에러 빌더 1400 2012/02/13
76454                         Re:Re:Re:Re:Re: 2010화상키보드실행에러 352 2023/04/17
66261                         Re:Re:Re:Re:Re: 2010화상키보드실행에러 열공해야하는.. 1213 2012/02/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.