2016-03-23 17 views
0
zamanki

olarak çalışmak değil ve ben açmak bir QWidget Önalanve odakLineEdit, RUN gibi (WIN + R istiyorum istiyorum) Windows'ta. Sorun uygulama arka planda çalışıyor ve pencereyi açmak için (show + focus/hidden) bir kısayol (LCTRL + LWIN + T) kaydetmek için yalnızca bir keylogger var. Kısayol basılırsa, ben Kanunu aşağıdaki yürütmekQt 5.5 - Windows API Windows 10</strong><strong>üzerinde <strong>Qt 5.5</strong> kullanıyorum

:

if(this->isHidden()){ 

     this->show(); 

     //Windows API Methods: 
     SetActiveWindow((HWND) this->winId()); 
     SetForegroundWindow((HWND) this->winId()); 
     SetFocus((HWND) this->winId()); 

     this->_edit->setFocus(); 

     qDebug() << "[OUT][DONT WORKING] Window shoud be shown and focused"; 
    }else{ 
     this->hide(); 
     qDebug() << "[OUT][WORKING] Window shoud be hidden"; 
    } 

Şimdi LCTRL + Lwin + T basarsanız, arka planda Pencere açılır ve benim istediğim bu değil. Birisi bunun neden çalışmadığını açıklayabilir mi? Pencerenin ön planda açılmasını ve metin kutusunun odaklanmış olduğunu ne yapabilirim? Ve ben StayAlwaysOnTop bayrağını ayarlamak istemiyorum, çünkü metin alanı hala odaklanmamış.

Umarım bana yardımcı olabilirsin. Çok teşekkür ederim!

cevap

0

[Çözüldü]

O i cari Girişini almak zorunda ForegroundWindow ayarlamak için nedeniyle bu derste ben şu ki, mümkün değildi

:

Construcor:

HWND wId = (HWND) winId(); 
DWORD pId = GetWindowThreadProcessId(wId, NULL); 
AllowSetForegroundWindow(pId); 

onShortcutPressed:

this->show(); 
HWND wId = (HWND) winId(); 
DWORD pId = GetWindowThreadProcessId(wId, NULL); 
DWORD fpId = GetWindowThreadProcessId(GetForegroundWindow(), NULL); 

//Attach Thread to get the Input - i am now allowed to set the Foreground window! 
AttachThreadInput(fpId, pId, true); 
SetActiveWindow(wId); 
SetForegroundWindow(wId); 
SetFocus(wId); 
AttachThreadInput(fpId, pId, false); 

Çalışıyor!