Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Вниз

Помогите разобраться с проблемой   Найти похожие ветки 

 
dreamse   (2007-03-04 16:14) [0]

В общем есть большой проект. Писался не мной но дали дорабатывать, коду много. Проект представляет из себя шел, т.е замену рабочему столу Windows.

Работает софт отлично. но есть 2 проблемы :( где копать не знаю

при загруженом шеле

1) Не реагирует на смену языка пр CTRL + Shift или Alt + shift ( если зайти в панель управления и сменить раскладку то всё нормально до первой перезагрузки. Кстати дополнительные комбинации типа : Ctrl + Shift + 1 работают всегда !!! )
2) Открываем проводник и пытаемся что то скопировать. При копировании не показываеться форма копирования :( соответствено после копирования не видно что скопированно, нужно нажимать f5

Проверял никаких dll с перехватом (hook) в шеле нет.
В какую сторону копать ?

p.s код к сожалению выложить не могу ( это коммерческий проект )


 
DVM ©   (2007-03-04 17:04) [1]

Ошибка в 17 строке. Какая именно - сказать не могу - это коммерческая тайна.


 
dreamse   (2007-03-04 17:15) [2]

> DVM ©   (04.03.07 17:04) [1]

Я не просил давать тупые советы.

Я спрашивал людей которые возможно сталкивались с подобными ошибками при разработке софта. Если есть мысли как проверить что именно приводит к ошибке то прошу подсказать


 
@!!ex ©   (2007-03-04 17:17) [3]

1) Есть вероятность, что где то прописаны соответствующие горячие клавиши, и их дальнейшая обработка блокируется.
2) Вроде диалог копирования и многие подобные фичи - часть стандартного шелла. Нет шелла, нет диалога. Пиши свой.


 
dreamse   (2007-03-04 17:24) [4]

> @!!ex ©   (04.03.07 17:17) [3]

1) Я тоже так думаю , правда незнаю где копать так как перерыл код на наличие перехвата клавиши Shift ничего не нашёл, попробую поотключать поодиночке различные модули
2) К сожалению это не так, все диалоги храняться в dll и от текущего шелла не зависят, я думал что возможно диалог как то перехватываеться и скрываеться но хуков вроде нет... хотя нужно посмотреть что пшеться в модуле трея. так как там каике то сообщения системные идут


 
@!!ex ©   (2007-03-04 17:26) [5]


> 1) Я тоже так думаю , правда незнаю где копать так как перерыл
> код на наличие перехвата клавиши Shift ничего не нашёл,
> попробую поотключать поодиночке различные модули

Как искал, если не секрет? :)


> 2) К сожалению это не так, все диалоги храняться в dll и
> от текущего шелла не зависят, я думал что возможно диалог
> как то перехватываеться и скрываеться но хуков вроде нет.
> .. хотя нужно посмотреть что пшеться в модуле трея. так
> как там каике то сообщения системные идут

А я почему то думаю, что диалог копирования зависит от шелла. ;)


 
Olivetti   (2007-03-04 17:56) [6]

Я спрашивал людей которые возможно сталкивались с подобными ошибками при разработке софта

Это не ошибки. Это нереализованная функциональность. Клавиатуру тебе в руки.


 
DVM ©   (2007-03-04 18:35) [7]


> Я не просил давать тупые советы.

Я пару лет занимался написанием шеллов. За это время изучил почти все имеющиеся в свободном доступе исходники шеллов и работу стандартного проводника. Поэтому советы давать могу, но на нормально сформулированнные вопросы.

По первому вопросу я подозреваю, что данный глюк наблюдается скорее всего только в XP. В win2000 его быть не должно. Все дело в том, что переключатель раскладки в XP имеет тесное сотрудничество с плагином панели задач и загружается скорее всего им или апплетом панели управления  (это предположение). В 2000 переключатель стоит в автозагрузке и загружается самим шеллом. Советую взять переключатель раскладки от 2000 и просто запускать его своим шеллом. Работать будет гарантированно.


> Проверял никаких dll с перехватом (hook) в шеле нет.

У него хоть панель задач то есть? Без ловушек проблематично организовать ее подобие.

По поводу второго вопроса. Есть такой глюк. Не лечится. Если проводник запущен не в режиме рабочего стола - то он не отслеживает изменения в файловой системе.


 
dreamse   (2007-03-04 19:00) [8]

> DVM ©   (04.03.07 18:35) [7]

> По первому вопросу подозреваю, что данный глюк наблюдается скорее всего только в XP

Так и есть.

На счёт второго вопроса не согласен так как только что посмотрел другие шеллы Aston - Runpad ( runpad-shell.com ) там отлично всё копируеться


 
@!!ex ©   (2007-03-04 19:04) [9]


> dreamse   (04.03.07 19:00) [8]

Так у них скорее всего свой диалог, вот и все.


 
dreamse   (2007-03-04 19:06) [10]

> Советую взять переключатель раскладки от 2000 и просто запускать его своим шеллом. Работать будет гарантированно.

Не работает :(  В смысле работает но не реагирует на переключение. Думаю тут дело не в переключатле так как он просто реагирует на переключение и выводит меню языков. Ведь даже если снять переключатель языки всё равно будут переключаться в системе.

В 2000 таких проблем нет ! блин


 
DVM ©   (2007-03-04 19:06) [11]


> На счёт второго вопроса не согласен так как только что посмотрел
> другие шеллы Aston - Runpad ( runpad-shell.com ) там отлично
> всё копируеться

Эксплореру требуется возможно какая-то иннициализация. Я данный момент изучал мало, т.к. окна эксплорера - это часть стандартной оболочки и использовать их в своей оболочке не очень хорошо идеологически.


> На счёт второго вопроса не согласен так как только что посмотрел
> другие шеллы Aston

Можешь написать авторам астона. Скорее всего помогут. Более того, мне кажется, что сам Астон на Делфи написан.


 
DVM ©   (2007-03-04 19:09) [12]


> Не работает :(  В смысле работает но не реагирует на переключение.
>  Думаю тут дело не в переключатле так как он просто реагирует
> на переключение и выводит меню языков. Ведь даже если снять
> переключатель языки всё равно будут переключаться в системе.
>

Странно, у меня работало. Надо будет посмотреть. Там не один файл надо из 2000 брать.
Слушай, а сам язык переключать не хочешь? Это несложно.


 
dreamse   (2007-03-04 19:19) [13]

Я вот тоже думал уже над этим, просто перехватывать CTRL + SHIFT или ALT + SHIFT и менять раскладку.

Минус в том что можно менять rus - en а если несколько языков на компьютере ? китайский там ... :)

нужно как то получить список установленых языков и менять их по очереди


 
DVM ©   (2007-03-04 19:24) [14]


> Минус в том что можно менять rus - en а если несколько языков
> на компьютере ? китайский там ... :)

Этот список есть в реестре. Это не проблема.

Если нужен пример - могу кинуть (есть готовый).

Есть еще вариант использовать один из готовых переключателей, коих масса. Тот же пунто свитчер, например.


 
dreamse   (2007-03-04 19:58) [15]

> пунто свитчер и так пользую :) но встраивать один комерческий продукт в другой не есть хорошо.

Пример если не трудно скинь на whiteraven_@mail.ru

Жду


 
dreamse   (2007-03-04 20:26) [16]

> DVM ©   (04.03.07 19:24) [14]

списибо гляну.

Вторая проблама так и осталась .. :(


 
dreamse   (2007-03-04 23:25) [17]

Разобрался с языками в XP. Если кому то нужно будет то :

Заходим в панель управления - языки и службы текстового ввода. Ставим галочку на паремтре : Выключать дополнительные текстовые службы. Всё переключатель работает !

Значение признака в реестре : HKEY_CURRENT_USER\Software\Microsoft\CTF\Disable Thread Input Manager

Буду разбираться со второй проблемой


 
dreamse   (2007-03-05 00:44) [18]

Нашёл что являеться причиной блокировки обновления после копирования :


    UserLibHandle := LoadLibrary("USER32.DLL");
     @SetShellWindow := GetProcAddress(UserLibHandle, "SetShellWindow");
 
     if (@SetShellWindow <> nil) then
     begin
       SetShellWindow(m_hMainWindow);
     end;


m_hMainWindow = Application.Handle

Я в хуках не спец. Подскажите что происходит и как от этого избавиться ?

Если закоментировать установку хука то при запуске из под загруженого шела explorer.exe грузиться не просто проводник а так же пуск с панелью задач :( что совершенно не нужно. Зато копирование файлов проходит нормально после этого

что делать ?


 
dreamse   (2007-03-05 00:52) [19]

Продвинулся ещё дальше, определил что виной всему вот этот код :


UserLibHandle := LoadLibrary("USER32.DLL");
    @SetShellWindow := GetProcAddress(UserLibHandle, "SetShellWindow");


именно при загрузке его происходит блокирование запуска explorer"a и отключение обновления при копировании



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.038 c
2-1173162070
Ш-К
2007-03-06 09:21
2007.04.01
Анализ массива элементов


15-1173435430
alex-drob
2007-03-09 13:17
2007.04.01
Что за вирус?


2-1173868777
Student1000
2007-03-14 13:39
2007.04.01
опять картинки


2-1173262356
pasha star
2007-03-07 13:12
2007.04.01
нЕ блокировка всего процеса


2-1173447779
Provodnick
2007-03-09 16:42
2007.04.01
Ошибка при завершении консольного приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский