Страница 2 из 3

Получить что-нибудь назад

Добавлено: 06 Апрель 2017, 0:59
RaFaeL
kreator писал(а): Как вариант - создать dll и в Кларионе пользоваться как внешней либой.
Не получится там так, см. ссылку. По крайней мере просто

Может попробовать через Named Pipe? Там функции используются CreateFile, ReadFile и т.п. только файла как бы нет.
http://www.frolov-lib.ru/books/bsp/v27/ch2_3.htm

Получить что-нибудь назад

Добавлено: 06 Апрель 2017, 20:20
Shur
vic7tar писал(а): "Hello, World!"
Если сообщение всегда одно, то для этого лучше использовать код возврата. Команда RUN() их, кажется, читать умеет.
RaFaeL писал(а): Там функции используются CreateFile, ReadFile и т.п. только файла как бы нет.
Это тоже можно делать проще. Есть такие команды DOS как MKDIR и RMDIR -- файла вроде нет, открывать его не надо, читать тоже.

Получить что-нибудь назад

Добавлено: 06 Апрель 2017, 20:41
Дед Пахом
Кстати, CLIPBOARD(CF_XXX) может возвращать не только текст (не помню, с какой версии это стало возможным), так что можно в vpf программе вставить в буфер что-то нетекстовое (чтоб наверняка не затереть важную информацию), а в Кларионе этот буфер прочитать.

Получить что-нибудь назад

Добавлено: 06 Апрель 2017, 21:08
RaFaeL
Так буфер же один, все равно затрет

Получить что-нибудь назад

Добавлено: 06 Апрель 2017, 21:18
Дед Пахом
RaFaeL писал(а): Так буфер же один, все равно затрет
Нифига, для каждого формата свой буфер.

Получить что-нибудь назад

Добавлено: 06 Апрель 2017, 21:22
vd-vuf
Порыть что нидь около api типа SendMessage, с разгону сложно, зато интересно :)
https://msdn.microsoft.com/en-us/librar ... s.85).aspx

Получить что-нибудь назад

Добавлено: 06 Апрель 2017, 21:23
Дед Пахом
Дед Пахом писал(а): Нифига, для каждого формата свой буфер.
Нет, это я кажется погорячился.

Получить что-нибудь назад

Добавлено: 06 Апрель 2017, 22:28
Yufil
В старые добрые времена в Кларионовской программе можно было запустить DDE-сервер, а снаружи отправить на него сообщение. Интересно, это ещё возможно?

Получить что-нибудь назад

Добавлено: 07 Апрель 2017, 1:39
Admin
Yufil писал(а): Интересно, это ещё возможно?
Да.

Получить что-нибудь назад

Добавлено: 07 Апрель 2017, 9:01
Yufil
Тогда, возможно, и не стоит обсуждать другие варианты...

Получить что-нибудь назад

Добавлено: 07 Апрель 2017, 18:06
vic7tar
Shur писал(а): vic7tar писал(а):
Источник цитаты "Hello, World!"

Если сообщение всегда одно, то для этого лучше использовать код возврата. Команда RUN() их, кажется, читать умеет.
Извините, пошутил. Ну просто нужен кусочек памяти, доступный для разных процессов и куда можно пихать и брать все что угодно. Смотрю в сторону CreateFileMapping.
Кстати, насчет Clipboard. А кто-нибудь пробовал с помощью Clipboard перетащить данные, например, из VM в основную?

Получить что-нибудь назад

Добавлено: 07 Апрель 2017, 22:47
Yufil
Нашёл древний класс, который разбирает Clipboard и выкладывает в очередь "Код типа-наименование типа-значение". Потом из очереди можно выдернуть нужную (например, можно забрать в буфер документ Word и выбрать оттуда строку в RTF) . Можно, наоборот, очередь закинуть в буфер обмена, если он был испрорчен почему-то. Можно сформировать HTML Clipboard, для вставки форматированного текста.
Если интересно, закину в файлохранилище...

Получить что-нибудь назад

Добавлено: 06 Сентябрь 2017, 21:49
dik1970
Почему-то не работает конструкция: run('wmic diskdrive get SerialNumber|clip'). Из-под CMD - все хорошо, серийник попадает в clipboard.

Получить что-нибудь назад

Добавлено: 06 Сентябрь 2017, 22:37
Игорь Столяров
dik1970 писал(а): 06 Сентябрь 2017, 21:49Из-под CMD - все хорошо, серийник попадает в clipboard
Почему бы просто не получить серийный номер HDD традиционным способом ?
И делайте с ним, что хотите ...

Код: Выделить всё


   Module('Windows')
     GetVolumeInformation(*CSTRING,<*CSTRING>,ULONG,*ULONG,*ULONG,*ULONG,*CSTRING,ULONG),SIGNED,PASCAL,RAW,NAME('GetVolumeInformationA')
   end

GetHDDNumber          PROCEDURE
RootPathName            CSTRING(4)
VolumeNameBuf           CSTRING(20)
VolumeNameSize          ULONG(20)
VolumeSerialNumber      ULONG
MaxCompLeng             ULONG
FileSysFlags            ULONG
FileSysNameBuf          CSTRING(20)
FileSysNameSize         ULONG(20)
  CODE
  RootPathName = 'C:\'
  If GetVolumeInformation(RootPathName,VolumeNamebuf,VolumeNameSize,VolumeSerialNumber,MaxCompLeng,FileSysFlags,FileSysNameBuf,FileSysNameSize).
  Return(VolumeSerialNumber)

Получить что-нибудь назад

Добавлено: 06 Сентябрь 2017, 23:22
kreator
Run не всё запускает также, как командная строка. Run скорее похож на ShellExecute. Возможно и запускает ShellExecute. И я тоже использую GetVolumeInformation, только у меня модуль "WinAPI".