Привет всем! У меня такая задача: нужно прочитать данные из буффера обмена. Если прочитанные данные совподают с таким-то, то запустить такой-то файл. Если нет, то ждет пару секунд и начинает все заново! Примитивый пример: - в буффер что-то скопировало строку "hello, how are you?". - проверяем скопированную строку и сравниваем с проверяющей строкой. - совподает - запускаем RUN.EXE, нет - ждем пару секунд и начинаем все заново! Спасибо (Я нуб в программировани)
Нам бы тоже немного денег на ВМ за решение этой задачи. Бесплатно тебе могут сказать только, где лежит мсдн и как примерно называется функция, которая читает буфер обмена
MSoft как альтернативный и более чем реалистичный вариант - придёт x64, которому был знак свыше сеять знания, и расскажет всё бесплатно .)
< прочитать данные из буффера обмена 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
вот кусок кода из старого проекта. Код (Text): invoke OpenClipboard, hWin invoke GetClipboardData, CF_TEXT test eax, eax ;если в буфере нет текста, то jnz @f mov eax, pBuf mov byte ptr [eax], 0 jmp @TimerWorkerEnd @@: mov ebx, eax invoke GlobalLock, ebx push eax invoke lstrcmp, pBuf, eax test eax, eax pop eax ;если строки эквивалентны, то есть ничего в буфере не изменилось, то выходим jz @TimerWorkerEnd push eax invoke SetDlgItemText, hWin, IDC_EDIT_LAST, pBuf pop eax invoke lstrcpy, pBuf, eax invoke SetDlgItemText, hWin, IDC_EDIT_CURRENT, pBuf @TimerWorkerEnd: invoke GlobalUnlock, ebx invoke CloseClipboard
Max_Cohen, Про MSDN сказано верно: там есть многое из того, что нужно. К примеру, SetClipboardViewer() и оповещения, которые окно станет получать. Вычитывать клипборд в цикле — бесполезная трата ресурсов.
Лучше использовать Код (Text): SetClipboardData(CF_UNICODETEXT, lptstrCopy); вместо Код (Text): invoke GetClipboardData, CF_TEXT Иначе буфер не будет виден в других приложениях.