2014-07-11 12 views
0
CaptureScreenApp app; 

int MyPluginAPI::captureScreen(const FB::JSObjectPtr& callback) 
{ 
    boost::thread cs(boost::bind(&CaptureScreenApp ::captureScreen, 
     app, callback)); 
    return 1; 
} 

class CaptureScreenApp { 
public: 
    CaptureScreenApp() { 
     HRESULT hRes; 
     hRes = OleInitialize(NULL); 
     ATLASSERT(SUCCEEDED(hRes)); 
     AtlInitCommonControls(ICC_WIN95_CLASSES); 
     g_Module.Init(NULL, NULL); 
    }; 
    ~CaptureScreenApp() { 
     g_Module.Term(); 
     OleUninitialize(); 
    }; 

    bool captureScreen() { 
     CMessageLoop theLoop; 
     CMainDialog g_MainDlg; 
     g_Module.AddMessageLoop(&theLoop); 
     if (NULL == g_MainDlg.Create(NULL)){ 
      DWORD ret = GetLastError(); 
      return FALSE; 
     } 
     g_MainDlg.ShowWindow(SW_SHOW); 
     g_MainDlg.UpdateWindow(); 

     int nRet = theLoop.Run(); 
     g_Module.RemoveMessageLoop(); 
     return TRUE;  
    }; 
}; 

class CMainDialog : public CDialogImpl<CMainDialog> 
{ 
public: 
    enum {IDD = IDD_MAIN}; 
    ....  
} 

창 (새 창은 데스크톱 사진이있는 전체 화면 창입니다. background) CaptureScreenApp :: captureScreen에서 브라우저 창 아래에 항상 나타납니다 (브라우저 창은 항상 다른 단어로 활성화 됨). 새 창에 대해 HWND_TOPMOST를 설정하는 방법은 무엇입니까? 같은 :firebreath 플러그인은 전체 화면 창을 만들지 만 브라우저 창 아래에 항상 창을 표시합니다. 어떻게 상단에 가져올 수 있습니까?

enter link description here

는 어떻게하면 appers 때 맨 전체 화면 창을 가져올 수 있습니까?

답변

0

SetWindowPos API를 사용하면 Z 주문을 변경할 수 있습니다 (여기에 설명 참조). NULL 부모와 함께 창을 만들면 창이 브라우저 창과 완전히 독립적이므로 창 앞에 밀어 넣을 수있는 것이 없습니다. 대화 상대는 대화 상대가됩니다.

+0

감사합니다. 귀하의 제안대로, 부모, 크롬 및 파이어 폭스 작품으로 브라우저 창을 사용하지만, IE는 여전히 실패 : 브라우저 창은 jsapi를 처음 호출 할 때 여전히 앞에 있지만 두 번째 시간은 뒤쳐집니다. – yyj

+0

Spy ++를 사용하여 창의 효과적인 레이아웃을 검사 한 다음주의 깊게'SetWidnowPos' 기사를 읽고 창을 포 그라운드로 배치하는 옵션을 확인하십시오 (부모 창을 사용하는 것 외에 /는 제외). –

+0

SetForegroundWindow (hwnd)를 사용합니다. 창을 가져올 수는 있지만 Ctrl + Tab을 누를 때 앞에 붙이지 않아도됩니다.이 문제는 IE – yyj