purebasic.info

PureBasic forum
Текущее время: Чт июн 20, 2019 2:24 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Перевод код архива winapi_library
СообщениеДобавлено: Сб мар 09, 2019 6:07 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Решил сделать отдельную тему, так как это может занять не один месяц.
Сделал перевод всех имён файлов и содержимого раздела "OpenWindow"

Файлы с проблемами
"Текст заголовка справа (Не работает).pb"
"Определить использ. ЦП (не работает).pb"
"Перерисовать окно.pb" - нет видимой реакции, я даже подумал о UpdateWindow_ и RedrawWindow_
"Тонкие границы окна.pb" и "Двойная граница окна.pb" у меня дают одинаковую обычную границы окна.

Предыдущая тема, где я выложил весь архив с авто-переводом имён файлов и выборочными правками.

Обновил, добавил Панель задач Интернет Выключение компа, Мышь и клавиатура, Рабочий стол, итого 50 папок переведено
Имена я меняю иногда даже в переведённых, поэтому делать не слияние а замену.


Вложения:
Панель задач Интернет Выключение компа.7z [120.25 KiB]
Скачиваний: 10


Последний раз редактировалось AZJIO Ср апр 24, 2019 3:53 pm, всего редактировалось 17 раз(а).
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Сб мар 09, 2019 6:54 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 853
Благодарил (а): 2 раз.
Поблагодарили: 40 раз.
Пункты репутации: 9
Зачем удалять кнопки если можно их не создавать,или это для чужого окна? :roll:
Код:
1
2
3
4
5
6
7
 
If OpenWindow(0,0,0,500,250,"Пример",#PB_Window_SystemMenu|#PB_Window_ScreenCentered);|#PB_Window_MaximizeGadget
  ;SetWindowLongPtr_(WindowID(0),#GWL_STYLE,GetWindowLongPtr_(WindowID(0),#GWL_STYLE)&(#WS_MAXIMIZEBOX!-1))
  ;SetWindowPos_(WindowID(0),0,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE|#SWP_NOZORDER|#SWP_FRAMECHANGED)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Сб мар 09, 2019 7:09 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Сергейчик писал(а):
Зачем удалять кнопки если можно их не создавать,или это для чужого окна? :roll:

Зачем в листвью есть функции удаления пунктов RemoveGadgetItem(), если можно их не создавать. Вот примерно ответ тот же. К тому же автор поигрался с переназначениями стилей и решил это показать в виде примеров, а надо ли тебе это сейчас или потом как говорится никто не принуждает.


Последний раз редактировалось AZJIO Сб мар 09, 2019 7:11 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Сб мар 09, 2019 7:11 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6520
Благодарил (а): 28 раз.
Поблагодарили: 215 раз.
Пункты репутации: 57
AZJIO писал(а):
Файлы с проблемами
"Текст заголовка справа (Не работает).pb"

На win7 работает.
"Определить использ. ЦП (не работает).pb"
Просто старый синтаксис. Исправляется легко
Код:
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
93
94
95
96
; Автор: dell_jockey
 
EnableExplicit
 
Define ev
Global gCurrentUsage.d
 
#EMA_Samples = 20
 
Procedure.d EMA_smoothing(raw.d, samples.w)
  Static Alpha.d
  Protected CurrentEMA.d
  Static PriorEMA.d
 
  Alpha.d = 2 / (samples.w + 1)
  CurrentEMA.d = priorEMA.d + (Alpha.d * (raw.d - priorEMA.d))
  PriorEMA.d = CurrentEMA.d
 
  ProcedureReturn CurrentEMA.d
EndProcedure
 
Procedure MonitorCPU(void)
  Protected creation.FILETIME
  Protected exit.FILETIME
  Protected kernel.FILETIME
  Protected user.FILETIME
  Protected sysinfo.SYSTEM_INFO
  Protected numprocs
  Protected h
  Protected oldkernel
  Protected olduser
  Protected rawCurrentUsage.d
 
  GetSystemInfo_(@sysinfo)
  numprocs = sysinfo\dwNumberOfProcessors
 
  h = OpenProcess_(#PROCESS_QUERY_INFORMATION, #False, GetCurrentProcessId_())
  GetProcessTimes_(h,@creation,@exit,@kernel,@user)
  oldkernel=kernel\dwlowdatetime
  olduser=user\dwlowdatetime
  Delay(500)
 
  Repeat
    GetProcessTimes_(h,@creation,@exit,@kernel,@user)
    rawCurrentUsage.d = ((((user\dwlowdatetime-olduser)+(kernel\dwlowdatetime-oldkernel))/500)/100)/numprocs
    gCurrentUsage.d = EMA_smoothing(rawCurrentUsage.d, #EMA_Samples)
    olduser=user\dwlowdatetime
    oldkernel=kernel\dwlowdatetime
    Delay(500)
  ForEver
EndProcedure
 
CreateThread(@MonitorCPU(),0)
 
InitSprite()
;InitSprite3D()
 
OpenWindow(0,0,0,640,480,"CPU Load Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
 
CreateSprite(0, 128,128, #PB_Sprite_AlphaBlending )
If StartDrawing(SpriteOutput(0))
  Box(0,0,128,128,#Red)
 
  StopDrawing()
EndIf
 
 
CopySprite(0,1)
CopySprite(0,2)
SpriteQuality(1)
 
Repeat
  ClearScreen(0)
 
  If StartDrawing(ScreenOutput())
    DrawText(0,0,"CPU Usage: "+StrD(gCurrentUsage,2)+"%", #White, #Black)
 
    StopDrawing()
  EndIf
 
   
    RotateSprite (0,1,1)
    RotateSprite (1,1,1)
    RotateSprite (2,1,1)
    DisplaySprite (0,100,100)
    DisplaySprite (1,250,100)
    DisplaySprite (2,400,100)
 
 
 
  FlipBuffers()
  Delay(1)
  ev = WindowEvent()
Until ev = #PB_Event_CloseWindow
 


AZJIO писал(а):
"Перерисовать окно.pb" - нет видимой реакции

А что там должно быть? Окно вновь создано, и перерисовку этот код явно не сможет показать.
Нужен более информативный пример, где нужна явная перерисовка.
AZJIO писал(а):
"Тонкие границы окна.pb" и "Двойная граница окна.pb" у меня дают одинаковую обычную границы окна.

Этот код зависит от стилей Винды, потому не имеет ценности. Может где то на XP и работает.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Вс мар 10, 2019 6:21 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Что нового

В "Гаджет ExplorerTree" было много файлов с использованием TreeGadget, я все переделал на ExplorerTree, кроме "Удаляет флажок.pb"

TextGadget 9 стилей
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
; Описание всех стилей
; https://docs.microsoft.com/en-us/windows/desktop/controls/Static-control-styles
EnableExplicit
 
Define w
 
If OpenWindow(0, 0, 0, 300, 400, "Пример", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  w = WindowWidth(0)
  TextGadget(1, 10, 10, 100, 2, "", #SS_ETCHEDHORZ)
  TextGadget(2, 55, 15, 2, 30, "", #SS_ETCHEDVERT)
  TextGadget(3, 10, 50, w-20, 20, "#PB_Text_Border - 3D-рамка ярче выраженная", #PB_Text_Border)
  TextGadget(4, 10, 75, w-20, 20, "SS_SUNKEN - 3D-рамка", #SS_SUNKEN)
  TextGadget(5, 10, 100, w-20, 20, "WS_BORDER - чёрная рамка", #WS_BORDER)
;   TextGadget(6, 10, 205, 250, 20, "18", #SS_ETCHEDFRAME) ; текст не отображается
  TextGadget(6, 10, 125, w-20, 70, "Центрируется по вертикали", #PB_Text_Center | #SS_CENTERIMAGE | #WS_BORDER)
  TextGadget(7, 10, 200, 150, 35, "Без переноса строки на следующую", #SS_LEFTNOWORDWRAP | #WS_BORDER)
  TextGadget(8, 10, 240, 150, 20, "Многоточие если текст не умещается", #WS_BORDER | #SS_WORDELLIPSIS) ; многоточие
  TextGadget(9, 10, 265, 200, 20, "C:\Program Files (x86)\Notepad++\plugins\NppConverter", #WS_BORDER | #SS_PATHELLIPSIS) ; многоточие для путей
  TextGadget(11,10,290,w-20,20,"Выравнивание справа",#SS_RIGHT | #WS_BORDER)
  TextGadget(12,10,315,w-20,20,"По центру",#SS_CENTER | #WS_BORDER)
  TextGadget(13,10,340,w-20,20,"Слева (по умолчанию)", #WS_BORDER)
 
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


решил глянуть а что же в TextGadget (Гаджет Text (надпись)), так там по одному стилю на пример и то не все, ну почему это не засунуть в один?
Что интересно в файле "Использование RTF как TextGadget.pb" показан пример использования сырого режима RTF

Изменение пространства на иконку... Смущает откуда здесь число 65536? я в разделе ExplorerList заменил просто указав 90, но это повторяется уже в разделе ListIcon и я же думаю имею ли право изменять код и выдавать потом как оригинал? В предыдущем даже реакции не было из-за запредельного числа. Вернул назад, похоже тут два числа в одном.
Код:
1
2
3
  x = 100
  y = 50
  SendMessage_(GadgetID(1), #LVM_SETICONSPACING, 0, y * 65536 + x)



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Пн мар 11, 2019 4:33 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Добавил ListIcon. Там пример Группы.pb имеет проблемы с получением текста имени групп. Англ текст обрезается, а русский кракозябры, должы быть указатели вместо Long. Метод тыка не помог.
Код:
1
2
3
4
Procedure StringToUnicode(pbstrptr.l, ucstrptr.l)
  MultiByteToWideChar_ (#CP_ACP, 0, pbstrptr, Len(PeekS(pbstrptr)), ucstrptr, Len(PeekS(ucstrptr)))
  PokeL( ucstrptr + Len(PeekS(pbstrptr))*2, 0)
EndProcedure



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Пт мар 15, 2019 11:20 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Всвязи с необходимостью функций реестра и убить процесс стал смотреть соответствующие разделы.

"Процессы\Определение заголовка окна" - тут очистка памяти после вызова ProcedureReturn, естественно не сработает.

В "реестр" вообще пришлось писать заново, всё слабо, нет проверок успеха. Сделал пример чтения реестра с запросом размера и типа перед тем как получить данные
Код:
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
EnableExplicit
 
; Переделал с проверкой успеха
Procedure.s RegRead(Root, KeyPath$, Valie$)
        Protected Size, Name$, hKey, Type
        ; Если раздел открыт успешно
        If #ERROR_SUCCESS = RegOpenKeyEx_(Root,KeyPath$,0,#KEY_ALL_ACCESS,@hKey)
                ; Чтобы получить размер данных и тип. Размер для выделения буфера,
                ; тип для определения можно ли анализировать данные соответствующими функциями
                If #ERROR_SUCCESS = RegQueryValueEx_(hKey,Valie$,0,@Type,0,@Size)
                        ; Debug Str(Type)
                        Select Type
                                Case 1
                                        Debug "REG_SZ Строковый"
                                Case 2
                                        Debug "REG_EXPAND_SZ Строковый с %Temp%"
                                Case 3
                                        Debug "REG_BINARY Бинарный"
                                Case 4
                                        Debug "REG_DWORD 8 байт, Double, Quad"
                                Case 7
                                        Debug "REG_MULTI_SZ Многострочный текст "
                                Default
                                        Debug "один из редких типов"
                        EndSelect
                        Debug "Длина данных: " + Str(Size) + " байт"
                        Name$=Space(Size)
                        If #ERROR_SUCCESS = RegQueryValueEx_(hKey,Valie$,0,0,@Name$,@Size)
                                Debug "успешно, значение параметра " + Valie$ + ": " + Name$
                        EndIf
                EndIf
                RegCloseKey_(hKey)
        EndIf
        ProcedureReturn Name$
EndProcedure
 
Define Name$
Name$ = RegRead(#HKEY_CURRENT_USER, "Environment","TEMP")



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Сб апр 13, 2019 4:06 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Добавил ещё 17 папок, все гаджеты кроме папки "Гаджеты"


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Вт апр 16, 2019 11:57 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
При добавлении перевода папки "Диск"
1. Добавил пример GetVolumeInformation, включая флаги о том что поддерживает система (20 флагов), прочитав на официальной странице описание функции.
2. Добавил примеры "Определить номер диска", "Определяет размер диска", "Определяет размер свободного пространства", "Проверить какие диски смонтированы", "Событие подключения и отключения дисков".
3. В GetVolumeInformation указано, что размер буфера должен быть #MAX_PATH+1, при этом непонятно почему буфер указывается 256, а в функции 255. Во первых Space вроде как и так при 255 выделит 256, потому что конечные Null добавит, а в функции нужно указывать вроде как по ширине данных плюс место под Null, поэтому в фукнции GetVolumeInformation должно 256, при выделении памяти 256, при выделении памяти с помощью Space - 255. В общем где-то исправлял, где-то нет.
4. Пример "Состояние диска" - не понял о чём он.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Ср апр 17, 2019 1:12 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 853
Благодарил (а): 2 раз.
Поблагодарили: 40 раз.
Пункты репутации: 9
Состояние может
основной-логический,общий доступ -нет,отформатирован-нет,зашифрован-нет,файловая система или размер кластера? :roll:
накидал пример с рунета.
Думаю буфер без разницы какой она всего лишь по ссылке пишет в него строку а +1 видимо для того что она сама ставит ноль в конце записываемой строки или наоборот не ставит? :roll:
Код:
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
 
#DRIVE_UNKNOWN=0
#DRIVE_NO_ROOT_DIR=1
#DRIVE_REMOVABLE =2
#DRIVE_FIXED=3
#DRIVE_REMOTE=4
#DRIVE_CDROM=5
#DRIVE_RAMDISK=6
Select GetDriveType_("c:\")
         Case #DRIVE_UNKNOWN
      Debug "DRIVE_UNKNOWN — 0 : диск неопределен/не существует"
         Case #DRIVE_NO_ROOT_DIR
      Debug "DRIVE_NO_ROOT_DIR — 1 : неверный путь/ путь не указывает на том"
          Case #DRIVE_REMOVABLE
      Debug "DRIVE_REMOVABLE — 2 : тип устройства определяется как съемный (дискета, флешка и т.д.)"
          Case #DRIVE_FIXED
      Debug "DRIVE_FIXED — 3 : тип устройства — фиксированный диск (жесткий диск)"
          Case #DRIVE_REMOTE
      Debug "DRIVE_REMOTE — 4 : тип устройства — удаленный(сетевой) диск"
          Case #DRIVE_CDROM
      Debug "DRIVE_CDROM — 5 : это устройство CD-ROM"
          Case #DRIVE_RAMDISK
      Debug "DRIVE_RAMDISK — 6 : виртуальный диск, созданный в оперативной памяти"
           
  EndSelect
 
  lpVolumeNameBuffer.s=Space(300);имя тома
  lpVolumeSerialNumber.l
  lpMaximumComponentLength.l
  lpFileSystemFlags.l
  lpFileSystemNameBuffer.s=Space(300)
 
 
;путь к сетевому или локальному тому (пример: "\\MyServer\MyShare\" или "C:\".
 
  GetVolumeInformation_("d:\",@lpVolumeNameBuffer,Len(lpVolumeNameBuffer)*2,@lpVolumeSerialNumber,@lpMaximumComponentLength,@lpFileSystemFlags,@lpFileSystemNameBuffer,Len(lpFileSystemNameBuffer)*2)
  ;если #null то для текущего диска
 
  Debug lpVolumeNameBuffer;;имя тома(не вывела надписи локальный том для диска с:\)
  Debug Hex(lpVolumeSerialNumber);серийный номер тома
  Debug lpMaximumComponentLength;размер тома(не ясный размер)
  Debug lpFileSystemFlags;тип файловой системы (наверное какое то перечесление)
  Debug lpFileSystemNameBuffer;название файловой системы
 
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Ср апр 17, 2019 6:31 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6520
Благодарил (а): 28 раз.
Поблагодарили: 215 раз.
Пункты репутации: 57
Сергейчик писал(а):
Состояние может
основной-логический,общий доступ -нет,отформатирован-нет,зашифрован-нет,файловая система или размер кластера? :roll:
накидал пример с рунета.

Немного не так. Тут можно почитать
GetVolumeInformation определяет серийный номер, метку диска и его файловую систему.
Код:
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
Define.l Serial, type, i
Define.s Lfwrk, FileSystem, VolName
 
For i=65 To 90
  Lfwrk=Chr(i)+":\"
  type =GetDriveType_(Lfwrk)
  FileSystem = Space(256)
  VolName= Space(256)
  GetVolumeInformation_(@Lfwrk, @VolName, 255, @Serial, 0, 0, @FileSystem, 255)
  Select type
    Case 0
      Debug Lfwrk+" The drive type cannot be determined."
    Case 2
      Debug Lfwrk+" = DRIVE_REMOVABLE, "+VolName+", "+FileSystem+", "+  Hex(Serial)
    Case 3
      Debug Lfwrk+" = DRIVE_FIXED, "+VolName+", "+FileSystem+", "+  Hex(Serial)
    Case 4
      Debug Lfwrk+" = DRIVE_REMOTE, "+VolName+", "+FileSystem+", "+  Hex(Serial)
    Case 5
      Debug Lfwrk+" = DRIVE_CDROM, "+VolName+", "+FileSystem+", "+  Hex(Serial)
    Case 6
      Debug Lfwrk+" =  DRIVE_RAMDISK,   "+VolName+", "+FileSystem+", "+  Hex(Serial)
  EndSelect
Next
 


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Ср апр 17, 2019 1:13 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Сергейчик
Мужчины, вы посмотрите мой пример GetVolumeInformation, там это всё уже есть и даже больше. Про GetDriveType там тоже уже все константы есть. Вопрос был не в том что возвращает GetVolumeInformation, а в том примере в котором вместо данных "0, 0, 0, 0, 0" и результат состояния 1, что хотел сказать этим автор?
А также я спросил о выделении памяти под данные, не то что примеры с интернета, а то что в них 255, а офсайт говорит что должно 255+1.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Ср апр 17, 2019 6:38 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 853
Благодарил (а): 2 раз.
Поблагодарили: 40 раз.
Пункты репутации: 9
kvitaliy писал(а):
Сергейчик писал(а):
Состояние может
основной-логический,общий доступ -нет,отформатирован-нет,зашифрован-нет,файловая система или размер кластера? :roll:
накидал пример с рунета.

Немного не так. Тут можно почитать
GetVolumeInformation определяет серийный номер, метку диска и его файловую систему.
Код:
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
Define.l Serial, type, i
Define.s Lfwrk, FileSystem, VolName
 
For i=65 To 90
  Lfwrk=Chr(i)+":\"
  type =GetDriveType_(Lfwrk)
  FileSystem = Space(256)
  VolName= Space(256)
  GetVolumeInformation_(@Lfwrk, @VolName, 255, @Serial, 0, 0, @FileSystem, 255)
  Select type
    Case 0
      Debug Lfwrk+" The drive type cannot be determined."
    Case 2
      Debug Lfwrk+" = DRIVE_REMOVABLE, "+VolName+", "+FileSystem+", "+  Hex(Serial)
    Case 3
      Debug Lfwrk+" = DRIVE_FIXED, "+VolName+", "+FileSystem+", "+  Hex(Serial)
    Case 4
      Debug Lfwrk+" = DRIVE_REMOTE, "+VolName+", "+FileSystem+", "+  Hex(Serial)
    Case 5
      Debug Lfwrk+" = DRIVE_CDROM, "+VolName+", "+FileSystem+", "+  Hex(Serial)
    Case 6
      Debug Lfwrk+" =  DRIVE_RAMDISK,   "+VolName+", "+FileSystem+", "+  Hex(Serial)
  EndSelect
Next
 


А собственно что не так?то что у вас в цикле перечисления меток(это не в счёт),+VolName+", "+FileSystem+", "+ Hex(Serial)=это тоже самое,другие 2-ва нуля это видимо не выводим значения в переменныи.
остоётся метка у вас по указателю а у меня нет(так работает же,потому как аргумент строки непихает посимвольно в стек а также берёт указатель).
а вот рассмотрим буфер под вывод строки файловой системы,вы много знаете названий таких файловых систем где название 255 символов?
так вот обычно у винды функции сделаны так что если строковый вывод больше буфера то в буфер пишется обрезанная строка на розмер буфера(и это правильно) а если буфер памяти большой а строка маленькая то тупо ставит свой положенный ноль в конце строки (поэтому размер буфер по нормальному может принимать размер от 0 и до незанятой памяти),и из этого следует проверить строку в буфере на размер после вывода и если мы выделяли изночально буфер большего чем полученная строка то нужно его укоратить и нетратить память на излишки(если он конечно используется до завершении программы)или тупо после использования данной функции вобще удалить всю выделяеммую памя для неё. :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Ср апр 17, 2019 8:27 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Сергейчик писал(а):
а вот рассмотрим буфер под вывод строки файловой системы,вы много знаете названий таких файловых систем где название 255 символов?
так вот обычно у винды функции сделаны так что если строковый вывод больше буфера то в буфер пишется обрезанная строка на розмер буфера(и это правильно) а если буфер памяти большой а строка маленькая то тупо ставит свой положенный ноль в конце строки (поэтому размер буфер по нормальному может принимать размер от 0 и до незанятой памяти),и из этого следует проверить строку в буфере на размер после вывода и если мы выделяли изночально буфер большего чем полученная строка то нужно его укоратить и нетратить память на излишки(если он конечно используется до завершении программы)или тупо после использования данной функции вобще удалить всю выделяеммую памя для неё. :roll:

1. В описании scintilla сказано что если в буфер не умещается строка, то она не обрезается а просто не вставляется. Scintilla знает размер буфера и знает размер вставляемой строки и если она ломается нет смысла это использовать вроде как.
Цитата:
вы много знаете названий таких файловых систем где название 255 символов?
если автор указал спецификацию, то лучше ей следовать, потому что другие люди не будут думать о том что автор какой то проги подумал что длинного имени не бывает, а он сам автор хочет этой строкой в общем то не назвать диск а использовать её для какой нибудь идентификации устройства, не подумав что кому то достаточно 10 символов, поэтому автор и поставил границу для обоих людей, чтобы они не делали конфликтную ситуацию. Причём до спецификации не хватает всего лишь одного символа, это тоже самое что дойти до магазина и передумать покупать.
3. Не ну если винда воткнёт обрезанное имя ложное но фигня обойдёмся, но Null она втыкать не будет? А что если ты выделил память не с помощью Space? Где тогда окажется конец строки? Пол-памяти захватит? Это же не серьёзно в программировании.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Перевод код архива winapi_library
СообщениеДобавлено: Чт апр 18, 2019 8:48 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 853
Благодарил (а): 2 раз.
Поблагодарили: 40 раз.
Пункты репутации: 9
Мы разве вели диалог про скинтиллу?или всё же за эти функции апи что по данной теме :roll:


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB