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

MKN
20-09-2013, 18:18
Почему вы написали, что надо переименовать? »
Потому, что у меня с родными именами ни в какую не работает... Причину так и не установил. Для тех, у кого возникнет такая же ситуация, на всяк случай и написАл.
пишете что в сети их много »
Ну да, только в китайской сети... :) Встречал паки - до сотни стилей. Только не скачать.

vahe-91
20-09-2013, 21:07
ну почему ${WinVersion} (плагин WinVer2) в Windows 8.1 в одном скрипте возвращает 6.2, в другом 6.1 ? :sorry:

kotkovets
20-09-2013, 22:34
ну почему ${WinVersion} (плагин WinVer2) в Windows 8.1 в одном скрипте возвращает 6.2, в другом 6.1 ? »
потому что, Windows 8.1 финальный релиз в октябре.. http://hi-tech.mail.ru/news/misc/windows-8-1-launch.html
до финала может любые цифры выдавать... потому что не финал..

vahe-91
20-09-2013, 23:04
потому что, Windows 8.1 финальный релиз в октябре.. http://hi-tech.mail.ru/news/misc/win...-1-launch.html
до финала может любые цифры выдавать... потому что не финал.. »
финал, это точно :)
Оказалось, что он запускает файл в режиме совместимости Win7 :dont-know странно, я эту галку точно не ставил.

MKN
21-09-2013, 13:33
Таймер обратного отсчёта на кнопке MessageBox_а

Как то эту задачу уже решали с помощью специальной DLL, что не удобно и лишено гибкости управления...
Но есть и другой способ, с помощью nsWindows плагина ( http://sourceforge.net/p/ifififi/code/HEAD/tree/ ) :

!include "nsWindows.nsh"
;!include "LogicLib.nsh"
!define TimerMsgTitle "Заголовок сообщения"
Name "TimerMsgBox Example"
OutFile "TimerMsgBox.exe"
Var WINDOW
Var Time

!macro MessageBox out text title flags
System::Call "user32::MessageBoxTimeout(i $HWNDPARENT, t '${text}', t '${title}', i ${flags}, i 0) i.s"
Pop ${out}
!macroend

Section
StrCpy $Time 7
${NSW_CreateWindow} $WINDOW "Timer" 1018
${NSW_CreateTimer} OnTimer 1000
!insertmacro MessageBox $0 "Какое то действие через :" "${TimerMsgTitle}" 0x40|0x1
;MessageBox MB_OK "Return Code: $0"
${If} $0 != 1
MessageBox MB_OK " Действие отменяется ! Выход."
Quit
${EndIf}
MessageBox MB_OK " Начинаем какое то действие"
SectionEnd

Function OnTimer
${If} $Time == 0
FindWindow $0 "#32770" "${TimerMsgTitle}"
GetDlgItem $1 $0 1
SendMessage $1 ${BM_CLICK} 0 0
${NSW_KillTimer} OnTimer
${Else}
IntOp $Time $Time - 1
FindWindow $0 "#32770" "${TimerMsgTitle}"
GetDlgItem $2 $0 1
SendMessage $2 ${WM_SETTEXT} 0 "STR: OK $Time sec"
;GetDlgItem $3 $0 65535
;SendMessage $3 ${WM_SETTEXT} 0 "STR:Осталось: $Time sec"
${EndIf}
FunctionEnd


Всё работает как надо, но есть пара не понятных моментов - во-первых после компиляции получаем сообщение :
!warning: Note: nsWindows.dll must be put in NSIS's Plugins Directory! (macro:_NSW_CreateWindow:17)
Хотя nsWindows.dll находится там где и положено !

во-вторых, зачем то создаётся файл в \NSIS\Plugins\nsWindows.tmp\nsWindows$insWindows.dll
и потом не удаляется...

Всё это дело исходит из nsWindows.nsh. Я пробовал три разных вариации nsWindows.nsh, но со всеми эффект одинаков.
(редактировать nsWindows.nsh я не решился...)

Что бы это значило и как это можно устранить ?

MKN
24-09-2013, 09:06
Хотел, именно , средствами NSIS, если возможно... Было бы изящно »
Ответили на Winamp_e (как определить размер памяти, занимаемой каким либо процессом ):
Не знаю уж насколько это изящно и универсально... Мне не всё в коде понятно....


OutFile "GetProcessMemoryInfo.exe"

Var /GLOBAL pid

; Pid используем необходимого процесса )

Section
System::Call KERNEL32::GetCurrentProcessId()i.s
Pop $pid

!include LogicLib.nsh
!define PROCESS_VM_READ 0x0010
!define PROCESS_QUERY_INFORMATION 0x0400
!define PROCESS_QUERY_LIMITED_INFORMATION 0x1000

System::Call 'KERNEL32::OpenProcess(i${PROCESS_VM_READ}|${PROCESS_QUERY_LIMITED_INFORMATION},i0,i$pid)i.r0'
${If} $0 = 0
System::Call 'KERNEL32::OpenProcess(i${PROCESS_VM_READ}|${PROCESS_QUERY_INFORMATION},i0,i$pid)i.r0'
${EndIf}
${If} $0 = 0
DetailPrint "Unable to open process $pid!"
Goto done_noprocess
${EndIf}
!define CB_PMC32 40
!define CB_PMCE32 44
System::Call '*(i,i,i,i,i,i,i,i,i,i,i0)i.r1' ; Probably only going to work for 32 bit processes * Наверное, будет работать только для 32 бит процессов
System::Call 'PSAPI::GetProcessMemoryInfo(ir0,ir1,i${CB_PMCE32})i.r2'
${If} $2 = 0
System::Call 'PSAPI::GetProcessMemoryInfo(ir0,ir1,i${CB_PMC32})i.r2'
${EndIf}
${If} $2 = 0
DetailPrint "GetProcessMemoryInfo failed"
${Else}
System::Call '*$1(i.r2,i,i,i.r3,i,i,i,i,i.r4,i,i.r5)'
${IfThen} $5 <> 0 ${|} StrCpy $4 $5 ${|} ; MSDN claims PagefileUsage is always 0 on Win7+ (Does not seem to be true but lets play it safe)
DetailPrint "cbStruct=$2 WorkingSet=$3 PrivateUsage=$4"
${EndIf}
System::Free $1
System::Call 'KERNEL32::CloseHandle(ir0)'
done_noprocess:
SectionEnd

Salmo
24-09-2013, 14:01
MKN, Спасибо, что не забыли мою просьбу! Да, это решение трудно назвать изящным :), думал будет не больше двух строк...

MKN
24-09-2013, 16:13
думал будет не больше двух строк... »
Так оно и будет. Если добавить это код (наверняка модернизировав) в ProcessFunc.nsh... Может kotkovets, так и сделает ?

Flix
24-09-2013, 19:33
Продолжая вопрос скинизации, нашел у китайцев еще 30 скинов *.she и просмотрщик стилей SHEViewer. Собрал в кучу ранее выложенные здесь скины и русскую версию SHEditor: СКАЧАТЬ (http://rghost.ru/48948010).
Если у вас будут новые (другие) файлы стилей, просто добавьте их папку "Skins" и SHEViewer подхватит их автоматически.
Скриншот SHEViewer:
http://savepic.org/4519935m.png (http://savepic.org/4519935.htm)

MKN, если не трудно, дай пожалуйста ссылки на ресурсы с наборами стилей, может мне удастся пополнить нашу коллекцию. По поводу переименования файла стиля в skinh.she ты был прав, я ошибся, прошу прощения. Это имя стиля зашито в библиотеке DLL и используется по умолчанию. Если надо использовать другой стиль, то нужно переименовать файл, или использовать функцию SkinH_AttachEx для загрузки стиля с другим именем.

MKN
25-09-2013, 12:00
ссылки на ресурсы с наборами стилей »
Навскидку :
http://download.csdn.net/detail/ynthynkdee/4902323
http://download.csdn.net/detail/xiaoy_2012/5123375
http://download.csdn.net/detail/simadi/5422313
Только, раз уж есть SHEditor, то дело за малым - за творчеством...
ps Похоже, что кроме SkinH_AttachEx, есть и другие инструкции : http://www.esoyu.com/soft/develop/26754.html

Vincent7
27-09-2013, 02:09
Здравствуйте. Такой вопрос- можно ли сделать проверку символов в пути устанавливаемой программы? Например проверить чтобы в нем небыло пробелов, если есть- abort. Такое возможно?

kotkovets
27-09-2013, 09:14
можно ли сделать проверку символов в пути устанавливаемой программы? Например проверить чтобы в нем небыло пробелов »
зачем это нужно... для чего.. какие цели?

Limonica
27-09-2013, 12:31
Можно пример, как скачать файл силами плагина System.dll

Vincent7
27-09-2013, 12:44
kotkovets, ну например программе нужно для работы чтобы в пути не было русских букв.

MKN
27-09-2013, 13:32
как скачать файл »
С помощью плагинов Inetc plug-in , InetLoad и др.

Limonica
27-09-2013, 16:45
С помощью плагинов Inetc plug-in , InetLoad и др. »
а с помошью System plug-in невозможно?

MKN
27-09-2013, 17:30
а с помошью System plug-in невозможно? »
Вполне... Только это для любителей изобретать велосипед и создавать себе трудности... :)
Вызывай нужные API и вперёд... URLDownloadToFile() и т.д.
https://dev.stel.com/api/files
http://www.realcoding.net/articles/ispolzovanie-internet-funktsii-win32-api.html
http://www.rsdn.ru/article/inet/inetapi.xml

kotkovets
27-09-2013, 20:41
например программе нужно для работы чтобы в пути не было русских букв. »
1) Так зачем то, давать возможность давать изменять путь установки, отпадает куча вопросов...
задать к примеру жесткую установку к примеру:
installdir "$PROGRAMFILES\PROGRAM_SOFT"
---
2) Можно фильтровать путь установки, таким методом фильтрации и сравнения длины строк:
!include "WordFunc.nsh"
!include "StrFunc.nsh"
!include "Logiclib.nsh"

installdir "$PROGRAMFILES\prof\опа"

outfile rus_test.exe

Section

StrLen $R0 $INSTDIR
${StrFilter} "$INSTDIR" "12eng" `" ~ @ # № $$ % ; : ^ & ? * ( ) - _ + = < > / \ [ ] } { . , ` "" $R1
StrLen $R1 $R1
${If} $R0 > $R1
MessageBox MB_OK "В строке: [ $INSTDIR ]$\nесть русские символы" IDOK
Abort
${EndIf}
MessageBox MB_OK "OK!" IDOK

SectionEnd

MKN
28-09-2013, 11:24
Ещё раз про Skin_ы.
На skinse.com есть такой плагин - SkinSE NSIS Plugin. Позволяет "одевать" инсталлятор с помощью SkinSE_NSIS.dll, SkinSE.dll и SkinSE_QQ2009.zip (архив с графическими bmp элементами)

!addplugindir .
OutFile "SkinSE_NSIS.exe"

!include "MUI2.nsh"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
InstallDir $TEMP
/*
InstallSkinSE
SkinSE_EnableHookSkin
SkinSE_EnableTitleMenuBar
SkinSE_Button_SetBackBitmap
SkinSE_InitSkinSE_LoadSkinResourceFromFolder
SkinSE_LoadSkinResourceFromRes
SkinSE_LoadSkinResourceFromZIP
SkinSE_RefreshAllControls
SkinSE_RemoveLayoutPos
SkinSE_SetBitmapHSB
SkinSE_SetColorHSB
SkinSE_SetHSB
SkinSE_SetLayoutMainFrame
SkinSE_SetLayoutWindowPos
SkinSE_SetScrollBarSkin
SkinSE_SubclassWindow
SkinSE_SubclassWindowEx
SkinSE_UpdateChildControlSkin
UnstallSkinSE
*/
Function .onInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File SkinSE.dll
File SkinSE_QQ2009.zip
System::Call SkinSE::SkinSE_LoadSkinResourceFromZIP(t"$PLUGINSDIR\SkinSE_QQ2009.zip",t)
!ifdef SKINSE_NOHOOK
System::Call SkinSE::SkinSE_Init(i$HWNDPARENT,i1)
!else
System::Call SkinSE::SkinSE_EnableHookSkin(i1)
System::Call SkinSE::SkinSE_RefreshAllControls()
!endif
System::Call SkinSE::SkinSE_Menu_EnableSkin(i1)
FunctionEnd

Function .onGUIEnd
SkinSE::UnstallSkinSE
System::Call Kernel32::GetModuleHandle(t"SkinSE_NSIS.dll")i.s
System::Call Kernel32::FreeLibrary(is)
System::Call Kernel32::SetCurrentDirectory(t"$EXEDIR\")
FunctionEnd

; в сопроводительном примере код упрощен... :
/*Function .onInit
InitPluginsDir
File "/oname=$PLUGINSDIR\SkinSE.dll" "SkinSE.dll"
File "/oname=$PLUGINSDIR\SkinSE_QQ2009.zip" "SkinSE_QQ2009.zip"
SkinSE_NSIS::setskinpath /NOUNLOAD "$PLUGINSDIR\SkinSE_QQ2009.zip"
FunctionEnd

Function .onGUIEnd
SkinSE::UnstallSkinSE
SetOutPath $TEMP
FunctionEnd*/

Section
SectionEnd


Скачать SkinSE For NSIS : http://www.skinse.com/Download.htm

Limonica
29-09-2013, 20:45
kotkovets, есть ли обнова WinVer2.nsh c правильным отображением Windows 8 и 8.1 ?

И вопрос по редакциям Windows 7, существуют же не только N редакции но и K и KN как быть с ними?
И как универсально распознать Home Basic независимо от издания (N, K, KN)?

ProcessFunc.nsh недавно выложенная тоже не работает в самой последней версии :(




© OSzone.net 2001-2012