getsavefilename hook function & dialog controls problem

Тема в разделе "WASM.WIN32", создана пользователем _staier, 24 июн 2005.

Статус темы:
Закрыта.
  1. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    господа , есть такая проблема

    если вызвать subj и установить hookfunction

    а потом в ней попытаться воздествовать на контролы диалога - то поучается фигня - ноль эмоций



    в частности я пытался удалить любой из контролов

    ничего не происходит

    EnableWindow, Showwindow,Destroywindow

    возвращает когда true , когда false но результата нет никакого



    при fail getlasterroк возвращает 0



    хук работает , функции вызываются, цеплялся к wm_initdialog, wm_showwindow, wm_paint - всё без толку



    если кто управлял этим диалогом, помогите пожалуйста,

    что я не так делаю ?



    код на паскале могу запостить , но он тривиален и делает именно то что я и сказал
     
  2. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    staier

    Этот диалог создан из шаблона (ресурса), возможно проблема из-за этого. Текст то хоть можно менять на контролах?
     
  3. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    это не пробовал , мне это не нужно было

    но не думаю что шаблон - это проблема

    большинство диалогов созданы из ресурсов и что это меняет ? задисэйблить кнопку что ли нельзя?
     
  4. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Хотя нет, все должно изменяться, вот пример созданый из одной моей проги:
    Код (Text):
    1.  
    2. procedure     xtproc(x:pointer);
    3. var h, hh: THandle;
    4. begin
    5.  h := 0;
    6.  while h = 0 do
    7.   begin
    8.    sleep (100);
    9.    h := FindWindow (nil, 'Open Trainer');
    10.   end;
    11.  // MessageBox (h, 'MB Found', 'eat', MB_OK);
    12.  SetWindowText (h, 'Close Trainer');
    13.  hh := FindWindowEx (h, 0, 'Button', 'Отмена');
    14.  if hh <> 0 then ShowWindow (hh, SW_HIDE);
    15. end;
    16.  
    17. var s: string;
    18.     fn: array [0..256] of char;
    19.     ofn: tagOFN;
    20.     afx: dword;
    21. begin
    22.  s := ParamStr (1);
    23.  InitComCtrls;
    24.  if s = '' then
    25.   begin
    26.    ZMem (ofn, sizeof (ofn)); // fill zerro
    27.    ofn.lStructSize := sizeof (ofn);
    28.    ofn.hInstance := hInstance;
    29.    ofn.lpstrFilter := 'Text trainer description'#0'*.ttd'#0#0;
    30.    ofn.lpstrInitialDir := PChar (GetCurrentDir);
    31.    ofn.lpstrTitle := 'Open Trainer';
    32.    ofn.Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST;
    33.    ofn.lpstrFile := fn;
    34.    ofn.nMaxFile := 256;
    35.    CloseHandle (
    36.    CreateThread (nil, 1000, @xtproc, nil, 0, afx) );
    37.    GetOpenFileName (ofn);
    38.   end;
    39. end;
    40.  


    Убирает кнопку отмена, и меняет заголовок диалога
     
  5. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    ага, спасибо, это работает к тому же проще получается чем использую родную hookfunction



    интересно , почему всё же

    если поставить всё тоже самое в

    ofn.lpfnhook то ни хрена не работает


    Код (Text):
    1.  
    2. function hook(Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): UINT stdcall;
    3. var h, hh: THandle;
    4.  begin
    5.   result:= 0;
    6.   case msg of
    7.   wm_Showwindow,Wm_initDialog,Wm_Command:
    8.    begin
    9.    SetWindowText (wnd, 'Close Trainer');
    10.    hh := FindWindowEx (wnd, 0, 'Combobox', '');
    11.    if hh <> 0 then ShowWindow (wnd, SW_HIDE);
    12.    hh := FindWindowEx (wnd, 0, 'ToolbarWindow32', '');
    13.    if hh <> 0 then ShowWindow (hh, SW_HIDE);
    14.    result:= 1;
    15.    end;
    16.    end ;
    17. end;
    18.  
    19.  
    20. var s: string;
    21.     fn: array [0..256] of char;
    22.     ofn: tagOFN;
    23.     afx: dword;
    24. begin
    25.  s := ParamStr (1);
    26. // InitCommonCtrls;
    27.  if s = '' then
    28.   begin
    29.    Zeromemory(@ofn, sizeof (ofn)); // fill zerro
    30.    ofn.lStructSize := sizeof (ofn);
    31.    ofn.hInstance := hInstance;
    32.    ofn.lpstrFilter := 'Text trainer description'#0'*.ttd'#0#0;
    33.    ofn.lpstrInitialDir := PChar (GetCurrentDir);
    34.    ofn.lpstrTitle := 'Open Trainer';
    35.    ofn.Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or Ofn_Explorer or OFN_ENABLEHOOK;
    36.    ofn.lpfnHook :=@hook;
    37.    ofn.lpstrFile := fn;
    38.    ofn.nMaxFile := 256;
    39. //   CloseHandle (
    40. //   CreateThread (nil, 1000, @xtproc, nil, 0, afx) );
    41.    GetOpenFileName (ofn);
    42.   end;
    43.  
    44.  
     
  6. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Вот вроде и правильный код (Used MSDN2003):
    Код (Text):
    1.  
    2. var h, hh: THandle;
    3. function hook(hdlg: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): UINT; STDCALL;
    4.  begin
    5.   // MessageBox (h, 'MB Found', 'eat', MB_OK);
    6.   result:= 0;
    7.   if WM_INITDIALOG = msg then   h := GetParent (hdlg); //
    8. {
    9. hdlg -
    10. Handle to the child dialog box
    11. of the Open or Save As dialog box.
    12. Use the GetParent function to get
    13. the handle to the Open or Save As dialog box.
    14. }
    15.   if h <> 0 then  
    16.   case msg of
    17.    WM_SHOWWINDOW:
    18.    begin
    19.     SetWindowText (h, 'Close Trainer');
    20.     hh := FindWindowEx (h, 0, 'Combobox', nil);
    21.     if hh <> 0 then ShowWindow (wnd, SW_HIDE);
    22.     hh := FindWindowEx (h, 0, 'ToolbarWindow32', nil);
    23.     if hh <> 0 then ShowWindow (hh, SW_HIDE);
    24.     result:= 1;
    25.    end;
    26.    end ;
    27. end;
    28.  
     
  7. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    alpet

    да , я уже тоже дотумкал, посмотрел что не тот хэндл передаётся в hook



    спасибо за помощь :derisive:
     
Статус темы:
Закрыта.