Помогите удалить всплывающее окно

Тема в разделе "WASM.BEGINNERS", создана пользователем tester3000, 21 ноя 2010.

  1. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Купил себе простенький принтер всем доволен кроме одного при двухсторонней печати каждый раз появляется это окно

    [​IMG]

    и в настройках его не как не отрубить (по крайней мере я не нашел) вызывается это окно скорее всего через dll-ку (прикрепил) так как в экспорте та самая функция

    [​IMG]

    подскажите как лучше убить эту заразу достала уже
     
  2. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    tester3000
    Да есть там в настройках!
    Точно!
    На свежую голову посмотри.
    Иначе - этот вопрос решается бесплатно обслуживающим центром по гарантии.
    Неси его туда пока пол года не истекло.
     
  3. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    _sheva740

    Ну вроде все посмотрел нет вот только это есть

    [​IMG]

    Если отключить этот дуплекс то окно не появляется но и двухсторонняя печать не пашет :dntknw:

    Помогите найти где это окно вызывается и убить его ))
     
  4. eua

    eua New Member

    Публикаций:
    0
    Регистрация:
    25 июл 2010
    Сообщения:
    42
    Через отладчик запусти,поставь бряки на окна и найдёш откуда оно вызывается.
     
  5. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Опыта отладки dll нет не могу найти в ней нечего похожего
     
  6. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    tester3000
    Ну конечно нужно отключать дуплекс!
    Печатаешь с одной стороны - дуплекс отключи!
    Печатаешь с двух - включи!
    Это же не HP1320, он сам по себе бумагу не затянет а спросит у тебя.

    Так я не понял, у тебя HP1006 или HP1505 ?!

    Вполне бюджетненький и компактный принтерок за 120 dol.
    Там даже индикации не выведено.
    В целом для дома выбор неплохой, но правя dll-ки ты его интерфейс
    качественно не улучшишь )
     
  7. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    _sheva740

    У меня HP LaserJet 1505 но дрова используют эту dll (HP1006K.dll)

    Ну это все понятно НО при двухсторонней печати он мне каждый раз показывает эту инструкцию как правильно вытащить и втащить бумагу она меня зае... вот и хочу прибить это окошко я без него знаю как бумагу переворачивать =))

    Индикация есть

    Да я особо и не стремлюсь все что я хочу это найти где там аля CreateWindow или тому подобное и тупо его занопить если бы был exe файл давно бы уже нашел а вот dll отлаживать как-то еще не приходилось :dntknw:
     
  8. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    tester3000
    Конечно можно искать окно по заголовку и послать ему WM_CLOSE, но
    программа может запросить пользователя о подтверждении, до разрушения окна.
    Все равно придется нажимать кнопку. :))

    Но мне кажется что опасно тупо гасить окно по заголовку с сообщением
    от той dll -ки.
    Почему?

    Ну а что ты будешь делать если в лотке бумага закончится
    а он не допечатает? Выпадет диалог с кнопкой "Перезапустить/Продолжить" задание?
    А иначе как без этого окна (ты же его разрушишь) "Продолжить" из диалога нажать (
    Это же правильный и нужный диалог? Кнопок то на корпусе на нем нет.
     
  9. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Да попробуй через AutoIt скипт накатать. Или SignOfMisery
    На кнопку полюбому придется нажимать.
    Так что порядок действий такой:

    While(true)
    {
    Ждем окна с таким то заголовком и классом
    Ищем кнопку с такой то надписью
    Нажимаем ее
    }
     
  10. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Есть там кнопки и индикация
    [​IMG]
    диалога с перезапуском он и так не предлагает а вот за отсутствие бумаги уже из другой dll диалог вроде вызывается так что можно удалять эту инструкцию для секретарш лучше скажи где его вырубить в конце концов потом все обратно можно будет вернуть )))

    punxer

    Да это не проблема накатать скрипт или на win api накатать прогу аля поиск окна и килл его либо клик кнопка но хочется разобраться мне как у этого принтера кишки устроены а конкретно где там происходит вызов этого окна
    и как то не охота чтобы этот скрипт или прога в памяти висела и постоянно искала это окно
     
  11. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    punxer
    Маленькая поправочка: Neo Sign 0f Misery.
     
  12. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    tester3000
    Ну я наверное просто смирился. Не все же такие упертые ))
    А если уж эту dll-ку править (при 100% уверенности что этот твой любимый диалог в ней!!),
    то наверное так:

    1. Cпомощью утили dll2inc - посмотрел бы что там за функции экспортируются
    2. Запустился бы
    Код (Text):
    1. .data
    2.     LibName              db "HP1006K.dll",0
    3.     FunctionName         db "func_with_some_looks_like_a_CreateWindow",0
    4.     DllNotFound           db "Cannot load library",0
    5.     FunctionNotFound      db "func_with_some_looks_like_a_CreateWindow function not found",0
    6. .data?
    7.     hLib          dd ?
    8.     TestHelloAddr    dd ?
    9.  
    10. .code
    11. start:
    12.         invoke LoadLibrary,addr LibName
    13.         .if eax==NULL
    14.                 invoke StdOut,addr DllNotFound
    15.         .else
    16.                 mov hLib,eax
    17.                 invoke GetProcAddress,hLib,addr FunctionName
    18.                 .if eax==NULL
    19.                         invoke StdOut,addr FunctionNotFound
    20.                 .else
    21.                 int 3 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<!!!
    22.         call    eax
    23.                 .endif
    24.                 invoke FreeLibrary,hLib
    25.         .endif
    26.         invoke ExitProcess,NULL
    27. end start
    3. Выпал бы в Олли и уж там искал и нопил бы то что нужно
    4. Плюнул бы на все это и сохранил документ на винте без распечатки ;)) благо винты дешевеют.
     
  13. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    _sheva740

    Код (Text):
    1. include '%fasminc%\win32axp.inc'
    2.  
    3. .data
    4.  
    5.   LibName              db "HP1006K.dll",0
    6.   FunctionName         db "_DisplayManualDuplexDialog@16",0
    7.  
    8.   hLib                 dd ?
    9.  
    10. .code
    11.       start:
    12.              invoke LoadLibrary,LibName
    13.              test eax,eax
    14.              jz .exit
    15.  
    16.              mov [hLib],eax
    17.              invoke GetProcAddress,[hLib],FunctionName
    18.              jz .free
    19.              int 3   ;<=== тут на bp меня кидает куда-то в дебри ntdll
    20.                      ; потом что-то пока для меня не понятное ))
    21.                      ; и Olly мну посылает =))) (Terminated)
    22.              call eax ; сюды мне дверь уже закрыта))
    23.  
    24.         .free:
    25.              invoke FreeLibrary,[hLib]
    26.  
    27.         .exit:
    28.             invoke ExitProcess,0
    29.  
    30. .end start
    Ну люблю я всякую макулатуру почитать на бумаге конечно можно купить в инете но до моего города цивилизация ввиде WebMoney и др. еще не дошла :dntknw:
     
  14. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    занопить ничего не получется. продолжение печати вызывает нажатие кнопки на диалоге и простое его закрытие не продолжит печать,
    Попробуй закрыть окно найдя его по заголовку, если печать продолжится то, отлично и проблем нет, иначе придется править код этой функции, или код функции диалога и это будут отнюдь не нопы.
     
  15. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    punxer

    За продолжение печати отвечает кнопка на принтере см. первый скрин!
     
  16. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Код (Text):
    1. signed int __stdcall DialogFunc(HWND hWnd, int msg, int a3, int a4)
    2. {
    3.   DWORD v4; // ebp@1
    4.   void *v6; // ebx@7
    5.   LPWSTR *v7; // esi@7
    6.   HMODULE v8; // eax@12
    7.   HANDLE v9; // edi@12
    8.   HMODULE v10; // esi@12
    9.   FARPROC v11; // eax@13
    10.   unsigned int v12; // esi@16
    11.   LONG v13; // eax@16
    12.   UINT v14; // ST10_4@17
    13.   HINSTANCE v15; // ST0C_4@17
    14.   HWND v16; // eax@18
    15.   unsigned int v17; // esi@21
    16.   int v18; // edx@22
    17.   int v19; // eax@22
    18.   int v20; // ecx@22
    19.   int v21; // ST0C_4@22
    20.   HANDLE hPrinter; // [sp+10h] [bp-4D4h]@1
    21.   DWORD pcReturned; // [sp+14h] [bp-4D0h]@7
    22.   DWORD pcbNeeded; // [sp+18h] [bp-4CCh]@7
    23.   int v25; // [sp+1Ch] [bp-4C8h]@7
    24.   struct _PRINTER_DEFAULTSW pDefault; // [sp+20h] [bp-4C4h]@7
    25.   LPARAM lParam; // [sp+2Ch] [bp-4B8h]@22
    26.   int v28; // [sp+3Ch] [bp-4A8h]@22
    27.   int v29; // [sp+40h] [bp-4A4h]@22
    28.   int v30; // [sp+48h] [bp-49Ch]@22
    29.   wchar_t v31; // [sp+54h] [bp-490h]@1
    30.   wchar_t v32; // [sp+6Ch] [bp-478h]@1
    31.   wchar_t v33; // [sp+70h] [bp-474h]@11
    32.   __int16 v34; // [sp+A0h] [bp-444h]@11
    33.   const wchar_t FileName[260]; // [sp+D4h] [bp-410h]@8
    34.   const WCHAR LibFileName; // [sp+2DCh] [bp-208h]@12
    35.  
    36.   memcpy(&v31, L"P1006MAN.dll", 0x18u);
    37.   v4 = 0;
    38.   hPrinter = 0;
    39.   v32 = aP1006man_dll[12];
    40.   if ( msg == WM_CLOSE )
    41.   {
    42.     PostMessageW(hWnd, WM_COMMAND, 2u, 0);
    43.     return 0;
    44.   }
    45.   if ( msg != WM_INITDIALOG )
    46.   {
    Код (Text):
    1. .text:6847AC90 ; signed int __stdcall DialogFunc(HWND hWnd, int msg, int a3, int a4)
    2. .text:6847AC90 DialogFunc      proc near               ; DATA XREF: DisplayManualDuplexDialog(x,x,x,x)+DBo
    3. .text:6847AC90
    4. .text:6847AC90 hPrinter        = dword ptr -4D4h
    5. .text:6847AC90 pcReturned      = dword ptr -4D0h
    6. .text:6847AC90 pcbNeeded       = dword ptr -4CCh
    7. .text:6847AC90 var_4C8         = dword ptr -4C8h
    8. .text:6847AC90 pDefault        = _PRINTER_DEFAULTSW ptr -4C4h
    9. .text:6847AC90 lParam          = dword ptr -4B8h
    10. .text:6847AC90 var_4A8         = dword ptr -4A8h
    11. .text:6847AC90 var_4A4         = dword ptr -4A4h
    12. .text:6847AC90 var_49C         = dword ptr -49Ch
    13. .text:6847AC90 var_490         = word ptr -490h
    14. .text:6847AC90 var_474         = word ptr -474h
    15. .text:6847AC90 FileName        = word ptr -410h
    16. .text:6847AC90 LibFileName     = word ptr -208h
    17. .text:6847AC90 hWnd            = dword ptr  4
    18. .text:6847AC90 msg             = dword ptr  8
    19. .text:6847AC90 arg_8           = dword ptr  0Ch
    20. .text:6847AC90 arg_C           = dword ptr  10h
    21. .text:6847AC90
    22. .text:6847AC90                 sub     esp, 4D4h
    23. .text:6847AC96                 mov     eax, [esp+4D4h+msg]
    24. .text:6847AC9D                 push    ebx
    25. .text:6847AC9E                 push    ebp
    26. .text:6847AC9F                 push    esi
    27. .text:6847ACA0                 push    edi
    28. .text:6847ACA1                 mov     ecx, 6
    29. .text:6847ACA6                 mov     esi, offset aP1006man_dll ; "P1006MAN.dll"
    30. .text:6847ACAB                 lea     edi, [esp+4E4h+var_490]
    31. .text:6847ACAF                 rep movsd
    32. .text:6847ACB1                 xor     ebp, ebp
    33. .text:6847ACB3                 xor     ebx, ebx
    34. .text:6847ACB5                 sub     eax, 10h
    35. .text:6847ACB8                 mov     [esp+4E4h+hPrinter], ebp
    36. .text:6847ACBC                 movsw
    37. .text:6847ACBE                 jz      loc_6847AF9F
    38. .text:6847ACC4                 sub     eax, 100h
    39. .text:6847ACC9                 jz      loc_6847AEC3
    40. .text:6847ACCF                 dec     eax
    41. .text:6847ACD0                 jnz     loc_6847AFB5
    42. .text:6847ACD6                 mov     eax, [esp+4E4h+arg_8]
    43. .text:6847ACDD                 dec     eax
    44. .text:6847ACDE                 jz      short loc_6847AD09
    45. .text:6847ACE0                 dec     eax
    46. .text:6847ACE1                 jnz     loc_6847AFB5
    47. .text:6847ACE7
    48. .text:6847ACE7 loc_6847ACE7:                           ; CODE XREF: DialogFunc+204j
    49. .text:6847ACE7                                         ; DialogFunc+22Ej
    50. .text:6847ACE7                 mov     eax, [esp+4E4h+hWnd]
    51. .text:6847ACEE                 push    1               ; nResult
    52. .text:6847ACF0                 push    eax             ; hDlg
    53. .text:6847ACF1                 call    ds:EndDialog
    в начало функции суем прыжок на loc_6847ACE7:
     
  17. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    tester3000
    то есть нужно ее на принтере жать полюбому???
    тогда пусть этот диалог появится, смотри какому процессу он принадлежит и аттачся Olly, IDA...
    Там и увидишь кроссреференсы на функцию или брейки поставишь
     
  18. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    punxer

    Да на принтере жать нужно если кнопку продолжить в окне нажать просто окно закроется

    Мм.. ну я это первым делом и сделал процесс называется run32.dll и в качестве параметра ему передается C:\WINDOWS\System32\spool\DRIVERS\W32X86\3\HP1006K.dll ее экспорт на 2 скрине сверху
    run32.dll - это я так понял системная либа которая и запускает эту dll
     
  19. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    punxer

    Код (Text):
    1. .text:6847AC90  sub     esp, 4D4h ; заменил на  jmp 6847ACE7
    Диалог вроде прибили а вот программа (любая где есть печать) из которой вызываем печать после распечатки жестко виснет приходится процесс килять :dntknw:
     
  20. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Стек порушил
    Эту команду нельзя менять
    [конечно можно но не сейчас и не сдесь]