Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.051 c
2-1173418639
AlexanderMS
2007-03-09 08:37
2007.04.01
Finalize и ошибки.


2-1173102470
Чайник
2007-03-05 16:47
2007.04.01
Максимальный размер статического массива


2-1173248405
Oleg_teacher
2007-03-07 09:20
2007.04.01
Описание процедуры


15-1173457222
DillerXX
2007-03-09 19:20
2007.04.01
Не запускаются exe файлы :( помогите, может кто сталкивался


2-1173093131
vtur
2007-03-05 14:12
2007.04.01
курсор мыши