PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)


Вопросы новичка (продолжение…)

Сообщений 181 страница 210 из 961

181

Вот немного информации по WinAPI
http://pure-basic.narod.ru/miscfiles/API.rar
http://pure-basic.narod.ru/miscfiles/API_Help.rar

Ну и это можно посмотреть http://purebasic.info/phpBB2/viewtopic.php?t=1354
Можно посмотреть эту тему http://purebasic.info/phpBB2/viewtopic.php?t=7

А вообще, копируем название интересующей WinAPI функции или константы и начинаем пытать гугл. Как правило, под пытками, от выдает очень много интересной инфы.

0

182

Пётр написал(а):

Вот немного информации по WinAPIhttp://pure-basic.narod.ru/miscfiles/API.rarhttp://pure-basic.narod.ru/miscfiles/API_Help.rar
            Ну и это можно посмотреть -- посмотреть эту тему http://purebasic.info/phpBB2/viewtopic.php?t=7
            А вообще, копируем название интересующей WinAPI функции или константы и начинаем пытать гугл. Как правило, под пытками, от выдает очень много интересной инфы.

Большущее Спасибо!!!! :flag:

+1

183

Lucagin написал(а):

Вот пример, только названия файлов свои подставь...

Поправил под себя, теперь работает. Спасибо!

0

184

Ребята, наткнулся на очень классную программу, по добавлению спец эффектов в игры. Для некоммерческих игр бесплатная.  Может, конечно, вы давно о ней знаете, и для вас это не новость, но для меня эта программа стала просто кладом!!!  Она во многом по возможностям, повторяет дорогой  Adobe After Effects, но работать в программе в разы проще и она бесплатная…
Я, честно говоря, не знаю корректно ли давать на форуме ссылки на другие программы, но не могу не поделиться с вами новостью... :cool:

http://www.astralax.ru/projects/particles

Быть может, она  вдохновит  кого-то из “метров” к новым проектам, и даст  новичкам новые интересные примеры симбиоза с PB… :rolleyes:

Отредактировано Lucagin (14.01.2011 20:10:53)

0

185

Lucagin написал(а):

Ребята, наткнулся на очень классную программу

Делал на ней красивые анимированные надписи логотипов PureBasic для программ в формате SWF,
но весят они очень много, до 10Мб...
Например скомпилил программу - весит 300Мб, а аним. лого 5Мб...
Но эффекты красивые.

0

186

mirashic написал(а):

Делал на ней красивые анимированные надписи логотипов PureBasic для программ в формате SWF, но весят они очень много, до 10Мб...

Там же можно  сохранить эффект в виде картинок (прозрачных PNG или BMP). Если задать где-то 3-5 кадров/сек  и потом перегнать их в легкий гиф и сделать анимированный гиф, получится наверно гораздо легче… Вот пример, весят 100, 260 и 330 Кб...
А получится эти эффекты встраивать в PB, не как видео, а как текстуры, созданные с помощью версии Magic Particles (Dev)??? :question:

Отредактировано Lucagin (15.01.2011 00:18:31)

0

187

Здравствуйте, не могу понять, как мне написанное приложение скомпилировать под Linux и под mac? Прочёл на этом сайте статью: http://pure-basic.narod.ru/docs/MultiOS.html, но всё равно остались неясности, чтобы мне например скомпилировать под mac, мне нужно написать следующее?

Код:
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS

а здесь заключить весь код программы

CompilerEndIf

Затем скомпилировать, как обычно и всё?

0

188

goodwen
А зачем Вам

Код:
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS

а здесь заключить весь код программы

CompilerEndIf

если нет API команд? Просто открываете исходник в лине или маке и компилите, или Вы хотите в винде, скомпилить для линя и мака? o.O

0

189

Lucagin написал(а):

А получится эти эффекты встраивать в PB, не как видео, а как текстуры

Текстуры в смысле в играх?

goodwen написал(а):

Затем скомпилировать, как обычно и всё?

Нужна версия компилятора для MacOS X, а так же, сама операционная система MacOS X, установленная на компьютере.

0

190

Пётр написал(а):

Текстуры в смысле в играх?

Ну да, для игр написанных в PB с использованием Api-винды, а то там говорится про поддержки Api-функции C++, Дельфи… А с PB это  можно будет использовать…??? Вот их форум: http://www.astralax.ru/forum/index.php

Отредактировано Lucagin (15.01.2011 18:42:35)

0

191

Пётр, lakomet, спасибо, теперь буду знать.

0

192

Lucagin написал(а):

А с PB это  можно будет использовать…???

Я так понял что API находятся в DLL.
Тогда думаю не будет проблем с использованием в PB.

0

193

Пётр написал(а):

Я так понял что API находятся в DLL.Тогда думаю не будет проблем с использованием в PB.

Т.е. в PB будет стандартный вызов функции из dll, подобно такому вызову:
OpenLibrary(0,"user32.dll") ; Открываем файл "user32.dll"
CallFunction(0,"SetTimer",WindowID(0), 1, 500, @DateStatusBar() ) ; Вызываем функцию "SetTimer"
Главное таскать с собой эту .dll и знать какие функции в ней находятся?

Отредактировано Lucagin (15.01.2011 20:12:13)

0

194

Lucagin написал(а):

Т.е. в PB будет стандартный вызов функции из dll, подобно такому вызову

Ну да, типа того.

Lucagin написал(а):

Главное таскать с собой эту .dll и знать какие функции в ней находятся?

Да.
Но можно запихнуть в исполняемый файл и вызывать от туда, это если нужно чтобы программа состояла из одного файла.

0

195

Пётр написал(а):

Да.Но можно запихнуть в исполняемый файл и вызывать от туда, это если нужно чтобы программа состояла из одного файла.

Ясно, Спасибо!!!  :flag:  Буду изучать, что там за библиотека у них...  :writing:

0

196

Доброго времени. Как Запустить свою программу из DataSection?

0

197

lakomet написал(а):

Доброго времени. Как Запустить свою программу из DataSection?

Есть два варианта.
Либо создать файл на диске и извлечь на диск данные из DataSection, а запустить от туда, либо запустить из памяти не извлекая на диск (Windows).

0

198

Пётр написал(а):

создать файл на диске

Пока так и сделал.

Пётр написал(а):

из памяти не извлекая на диск (Windows)

Нужен именно такой вариант, но кроссплатформенный :question:

0

199

lakomet написал(а):

Нужен именно такой вариант, но кроссплатформенный

Для Windows

Код:
Structure IMAGE_SECTION_HEADER 
  SecName.b[8] 
  StructureUnion 
    PhysicalAddr.l 
    VirtualSize.l 
  EndStructureUnion 
  VirtualAddress.l 
  SizeOfRawData.l 
  PointerToRawData.l 
  PointerToRelocations.l 
  PointerToLinenumbers.l 
  NumberOfRelocations.w 
  NumberOfLinenumbers.w 
  Characteristics.l 
EndStructure 

Structure IMAGE_SECTION_HEADERS 
  ish.IMAGE_SECTION_HEADER[95] 
EndStructure 

Procedure RunPE(lBuff, parameters.s) 
  Protected *idh.IMAGE_DOS_HEADER  = lBuff 
  Protected *ish.IMAGE_SECTION_HEADERS 
  Protected pi.PROCESS_INFORMATION 
  Protected *inh.IMAGE_NT_HEADERS 
  Protected si.STARTUPINFO 
  Protected lpBaseAddres.l 
  Protected Ctx.CONTEXT 
  Protected Addr.l, RET.l, i.l 

  CreateProcess_(#NUL, ProgramFilename() + " " + parameters, #NUL, #NUL, #False, #CREATE_SUSPENDED, #NUL, #NUL, @si, @pi) 
  Ctx\ContextFlags = #CONTEXT_INTEGER 
  If GetThreadContext_(pi\hThread, Ctx) = 0      : Goto EndThread : EndIf 

  ReadProcessMemory_(pi\hProcess, Ctx\Ebx + 8, @Addr, 4, #NUL) 
  If ZwUnmapViewOfSection_(Pi\hProcess, Addr)    : Goto EndThread : EndIf 
  If lBuff = 0                                   : Goto EndThread : EndIf 
  *inh = lBuff + *idh\e_lfanew 

  lpBaseAddres = VirtualAllocEx_(pi\hProcess, *inh\OptionalHeader\ImageBase, *inh\OptionalHeader\SizeOfImage, #MEM_COMMIT | #MEM_RESERVE, #PAGE_EXECUTE_READWRITE) 
  WriteProcessMemory_(pi\hProcess, lpBaseAddres, lBuff, *inh\OptionalHeader\SizeOfHeaders, @ret) 
  *ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader 

  For i = 0 To *inh\FileHeader\NumberOfSections - 1 
    WriteProcessMemory_(pi\hProcess, lpBaseAddres + *ish\ish[i]\VirtualAddress, lBuff + *ish\ish[i]\PointerToRawData, *ish\ish[i]\SizeOfRawData, @ret) 
  Next 

  WriteProcessMemory_(pi\hProcess, Ctx\Ebx + 8, @lpBaseAddres, 4, #NUL) 
  Ctx\Eax = lpBaseAddres + *inh\OptionalHeader\AddressOfEntryPoint 
  SetThreadContext_(pi\hThread, Ctx) 
  ResumeThread_(pi\hThread) 
  ProcedureReturn 

  EndThread: 
  TerminateProcess_(pi\hProcess, #NUL) 
  CloseHandle_(pi\hThread) 
  CloseHandle_(pi\hProcess) 
EndProcedure 


RunPE(?file1, "командная строка для запускаемой программы") 
End

DataSection 
  file1: IncludeBinary "Путь к исполняемому файлу" 
EndDataSection

0

200

Пётр написал(а):

Для Windows

А интересно,  может ли файл, запущенный подобным образом из памяти, работать автономно, т.е. продолжать работать при завершении процесса(файла), запустившего его???

Отредактировано Lucagin (16.01.2011 19:13:29)

0

201

Lucagin написал(а):

продолжать работать при завершении процесса(файла), запустившего его???

Как ни странно, но да, он продолжает работать, хотя процесс, породивший его, уже завершён.
Правда, антивирусы не любят такой способ запуска - прогу вирусом обзывают!

0

202

Пётр написал(а):

Как ни странно, но да, он продолжает работать, хотя процесс, породивший его, уже завершён.

А у меня при завершении процесса файла родителя, работа программы завершается... :huh: 

“командная строка для запускаемой программы”:  (Пустая)
"Путь к исполняемому файлу"  файл.exe

http://ifolder.ru/21363513

Вобщем, буду учить мат. Часть... :blush:

Отредактировано Lucagin (17.01.2011 01:04:24)

0

203

В разделе "Указатели" на сайте(http://pure-basic.narod.ru/docs/point.html), представлен такой пример, вызова процедуры по её адресу.

Код:
В следующем примере показано, как можно вызывать процедуру,  зная её адрес в памяти.

Procedure Message(Title.s, Message.s)
 MessageRequester(Title, Message)
EndProcedure
; Узнаём адрес процедуры и помещаем его в переменную-указатель
*ponter=@Message()
; Вызываем процедуру зная её адрес в памяти
CallFunctionFast(*ponter, "Заголовок", "Текст")

Но код не работает, так как функция CallFunctionFast() , как написано в справке,- “не может принимать и возвращать параметры типа-string/float/double/quad”
Чем можно заменить функцию CallFunctionFast() в данном случае, чтобы код работал корректно. В справке написано, что надо использовать Prototype.<type> name(),но я не могу понять, как его в этом случае правильно использовать???

Отредактировано Lucagin (17.01.2011 18:17:19)

0

204

Lucagin написал(а):

Чем можно заменить функцию CallFunctionFast()

Её надо не заменять, а правильно использовать. Вместо string/float/double/quad”  надо использовать указатели на них:

Код:
CallFunctionFast(*ponter, @"Заголовок", @"Текст")

0

205

ВиниПур написал(а):

Её надо не заменять, а правильно использовать. Вместо string/float/double/quad”  надо использовать указатели на них:

Ясно, спасибо!!! :writing:  Только начал разбираться с указателями, еще до конца не понимаю всей гибкости этого «явления»… :о)
А можно пример как всетаки в данном случае использовать Prototype. Когда функция вызывается не из бибиотеке (это вроде хорошо описано в справке) а именно по адресу в памяти??? Если это в таком варианте работает???


И еще не совсем понимаю, зачем вводится тип переменных для хранения адреса памяти (*Var)??? :question:
Ведь в параметры функции можно сразу подставлять  указатель  @ на (переменную, функцию, структуру)  или обычную переменную  var = @ что-либо. Почему пошли  на введение  нового типа переменных   *Var=(@ что-либо)
Пока могу предположить, что это сделано для того, чтобы мы не путались, и глядя на этот тип переменных, сразу понимали что речь идет об указателях на память.

А то с @ вроде стало понятно, это что-то типа Оператора(команды) возвращающего адрес в памяти данного «объекта». А вот полное назначение *, пока не уяснил. Только ли её основное значение в том, что она  указывает на то, что переменная является указателем. А в остольном(функционально) её вполне могла бы заменить обычная переменная Var.l (ну или Var.q)???

Отредактировано Lucagin (17.01.2011 19:36:56)

0

206

Здравствуйте, тут увидел в примерах функцию SetWindowsTransparency(), которое должно делать окно полупрозрачным, но в справке ничего про неё не написано и соответственное PureBasic на неё ругается, в какой она есть библиотеке? И есть ли ещё какие либо способы для того, чтобы сделать окно полупрозрачным?

0

207

goodwen написал(а):

Здравствуйте, тут увидел в примерах функцию SetWindowsTransparency(), которое должно делать окно полупрозрачным, но в справке ничего про неё не написано и соответственное PureBasic на неё ругается, в какой она есть библиотеке? И есть ли ещё какие либо способы для того, чтобы сделать окно полупрозрачным?

Это должно помочь: http://www.mirashic.narod.ru/windows_3.htm

Отредактировано Lucagin (17.01.2011 20:26:08)

0

208

Lucagin, я как раз на этом сайте и увидел, но опять же если я запускаю любой код от туда, то PureBasic ругается на SetWindowsTransparency(), а так же на SkinWin(), про эти две функции ничего не написано в справке, видимо они библиотечные, но что это именно за библиотека? Или я чего то не понял.

0

209

Lucagin, я со SkinWin() разобрался, там библиотека PBOSL (PureBasic OpenSource Libraries) нужна, но даже с ней не работает SetWindowsTransparency().

0

210

Нужна Droopy_Library библиотека

для PB4.40 - PB4.41

http://purebasic.ucoz.com/PB_rar/Droopy_Lib_PB4_40.rar

Отредактировано mirashic (17.01.2011 21:48:24)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)