Получите дескрипторы окна приложения

В вашем методе onTouch() вы можете проверить, что источник события касается вашего TextView2 TextView. В этом случае проигнорируйте событие и позвольте методу onClick () вашего textview2 обработать его:

linear1.setOnTouchListener(new View.OnTouchListener() {
                float initX;
                float initY;
                @Override
                public boolean onTouch(View v, MotionEvent event) {

                    if (v == textview2) {
                        return;
                    }

                    switch(event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            initX = event.getX();
                            initY = event.getY();
                            break;
                        case MotionEvent.ACTION_UP:
                            initX -= event.getX();
                            initY -= event.getY();
                            if (initY > len) {
                                //Logic For Swipe Right
                            } else if(initY < -len) {
                                //Logic For Swipe Left   
                            }
                            break;
                     }
                     return true;
                }
});
15
задан Caffé 20 January 2015 в 22:08
поделиться

2 ответа

Вы можете сделать то, что, по-видимому, делает Process.MainWindowHandle : использовать P / Invoke для вызова функции EnumWindows , которая вызывает метод обратного вызова для каждого окно верхнего уровня в системе.

В обратном вызове вызовите GetWindowThreadProcessId и сравните идентификатор процесса окна с Process.Id ; если идентификаторы процессов совпадают, добавить дескриптор окна в список.

17
ответ дан 1 December 2019 в 02:37
поделиться

First, you'll have to get the windowhandle of the application's mainwindow.

 [DllImport("user32.dll", SetLastError = true)]
 static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

 IntPtr hWnd = (IntPtr)FindWindow(windowName, null);

Then, you can use this handle to get all childwindows:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);

private List<IntPtr> GetChildWindows(IntPtr parent)  
{  
    List<IntPtr> result = new List<IntPtr>();  
    GCHandle listHandle = GCHandle.Alloc(result);  
    try  
    {  
         EnumWindowProc childProc = new EnumWindowProc(EnumWindow);  
         EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));  
    }  
    finally  
    {  
         if (listHandle.IsAllocated)  
               listHandle.Free();  
    }  
    return result;  
}   
10
ответ дан 1 December 2019 в 02:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: