Считывание с экрана

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Hardover, 27 Feb 2008.

  1. Hardover

    Hardover Banned

    Joined:
    23 Feb 2007
    Messages:
    24
    Likes Received:
    3
    Reputations:
    0
    Вобщем в консольной программе надо выдернуть определенную строку или строки.
    Вобще мне это надо сделать через программирование видеоадаптера но наврятле кто то знает как это сделать.
    Поэтому хотя бы как это написать на паскале.
    Например есть строчка "Привет мир"
    подводим курсор к слову мир через
    for i:=1 to 3 do
    gotoxy(6+i,1)
    и потом надо эти буквы запихнуть скажем в переменную C
    Я прочитал весь учебник по программированию видеоадаптеров но не чего нужного мне не нашел. В инете порылся в справочнике по паскалю но кроме ввода с клавиатуры и вывода на экран я не нашел, а мне нужен ввод с экрана, ну и в иделе это сделать через программирование видеоадаптеров.
    Точно знаю что если делать через видеоадаптер то левый верхний угол будет обозначаться В800 а дальше я так и не сдвинулся, даже не понял как надо описывать.
     
  2. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Подводиш делаеш програмно 2 клик переводиш укозатель к концу строки симулируеш нажатие правой кнопкой перемещение на кнопку копирывать и 1 левый клик потом в программе переменной C присваеваеш данные из буфера =)
    а через видио адаптер.... Получить скрин и анализировать текст (другова способа не вижу
     
  3. Aag

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

    Joined:
    26 Jul 2005
    Messages:
    60
    Likes Received:
    19
    Reputations:
    8
    То что ты хотел сделать с видеоадаптером возможно только в случае, если он работает в текстовом режиме ( это Ms Dos, или текстовая консоль Юникс) .
     
  4. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    ну да. далее зависит от режима текстового. начиная с b800 (если это правильно, я уже не помню...) идут байты, каждый из них значит символ на экране.
    первая строчка, вторая строчка... в строке помоему 80 символов, на экране 25 строк.
    что тут непонятного. адрес нужного символа найти можешь?

    без комментариев.
     
    1 person likes this.
  5. Hardover

    Hardover Banned

    Joined:
    23 Feb 2007
    Messages:
    24
    Likes Received:
    3
    Reputations:
    0
    Программа работает в консоли Ms-dos
     
    #5 Hardover, 27 Feb 2008
    Last edited: 27 Feb 2008
  6. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    ну и что дальше то ? весь реальный режим, включая модель памяти, эмулируются
     
  7. Hardover

    Hardover Banned

    Joined:
    23 Feb 2007
    Messages:
    24
    Likes Received:
    3
    Reputations:
    0
    А как именно надо с этим работать?Нужно ли что то описывать, ведь если просто написать s:=B800 то первый символ стоящий в начале первой строки не будет присвоин S.
     
  8. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    А ПЕРЕОПРЕДЕЛИТЬ вывод консольной программы скажем в сокет.... обычно так перехватывают ЧУЖИЕ выводы
     
    1 person likes this.
  9. Hardover

    Hardover Banned

    Joined:
    23 Feb 2007
    Messages:
    24
    Likes Received:
    3
    Reputations:
    0
    Я бы даже не поленился прочитать про сокет, и возможно даже написал бы, но думаю что для домашнего задания пускай это и на пятерку это слишком.
     
  10. diehard

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

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    ох давно это было
    в паскале ты можешь достучаться до буфера экрана через массив Mem[$b800:Offset], смещение вычисляешь как offset=80*y+x (размер экрана в стандартном текстовом режиме 80х25 символов)
     
    1 person likes this.
  11. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    БЛЯДЬ КАКОЙ СОКЕТ
    написано - Dos Dos Dos

    как память в паскале читается я не помню
    т.к. он кривой
    но помоему как-то
    val = mem[segment:eek:ffset];
    т.е. ... = mem[$B000:0001] - первый символ.
     
    #11 KEZ, 28 Feb 2008
    Last edited: 28 Feb 2008
  12. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    KEZ сам такой :D

    написана была КОНСОЛЬ а ДОС ты сам придумал, чтоб вспомнить старые технологии :cool:


    :D а вы точно знаете что консольная программа использует Dos подсистему видеовывода.... что прям все так не по децки.... и ограничения в 640кило???? И таблица прерываний прям как у доса ........


    ........... качмар .... и прям какая там нафиг система защиты в майкрософфффт для консольных программ када любое приложение можно памать по адресу видеобуфера :p
    статью напишите на античате.... ;) я почитаю поучус началника.
     
    #12 Delimiter, 28 Feb 2008
    Last edited: 28 Feb 2008
    2 people like this.
  13. Hardover

    Hardover Banned

    Joined:
    23 Feb 2007
    Messages:
    24
    Likes Received:
    3
    Reputations:
    0
    Спасибо большое всем, я сделал как первоначально задумывалось через видеоадаптер.
    А самое главное я ПОНЯЛ как вобще это делает.
     
  14. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Delimiter, мда...........