PureBasic - ôîðóì

Èíôîðìàöèÿ î ïîëüçîâàòåëå

Ïðèâåò, Ãîñòü! Âîéäèòå èëè çàðåãèñòðèðóéòåñü.


Âû çäåñü » PureBasic - ôîðóì » Âîïðîñû ïî PureBasic » óäàëèòü ðîäèòåëüñêóþ äèðåêòîðèþ (âìåñòå ñ ôàéëîì).


óäàëèòü ðîäèòåëüñêóþ äèðåêòîðèþ (âìåñòå ñ ôàéëîì).

Ñîîáùåíèé 1 ñòðàíèöà 30 èç 32

1

×òî-òî ó ìåíÿ íå ïîëó÷àåòñÿ ((
âîîáùåì, åñòü äèðåêòîðèÿ. íàõîäèòñÿ îíà â ñòàíäàðòíîé "C:\Program Files (x86)\PSE" , ãäå "PSE" ýòî óæå ìîÿ äèðåêòîðèÿ
â íåé ëåæèò åäèíñòâåííûé ôàéë ñ èìåíåì, ïóñòü 004.exe
êàê, çàïóñòèâ ýòîò ôàéë äîáèòüñÿ ëèêâèäàöèè è åãî ñàìîãî è åãî ðîäèòåëüñêîé äèðåêòîðèè PSE. Â èäåàëå, áûëî áû çäîðîâî  åùå íà ïðîùàíüå âûïîëãíèòü ÷òî-òî òèïà MessageRequester("","Ïîêà!") ?
Ìàêñèìóì, ÷òî ÿ äîáèëñÿ, ýòî óäàëåíèÿ ñàìîãî ôàéëà

Êîä:
ShellExecute_(0, "RunAS", GetEnvironmentVariable("comspec"), "/c del "+Chr(34)+ProgramFilename()+Chr(34), "", #SW_SHOWNORMAL)

íó, åùå. íå ïðîáîâàë ñîçäàíèÿ áàòíèêà â òåìï äèðåêòîðèè, åãî çàïóñê. ñ ïîïûòêîé óáèòü äèðåêòîðèþ ñ ôàéëîì. Íî è òàì, ÷óâñòâóþ, çàñàäû áóäóò â âèäå çàùèòíèêà âèíäîâ èëè åùå ÷òî-òî ïäîáíîãî.
Åñòü êàêîå-íèáóäü ïðîñòîå ðåøåíèå?

Îòðåäàêòèðîâàíî Goga (11.09.2021 13:12:37)

0

2

À îò àäìèíà óäàëÿåòñÿ?
È ïî÷åìó áû íå DeleteDirectory?

Îòðåäàêòèðîâàíî AZJIO (11.09.2021 13:37:25)

0

3

àäìèíîì òîæå íå óäàëÿåòñÿ. Ïîïðîáîâàë DeleteDirectory íå ìîæåò óäàëèòü íè ñàì ôàéë, íè ñàìó äèðåêòîðèþ.

0

4

âîò òåïåðü ïîíÿë, óäàëèòü ôàéë ðàáîòàþùåé ïðîãðàììû. Íàäî ñäåëàòü ïåðåáîð ïðîöåññîâ çàïðàøèâàÿ ïóòü èñïîëíÿåìîãî ôàéëà, óáèòü ïðîöåññ, à ïîòîì óäàëèòü ôàéë.

Íàäî íà îôôîðóìå ïîãóãëèòü GetModuleFileNameEx

Êîä:
EnableExplicit
     	
; Âîçâðàùàåò ïóòü ê EXE-ôàéëó çàïóùåííîãî ïðîöåññà çíàÿ åãî äåñêðèïòîð îêíà èëè PID
Procedure.s ProcessNameFromHwnd(hWnd)
	Protected PID, psapi_dll, Path$, GetModuleFileNameEx, hProcess
	psapi_dll = OpenLibrary(#PB_Any, "psapi.dll")
	If psapi_dll
    GetModuleFileNameEx = GetFunction(psapi_dll, "GetModuleFileNameExW") ; Òîëüêî èìåíà ïóòåé â Þíèêîäå!
    If GetModuleFileNameEx
    	If GetWindowThreadProcessId_(hWnd, @PID)
        hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, #Null, PID)
        If hProcess
        	Path$ = Space(#MAX_PATH)
        	If Not CallFunctionFast(GetModuleFileNameEx, hProcess, #Null, @Path$, #MAX_PATH)
            Path$ = ""
        	EndIf
        	CloseHandle_(hProcess)
        EndIf
    	EndIf
    EndIf
    CloseLibrary(psapi_dll)
	EndIf
	ProcedureReturn Path$
EndProcedure

Define hWnd, Path$

hWnd=FindWindow_(0, "Çàãîëîâîê îêíà")
If hWnd
	Path$=ProcessNameFromHwnd(hWnd)
	Debug Path$
EndIf

È åù¸ âàðèàíò - óäàëèòü â êîðçèíó. Òî åñòü ïðîöåññ ïîçâîëÿåò ïåðåèìåíîâàòü ôàéë èëè ïåðåìåñòèòü åãî, à ïîñëå ïåðåçàãðóçêè óæå íå ñìîæåò åãî íàéòè, íî â òåêóùåé ñåññèè îí âñ¸ åù¸ áóäåò èñïîëíÿòñÿ.

ß â Linux, ïîýòîìó äàæå ïðè æåëàíèè ïîêà íåò âîçìîæíîñòè áûñòðî ïåðåäåëàòü.

Îòðåäàêòèðîâàíî AZJIO (06.10.2021 15:56:57)

0

5

ïðî óäàëåíèå ïàïêè åñòü â ñïðàâêå, òàì ðàñïèñàíû âàðèàíòû óäàëåíèÿ ïàïêè ñ ôàéëàìè
íå âñ¸ òàê ïðîñòî ñ óäàëåíèåì ïàïêè

0

6

newJS íàïèñàë(à):

ïðî óäàëåíèå ïàïêè åñòü â ñïðàâêå, òàì ðàñïèñàíû âàðèàíòû óäàëåíèÿ ïàïêè ñ ôàéëàìè
íå âñ¸ òàê ïðîñòî ñ óäàëåíèåì ïàïêè

ïðèäóìàë ÿ, êàçàëîñü áû, íàäåæíûé ïóòü. Çàïóñêàþ ïðîãðàììó, çàïèñûâàþ â òåìï äèðåêòîðèè exe-øíèê, çàïóñêàþ åãî, à ðîäèòåëüñêóþ ïðîãðàììó çàêðûâàþ. Ýòîò exe-øíèê óäàëÿåò äèðåêòîðèþ , ïîòîì óäàëÿåò ñàì ñåáÿ  c ïîìîùüþ âñòðîåííîãî cmd.exe
È ýòî âñå ïðåêðàñíî ðàáîòàåò... ñ îòêëþ÷åííûì çàùèòíèêîì âèíäîâ. Åñëè ýòîò çàùèòíèê îñòàâèòü, òî îí óæå íà ýòàïå çàïèñè ôàéë.exe â òåìï äèðåêòîðèþ äóøèò âñå è âñÿ.

Îòðåäàêòèðîâàíî Goga (18.09.2021 05:00:42)

0

7

Goga
À åñëè âåðíóòñÿ ê ïåðâîíà÷àëüíîìó âàðèàíòó (áåç âðåìåííîé ïàïêè), íî ÷åðåç cmd âûïîëíÿòü åù¸ è taskkill ïðîãðàììû?

0

8

Goga
Ìîæåò ÷åðåç ïëàíèðîâùèê ìîæíî êàê-òî âûêðóòèòüñÿ?

0

9

Smitis íàïèñàë(à):

Goga
À åñëè âåðíóòñÿ ê ïåðâîíà÷àëüíîìó âàðèàíòó (áåç âðåìåííîé ïàïêè), íî ÷åðåç cmd âûïîëíÿòü åù¸ è taskkill ïðîãðàììû?

ìîæíî ïîïðîáîâàòü, õîòÿ íå óâåðåí. Ó ìåíÿ åñòü âàðèàíò, êîãäà âñå îòëè÷íî ðàáîòàåò, ðåàëèçîâàííûé ÷åðåç  wscript.exe. Íî âñå îòëè÷íî ðàáîòàåò, òîëüêî åñëè ïðîãðàììà íå ñèäèò íà âèíäîâîì äèñêå Ñ. Âîò íà äèñêå D- ýòî, ïîæàëóéñòà, âñå óäàëÿåòñÿ çàìå÷àòåëüíî. ß íèêîãäà îñîáî íå îáðàùàë âíèìàíèÿ íà ïðèïèñêó ìåëêîìÿãêèõ "ïðîâåðåííûé èçäàòåëü". Ó ìåíÿ-òî ñòàòóñ "íèêòî è çâàòü íèêàê", ìîÿ ïðîãà íà äèñêå Ñ ñïîòûêàåòñÿ ÷åðåç ðàç, ïîêà åå ïîä àäìèíîì íå çàïóñòèøü, à "ïðîâåðåííûõ èçäàòåëåé" âñå ÷èêè ïóêè ðàáîòàåò. Ïðîâåðèë âñå ïðàâà íà äîñòóï îäèíàêîâû. Íàâåðíîå, â ýòîì äåëî, íàäî èçó÷èòü ïîäðîáíåå ýòîò ìîìåíò.

0

10

Goga
Äèñê C: ñèñòåìíûé, à â ïàïêàõ óæå íå òðåáóåòñÿ àäìèíà. È çà÷åì íà äèñêå Ñ: åñëè ìîæíî â %temp%?

0

11

âîîáùåì, íàøåë ÿ. íàêîíåö-òî,  ó ñåáÿ êîãäà-òî êåì-òî ïîäàðåííûé ìíå êîä óäàëåíèÿ ðîäèòåëüñòêîé ïàïêè. Âñå îòëè÷íî, íî åñòü îäíà äîñàäà, íå ñïðàâëÿåòñÿ ñêðèïò ñ ïàïêîé ñîäåðæàùåé ïðîáåëû â íàçâàíèè. Ò.å. äàæå åñëè íà ïóòè ê ïàïêå. ïîäëåæàùåé óäàëåíèþ ïîïàäàåòñÿ ïàïêà ñ ïðîáåëîì (íàïðèìåð, âñåìè íàìè ëþáèìàÿ c:\Program Files (x86)) ñêðèïò íå ñðàáàòûâàåò. Ò.ê. ÿ íå ñïåö íè ðàçó â Vbscript, ìîæåò, êòî ïîìîæåò ïîäïðàâèòü êîä, ÷òîáû âñå çàðàáîòàëî:

Êîä:
; ÍÅ ÇÀÏÓÑÊÀÉ ÏÐÎÃÓ â ñâîåé ÄÈÐÅÊÒÎÐÈÈ!!!!!!!!! ÓÄÀËÈØÜ ÂÑÅ ÄÀÍÍÛÅ!!!!!!!!!!!!!!!!!!
NameProga$=ProgramFilename() 
  DirToDelete.s = GetPathPart(NameProga$)  
  DirToDelete = LCase(Left(DirToDelete, Len(DirToDelete)-1))  
  TempDir.s = GetTemporaryDirectory() 
  ScriptName.s = TempDir + "3.vbs"  
  
  If CreateFile(0, ScriptName)
       WriteData(0,?vbs_begin, ?vbs_end-?vbs_begin)
  CloseFile(0) 
       parametr$="//nologo"+" "+ScriptName+" "+DirToDelete
       Result =MessageRequester("","Òû òî÷íî çàïóñêàåøü ýòî â òåñòîâîé ïàïêå?", #PB_MessageRequester_YesNo):If Result = #PB_MessageRequester_No:End:EndIf ;ñòðàõîâêà 
       ShellExecute_(0, "RunAS", "wscript.exe", parametr$, TempDir, #SW_SHOWNORMAL) 
  EndIf
  
     
  VBS_BEGIN:
     IncludeBinary "3.vbs"
  VBS_END:

ýòîò ñêðèïò ïîëîæèòü â òóæå äèðåêòîðèþ, ÷òî è êîìïèëèðóåìûé ôàéë, îáîçâàòü 3.vbs

Êîä:
If Wscript.Arguments.Count=1 Then
  Dim x
  Wscript.Sleep 1000
  Path = Wscript.Arguments(0)
  Set objShell = CreateObject("Wscript.Shell")
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  If objFSO.FolderExists(Path) Then
    'CurrentPath = objFSO.GetAbsolutePathName(".")
    'msgbox CurrentPath
    On Error Resume Next
    For x = 1 To 10
      objFSO.DeleteFolder(Path)
      If Err.Number = 0 Then Exit For
      Wscript.Sleep 1000
    Next
  End If
  Call objFSO.DeleteFile(WScript.ScriptFullName, True)
End If

0

12

Êîä:
DirToDelete = #DOUBLEQUOTE$ + LCase(Left(DirToDelete, Len(DirToDelete)-1)) + #DOUBLEQUOTE$

Îòðåäàêòèðîâàíî Lin (06.10.2021 09:49:27)

0

13

Óäàëåíèå ïðè ïîìîùè áàòíèêà, êîòîðûé ñîçäà¸òñÿ äèíàìè÷åñêè:

Êîä:
; Íå çàïóñêàòü ôàéë íà èñïîëíåíèå! Áóäåò óäàëåíî âñ¸, ÷òî åñòü â ýòîé ïàïêå âìåñòå ñ ïàïêîé!
Select MessageRequester("Âíèìàíèå! ", "Óäàëèòü ïðîãðàììó è å¸ êàòàëîã?", #MB_YESNO|#MB_ICONWARNING)
  Case #IDYES
    PathPart$ = GetPathPart(ProgramFilename())
    If CreateFile(0, "del.bat")
       WriteStringN(0,"@echo off") 
       WriteStringN(0,"CD\.")
       WriteStringN(0,"timeout /t 2 /nobreak >nul 2>nul")
       WriteStringN(0,"rd /s /q " + Chr(34) + PathPart$  + Chr(34) )
      CloseFile(0)
    RunProgram("del.bat")
    End
    EndIf
  Case #IDNO
    MessageRequester("Âíèìàíèå! ", "Îòìåíåíî ïîëüçîâàòåëåì")
EndSelect

0

14

Âîò òàê ó ìåíÿ ÷èñòêà ïàïêè temp.

Êîä:
cd /d "%temp%" && rd /s /q "."

íî åù¸ ÷òî âàæíî è ïî÷åìó ÿ íå ëþáëþ áàòíèêè, åñëè %temp% íå îïðåäåëåíà, èëè â äðóãîì ñêðèïòå íàïðèìåð ïàïêà íå ñóùåñòâóåò, òî ñêðèïò ïðèìåò çà òåêóùèé òîò, â êîòîðîì íàõîäèòñÿ è ìîæåò òóïî î÷èñòèòü âàø æ¸ñòêèé äèñê. Òàê ÷òî ñ òàêèìè âåùàìè íåîïðåäåë¸ííûìè íàäî âñ¸ ïðîäóìàòü.

0

15

ÂèíèÏóð íàïèñàë(à):

Chr(34)

÷¸ò âñ¸ âðåìÿ çàáûâàþ ïðî #DOUBLEQUOTE$

Îòðåäàêòèðîâàíî Lin (06.10.2021 09:52:57)

0

16

Lin íàïèñàë(à):

÷¸ò âñ¸ âðåìÿ çàáûâàþ ïðî #DOUBLEQUOTE$

Áóêîâîê ìíîãî. Òàê êîðî÷å è íàãëÿäíåå.

Êîä:
~"\""

0

17

ϸòð
òîæå íà òèëüäó ïåðåø¸ë, íî âîò âûêëàäûâàë êîä äëÿ ÷èñòêè êîììåíòàðèåâ, êîòîðûé ïðîâåðÿåò ïàðû êàâû÷åê, ó íåãî ïðîáëåìû ñ òàêèìè ñòðîêàìè, íàäî äîáàâëÿòü ìåññàãó î íàëè÷èè òàêèõ ñòðîê è äîïîëíèòåëüíóþ ïðîâåðêó îòñóòñòâèÿ èõ îáðåçêè. Ñ Chr(34) òàêîé ïðîáëåìû íåò.

Îòðåäàêòèðîâàíî AZJIO (06.10.2021 12:28:29)

0

18

Lin íàïèñàë(à):

#DOUBLEQUOTE$

Ó ìåíÿ íà àâòîìàòå Chr(34) çà 30 ëåò ñ Áåéñèêîì. Òàì åù¸ êàê òî "/" è "\" òîæå ñâîþ êîíñòàíòó èìååò. Íî ÿ òàêèå ãëóïîñòè äàæå çàïîìèíàòü íå õî÷ó.

0

19

ÂèíèÏóð

"/" è "\"

#PS$ óæå çàïîìíèë, â ðåàëüíîñòè ðåäêî èñïîëüçóåòñÿ, òàê êàê ïðÿìûå ïóòè - ðåäêàÿ íåîáõîäèìîñòü. Ïðè êîìïèëÿöèè íåñêîëüêèìè èêîíêàìè êëàäó îòäåëüíî â ïàïêó images è óæå â Data íàäî images + #PS$ + pic1.png, è âòîðîé ñëó÷àé, êîãäà ïóòü â ïàïêå êîíôèãîâ, åñëè òàì ðàçâåòâë¸ííàÿ ñèñòåìà, à íå ïðîñòî ÿâíûé ïóòü. Ýòî ïðîùå ÷åì èñïîëüçîâàòü CompilerSelect #PB_Compiler_OS

Îáíîâèë âûøå êîä - ïîëó÷åíèå ïóòè EXE-ôàéëà îò äåñêðèïòîðà îêíà\ïðîöåññà.

Îòðåäàêòèðîâàíî AZJIO (06.10.2021 16:00:21)

0

20

AZJIO íàïèñàë(à):

Ýòî ïðîùå ÷åì èñïîëüçîâàòü CompilerSelect #PB_Compiler_OS

À ñìûñë, åñëè Âèíäå ïîôèãó â êàêóþ ñòîðîíó ñëåø ñìîòðèò, îíà ñúåñò è òàê è òàê, à äëÿ îñòàëüíûõ ìîæíî ñìåëî ïèñàòü "images/pic1.png", ýòî ãîðàçäî êîðî÷å, ÷åì images + #PS$ + pic1.png

0

21

AZJIO íàïèñàë(à):

GetModuleFileNameEx = GetFunction(psapi_dll, "GetModuleFileNameExW") ; Òîëüêî èìåíà ïóòåé â Þíèêîäå

åñëè íóæåí òîëüêî ñâîé ïóòü:

Êîä:
EXE_Location$ = Space(#MAX_PATH)
GetModuleFileName_(#Null, EXE_Location$, #MAX_PATH)
Debug EXE_Location$
ϸòð íàïèñàë(à):

Áóêîâîê ìíîãî.

òóò ñîãëàñåí, ïîýòîìó è çàáûâàþ :) íî êîíñòàíòîé óäîáíî ÷òî ïîäñâå÷èâàåòñÿ... ó Ôðåäà â êîäå IDE ÿ òàêîé êîñòûëü íàõîäèë: #Q$ = Chr(34)

Îòðåäàêòèðîâàíî Lin (06.10.2021 17:56:39)

0

22

Lin íàïèñàë(à):

åñëè íóæåí òîëüêî ñâîé ïóòü:

ProgramFilename()

Êñòàòè êîä ÿ âçÿë òóò, ñíà÷àëà èç AutoIt3 íà ïîëîâèíó ïåðåäåëàë, ïîòîì ïîäóìàë, à ÷òî ÿ ìó÷àþñü, ÿ æå íàõîäèë ãîòîâóþ, òîëüêî ïðîâåðþ ÷òî îíà ñîîòâåòñòâóåò, à îíà äàæå ëó÷øå îêàçàëàñü, â ïëàíå AutoIt3-âàðèàíòó íàäî PID óêàçûâàòü, òî åñòü îòäåëüíî ôóíêöèÿ PID  èç hWnd, à â PureBasic ñðàçó èç hWnd, óðà â êîïèëêó åù¸ îäíà, ó ìåíÿ íåñêîëüêî ôóíêöèé êîòîðûì ÿ èùó àíàëîãè ïî ìåðå èçó÷åíèÿ, ÷òîáû ïåðåïèñàòü âñå ñâîè ïðîãðàììû, à äàííîé ôóíêöèåé ÿ ïðè ðàáîòå ñî ñòîðîííèì îêíîì ïðîâåðÿþ ÷òî îíî ïðèíàäëåæèò íàïðèìåð ýêñïëîðåðó, êîãäà çàãîëîâîê ìîæåò áûòü ëþáîé, è êëàññ ìîæåò ñîâïàñòü, à ïóòü íèêîãäà.

0

23

Lin íàïèñàë(à):

Êîä:

DirToDelete = #DOUBLEQUOTE$ + LCase(Left(DirToDelete, Len(DirToDelete)-1)) + #DOUBLEQUOTE$

ñïàñèáî

ÂèíèÏóð íàïèñàë(à):

Óäàëåíèå ïðè ïîìîùè áàòíèêà, êîòîðûé ñîçäà¸òñÿ äèíàìè÷åñêè:
Êîä:

; Íå çàïóñêàòü ôàéë íà èñïîëíåíèå! Áóäåò óäàëåíî âñ¸, ÷òî åñòü â ýòîé ïàïêå âìåñòå ñ ïàïêîé!
Select MessageRequester("Âíèìàíèå! ", "Óäàëèòü ïðîãðàììó è å¸ êàòàëîã?", #MB_YESNO|#MB_ICONWARNING)
  Case #IDYES
    PathPart$ = GetPathPart(ProgramFilename())
    If CreateFile(0, "del.bat")
       WriteStringN(0,"@echo off")
       WriteStringN(0,"CD\.")
       WriteStringN(0,"timeout /t 2 /nobreak >nul 2>nul")
       WriteStringN(0,"rd /s /q " + Chr(34) + PathPart$  + Chr(34) )
      CloseFile(0)
    RunProgram("del.bat")
    End
    EndIf
  Case #IDNO
    MessageRequester("Âíèìàíèå! ", "Îòìåíåíî ïîëüçîâàòåëåì")
EndSelect

ñïàñèáî è âàì. ß ïðîáîâàë òîæå ÷åðåç áàòíèê, íî ñ òàêîé æå îøèáêîé ñòîëêíóëñÿ, ÷òî íå ìîã óäàëèòü ïàïêè ñ ïðîáåëàìè. Äîñàäíî, ÷òî ìíîãî âðåìåíè ïîòðàòèë, à ðåøåíèå íà ïîâåðõíîñòè ëåæàëî )

0

24

Èëè ÿ ÷åãî-òî íå ïîíèìàþ èëè îäíî èç äâóõ, ñîçäà¸òñÿ áàòíèê â êîäèðîâêå UTF è Âèíäà (ÕÐ-64) íå âèäèò ïóòü äëÿ óäàëåíèÿ, ïåðåñîõðàíÿþ áàòíèê â 866 è âñ¸ íîðìàëüíî îòðàáàòûâàåò. Êàê Ïóðèê çàñòàâèòü ñðàçó â 866 ñîõðàíèòü?

0

25

Rerer777 íàïèñàë(à):

Êàê Ïóðèê çàñòàâèòü ñðàçó â 866 ñîõðàíèòü?

https://www.purebasic.com/documentation … efile.html
https://www.purebasic.com/documentation … ormat.html

0

26

Rerer777 íàïèñàë(à):

Èëè ÿ ÷åãî-òî íå ïîíèìàþ èëè îäíî èç äâóõ, ñîçäà¸òñÿ áàòíèê â êîäèðîâêå UTF è Âèíäà (ÕÐ-64) íå âèäèò ïóòü äëÿ óäàëåíèÿ

Áàòíèê äîëæåí áûòü áåç BOM.
 íà÷àëå áàòíèêà äîëæíà ñòîÿòü êîìàíäà chcp 65001.

0

27

Ïîïðîáîâàë êîíâåðòèðîâàòü â 866 è îáðàòíî

Êîä:
EnableExplicit

Procedure StrToArrLetter(Array Arr.s{1}(1), String$)
	Protected LenStr, i
	LenStr = Len(String$)
	If LenStr
    ReDim Arr(LenStr - 1)
    PokeS(Arr(), String$, -1, #PB_String_NoZero)
	EndIf
	ProcedureReturn
EndProcedure

Procedure.s Encode1251To866(sString$)
	Protected sResult$ = "", i, code
	Protected cp1251$, cp866$, Pos
	Protected Dim Arr866.s{1}(0)
	Protected Dim ArrSource.s{1}(0)
	
	cp1251$ = "àáâãä叿çèéêëìíîïðñòóôõö÷øùúûüýþÿÀÁÂÃÄŨÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß"
	cp866$ = " ¡¢£¤¥ñ¦§¨©ª«¬­®¯àáâãäåæçèéêëìíîï€�‚ƒ„…ð†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ"
	StrToArrLetter(Arr866(), cp866$)
	StrToArrLetter(ArrSource(), sString$)
	
	For i = 0 To ArraySize(ArrSource())
    code = Asc(ArrSource(i))
    If code >= 1025 And code <= 1105
    	Pos = FindString(cp1251$, ArrSource(i))
    	If Pos
        ArrSource(i) = Arr866(Pos - 1) 
    	EndIf
    EndIf
	Next
	
	ProcedureReturn PeekS(ArrSource())
EndProcedure

Procedure.s Encode866To1251(sString$)
	Protected sResult$ = "", i, code
	Protected cp1251$, cp866$, Pos
	Protected Dim Arr866.s{1}(0)
	Protected Dim ArrSource.s{1}(0)
	
	cp866$ = "àáâãä叿çèéêëìíîïðñòóôõö÷øùúûüýþÿÀÁÂÃÄŨÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß"
	cp1251$ = " ¡¢£¤¥ñ¦§¨©ª«¬­®¯àáâãäåæçèéêëìíîï€�‚ƒ„…ð†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ"
	StrToArrLetter(Arr866(), cp866$)
	StrToArrLetter(ArrSource(), sString$)
	
	For i = 0 To ArraySize(ArrSource())
    code = Asc(ArrSource(i))
    If code >= 152 And code <= 8482
    	Pos = FindString(cp1251$, ArrSource(i))
    	If Pos
        ArrSource(i) = Arr866(Pos - 1) 
    	EndIf
    EndIf
	Next
	
	ProcedureReturn PeekS(ArrSource())
EndProcedure

Define Str1.s, Str2.s

Str1 = Encode1251To866("Ïðèâåò")
Str2 = Encode1251To866("àáâ-þÿ--ÀÁÂ-Þß")
Debug Str1
Debug Str2
Str1 = Encode866To1251(Str1)
Str2 = Encode866To1251(Str2)
Debug Str1
Debug Str2

ïåðåä ýòèì ïðîáîâàë ïåðåäåëàòü ôóíêöèþ èç AutoIt3, íî îíà ðàáîòàåò òîëüêî ñ ANSI, òàêóþ ñòðîêó ÿ ïðîñòî íå ìîãó ïîëó÷èòü, òîëüêî áèíàðíîå â ïàìÿòè, íî íå êàê ïåðåìåííóþ. Òî åñòü äàæå åñëè ðàáîòàòü ñ öèôðàìè, òî Asc() âîçâðàùàåò òîæå þíèêîäíûé âàðèàíò. Õîòÿ íàâåðíî ìîæíî ïîïðîáîâàòü ðàáîòàòü ñ áàéòàìè.

Êîä:
Procedure.s _Encoding_1251To866(sString$)
	Protected sResult$ = "", iCode, i
	Protected Dim Arr866.s{1}(0)
	
	StrToArrLetter(Arr866(), sString$)

	For i = 0 To ArraySize(Arr866())
    iCode = Asc(Arr866(i))

    Select iCode
    	Case 192 To 239
        Arr866(i) = Chr(iCode - 64)
    	Case 240 To 255
        Arr866(i) = Chr(iCode - 16)
    	Case 168
        Arr866(i) = Chr(240)
    	Case 184
        Arr866(i) = Chr(241)
    	Case 185
        Arr866(i) = Chr(252)
    EndSelect

    sResult$ + Arr866(i)
	Next

	ProcedureReturn sResult$
EndProcedure

Óëó÷øåíèå: òàê êàê áóêâû ïî ïîðÿäêó, òî âìåñòî ïîèñêà ïîçèöèè èñïîëüçóåòñÿ âû÷èòàíèå ÷èñëà.

Êîä:
Procedure.s Encode1251To866(sString$)
	Protected sResult$ = "", i, code
	Protected cp1251$, cp866$
	Protected Dim Arr866.s{1}(0)
	Protected Dim ArrSource.s{1}(0)
	
	cp1251$ = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
	cp866$ = "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯àáâãäåæçèéêëìíîï"
	StrToArrLetter(Arr866(), cp866$)
	StrToArrLetter(ArrSource(), sString$)
	
	For i = 0 To ArraySize(ArrSource())
    code = Asc(ArrSource(i))
    Select code
    	Case 1040 To 1103
        ArrSource(i) = Arr866(code - 1040) 
    	Case 1025
        ArrSource(i) = "ð"
    	Case 1105
        ArrSource(i) = "ñ"
    EndSelect
	Next
	
	ProcedureReturn PeekS(ArrSource())
EndProcedure

Íàø¸ë òàêóþ ó ñåáÿ æå â ChkDskGui

Êîä:
Import "user32.lib"
	OemToCharBuffA(*Buff,*Buff1,SizeBuff)
	CharToOemBuffA(*Buff,*Buff1,SizeBuff)
EndImport

Procedure.s ToOem(String$)
	Protected Ret$="", *Buff, SizeBuff=Len(String$)
	If SizeBuff>0
    *Buff=AllocateMemory(SizeBuff+1)
    PokeS(*Buff, String$, SizeBuff, #PB_Ascii)
    CharToOemBuffA(*Buff, *Buff, SizeBuff)
    Ret$=PeekS(*Buff, SizeBuff, #PB_Ascii)
    FreeMemory(*Buff)
	EndIf
	ProcedureReturn Ret$
EndProcedure

Îòðåäàêòèðîâàíî AZJIO (10.10.2021 08:07:58)

0

28

Ïîë äåëà ãîòîâî. Áàòíèê ñîçäà¸òñÿ è ðàáîòàåò, âîò òîëüêî ðàáîòàåò îí åñëè çàïóñòèòü åãî ðó÷êàìè, à çàïóùåííûé èç ïðîãðàììû îí âûêèäûâàåò îøèáêó ÷òî chcp íå ÿâëÿåòñÿ êîìàíäîé èëè ôàéëîì. Êàê áóäòî èíòåðïðåòàòîð ðàçíûé. Êàê áóäó ïåðåçàãðóæàòü êîìï ïîïðîáóþ èç 32 áèòíîé ñèñòåìû çàïóñòèòü âñ¸ ýòî áåçîáðàçèå, ìîæåò ñðàáîòàåò, òîãäà è áóäó äàëüøå êîïàòü.

âîïðîñ íå ïî òåìå

È ðàç óæ çäåñü, íàòêíóëñÿ íà òàêóþ ôèøêó. Ñ èíòåðíåòà ñêà÷àë ñêðèïòû è â óãëó ãäå ñòðåëêà ó ÿðëûêîâ ÷òî-òî â âèäå ÷àñîâ áåëûõ íà ÷¸ðíîì êâàäðàòå, ìîæåò êòî ïîäñêàæåò ÷òî ýòî çà îáîçíà÷åíèå?

0

29

Rerer777 íàïèñàë(à):

à çàïóùåííûé èç ïðîãðàììû îí âûêèäûâàåò îøèáêó ÷òî chcp íå ÿâëÿåòñÿ êîìàíäîé èëè ôàéëîì

chcp âíåøíÿÿ êîìàíäà. Ìîæåò ñ ïåðåìåííûìè ñðåäû PATH/PATHEXT ïðîáëåìà. Èëè ñ ðàçðÿäíîñòüþ. Èëè åù¸ ÷òî.
Âû áàòíèê èç ïðîãðàììû êàê çàïóñêàåòå? ×åðåç cmd èëè íàïðÿìóþ?

Îòðåäàêòèðîâàíî Smitis (11.10.2021 22:33:12)

0

30

Rerer777
Äëÿ ýêñïåðèìåíòà ìîæíî åù¸ â CreateFile óêàçàòü #PB_Ascii è CHCP 1251

Îòëè÷èå çàïóñêà ðó÷êàìè è èç ïðîãðàììû ýòî "òåêóùàÿ äèðåêòîðèÿ", òî åñòü ôàéë áóäåò âîñïðèíèìàòü êàòàëîã çàïóñêàþùåé ïðîãðàììû êàê òåêóùàÿ äèðåêòîðèÿ. Åñëè â bat-ôàéëå åñòü åù¸ ÷òî-òî ñâÿçàííîå ñ òåêóùåé äèðåêòîðèåé, òî ìîæåò âûçâàòü ïðîáëåìó. Ìîæíî âñòàâèòü ïðèìåð èç ExamineEnvironmentVariables(), ÷òîáû ïîñìîòðåòü ñîäåðæèìîå îêðóæåíèÿ.

Îòðåäàêòèðîâàíî AZJIO (11.10.2021 18:31:17)

0


Âû çäåñü » PureBasic - ôîðóì » Âîïðîñû ïî PureBasic » óäàëèòü ðîäèòåëüñêóþ äèðåêòîðèþ (âìåñòå ñ ôàéëîì).