Первый символ строки!

Тема в разделе "WASM.BEGINNERS", создана пользователем REALiSTiC, 10 апр 2007.

  1. letika

    letika New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    28
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    еще читай пост leo в этом топике
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    REALiSTiC
    Еще раз повторяю для бестолковых - GetClipboardData возвращает не указатель на текст, а хэндл перемещаемого блока памяти. Чтобы получить указатель на строку нужно вызвать GlobalLock:
    Код (Text):
    1.   invoke OpenClipboard,0
    2.   invoke GetClipboardData,CF_TEXT
    3.   test eax,eax
    4.   jz fail
    5.   mov hMem,eax
    6.   invoke GlobalLock,eax        ;!!! -------
    7.   cmp byte ptr [eax],'C'
    8.   jne fail
    9.   invoke lstrlen,eax
    10.   cmp eax,13
    11.   jne fail
    12.   invoke GlobalUnlock,hMem  ;!!! -------
    13.   invoke GlobalAlloc, GMEM_MOVEABLE, 100h
    14.   mov hMem,eax
    15.   invoke GlobalLock,eax        ;!!! -------
    16.   ............
    17.   invoke GlobalUnlock,hMem   ;!!! -------
    18.   invoke EmptyClipboard
    19.   invoke SetClipboardData,CF_TEXT,hMem
    20. fail:
    21.   invoke GlobalUnlock,hMem   ;допустим повторный вызов
    22.   invoke CloseClipboard
     
  4. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    REALiSTiC для подмены ВебМани кошельков?))) ..не мучайся давай готовый сорец дам!
     
  5. REALiSTiC

    REALiSTiC New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    33
    Тема закрыта.

    Решение проблемы:

    Код (Text):
    1. invoke OpenClipboard,NULL
    2. invoke GetClipboardData,CF_TEXT
    3.  .if byte ptr [eax] == 'C'
    4. invoke lstrlen,eax
    5. .if eax == 13
    6. invoke lstrcpy,hMemory,offset code
    7. invoke EmptyClipboard
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Неужели?
     
  7. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Человек создаёт тему, получает советы и ответы, и в конце концов делает всё по-своему - т.е. неправильно... ну что тут сказать.
     
  8. REALiSTiC

    REALiSTiC New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    33
    Все правильно, все работает =)
     
  9. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Then welcome to microsoft
     
  10. REALiSTiC

    REALiSTiC New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    33
    Welcome to hell!

    Alright, stop fl00din'
     
  11. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Ладно, вот по существу Using the Clipboard, как говорится найдите 2 отличия.
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    REALiSTiC
    Это частное решение, т.к. без GlobalLock работать будет только при условии, что строка в буфере была выделена в куче 1) твоего процесса 2) без флага GMEM_MOVEABLE - только в этом сл.GetClipboardData возвратит данные "как усть". Если же строка копируется в буфер в другом процессе или в твоем из Edit через стандартный обработчик WM_COPY, то GetClipboardData будет возвращать хэндл HGLOBAL. Ничего страшного при этом не произойдет - просто условие .if byte ptr [eax] == "C" никогда не выполнится (т.к. HGLOBAL это указатель, выравненный на 8, а код символа "C" - нечетный)