2

Windows、OSX、および Linux で C++/Qt のスクリーンショットを撮るためのアプリケーションに取り組んでいます。次に、アプリケーションがバックグラウンドで実行されているときにユーザーがスクリーンショットを撮れるように、グローバル ホットキーを設定する必要があります。どちらも Qt ライブラリである Qxt と UGlobalHotkey を試してみましたが、どちらも機能しないようでした。

Carbon (tutorial)を使用して OSX 用に実装しようとしましたが、クラス メンバー関数を呼び出す必要があり、機能しません。誰かが私に例を教えてもらえますか? 私のコードはこちらにあります。呼び出す必要がある関数は new_screenshot() です。

または、このようなことを達成する他の方法はありますか? バックグラウンドからスクリーンショットを撮るには、アプリケーションが本当に必要です。プラットフォームごとに個別のクライアント (OSX 用の Cocoa Swift、Linux 用の GTK、Windows 用の C# クライアント) を用意した方がよいでしょうか? ここ数日、私はしばしばこれについて考えてきました。

4

2 に答える 2

1

私は過去にMFCとWIN32 APIで何かをしました....それはWindowsでのみ動作します...しかし、押すALT+F10とウィンドウを非表示/表示できました...

void CWinHideDlg::OnButtonActive() 
{
    CString tmp;
    GetDlgItemText(IDC_BUTTON_ACTIVE,tmp);
    if(0 == strcmp(tmp.GetBuffer(tmp.GetLength()),"Activate"))
    {
        m_myAtom=GlobalAddAtom("MY_GLOBAL_HOT_HIDE_KEY");
        int err=RegisterHotKey(this->GetSafeHwnd(),m_myAtom,MOD_ALT,VK_F10);
        SetDlgItemText(IDC_BUTTON_ACTIVE,"Stop");
        CButton *pBtn = (CButton *)GetDlgItem(IDC_BUTTON_UNHIDE);
        pBtn->EnableWindow(TRUE);
        SetDlgItemText(IDC_STATIC_INFO,"Set the mouse over the window \nand press ALT + F10 to hide it...");
    }
    else
    {
        UnregisterHotKey(this->GetSafeHwnd(),m_myAtom);
        GlobalDeleteAtom(m_myAtom);     
        CButton *pBtn = (CButton *)GetDlgItem(IDC_BUTTON_UNHIDE);
        pBtn->EnableWindow(FALSE);
        SetDlgItemText(IDC_BUTTON_ACTIVE,"Activate");

    }   
}

基本的に、このコードはホットキーをアクティブ化/非アクティブ化しますALT+F10。アクティブ化すると、システムで実行中のウィンドウを非表示/非表示にすることができます。ウィンドウの上にマウスポインターを置き、ALT+F10...

これはWindowProc関数からのものです:

if(message == WM_HOTKEY)
    {
        CString tmp;
        POINT pc;
        GetCursorPos(&pc);


        if(GetAsyncKeyState(VK_F10))
        {
            HWND hwnd=::WindowFromPoint(pc);            
            if(hwnd)
            {
                tmp.Format("%08Xh",hwnd);
                m_HideWins.InsertString(m_HideWins.GetCount(),tmp);
                ::ShowWindow(hwnd,SW_HIDE);
            }
        }
    } 

コードを使用して独自の HOT キーを登録し、それを使用してスクリーンショットを撮ることができます...

それが役に立てば幸い...

于 2016-02-24T21:15:23.913 に答える