PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

MaGoth
12-02-2015, 19:27
Это обычный текстовый файл. »
Понятно, читай тогда справку в части:
[Примеры кодов] → [Работа со строками] » Замена строки в текстовом файле.
либо:
» Замена фразы в текстовом файле
Здесь можно подсмотреть пример по поиску строки по её номеру...

Kopejkin
12-02-2015, 23:42
..пример по поиску строки по её номеру. »
Что-то не нашел именно этого примера. Номер текущей строки, насколько я понял, используется для последовательного перебора строк в диапазоне всего их количества.
Если я правильно читаю, то в примере "Замена фразы в текстовом файле" можно заменить все вхождения или только первое. А мне нужно заменить, например, только 5-е вхождение (текст, число), находящееся в 28-й строке.
А может я ничего и не понял...

MaGoth
13-02-2015, 00:59
Что-то не нашел именно этого примера. Номер текущей строки, насколько я понял, используется для последовательного перебора строк в диапазоне всего их количества. »
Можно такой еще вариант попробовать, из описание справки оригинала:
E.2 Text Functions Header
E.2.1 Introduction
Include header:

!include "TextFunc.nsh"
Call functions:

Section Install
${LineRead} "C:\a.log" "-1" $R0
; $R0="Last line$\r$\n"
SectionEnd
Section un.Install
${TrimNewLines} "Last line$\r$\n" $R0
; $R0="Last line"
SectionEnd
E.2.2 LineFind
Find specified lines in text file, and edit or view these lines in callback function.
Syntax:

${LineFind} "[File1]" "[File2|/NUL]" "[LineNumbers]" "Function"
"[File1]" ; Input text file
;
"[File2|/NUL]" ; [File2]
; Output text file
; If empty then File2=File1
; [/NUL]
; No output text file (only read File1)
;
"[LineNumbers]" ; [No|-No|No:No|{No}|{-No}|{No:No}]
; 1:-1 all lines to change (default)
; 2 second line from start
; -3 third line from end
; 5:9 range of lines from 5 to 9
; {2} only second line from start to output
; {-3} only third line from end to output
; {5:9} only range of lines from 5 to 9 to output
;
"Function" ; Callback function for specified lines

Function "Function"
; $R9 current line
; $R8 current line number
; $R7 current line negative number
; $R6 current range of lines
; $R5 handle of a file opened to read
; $R4 handle of a file opened to write ($R4="" if "/NUL")

; you can use any string functions
; $R0-$R3 are not used (save data in them).
; ...

Push $var ; If $var="StopLineFind" Then exit from function
; If $var="SkipWrite" Then skip current line (ignored if "/NUL")
FunctionEnd
Note:
- Error flag if input file doesn't exist
- Error flag if output file path doesn't exist
- Ranges must be specified on growth (2 4:5 9:-8 -5:-4 -2:-1)
- Output file will not be updated if no changes made.

Example1 (delete first two symbols):

Section
${LineFind} "C:\a.log" "C:\a-edited.log" "3:-1" "Example1"
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example1
${TrimNewLines} '$R9' $R9
StrCpy $R9 $R9 '' 2
StrCpy $R9 '$R9$\r$\n'
;start from 3 line and delete first two symbols

Push $0
FunctionEnd
Example2 (show changed lines):

Section
${LineFind} "C:\a.log" "a.log" "{5:12 15 -6:-5 -1}" "Example2"
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example2
${TrimNewLines} '$R9' $R9
StrCpy $R9 "$R9 ~Changed line ($R8)~$\r$\n"

Push $0
FunctionEnd
Example3 (delete lines):

Section
${LineFind} "C:\a.log" "\logs\a.log" "2:3 10:-5 -3:-2" "Example3"
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example3
StrCpy $0 SkipWrite

Push $0
FunctionEnd
Example4 (insert lines):

Section
${LineFind} "C:\a.log" "" "10" "Example4
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example4
FileWrite $R4 "---First Line---$\r$\n"
FileWrite $R4 "---Second Line ...---$\r$\n"

Push $0
FunctionEnd
Example5 (replace in file with count of changes - "WordFunc.nsh" required):

!include "WordFunc.nsh"

Section
StrCpy $R0 0
${LineFind} "C:\a.log" "C:\logs\a.log" "1:-1" "Example5"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2
MessageBox MB_OK "Changed lines=$R0"
SectionEnd

Function Example5
StrCpy $1 $R9

${WordReplace} '$R9' ' ' '_' '+*' $R9

StrCmp $1 $R9 +2
IntOp $R0 $R0 + 1
;$R0 count of changed lines

Push $0
FunctionEnd
Example6 (line string to cut or delete):

Section
${LineFind} "\a.log" "C:\logs\a.log" "" "Example6"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2
MessageBox MB_OK "Processed lines=$R1:$R2"
SectionEnd

Function Example6
;(Cut lines from a line to another line (also including that line))
StrCmp $R0 finish stop
StrCmp $R0 start finish
StrCmp $R9 'Start Line$\r$\n' 0 skip
StrCpy $R0 start
StrCpy $R1 $R8
goto code
finish:
StrCmp $R9 'Finish Line$\r$\n' 0 code
StrCpy $R0 finish
StrCpy $R2 $R8
goto code
skip:
StrCpy $0 SkipWrite
goto output
stop:
StrCpy $0 StopLineFind
goto output

;;(Delete lines from a line to another line (also including that line))
; StrCmp $R0 finish code
; StrCmp $R0 start finish
; StrCmp $R9 'Start Line$\r$\n' 0 code
; StrCpy $R0 start
; StrCpy $R1 $R8
; goto skip
; finish:
; StrCmp $R9 'Finish Line$\r$\n' 0 skip
; StrCpy $R0 finish
; StrCpy $R2 $R8
; skip:
; StrCpy $0 SkipWrite
; goto output

code:
;...

output:
Push $0
FunctionEnd
Example7 (read lines):

Section
${LineFind} "C:\a.log" "/NUL" "1:-1" "Example7"
IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example7
MessageBox MB_OKCANCEL '$$R9 "Line"=[$R9]$\n$$R8 "#" =[$R8]' IDOK +2
StrCpy $0 StopLineFind

Push $0
FunctionEnd
E.2.3 LineRead
Get line in file specified with number.
Syntax:

${LineRead} "[File]" "[LineNumber]" $var
"[File]" ; Input text file
;
"[LineNumber]" ; [No|-No]
; 3 line number from start
; -5 line number from end
;
$var ; Result: Line
Note:
- Error flag if input file doesn't exist
- Error flag if line number not found

Example:

Section
${LineRead} "C:\a.log" "-1" $R0
; $R0="Last line$\r$\n"
SectionEnd
E.2.4 FileReadFromEnd
Read text file from end line by line.
Syntax:

${FileReadFromEnd} "[File]" "Function"
"[File]" ; Input text file
"Function" ; Callback function

Function "Function"
; $9 current line
; $8 current line number
; $7 current line negative number

; $R0-$R9 are not used (save data in them).
; ...

Push $var ; If $var="StopFileReadFromEnd" Then exit from function
FunctionEnd
Note:
- Error flag if input file doesn't exist

Example1:

Section
${FileReadFromEnd} "C:\a.log" "Example1"

IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example1
MessageBox MB_OKCANCEL '"Line"=[$9]$\n "#"=[$8]$\n "-#"=[$7]' IDOK +2
StrCpy $0 StopFileReadFromEnd

Push $0
FunctionEnd
Example2 (Reverse text file):

Section
GetTempFileName $R0
FileOpen $R1 $R0 w
${FileReadFromEnd} "C:\a.log" "Example2"
FileClose $R1

IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2
Exec '"notepad.exe" "$R0"'
SectionEnd

Function Example2
StrCmp $7 -1 0 +5
StrCpy $1 $9 1 -1
StrCmp $1 '$\n' +3
StrCmp $1 '$\r' +2
StrCpy $9 '$9$\r$\n'

FileWrite $R1 "$9"

Push $0
FunctionEnd
E.2.5 LineSum
Get sum of lines in text file.
Syntax:

${LineSum} "[File]" $var
"[File]" ; Input file
$var ; Result: Sum of lines
Note:
- Error flag if input file doesn't exist

Example:

Section
${LineSum} "C:\a.log" $R0
; $R0="54"
SectionEnd
E.2.6 FileJoin
Join two files in one (File1 + File2 = File3).
Syntax:

${FileJoin} "[File1]" "[File2]" "[File3]"
"[File1]" ; Input File1
"[File2]" ; Input File2
"[File3]" ; Output File3
; If [File3]="" Then add [File2] to [File1]
Note:
- Error flag if input files don't exist
- Error flag if output file path doesn't exist

Example1 (Join: a.log + b.log = Z.log):

Section
${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\Z.log"
SectionEnd
Example2 (Add: a.log + b.log = a.log):

Section
${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\a.log"
SectionEnd
E.2.7 TextCompare
Compare two text files.
Syntax:

${TextCompare} "[File1]" "[File2]" "[Option]" "Function"
"[File1]" ; File1 Compare these lines
"[File2]" ; File2 Compare with these lines
"[Options]" ; (line-by-line):
; FastDiff Compare line N (File1) with line N (File2)
; Call function if Different lines found
; FastEqual Compare line N (File1) with line N (File2)
; Call function if Equal lines found
; (line number independent):
; SlowDiff Compare line N (File1) with all lines (File2)
; Call function if line N (File1) Different
; SlowEqual Compare line N (File1) with all lines (File2)
; Call function if line N (File1) Equal
"Function" ; Callback function

Function "Function"
; $9 "Line File1"
; $8 "Line number"
; $7 "Line File2" (empty if SlowDiff)
; $6 "Line number" (empty if SlowDiff)

; $R0-$R9 are not used (save data in them).
; ...

Push $var ; If $var="StopTextCompare" Then exit from function
FunctionEnd
Note:
- Error flag if File1 or File2 doesn't exist
- Error flag if syntax error

Example (Different or Equal):

Section
StrCpy $R0 ''
${TextCompare} "C:\1.txt" "C:\2.txt" "FastDiff" "Example1"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +4

StrCmp $R0 NotEqual 0 +2
MessageBox MB_OK "Files differ" IDOK +2
MessageBox MB_OK "Files identical"
SectionEnd

Function Example1
StrCpy $R0 NotEqual
StrCpy $0 StopTextCompare

Push $0
FunctionEnd
Example (Compare line-by-line - Different):

Section
StrCpy $R0 'Text1.txt'
StrCpy $R1 'Text2.txt'

GetTempFileName $R2
FileOpen $R3 $R2 w
FileWrite $R3 "$R0 | $R1$\r$\n"
${TextCompare} "$R0" "$R1" "FastDiff" "Example2"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2

Exec "notepad.exe $R2"
FunctionEnd

Function Example2
FileWrite $R3 '$8=$9'
FileWrite $R3 '$6=$7$\r$\n'

Push $0
FunctionEnd
Example (Compare line-by-line - Equal):

Section
StrCpy $R0 'Text1.txt'
StrCpy $R1 'Text2.txt'

GetTempFileName $R2
FileOpen $R3 $R2 w
FileWrite $R3 "$R0 | $R1$\r$\n"
${TextCompare} "$R0" "$R1" "FastEqual" "Example3"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2

Exec "notepad.exe $R2"
FunctionEnd

Function Example3
FileWrite $R3 '$8|$6=$9'

Push $0
FunctionEnd
Example (Compare all lines - Different):

Section
StrCpy $R0 'Text1.txt'
StrCpy $R1 'Text2.txt'

GetTempFileName $R2
FileOpen $R3 $R2 w
FileWrite $R3 "$R0 | $R1$\r$\n"
${TextCompare} "$R0" "$R1" "SlowDiff" "Example4"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK end

FileWrite $R3 "$\r$\n$R1 | $R0$\r$\n"
${TextCompare} "$R1" "$R0" "SlowDiff" "Example4"
FileClose $R3
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK end

Exec "notepad.exe $R2"

end:
FunctionEnd

Function Example4
FileWrite $R3 '$8=$9'

Push $0
FunctionEnd
Example (Compare all lines - Equal):

Section
StrCpy $R0 'Text1.txt'
StrCpy $R1 'Text2.txt'

GetTempFileName $R2
FileOpen $R3 $R2 w
FileWrite $R3 "$R0 | $R1$\r$\n"
${TextCompare} "$R0" "$R1" "SlowEqual" "Example5"
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2

Exec "notepad.exe $R2"
FunctionEnd

Function Example5
FileWrite $R3 '$8|$6=$9'

Push $0
FunctionEnd
Example (Show variables):

Section
${TextCompare} "C:\1.txt" "C:\2.txt" "FastDiff" "Example6"

IfErrors 0 +2
MessageBox MB_OK "Error"
SectionEnd

Function Example6
MessageBox MB_OKCANCEL '$$9 "Line File1" =[$9]$\n$$8 "Line #" =[$8]$\n$$7 "Line File2" =[$7]$\n$$6 "Line #" =[$6]' IDOK +2
StrCpy $0 StopTextCompare

Push $0
FunctionEnd
E.2.8 TextCompareS
Same as TextCompare, but case sensitive.
E.2.9 ConfigRead
Read value from entry name in config file.
Syntax:

${ConfigRead} "[File]" "[Entry]" $var
"[File]" ; config file
;
"[Entry]" ; entry name
;
$var ; Result: Value
Note:
- Error flag if entry not found
- Error flag if file doesn't exist

Example1:

Section
${ConfigRead} "C:\AUTOEXEC.BAT" "SET winbootdir=" $R0
;$R0=C:\WINDOWS
SectionEnd
Example2:

Section
${ConfigRead} "C:\apache\conf\httpd.conf" "Timeout " $R0
;$R0=30
SectionEnd
E.2.10 ConfigReadS
Same as ConfigRead, but case sensitive.
E.2.11 ConfigWrite
Write value from entry name in config file.
Syntax:

${ConfigWrite} "[File]" "[Entry]" "[Value]" $var
"[File]" ; config file
;
"[Entry]" ; entry name
;
"[Value]" ; value name
; if "" then delete Entry
;
$var ; Result:
; $var=CHANGED Value is written
; $var=DELETED Entry is deleted
; $var=ADDED Entry and Value are added
; $var=SAME Entry and Value already exist
Note:
- Error flag if file doesn't exist
- Error flag if file can't be opened

Example1:

Section
${ConfigWrite} "C:\AUTOEXEC.BAT" "SET winbootdir=" "D:\WINDOWS" $R0
;$R0=CHANGED
SectionEnd
Example2:

Section
${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "30" $R0
;$R0=SAME
SectionEnd
Example3:

Section
${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "" $R0
;$R0=DELETED
SectionEnd
E.2.12 ConfigWriteS
Same as ConfigWrite, but case sensitive.
E.2.13 FileRecode
Recode text file from DOS to Windows format and vice-versa.
Syntax:

${FileRecode} "[File]" "[Format]"
"[File]" ;
;
"[Format]" ; OemToChar -from DOS to Windows
; CharToOem -from Windows to DOS
Note:
- Error flag if file doesn't exist
- Error flag if syntax error

Example:

Section
${FileRecode} "C:\SCANDISK.LOG" "CharToOem"
SectionEnd
E.2.14 TrimNewLines
Trim newlines in a string.
Syntax:

${TrimNewLines} "[string]" $var
"[string]" ; Input string
$var ; Result: String without '$\r' and '$\n' at the end
Example:

Section
${TrimNewLines} "Text line$\r$\n" $R0
; $R0="Text line"
SectionEnd

MaGoth
13-02-2015, 01:58
Подскажите, можно ли заменить текст или число в определенной строке? Например, как на снимке: нужно заменить число 1 в строке, следующей за [SearchPOT]. »
Накидал небольшой по замене строки, синтакс:
${LineFind} "файл1" "файл2" "строка" "функция"

Добавь к своему проекту:
!include "TextFunc.nsh"

А далее как в примере:
XPstyle on
!include MUI2.nsh

Name "TestTXT"
OutFile TEST_Txt.exe
RequestExecutionLevel user

InstallDir "$EXEDIR\Test7z"
!insertmacro MUI_LANGUAGE English
!include "TextFunc.nsh"

Section "Test"
${LineFind} "$EXEDIR\MyText.txt" "" "9" "delines"
;IfErrors 0 +2
;MessageBox MB_OK "Error"
${LineFind} "$EXEDIR\MyText.txt" "" "9" "inlines"
;IfErrors 0 +2
;MessageBox MB_OK "Error"
SectionEnd

Function delines
StrCpy $0 SkipWrite
Push $0
FunctionEnd

Function inlines
FileWrite $R4 "Привет Kopejkin, это я, твоя изменённая строка.. :)$\n"
Push $0
FunctionEnd



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

Kopejkin
13-02-2015, 03:34
...Накидал »
Спасибо, но это не то.
Как заменить уникальный (встречающийся 1 раз) текст я знаю - из примера в справочнике.
В моем же примере текст повторяется, т.е. уникален не текст, а номер строки.
Буду разбираться с примерами из ориг. справки

MaGoth
13-02-2015, 03:58
Спасибо, но это не то.
Как заменить уникальный (встречающийся 1 раз) текст я знаю - из примера в справочнике.
В моем же примере текст повторяется, т.е. уникален не текст, а номер строки.
Буду разбираться с примерами из ориг. справки »
Или я ничего не понял, или ты, одно из двух..

В своем вопросе ты писал:
Подскажите, можно ли заменить текст или число в определенной строке? Например, как на снимке: нужно заменить число 1 в строке, следующей за [SearchPOT]. »
Так вот, то что я написал в примере, как раз-таки цепляется к номеру строки, а само содержимое строки в данном случае не имеет значения..

Ну и вопросы до кучи, номер требуемой строки динамический что-ли?
Если да, то тут я хз, надо думать..
Или их несколько и везде надо менять? Если строки(а) статичны и неизменны в позициях, то смотри пример выше..


Зы, и скинь свой изменяемый текстовый файл, гляну что это такое...

Kopejkin
13-02-2015, 09:30
...или ты »

Да, это я тупанул. Спасибо еще раз!

MaGoth
15-02-2015, 22:17
Привет народ, :)

Пара вопросов специфичных имеется.
У кого нибудь получилось скомпилить плагин Nsis7z_921 из представленных исходников?
И есть у кого желание поковыряться в нем и подлатать чуток, до нужной кондиции?

Flix
16-02-2015, 22:49
У кого нибудь получилось скомпилить плагин Nsis7z_921 из представленных исходников? »
Есть у программистов такая негласная защита от дурака: в опубликованных исходниках делать несколько ошибок. Опытные сразу поймут что-к-чему (по сообщениям компилятора) и исправят. А начинающие, или неопытные будут говорить, что у них ничего не получается.

MaGoth, желающих разбираться в чужих исходниках вы вряд ли найдете. Если вам интересно, а тем более назрела такая необходимость, попробуйте сделать это сами, а потом результат своей плодотворной работы предложить нам. Поверьте, вам скажут спасибо. :up

K.A.V.
16-02-2015, 23:47
У кого нибудь получилось скомпилить плагин Nsis7z_921 из представленных исходников? »
Сомневаюсь, что это вообще кому-то нужно было, а у вас не получилось скомпилировать? Там же вроде всё есть, и проект даже от Visual Studio...
Никого не хочу обидеть, но ещё я сомневаюсь, что хотя бы половина кодеров на NSIS из этой темы писали плагины для NSIS

И есть у кого желание поковыряться в нем и подлатать чуток, до нужной кондиции? »
А у вас, значит, нет желания поковыряться, чтобы реализовать нужный именно вам, функционал?))

Есть у программистов такая негласная защита от дурака: в опубликованных исходниках делать несколько ошибок. Опытные сразу поймут что-к-чему (по сообщениям компилятора) и исправят. А начинающие, или неопытные будут говорить, что у них ничего не получается. »
Нужно взять на заметку и потом примеры здесь такие выкладывать :biggrin: заодно будем учить NSIS-кодеров самостоятельно исправлять ошибки в коде. :up

Поверьте, вам скажут спасибо. »
У меня первая мысль, которая промелькнула - "Зачем?"

MaGoth
17-02-2015, 00:30
Есть у программистов такая негласная защита от дурака: в опубликованных исходниках делать несколько ошибок. Опытные сразу поймут что-к-чему (по сообщениям компилятора) и исправят. А начинающие, или неопытные будут говорить, что у них ничего не получается.»
Ух ты как интересно..

Может вы прокомментируете эту защиту от дурака ?!
1>------ Построение начато: проект: Nsis7z, Конфигурация: Debug Win32 ------
1> StdAfx.cpp
1> UserInputUtils.cpp
1>c:\users\александр\desktop\7zip\ui\nsis\userinpututils.cpp(5): fatal error C1083: Не удается открыть файл включение: Common/StdInStream.h: No such file or directory
1> OpenCallbackConsole.cpp
1>c:\users\александр\desktop\7zip\ui\nsis\opencallbackconsole.h(devil): fatal error C1083: Не удается открыть файл включение: Common/StdOutStream.h: No such file or directory
1> NSISBreak.cpp
1> MainAr.cpp
1>c:\users\александр\desktop\7zip\ui\nsis\mainar.cpp(7): fatal error C1083: Не удается открыть файл включение: Windows/Error.h: No such file or directory
1> Main.cpp
1>c:\users\александр\desktop\7zip\ui\nsis\main.cpp(5): fatal error C1083: Не удается открыть файл включение: Common/MyInitGuid.h: No such file or directory
1> ExtractCallbackConsole.cpp
1>c:\users\александр\desktop\7zip\ui\nsis\extractcallbackconsole.h(devil): fatal error C1083: Не удается открыть файл включение: Common/MyString.h: No such file or directory
1> WorkDir.cpp
1>c1xx : fatal error C1083: Не удается открыть файл источник: ..\..\UI\Common\WorkDir.cpp: No such file or directory
1> UpdateProduce.cpp
1>c1xx : fatal error C1083: Не удается открыть файл источник: ..\..\UI\Common\UpdateProduce.cpp: No such file or directory
1> UpdatePair.cpp
1>c1xx : fatal error C1083: Не удается открыть файл источник: ..\..\UI\Common\UpdatePair.cpp: No such file or directory
1> UpdateCallback.cpp
1>c1xx : fatal error C1083: Не удается открыть файл источник: ..\..\UI\Common\UpdateCallback.cpp: No such file or directory
1> UpdateAction.cpp
1>c1xx : fatal error C1083: Не удается открыть файл источник: ..\..\UI\Common\UpdateAction.cpp: No such file or directory
1> Update.cpp
1>c1xx : fatal error C1083: Не удается открыть файл источник: ..\..\UI\Common\Update.cpp: No such file or directory
1> TempFiles.cpp
1>c1xx : fatal error C1083: Не удается открыть файл источник: ..\..\UI\Common\TempFiles.cpp: No such file or directory
...

Мы на-пару с одним человечком перелопатили все исходники плагинов для этой версии 7з, до которых смогли дотянуться, и везде болт. Эти идиоты, выложили сырцы, а на пол проекта компиляции файлов не положили... :angry2:
Вообще не понимаю, какой дебил так делает ?! Или выкладывай полностью, или не выкладывай вообще. И всё всем понятно будет..

MaGoth, желающих разбираться в чужих исходниках вы вряд ли найдете. Если вам интересно, а тем более назрела такая необходимость, попробуйте сделать это сами, а потом результат своей плодотворной работы предложить нам. Поверьте, вам скажут спасибо.
Да вот было желание поправить кое-чего, но видать теперь с этим мимо кассы..


K.A.V.
Пост ради поста ?!
Ибо ни грамму не понял из того что ты написал..

K.A.V.
17-02-2015, 00:53
Может вы прокомментируете эту защиту от дурака ?! »
Эти идиоты, выложили сырцы, а на пол проекта компиляции файлов не положили...
Вообще не понимаю, какой дебил так делает ?! Или выкладывай полностью, или не выкладывай вообще. И всё всем понятно будет.. »
"дебил" в наше время тот, кто не читает инструкцию. Не буду переходить на личности, думаю намёк все поймут.
Вот вы взяли тут и оскорбили людей (я, конечно, понимаю, что этого они не узнают, но смотрится то со стороны как минимум не красиво и низко с вашей стороны), которые сделали плагин и выложили его для вас и, оскорбили вы их просто потому, что не умеете читать.
Мягко говоря странно вы себя ведёте, вам не кажется?

Пост ради поста ?! »
Я постоянно тут пишу просто так, ради количества сообщений, люблю это дело, видите, какое у меня несоответствие "полезняшек" с общим числом сообщений?
И смотрите, это моё очередное сообщение, которое вроде бы и с одной стороны указывает на причину вашей проблемы, но и с другой...
Пост ради поста ?! »

Flix
18-02-2015, 00:25
Может вы прокомментируете эту защиту от дурака ?! »
А что здесь может быть непонятно? Компилятор вам на русском языке пишет:
Не удается открыть файл источник
и далее указывает конкретный файл, который ему не удалось найти. Ну и... дальше что?
Если вы выполните все рекомендации автора плагина, которые он старательно изложил в сопровождающем документе (nsis7z.txt), то файл компилируется без проблем.

MKN
19-02-2015, 13:35
K.A.V.,
Подскажи пожалуйста, как в твоём примере, вывести строки в ListBox - с 1ой по 4ую включительно ? (как вывести только 4ую- понятно, как вывести с 4 ой и далее- понятно. с выводом с 1ой по 4 ую - что то не заладилось...)

OutFile ListBoxHSCROLL_ExecDosTOWINDOW.exe
!include nsDialogs.nsh
Var Dialog
Var hcli
Var ListBox
Page custom MyPage leave

Function MyPage
nsDialogs::Create 1018
Pop $Dialog
nsDialogs::CreateControl /NOUNLOAD ${__NSD_ListBox_CLASS} ${__NSD_ListBox_STYLE}|${WS_HSCROLL} ${__NSD_ListBox_EXSTYLE} 0 20 100% 100u ""
Pop $ListBox
SendMessage $ListBox ${LB_SETHORIZONTALEXTENT} 2000 0 ; 2000 - количество пикселей, на которое список может прокручиваться.

GetFunctionAddress $0 MyFunction
ExecDos::exec /NOUNLOAD /ASYNC /TOFUNC `cmd /?` "" $0
Pop $hcli
nsDialogs::Show
FunctionEnd

Function leave
ExecDos::wait $hcli
FunctionEnd

Function MyFunction
Pop $2
; вывести только 4ую строку
;IntOp $R0 $R0 + 1
;StrCmp $R0 4 0 noAddString

; вывести всё , начиная с 4ой строки
IntOp $R0 $R0 + 1
StrCmp $R0 4 0 noAddString
StrCpy $R0 3

System::Call "user32::OemToChar(tr2, t.r2)"
SendMessage $ListBox ${LB_ADDSTRING} 0 "STR:$2"
noAddString:
FunctionEnd

Section
SectionEnd


ps HSCROLL можно сделать гораздо проще, не заморачиваясь с учётом размера шрифта, как в вышеприводимой громозде из кода...

K.A.V.
19-02-2015, 15:33
вывести строки в ListBox - с 1ой по 4ую включительно ? »
Ну диапазон же...IntCmp...

OutFile ListBoxHSCROLL_ExecDosTOWINDOW.exe
!include nsDialogs.nsh
Var Dialog
Var hcli
Var ListBox
Page custom MyPage leave

Function MyPage
nsDialogs::Create 1018
Pop $Dialog
nsDialogs::CreateControl /NOUNLOAD ${__NSD_ListBox_CLASS} ${__NSD_ListBox_STYLE}|${WS_HSCROLL} ${__NSD_ListBox_EXSTYLE} 0 20 100% 100u ""
Pop $ListBox
SendMessage $ListBox ${LB_SETHORIZONTALEXTENT} 2000 0 ; 2000 - количество пикселей, на которое список может прокручиваться.

GetFunctionAddress $0 MyFunction
ExecDos::exec /NOUNLOAD /ASYNC /TOFUNC `cmd /?` "" $0
Pop $hcli
nsDialogs::Show
FunctionEnd

Function leave
ExecDos::wait $hcli
FunctionEnd

Function MyFunction
Pop $2

IntOp $R0 $R0 + 1
IntCmp $R0 4 0 0 noAddString

System::Call "user32::OemToChar(tr2, t.r2)"
SendMessage $ListBox ${LB_ADDSTRING} 0 "STR:$2"
noAddString:
FunctionEnd

Section
SectionEnd

MKN
19-02-2015, 16:06
IntCmp »
Напрочь из головы вылетело... :search:

MKN
20-02-2015, 12:42
Когда то kotkovets, предлагал код, как убрать заголовок окна :

!include MUI2.nsh
!define MUI_CUSTOMFUNCTION_GUIINIT GUIInit
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
OutFile "Example.exe"

!define WS_CAPTION 0x00C00000
!define NSD_RemoveStyle "!insertmacro _NSD_RemoveStyle_Call"
!macro _NSD_RemoveStyle_Call CONTROL EXSTYLE
Push `${CONTROL}`
Push `${EXSTYLE}`
System::Store SR1R0
IntOp $R1 $R1 ~
System::Call `user32::GetWindowLong(iR0,i${GWL_STYLE})i.R2`
IntOp $R2 $R1 & $R2
System::Call `user32::SetWindowLong(iR0,i${GWL_STYLE},iR2)`
System::Store L
!macroend

Function GUIInit
${NSD_RemoveStyle} $HWNDPARENT ${WS_CAPTION}
FunctionEnd

Section
SectionEnd


А каким образом добавить к получившемуся "лысому" окну - рамку ? (пробовал добавлять "рамочные" стили WS_BORDER , WS_THICKFRAME , посылал окну сообщение ${CM_BORDERCHANGED} - без эффекта )

K.A.V.
20-02-2015, 15:39
пробовал добавлять "рамочные" стили WS_BORDER »
без эффекта »
А как пробовал то?

Если делать так, то всё прекрасно работает:

Function GUIInit
${NSD_RemoveStyle} $HWNDPARENT ${WS_CAPTION}
System::Call "user32::GetWindowLong(i$HWNDPARENT,i${GWL_STYLE})i.s"
System::Int64Op "0x00400000L" |
System::Call "user32::SetWindowLong(i$HWNDPARENT,i${GWL_STYLE},is)"
FunctionEnd

Function GUIInit
${NSD_RemoveStyle} $HWNDPARENT ${WS_CAPTION}
System::Call "user32::GetWindowLong(i$HWNDPARENT,i${GWL_STYLE})i.s"
System::Int64Op "0x00800000L" |
System::Call "user32::SetWindowLong(i$HWNDPARENT,i${GWL_STYLE},is)"
FunctionEnd

"рамочные" стили »
WS_THICKFRAME »
WS_THICKFRAME - не рамочный стиль, да, он создаёт рамку окна при удаленном WS_CAPTION, но при этом ещё и добавляет возможность изменять границы окна, это не то, что тебе нужно

MKN
20-02-2015, 15:52
Если делать так, то всё прекрасно работает: »
Не работает. Заголовок окна - остаётся (но таскать за себя не позволяет). Задача ведь сделать обрамление рамкой обезглавленного окна .

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

K.A.V.
20-02-2015, 16:54
Так тоже не работает?
Function GUIInit
${NSD_RemoveStyle} $HWNDPARENT ${WS_CAPTION}
System::Call "user32::GetWindowLong(i$HWNDPARENT,i${GWL_STYLE})i.r0"
System::Call "user32::SetWindowLong(i$HWNDPARENT,i${GWL_STYLE},i$0|0x00400000)"
FunctionEnd

Function GUIInit
${NSD_RemoveStyle} $HWNDPARENT ${WS_CAPTION}
System::Call "user32::GetWindowLong(i$HWNDPARENT,i${GWL_STYLE})i.r0"
System::Call "user32::SetWindowLong(i$HWNDPARENT,i${GWL_STYLE},i$0|0x00800000)"
FunctionEnd

На W7x64 и W8x32 работает, а вот на WinXP нет




© OSzone.net 2001-2012