Читать данные из буффер обмена и запустить программу!

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

  1. Max_Cohen

    Max_Cohen New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2009
    Сообщения:
    19
    Адрес:
    Где-то здесь
    Привет всем!

    У меня такая задача: нужно прочитать данные из буффера обмена.
    Если прочитанные данные совподают с таким-то, то запустить такой-то файл.
    Если нет, то ждет пару секунд и начинает все заново!

    Примитивый пример:
    - в буффер что-то скопировало строку "hello, how are you?".
    - проверяем скопированную строку и сравниваем с проверяющей строкой.
    - совподает - запускаем RUN.EXE, нет - ждем пару секунд и начинаем все заново!

    Спасибо (Я нуб в программировани)
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Max_Cohen, а на каком языке нуб пишет?
    Гугл, вообще все знает.
     
  3. Max_Cohen

    Max_Cohen New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2009
    Сообщения:
    19
    Адрес:
    Где-то здесь
    Искал, но не нашел!

    Мне б исходник на ассемблере. У меня MASM32 стоит! Так немножко знаю! Спасибо!
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Нам бы тоже немного денег на ВМ за решение этой задачи. Бесплатно тебе могут сказать только, где лежит мсдн и как примерно называется функция, которая читает буфер обмена
     
  5. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    MSoft
    как альтернативный и более чем реалистичный вариант - придёт x64, которому был знак свыше сеять знания, и расскажет всё бесплатно .)
     
  6. eua

    eua New Member

    Публикаций:
    0
    Регистрация:
    25 июл 2010
    Сообщения:
    42
    < прочитать данные из буффера обмена

    Max Cohen я это не пробовал, но думаю это не сложно,как рисонули выше почитай MSDN.

    Вобщем подскажу что знаю
    подождать пару сек. можно так :

    push 2000 ; 2 сеk.
    call [Sleep]

    а стартануть run.exe можно так (на Fasm):

    format PE GUI 4.0
    entry start
    include 'win32a.inc'
    section '.code' code readable writeable

    runexe db 'D:\run.exe',0

    start:
    invoke ShellExecuteA,0,NULL,runexe,0,NULL,1
    invoke ExitProcess,0

    data import
    library kernel32,'KERNEL32.DLL',\
    shell32,'SHELL32.DLL'

    include 'api\kernel32.inc'
    include 'api\shell32.inc'
    end data
     
  7. HuXTUS

    HuXTUS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2007
    Сообщения:
    240
    вот кусок кода из старого проекта.

    Код (Text):
    1.             invoke OpenClipboard, hWin
    2.             invoke GetClipboardData, CF_TEXT
    3.             test eax, eax
    4.             ;если в буфере нет текста, то
    5.             jnz @f
    6.             mov eax, pBuf
    7.             mov byte ptr [eax], 0
    8.             jmp @TimerWorkerEnd
    9.             @@:
    10.             mov ebx, eax
    11.             invoke GlobalLock, ebx
    12.             push eax
    13.             invoke lstrcmp, pBuf, eax
    14.             test eax, eax
    15.             pop eax
    16.             ;если строки эквивалентны, то есть ничего в буфере не изменилось, то выходим
    17.             jz @TimerWorkerEnd
    18.             push eax
    19.             invoke SetDlgItemText, hWin, IDC_EDIT_LAST, pBuf
    20.             pop eax
    21.             invoke lstrcpy, pBuf, eax
    22.             invoke SetDlgItemText, hWin, IDC_EDIT_CURRENT, pBuf        
    23.             @TimerWorkerEnd:
    24.             invoke GlobalUnlock, ebx    
    25.             invoke CloseClipboard
     
  8. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Max_Cohen,

    Про MSDN сказано верно: там есть многое из того, что нужно. К примеру, SetClipboardViewer() и оповещения, которые окно станет получать. Вычитывать клипборд в цикле — бесполезная трата ресурсов.
     
  9. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    Лучше использовать
    Код (Text):
    1. SetClipboardData(CF_UNICODETEXT, lptstrCopy);
    вместо
    Код (Text):
    1. invoke GetClipboardData, CF_TEXT
    Иначе буфер не будет виден в других приложениях.