Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> непонятный глюк, проблемма со свертыванием, закрытием 
:(
    Опции темы
AGENTxXx
Дата 17.2.2010, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: 1
Всего: 1



И сново я))) Всем кодерам большущий привет! Постепенно все вот разочаровываюсь в детище майкрософта. Недавно поймал баг в котором такие вот дела: стоит условие, проверка числа, если оно не равно 0 то идем по true иначе false. И что вы думаете... по false идет правильно, а вот когда значение true становится..он просто пропускает условие.. ни туда ни сюда... Странно, не правда ли... Но речь сейчас о другом глюке! Решил я воспроизвести клик с помощью вот этого добра:
Код

case "1":
mouse_event(MouseFlags.Absolute | MouseFlags.LeftDown, f.X, f.Y, 0, UIntPtr.Zero);
break;
case "2":
mouse_event(MouseFlags.Absolute | MouseFlags.LeftUp, f.X, f.Y, 0, UIntPtr.Zero);
break;

где последовательность идет сразу же 1, а потом 2. Самое странное что если написать так то будет все работать:
Код

mouse_event(MouseFlags.Absolute | MouseFlags.LeftDown, f.X, f.Y, 0, UIntPtr.Zero);
mouse_event(MouseFlags.Absolute | MouseFlags.LeftUp, f.X, f.Y, 0, UIntPtr.Zero);

т.е. все под case "1" например записать. Но ведь по сути дела эт одно и то же вроде как...
где f - эт коорд точки где производим клик (курсор уже там находится) и когда я щелкаю по кнопке свернуть (закрыть, и скорей всего такой же глюк будет при развернуть) данной программе, происходит нажатие кнопки, а отпускание не происходит. Причем происходит так сказать процесс ожидания.. т.е. прога дальше не выполняется, так как ждет когда же по условию отпустим кнопку мыши.. а отпускать не хочет. В итоге когда я своими силами это сделаю (кликну) то прога думает: о, зашибись, клавишу отпустили и продолжает выполняться. 

В чем косяк? Что может быть не так? 

Сразу говорю: форма программно таскается без проблем, с формой можно делать что хочешь кроме как выполнять эти 3 действия. Если на панели задач нажать на иконку, то она свернется без проблем. С другими формами работает нормально, ну например если указать координаты где находится кнопка закрыть у блокнота то закрывает, сворачивает, разворачивает. Короче, работает как нужно.. а вот с самой прогой которая это все отслеживает и делает - не работает.. Плизз помогите кто знает!!!

Вот, если кому надо, как у меня все выполняется:
Код

private void inkm()
        {
                f.X = Convert.ToInt32(strarray[i]);
                f.Y = Convert.ToInt32(strarray[i + 1]);
                Cursor.Position = f;
                switch (strarray[i + 3]) // тут значение храниться - варианиы case'ов
                {
                    case "1":
                        mouse_event(MouseFlags.Absolute | MouseFlags.LeftDown, f.X, f.Y, 0, UIntPtr.Zero);
                        break;
                    case "2":
                        mouse_event(MouseFlags.Absolute | MouseFlags.LeftUp, f.X, f.Y, 0, UIntPtr.Zero);
                        break;
                    case "3":
                        mouse_event(MouseFlags.Absolute | MouseFlags.RightDown, f.X, f.Y, 0, UIntPtr.Zero);
                        break;
                    case "4":
                        mouse_event(MouseFlags.Absolute | MouseFlags.RightUp, f.X, f.Y, 0, UIntPtr.Zero);
                        break;
                    case "5":
                        mouse_event(MouseFlags.Absolute | MouseFlags.MiddleDown, f.X, f.Y, 0, UIntPtr.Zero);
                        break;
                    case "6":
                        mouse_event(MouseFlags.Absolute | MouseFlags.MiddleUP, f.X, f.Y, 0, UIntPtr.Zero);
                        break;
                    case "120":
                        mouse_event(MouseFlags.Absolute | MouseFlags.WhellDelta, f.X, f.Y, 120, UIntPtr.Zero);
                        break;
                    case "-120":
                        mouse_event(MouseFlags.Absolute | MouseFlags.WhellDelta, f.X, f.Y, -120, UIntPtr.Zero);
                        break;
                }
                //Cursor.Position = f;
            }
        }

        private void risov()
        {
            try
            {
                if (i < r - 7)
                {
                    inkm();
                    if (strarray[i + 3] != "0")
                        timer1.Interval = Convert.ToInt32(strarray[i + 2]); // тут задержка регулируется, так как вот эта функция в таймере сидит
                    else
                        timer1.Interval = 10;
                    i += 5;
                }
                else
                {
                    inkm();
                    rr2 += timer1.Interval;
                    timer1.Enabled = false;
                }
            }
            catch (Exception er)
            {
                MessageBox.Show(er.Message); 
                throw new Win32Exception(); // если честно забыл уже для чего эта строка
            }
        }

PM MAIL   Вверх
AGENTxXx
Дата 17.2.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: 1
Всего: 1



Дополнение: если запустить 2 копии проги, и одну запустить на выполнение то она свернет или закроет другую копию => прога робит нормально, но видно происходит какое то другое событие что ли...
PM MAIL   Вверх
KelTron
Дата 17.2.2010, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 5
Всего: 38



Цитата(AGENTxXx @  17.2.2010,  00:35 Найти цитируемый пост)
Но ведь по сути дела эт одно и то же вроде как...

Похоже кому то надо почитать что такое switch и как он работает.

Цитата(AGENTxXx @  17.2.2010,  00:35 Найти цитируемый пост)
Недавно поймал баг в котором такие вот дела: стоит условие, проверка числа

100% ошибка в условии. 

Из твоего кода и описания почти не понятно что происходит. Но судя по тому что я уловил могу посоветовать отлавливать событие не Click, а MouseDown.


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
AGENTxXx
Дата 17.2.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: 1
Всего: 1



Хорошо, если ты говоришь что ошибка в switch то объясни почему с другими прогами все работает шикарно а? Почему не работает только с той, которая запускает этот процесс? на счет бага который по твоему мнению 100% ошибка в условии - постараюсь до понедельника сделать эт в отдельное приложение, и пришлю сюда. Посмотрим где ошибку ты найдешь! Но мне главное ответ на закрытие и свертывание нужен
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.