Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/33: Рейтинг темы: голосов - 33, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 13

Перевести код из BAT в PB: оптимизация кода

27.10.2012, 18:17. Показов 6919. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, всем. Прошу помощи у знатоков. Пытаюсь перевести bat->pb, но не очень-то и получается. Честно пытался, но так и не получилось обойтись без оператора goto. Если кто сможет помогите новичку с переводом.

вот код нормально работающего bat'ника:
***************************************

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@echo off
tasklist /v /fi "WINDOWTITLE eq GRIB" | findstr "GRIB" 2>nul && exit
cls
 
title GRIB
tasklist | find /i "robogrib.exe" || goto runproc
taskkill /F /IM "robogrib.exe" /T
cls
sleep 3
goto runproc
 
:start
taskkill /F /IM "robogrib.exe" /T
cls
sleep 3
set folder=IRAM\ARX_GRIB\G%date:~6,4%\M%date:~3,2%\D%date:~0,2%
if exist D:\%folder% goto ok
mkdir D:\%folder%
 
:ok
start /b robogrib.exe D:\%folder% \\Sadis\%folder% *.dat /PURGE /MON:1 /MOT:10
goto loop
 
:runproc
set htime=%time:~0,2%
set mtime=%time:~3,2%
if %mtime%==08 set mtime=8
if %mtime%==09 set mtime=9
set den=%date:~0,2%
if %den%==08 set den=8
if %den%==09 set den=9
set hnday=4
set mnday=00
set /a nowtime=(%htime% * 3600)+(%mtime% * 60)
set /a nexttime=(%hnday% * 3600)+(%mnday% * 60)
if %nowtime% LSS %nexttime% goto changed
set folder=IRAM\ARX_GRIB\G%date:~6,4%\M%date:~3,2%\D%date:~0,2%
goto begin
 
:changed
set /a den=den-1
if %den% EQU 0 set folder=IRAM\ARX_GRIB\G%date:~6,4%\M%date:~3,2%\D01 && goto begin
if %den% LSS 10 set folder=IRAM\ARX_GRIB\G%date:~6,4%\M%date:~3,2%\D0%den% && goto begin
set folder=IRAM\ARX_GRIB\G%date:~6,4%\M%date:~3,2%\D%den:~0,2%
 
:begin
if NOT exist D:\%folder% mkdir D:\%folder%
start /b robogrib.exe D:\%folder% \\Sadis\%folder% *.dat /PURGE /MON:1 /MOT:10
 
:loop
sleep 900
set htime=%time:~0,2%
set mtime=%time:~3,2%
if %mtime%==08 set mtime=8
if %mtime%==09 set mtime=9
set /a nowtime=(%htime% * 3600)+(%mtime% * 60)
 
for /l %%i in (1,1,14) do call :G1
goto loop
 
:G1
if %nowtime%==%nexttime% goto start
set /a nowtime=nowtime-60
if %nowtime%==%nexttime% goto start
goto :eof
А это код на pb (все, что более-менее удалось):
**************************************** *******

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#hnday=4
#mnday=00
nexttime = (#hnday * 3600)+(#mnday * 60)
tekhr.b=Hour(Date())
tekmn.b=Minute(Date())
nowtime = (tekhr * 3600)+(tekmn * 60)
 
den$=FormatDate("%dd", Date())
If nowtime < nexttime
den.b = Val(den$)
If den.b > 1
den.b=den.b - 1
If den.b < 10
den$ = "D0" + Str(den.b)
Goto A
EndIf
den$ = "D" + Str(den.b)
Goto A
EndIf
EndIf
den$ = "D" + den$
 
A:
mon$=FormatDate("M%mm", Date())
god$=FormatDate("G%yyyy", Date())
wdir$="C:/IRAM"
wdir2$="C:/IRAM/ARX_GRIB"
wdir3$="C:/IRAM/ARX_GRIB/" + god$
wdir4$="C:/IRAM/ARX_GRIB/" + god$ + "/" + mon$
wdir5$="C:/IRAM/ARX_GRIB/" + god$ + "/" + mon$ + "/" + den$
 
opn$="C:\IRAM\ARX_GRIB" + god$ + "" + mon$ + "" + den$
brif$=" E:\IRAM\ARX_GRIB" + god$ + "" + mon$ + "" + den$
 
If FileSize(wdir$)<> - 2
If CreateDirectory(wdir$)
EndIf
EndIf
If FileSize(wdir2$)<> - 2
If CreateDirectory(wdir2$)
EndIf
EndIf
If FileSize(wdir3$)<> - 2
If CreateDirectory(wdir3$)
EndIf
EndIf
If FileSize(wdir4$)<> - 2
If CreateDirectory(wdir4$)
EndIf
EndIf
If FileSize(wdir5$)<> - 2
If CreateDirectory(wdir5$)
EndIf
EndIf
 
processID.l = RunProgram("c:\robogrib.exe", opn$ + brif$ + " /PURGE /MON:1 /MOT:10", "C:")
Debug "ProcessID = " + Str(processID)
 
loop:
;Delay(3000000)
Delay(5000)
tekhr.b=Hour(Date())
tekmn.b=Minute(Date())
nowtime = (tekhr.b * 3600)+(tekmn.b * 60)
 
If nowtime = nexttime
Else
For i=1 To 14 Step 1
nowtime = nowtime - 60
If nowtime = nexttime
i=14  
EndIf
Next
 
If nowtime <> nexttime
Goto loop
EndIf
EndIf
 
Debug "Program terminated..."
KillProcess(processID)
-----------------------
пути подставил другие для проверки. сейчас код выглядит кусками. как его можно причесать/упростить (в частности проверки существования каталогов). В bat'нике эта проверка занимает буквально одну строчку.
P.S. Прошу прощения за развернутый вид сообщения. не ознакомился пока с тэгами этого форума.

Добавлено через 4 часа 31 минуту
Извините за 2 сообщения подряд, не нашел где можно отредактировать свой предыдущий пост. Хотелось бы уточнить, что проблема с goto не стОит так остро, как акцентировал Памирыч переименовав тему. Скорее как оптимизация кода, если возможно. А вопрос собственно был в том, как мне лучше этот код завершить согласно приложенному выше батнику (поиск процесса, его "прибивание"). Очевидно же, что концовка совсем скомкана и неполная (без обид).

Добавлено через 40 минут
P.S. Совсем забыл, сказать, что robogrib.exe - есть консольное приложение не имеющее графической оболочки, которое является ни чем иным как robocopy.exe из resourcekit'a 2003(переименовывал потому как нужно было запускать две копии, а "прибивать" по имени было сподручнее). Своего рода синхронизатор 2х папок это у меня, одна из которых сетевая. Надеюсь я смог донести до вас суть программы. Также там замешан так называемый будильник, по которому происходит детект начала новых суток и соответственно переключение каталога "истоника" и "объекта".

Добавлено через 13 часов 5 минут
Уже 91 человек посмотрели, а ответов ровно как и вопросов нет
Может нужны какие дополнительные комментарии по батничку? так вы спросите. Строки 2 и 3 были добавлены дабы избежать повторного запуска программы.

Добавлено через 10 часов 29 минут
Никак не возьму в толк. Здесь не могут ответить или не хотят?
чуточку добавил кода.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#hnday=4
#mnday=00
nexttime = (#hnday * 3600)+(#mnday * 60)
 
tekhr.b=Hour(Date())
tekmn.b=Minute(Date())
nowtime = (tekhr * 3600)+(tekmn * 60)
 
den$=FormatDate("%dd", Date())
If nowtime < nexttime
den.b = Val(den$)
If den.b > 1
den.b=den.b - 1
If den.b < 10
den$ = "D0" + Str(den.b)
Goto A
EndIf
den$ = "D" + Str(den.b)
Goto A
EndIf
EndIf
den$ = "D" + den$
 
A:
mon$=FormatDate("M%mm", Date())
god$=FormatDate("G%yyyy", Date())
wdir$="C:/IRAM"
wdir2$="C:/IRAM/ARX_GRIB"
wdir3$="C:/IRAM/ARX_GRIB/" + god$
wdir4$="C:/IRAM/ARX_GRIB/" + god$ + "/" + mon$
wdir5$="C:/IRAM/ARX_GRIB/" + god$ + "/" + mon$ + "/" + den$
 
opn$="C:\IRAM\ARX_GRIB" + god$ + "" + mon$ + "" + den$
brif$=" E:\IRAM\ARX_GRIB" + god$ + "" + mon$ + "" + den$
 
If FileSize(wdir$)<> - 2
If CreateDirectory(wdir$)
EndIf
EndIf
If FileSize(wdir2$)<> - 2
If CreateDirectory(wdir2$)
EndIf
EndIf
If FileSize(wdir3$)<> - 2
If CreateDirectory(wdir3$)
EndIf
EndIf
If FileSize(wdir4$)<> - 2
If CreateDirectory(wdir4$)
EndIf
EndIf
If FileSize(wdir5$)<> - 2
If CreateDirectory(wdir5$)
EndIf
EndIf
 
processID.l = RunProgram("c:\robogrib.exe", opn$ + brif$ + " /PURGE /MON:1 /MOT:10", "C:", #PB_Program_Open)
Debug "ProcessID = " + Str(processID)
 
loop:
;Delay(3000000)
Delay(5000)
tekhr.b=Hour(Date())
tekmn.b=Minute(Date())
Debug tekhr
Debug tekmn
Debug "--------"
Debug ""
nowtime = (tekhr.b * 3600)+(tekmn.b * 60)
 
If nowtime = nexttime
Else
For i=1 To 14 Step 1
nowtime = nowtime - 60
Debug nowtime
If nowtime = nexttime
i=14  
EndIf
Next
 
If nowtime <> nexttime
Goto loop
EndIf
EndIf
 
Debug "Program terminated..."
 
KillProgram(processID)
CloseProgram(processID)
 
den$=FormatDate("D%dd", Date())
Goto A
примерно вот этого я и добивался (не писал ранее потому как ожидал от профессоров более красивого решения), но как бы не открывать и закрывать постоянно программу, а только перезагружать процесс robogrib.exe. А то в таком виде программа постоянно переводит фокус на себя и запускается всегда в разных местах экрана. В батничке работает все плавно, то есть окно консоли открывается только один раз. Да и сам процесс протекает фоном. Еще один вопрос, но уже второстепенный: а как задать title для окна?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.10.2012, 18:17
Ответы с готовыми решениями:

Из кода Си в код Ассемблер перевести нужно,можно быстро как-нибудь?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void main (void) {int a,b,n,d; d=0; system(&quot;chcp 1251&quot;); system (&quot;cls&quot;); ...

На основе кода REG-файла написать код BAT-файла
Всем Доброго Дня, попрошу вас меня понять) мне необходимо сделать батник из .reg файла ...

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона для функции 2*X12 - X1*X2 + 3*X22 -...

29
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
31.10.2012, 20:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dimk@ Посмотреть сообщение
файл robocopy.exe вмонтировать в скомпилированный exe
locm, сказал всё правильно, я в коде покажу как вариант

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
If FileSize("file.exe")<1
files.l = CreateFile(#PB_Any,"file.exe")
  If files
    WriteData(files, ?file, ?file_end-?file)
    CloseFile(files)
  EndIf
EndIf
 
DataSection
file:
IncludeBinary "file.exe"
file_end:
EndDataSection
Цитата Сообщение от Dimk@ Посмотреть сообщение
без извлечения на диск.
Я бы не советовал. Работает не всегда так, как хотелось бы, да и антивирусы могут ругаться в 90%
0
Эксперт по электронике
6575 / 3202 / 335
Регистрация: 28.10.2011
Сообщений: 12,484
Записей в блоге: 7
31.10.2012, 21:07
Цитата Сообщение от Pro_grammer Посмотреть сообщение
If FileSize("file.exe")<1
Если вдруг в указанном месте окажется папка с таким именем, то получим интересный глюк, когда файла на диске нет и он не создается.
Надежней будет так.
PureBasic
1
If FileSize("file.exe")=-1
Запуск программы из памяти.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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, Proga.s, 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, Proga + " " + parameters, #NUL, #NUL, #False, #CREATE_SUSPENDED, #NUL, #NUL, @si, @pi) 
  ;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, ProgramFilename(), "") ; Запуск программы из памяти.
 
End
 
DataSection 
  file1: IncludeBinary "File.exe" 
EndDataSection
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
31.10.2012, 21:14
Цитата Сообщение от locm Посмотреть сообщение
RunPE(?file1, ProgramFilename(), "") ; Запуск программы из памяти.
Эта программа консольная (robocopy.exe) должна быть запущена как параметр файла cmd.exe + сама с параметрами.
Что то я этого не увидел в коде.

Цитата Сообщение от locm Посмотреть сообщение
месте окажется папка с таким именем
Ну это вряд ли, все имена папок там известны.
0
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 13
31.10.2012, 21:29  [ТС]
Pro_grammer, locm, да-а-а. похоже я поплыл. нужно разбираться.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
01.11.2012, 00:02
должна быть запущена как параметр файла cmd.exe + сама с параметрами.
Ничего себе загнули))), аж мозг в трубочку.
Не проще всё, что делает этот "робокоп" переписать полностью на пюр, чем такие геморы
разгребать?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
01.11.2012, 07:53
Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
Ничего себе загнули))), аж мозг в трубочку.
Да это как раз просто ( конечно, если не из памяти запускать, а с диска)
PureBasic
1
Result = RunProgram("cmd.exe ", "/c C:\robocopy.exe "+ options$, "", #PB_Program_Open)
А вот на счет переписать robocopy на PB будет очень не просто. Если прочить, что эта утилита умеет, то она просто супер в своем деле при своем размере.
1
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
01.11.2012, 08:30
Мысли
Ну RunProgram то это ясно. Прошлые примеры с памятью посерьёзнее.
Просто не понятно зачем для обычного бекапа данных, люди юзают дополнительные
утилиты, в пюре же есть и функции работы со временем и штампы хешсумм, можно
написать и клиент и сервер, если с какой-то локальной тачки копируем, причём не
так прям мудрёно это. Тут конечно да подумать надо, а ТС как понимаю хочет в лоб
сделать. Варианта 2: либо получается какая-либо кастрированная версия программы,
причём ещё и навороченная по самое немогу, внутри "робокоп", а в проге запуск из
памяти, т.е. нет смысла из bat переводить, получится такое же нечитаемое и хз как
работающее(да антивирус пропалит это дело и закроет лавочку), + и всё равно
требуется этот "робокоп" с функциональностью, ограниченной своей. Либо пишется
нормальное приложение, код которого будет без лишних наворотов и его можно будет
заточить под задачу. Тут конечно ТС'у лучше сразу решить стоит ли овчинка выделки.
0
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 13
01.11.2012, 12:20  [ТС]
>Quiet Snow<, здравствуйте. если я правильно интерпретировал Ваши мысли, то Вы предлагаете оставить готовый рабочий батник как есть, но только грузить его не с жесткого диска, а из памяти. верно? если честно, то перевод по большому счету и был затеян для защиты кода от несанкционированного доступа/редактирования. в батниках разочаровался ввиду невозможности скрытия кода (про бат ту экзе я промолчу), а в пью бэйсике только-только начинаю делать первые шаги. вот и стою на распутье оставить все как есть, либо перелопачивать все по-новой.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
02.11.2012, 00:55
то Вы предлагаете оставить готовый рабочий батник как есть
Нет я предлагаю отказаться от "робокопа" и написать весь функционал заново.
Плюсы: У вас будет хороший сопровождаемый код и не будет головной боли о том
как сделать так, чтобы "робокоп" запускался из памяти и ещё как выхотите "тихо"
выполнял свою работу. Также вы отвяжетесь от утилиты, весь функционал будет
внутри процедур, захотите, прикрутите гуи с галочками и кнопочками.
Минусы: Всё пишется ручками заново.

Но вы конечно можете и сделать через робокопа и консоль, перечитайте полностью
свою тему, примеров, которых вам дали, хватит сполна.
0
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 13
02.11.2012, 19:02  [ТС]
>Quiet Snow<, мне было бы достаточно грузить bat из памяти. То есть, допустим есть какой-нибуть cmd-файл. на pb пишется программа помещения его в память и запуска его оттуда. сам батник(текст) естественно должен быть в ресурсах pb-программы. все. а уж что использует bat (robocopy) пускай себе лежит на диске.

Добавлено через 49 минут
или такой вариант: pb-программа каждый раз при запуске создает заложенный в ней cmd-файл и запускает его. Это понятно, а вот можно ли в процессе работы bat'ника занять его так, чтобы к нему не было доступа, не нарушая при этом общей работоспособности? видел такой пример:
PureBasic
1
2
3
4
_lopen_("c:\1.cmd",#OF_SHARE_DENY_READ) 
Repeat 
  Delay(10) 
ForEver
и контроллировать консоль. как только она закрылась - удалить cmd-файл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2012, 19:02
Помогаю со студенческими работами здесь

Оптимизация кода. Замер времени выполнения части кода.
Доброе утро. Есть желание посмотреть сколько времени занимает выполнение какого-то блока кода/отдельной функции или процедуры/программы...

Перевести в код Pascal ABC из кода Pascal Delphi
Помогите перевести в код ABC а то с Delphi вообще не знаком. Задание было такое: Записать в файл последовательного доступа N...

Перевести в код Pascal ABC из кода Pascal Delphi
procedure TForm1.Button1Click(Sender: TObject); const n=8; var x:array of real; y,z:array of real; i,j:byte; begin ...

В ярлыках браузеров emorhc.bat rehcnual.bat xoferif.bat erolpxei.bat
В ярлыках браузеров встроились вирусы и при открытии открывается реклама

Можно ли перевести BAT в VB6?
Вопрос можно ли перевести BAT в VB6 BAT добавляет назначенное задание ( батник работает нормально) ПРИМЕР: @echo off echo...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru