[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Люди, помогите плизз! не могу получить и установить текст в текстовом поле чужого окошка. Первый раз, посылая сообщение WM_GETTEXT мне возвращается значение IN01, хотя в поле ничего нету. Потом, когда я отсылаю WM_SETTEXT содержимое поя не изменятся, но при следующей посылке WM_GETTEXT в ответ получаю то, что передавал при WM_SETTEXT. При всем этом содержимое поля не меняется. Помогите, как быть?

    П.С. хендл окна получаю посредством WindowFromPoint(Mouse.CursorPos)
     
  2. Isaev

    Isaev Elder - Старейшина

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Видимо не тот хендл получаешь
     
  3. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    исключено. пробежался WinSpy++ также определяет и текст сменить не удалось...((
     
  4. Isaev

    Isaev Elder - Старейшина

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Ты же сам писал, что удалось... и назад получил, просто для какого-то другого элемента
    так можно долго гадать, выкладывай наработки
     
  5. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    наработки показывать смысла нету. все стандартно. функцией WindowFromPoint получаю хэндл элемента. Зарегил хоткей, навожу на поле для ввода курсор, нажимаю горячие клавиши и сохраняю хэндл для дальнейшего использования. Потом отправляю сообщение WM_GETTEXT, но в ответ получаю не содержимое текстового поля, а скорее всего его имя. Далее отправляю WM_SETTEXT - визуально ничего не меняется, но при следующей отправке WM_GETTEXT получаю значение, которое я сам и установил.
    При этом всем, если использовать SetWindowPos - меняется положение именно того элемента, который мне нужен. Также читал, что с помощью функции GetWindowText и SetWindowText невозможно получить текст из текстового поля, но все же решил попробовать - результат такой же как и при отправке сообщений WM_GETTEXT и WM_SETTEXT.

    Подскажите, что еще можно использовать для таких целей? Впервые столкнулся с ткой проблемой :confused:
     
  6. sidapas23

    sidapas23 New Member

    Joined:
    13 Nov 2010
    Messages:
    88
    Likes Received:
    2
    Reputations:
    -3
    Как программно удалить определенный файл в Delphi 7
     
  7. Isaev

    Isaev Elder - Старейшина

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    потому и говорю что ты не тот хендл получаешь...
    попробуй через GetWindowText получать содержимое, через GetClassName имя
     
  8. Nalsa

    Nalsa New Member

    Joined:
    17 Feb 2009
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Webbrowser и фреймы

    Всем привет! Пишу кликер. Нужно найти ссылки из всех фреймов на страничке в Webbrowser. Причем фреймы загружены с других доменов (реклама гугла). Из всей информационной каши в интернете по этому вопросу понял только, что какая то защита от Xss не дает это сделать. Тем не менее нашел где то этот код:
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
       u : variant;
       v : IDispatch;
       s : string;
    
       procedure RecurseLinks(htmlDoc: variant);
       var
         BodyElement : variant;
         ElementCo: variant;
         HTMLFrames: variant;
         HTMLWnd : variant;
         j, i : integer;
       begin
         if VarIsEmpty(htmlDoc) then
           exit;
         BodyElement := htmlDoc.body;
         if BodyElement.tagName = 'BODY' then
         begin
           ElementCo := htmlDoc.links;
           j := ElementCo.Length - 1;
           for i := 0 to j do
           begin
             u := ElementCo.item(i);
             s := u.href;
             listLinks.Items.Add(s);
           end;
         end;
         HTMLFrames := htmlDoc.Frames;
         j := HTMLFrames.length - 1;
         for i := 0 to j do
         begin
           HTMLWnd := HTMLFrames.Item(i);
           RecurseLinks(HTMLWnd.Document);
         end;
       end; // RecurseLinks
    begin
       v := Wb.document;
       listLinks.Clear;
       RecurseLinks(v);
     end;
    По идее должен выдавать список всех ссылок, включая фреймы. Но на деле выдается ошибка "Отказано в доступе"!
    Помогите пожалуйста решить проблему!!!
     
  9. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    GetWindowText - точно такой же результат как и отправка WM_GETTEXT. С помощью GetClassName получил Qwidget, пробежался по элементах на форме GetClassName - все Qwidget :confused: GetWindowText или WM_GETTEXT ни к одному элементу на форме не возвращает верный результат. :(
     
  10. red1978

    red1978 New Member

    Joined:
    19 Jan 2011
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    Подскажите пожайлуста как можно сделать так чтобы передать из приложения VCL на дельфи данные для поиска например багов в Google и получить ответ в этом приложении например в Memo (взаимодействие дельфи и поискового сервера Google)
     
  11. Isaev

    Isaev Elder - Старейшина

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Скорее всего именно по этому... Qwidget это один хендл и все элементы, которые в нём своих хендлов скорее не имеют... К нему нужно наверное не через winapi стучаться
     
  12. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    а как тогда обьяснить следующее?
     
  13. Isaev

    Isaev Elder - Старейшина

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    вот потому и говорил пример в студию, чтобы не гадать
     
  14. foozzi

    foozzi Member

    Joined:
    13 Apr 2010
    Messages:
    195
    Likes Received:
    12
    Reputations:
    5
    как зделать так:
    открываем файл .sec а в проге он открывается уже в txt
    и наоборот, создаю или открываю файл txt а сохраняю уже в .sec НО уже в Юникоде
    подскажите плиз
     
  15. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    немного недопонял на счет .sec , но все же:
    Code:
    var list:TStringList;
    begin
     list:=TStringList.Create;
     list.LoadFromFile('111.txt'); // открываем вин
     list.Text:=utf8encode(list.Text);
     list.SaveToFile('222.txt'); // сохраняем юник
     list.Free;
    end;
    
    utf8decode - из юника в вин
     
  16. foozzi

    foozzi Member

    Joined:
    13 Apr 2010
    Messages:
    195
    Likes Received:
    12
    Reputations:
    5
    спасибо, а .sec это формат файла скрипта для проги, который читается в блокноте

    да и подскажите как вообще зделать чтоб прога выводила из файла .sec текст в Memo?
     
    #7656 foozzi, 28 Jan 2011
    Last edited by a moderator: 28 Jan 2011
  17. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Form1.Memo1.Lines.LoadFromFile('Name.sec');
     
  18. foozzi

    foozzi Member

    Joined:
    13 Apr 2010
    Messages:
    195
    Likes Received:
    12
    Reputations:
    5
    спасибо, а как подключить модуль на этот файл, а то прога не переводит его в нормальный текст
    да и как зделать допустим. чтоб программа запускала bat ? не просто сам батник а какуюто функцию из него, например батник отвечает за раскодирование фалов, вот и мне нужно при нажатии в самой проге раскодироват файл

    вставил батник теперь проблемма как зделать допустим чтобы я выбрал файл через OpenDialog и этот файл обрабатывался батником?
     
    #7658 foozzi, 28 Jan 2011
    Last edited: 28 Jan 2011
  19. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Form1.OpenDialog1.Execute; //Открыть диалог
    Form1.Memo1.Lines.Add(Form1.OpenDialog1.FileName); //Отобразить полный путь до файла в мемо
     
  20. foozzi

    foozzi Member

    Joined:
    13 Apr 2010
    Messages:
    195
    Likes Received:
    12
    Reputations:
    5
    Подскажите: мне надо чтобы когда открывает какуюнибудь папку , то в программе отображались все файлы с этой папки списком, потом выделить любой файл и декодировать (из dat в txt) декодировщик у меня есть , но как подключить его к программе?
     
Thread Status:
Not open for further replies.