Odak noktası bir metin alanına girdiğinde bir bildirim oluşturmak için bir çözüm bulmaya çalışıyorum. Son hedef, ekran klavyelerinde, mobil cihazlarda gördüğünüz işlevsellik türünü yeniden oluşturmaktır. Şu an ile EVENT_OBJECT_FOCUS
ve GetGUIThreadInfo
ile GUI_CARETBLINKING
ile keşfettim. DokümanlarWindows.h - Odaklama bir metin girdisi girdiğinde bildirim
: Bir nesne klavye odağı alan
EVENT_OBJECT_FOCUS. Sistem bu olay 'u aşağıdaki kullanıcı arabirimi öğeleri için gönderir: liste görünümü denetimi, menü çubuğu, açılır menü, geçiş penceresi, sekme denetimi, ağaç görünümü kontrolü ve pencere nesnesi.
GUI_CARETBLINKING Raşmin durumu. Bu bit kartuşu görünürse ayarlanır. Bu çözüm ile geldim bu yöntemleri kullanarak
:
void TextInputHelper::setupEventHook(FREContext iCtx)
{
ctx = iCtx;
CoInitialize(NULL);
evHook = SetWinEventHook(EVENT_OBJECT_FOCUS, EVENT_OBJECT_END, NULL,
handleEventObjectFocus, 0, 0,
WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
}
void CALLBACK handleEventObjectFocus(HWINEVENTHOOK hook, DWORD evt, HWND hwnd,
LONG idObj, LONG idChild, DWORD thread, DWORD time)
{
GUITHREADINFO threadInfo;
threadInfo.cbSize = sizeof(GUITHREADINFO);
BOOL result = GetGUIThreadInfo(thread, &threadInfo);
if(threadInfo.flags & GUI_CARETBLINKING)
{
//text field focus
}
}
Bu, bazı durumlarda ama onun kesinlikle güvenilir değildir çalışmak gibi görünüyor. Notepad bir IE gibi programlar iyi çalışıyor ama Firefox gibi diğerleri yok. Bu aynı zamanda web sitelerinde metin alanları gibi şeyler için işe yaramayacaktır çünkü handleEventObjectFocus
aramayacaktır.
Bu soruna yaklaşmanın başka bir yolu bilen var mı? Etrafımı araştırıyordum ve Accessibility API'larında bir şey aramaya benziyor gibi görünmüyor, ancak üzerinde fazla bir şey yapamamıştım.
Teşekkürler!
netleştirmek için düzenleme, ben odak herhangi bir metin alanına girdiğinde bir bildirim almak için arıyorum. Bu uygulama bir win32 dll ve asla kendi kendine odaklanmayacak.
Uyguladığınız çözüm, aldığı kadar güvenilir. Windows denetimleri için iyi çalışır, ancak herhangi bir özel denetim uygulaması için olmaz. Örneğin Firefox, Windows denetimlerini hiç kullanmayan, tüm mantığı uygulayan ve kendisini oluşturan GUI'sı için Qt kullanır. – IInspectable