|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
|
.: NSIS - все вопросы :. часть 2.
|
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
|
------- Отправлено: 12:02, 09-12-2012 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата MKN:
Там в двух местах нужно заменять Скрытый текст
; Display BIOS serial number
OutFile "bios_sn.exe"
!include "LogicLib.nsh"
!define CLSCTX_INPROC_SERVER 1
!define CLSID_WbemLocator {4590f811-1d3a-11d0-891f-00aa004b2e24}
!define IID_IWbemLocator {dc12a687-737f-11cf-884d-00aa004b2e24}
!define RPC_C_AUTHN_LEVEL_DEFAULT 0
!define RPC_C_IMP_LEVEL_IMPERSONATE 3
!define EOAC_NONE 0
!define WBEM_FLAG_FORWARD_ONLY 0x20
!define WBEM_FLAG_RETURN_IMMEDIATELY 0x10
!define WBEM_INFINITE 0xffffffff
; Query BIOS serial number via WMI and return it in $0
Function bios_sn
; Save registers
Push $1
Push $2
Push $3
Push $4
Push $5
Push $6
Push $7
; Initialization of COM is done via OleInitialize in NSIS installer code
; Set general COM security level
System::Call "ole32::CoInitializeSecurity( \\
i 0, i -1, i 0, i 0, i ${RPC_C_AUTHN_LEVEL_DEFAULT}, \\
i ${RPC_C_IMP_LEVEL_IMPERSONATE}, i 0, i ${EOAC_NONE}, i 0) i.r1"
${If} $1 != 0
StrCpy $0 "failed to initialize security: $1"
Goto bios_sn_end
${EndIf}
; Create IWbemLocator interface
System::Call "ole32::CoCreateInstance( \\
g '${CLSID_WbemLocator}', i 0, \\
i ${CLSCTX_INPROC_SERVER}, \\
g '${IID_IWbemLocator}', *i .r2) i.r1"
${If} $1 != 0
StrCpy $0 "failed to create IWebmLocator object: $1"
Goto bios_sn_end
${EndIf}
; Call IWbemLocator->ConnectServer
System::Call "$2->3(w 'ROOT\CIMV2', i 0, i 0, i 0, i 0, i 0, i 0, *i .r3) i.r1"
${If} $1 != 0
StrCpy $0 "failed to connect: $1"
${Else}
; Call IWbemServices->ExecQuery
System::Call "$3->20(w 'WQL', w 'Select Name from Win32_BIOS', \\
${WBEM_FLAG_FORWARD_ONLY} | ${WBEM_FLAG_RETURN_IMMEDIATELY}, \\
i 0, *i .r4) i.r1"
${If} $1 != 0
StrCpy $0 "failed to query: $1 $3"
${Else}
; Call IEnumWbemClassObject->Next
System::Call "$4->4(i ${WBEM_INFINITE}, i 1, *i .r5, *i .r6) i.r1"
${If} $1 != 0
StrCpy $0 "failed to iterate: $1"
${Else}
${If} $6 > 0
; Variant
; (unsigned short vt, WORD wReserved1,
; WORD wReserved2, WORD wReserved3, BSTR bstrVal)
; Allocate memory for Variant
System::Call "*(i 0, i 0, i 0) i.r7"
; Call IWbemClassObject->Get
System::Call "$5->4(w 'Name', i 0, i r7, i 0, i 0) i.r1"
${If} $1 < 0
StrCpy $0 "failed to get: $1"
${Else}
; Access bstrVal from Variant
System::Call "*$7(i, i, w .r0)"
System::Call "ole32::VariantClear(i r7)"
${EndIf}
; Free memory associated with Variant
System::Free $7
${Else}
StrCpy $0 "failed: no items ***91;$6***93;"
${EndIf}
; Call IWbemClassObject->Release
System::Call "$5->2()"
${EndIf}
; Call IEnumWbemClassObject->Release
System::Call "$4->2()"
${EndIf}
; Call IWbemService->Release
System::Call "$3->2()"
${EndIf}
; Call IWbemLocator->Release
System::Call "$2->2()"
bios_sn_end:
; Restore registers
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
FunctionEnd
Function .onInit
InitPluginsDir
Call bios_sn
MessageBox MB_OK "BIOS Serial Number=$0"
Quit
FunctionEnd
Section
SectionEnd
|
|
|
------- Отправлено: 17:28, 19-08-2015 | #1771 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить PM | Цитировать Цитата K.A.V.:
|
|
|
Отправлено: 17:32, 19-08-2015 | #1772 |
|
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать MKN, можно и так )
Скрытый текст
OutFile "bios_sn.exe"
!include "LogicLib.nsh"
!macro IWbemClassObject->Get NameObject OUT
System::Call "*(i,i,i)i.R4"
System::Call "$R3->4(w'${NameObject}',i0,iR4,i0,i0)"
System::Call "*$R4(i.R6,i,i.R5)"
StrCmp $R6 3 0 +2
IntFmt $R5 %u $R5
StrCmp $R6 8 0 +2
!ifdef NSIS_UNICODE
IntFmt $R5 %s $R5
!else
IntFmt $R5 %S $R5
!endif
System::Call "ole32::VariantClear(iR4)"
System::Free $R4
StrCpy ${OUT} $R5
!macroend
Section
System::Call "ole32::CoInitializeEx(i0,i2)"
System::Call "ole32::CoCreateInstance(g'{4590f811-1d3a-11d0-891f-00aa004b2e24}',i0,i1,g'{dc12a687-737f-11cf-884d-00aa004b2e24}',*i.R0)i.R7"
${If} $R7 == 0
System::Call "ole32::CoInitializeSecurity(i0,i-1,i0,i0,i2,i3,i0,i0,i0)"
System::Call "$R0->3(w'root\CIMV2',i0,i0,i0,i0,i0,i0,*i.R1)i.R7"
${If} $R7 == 0
System::Call "$R1->20(w'WQL', w'SELECT * FROM Win32_BIOS',i48,i0,*i.R2)i.R7"
System::Call "$R2->4(i0xffffffff,i1,*i.R3,*i)i.R7"
${If} $R7 == 0
!insertmacro IWbemClassObject->Get "Version" $7
MessageBox MB_OK "Version=$7"
!insertmacro IWbemClassObject->Get "Manufacturer" $7
MessageBox MB_OK "Manufacturer=$7"
!insertmacro IWbemClassObject->Get "Name" $7
MessageBox MB_OK "Name=$7"
!insertmacro IWbemClassObject->Get "SMBIOSBIOSVersion" $7
MessageBox MB_OK "SMBIOSBIOSVersion=$7"
System::Call "$R0->2()"
System::Call "$R1->2()"
System::Call "$R2->2()"
System::Call "$R3->2()"
${Else}
System::Call "$R0->2()"
System::Call "$R1->2()"
System::Call "$R2->2()"
${EndIf}
${Else}
System::Call "$R0->2()"
System::Call "$R1->2()"
${EndIf}
${EndIf}
SectionEnd
|
|
------- Отправлено: 17:38, 19-08-2015 | #1773 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить PM | Цитировать Возвращаясь к имитации метро фейса...
При использовании WndProc.dll наблюдается такой не приятный момент. При быстром наведении курсора, то на одно изображение, то на другое - оба изображения могут выделиться (замениться на другое изображение) одновременно... И ещё про курсор-ладошку... При перемещении курсора вне изображений , курсор очень быстро, но глазом заметно, изменяется-мельтешит, превращаясь из стрелки в ладошку и обратно... Как бы преодолеть эти неприятные мелочи ? Код такой (дока к плагину не нашёл, может что не так и делаю... ) : Пример кода
!include MUI2.nsh
!include LogicLib.nsh
!insertmacro MUI_LANGUAGE Russian
OutFile ClickPict_WndProc.exe
Var Dialog
Var Image
Var Image2
Page custom nsDialogsPage
Function .onInit
InitPluginsDir
File /ONAME=$PLUGINSDIR\Vinni.bmp Vinni.bmp
File /ONAME=$PLUGINSDIR\Vinni2.bmp Vinni2.bmp
FunctionEnd
Function nsDialogsPage
nsDialogs::Create /NOUNLOAD 1018
Pop $Dialog
GetFunctionAddress $0 MainWndSubProc
WndProc::onCallback /r=1 $Dialog $0
${NSd_CreateBitmap} 0 0 100% 100% ''
Pop $Image
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni.bmp' $1
GetFunctionAddress $0 ImgeSubProc
WndProc::onCallback /r=1 $Image $0
${NSD_AddStyle} $Image ${SS_NOTIFY}
${NSD_OnClick} $Image Click1
${NSd_CreateBitmap} 90 0 100% 100% ''
Pop $Image2
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni.bmp' $1
GetFunctionAddress $0 ImgeSubProc2
WndProc::onCallback /r=1 $Image2 $0
${NSD_AddStyle} $Image2 ${SS_NOTIFY}
${NSD_OnClick} $Image2 Click2
nsDialogs::show
FunctionEnd
; Сообщение WM_NCHITTEST отправляется в окно тогда, когда перемещается курсор, или когда кнопка мыши нажимается или отпускается.
; Если мышь не захвачена, сообщение отправляется в окно под курсором. В противном случае, сообщение отправляется в окно, которое захватило мышь.
; Окно получает это сообщение через посредство своей функции WindowProc.
Function ImgeSubProc ; навели курсор
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${If} $2 = ${WM_NCHITTEST}
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni2.bmp' $1
${EndIf}
FunctionEnd
Function ImgeSubProc2
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${If} $2 = ${WM_NCHITTEST}
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni2.bmp' $1
${EndIf}
FunctionEnd
Function MainWndSubProc
${If} $2 = ${WM_NCHITTEST}
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni.bmp' $1
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni.bmp' $1
${EndIf}
FunctionEnd
Function Click1
MessageBox MB_OK "Click1"
FunctionEnd
Function Click2
MessageBox MB_OK "Click2"
FunctionEnd
Section
SectionEnd
|
|
Последний раз редактировалось MKN, 27-05-2020 в 16:17. Отправлено: 18:17, 19-08-2015 | #1774 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Скрытый текст
!addplugindir "."
!include MUI2.nsh
!include LogicLib.nsh
!insertmacro MUI_LANGUAGE Russian
OutFile ClickPict_WndProc.exe
Var Dialog
Var Image
Var Image2
var SetImage1
var SetImage2
Page custom nsDialogsPage
Function .onInit
InitPluginsDir
File /ONAME=$PLUGINSDIR\Vinni.bmp Vinni.bmp
File /ONAME=$PLUGINSDIR\Vinni2.bmp Vinni2.bmp
FunctionEnd
Function nsDialogsPage
nsDialogs::Create /NOUNLOAD 1018
Pop $Dialog
GetFunctionAddress $0 MainWndSubProc
WndProc::onCallback /r=1 $Dialog $0
${NSd_CreateBitmap} 0 0 100% 100% ''
Pop $Image
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni.bmp' $1
GetFunctionAddress $0 ImgeSubProc
WndProc::onCallback /r=1 $Image $0
${NSD_AddStyle} $Image ${SS_NOTIFY}
${NSD_OnClick} $Image Click1
${NSd_CreateBitmap} 90 0 100% 100% ''
Pop $Image2
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni.bmp' $1
GetFunctionAddress $0 ImgeSubProc2
WndProc::onCallback /r=1 $Image2 $0
${NSD_AddStyle} $Image2 ${SS_NOTIFY}
${NSD_OnClick} $Image2 Click2
nsDialogs::show
FunctionEnd
; Сообщение WM_NCHITTEST отправляется в окно тогда, когда перемещается курсор, или когда кнопка мыши нажимается или отпускается.
; Если мышь не захвачена, сообщение отправляется в окно под курсором. В противном случае, сообщение отправляется в окно, которое захватило мышь.
; Окно получает это сообщение через посредство своей функции WindowProc.
Function ImgeSubProc ; навели курсор
${If} $2 = ${WM_MOUSEMOVE}
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni2.bmp' $1
StrCpy $SetImage1 1
${EndIf}
FunctionEnd
Function ImgeSubProc2
${If} $2 = ${WM_MOUSEMOVE}
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni2.bmp' $1
StrCpy $SetImage2 1
${EndIf}
FunctionEnd
Function MainWndSubProc
${If} $2 = ${WM_MOUSEMOVE}
${If} $SetImage1 = 1
${NSD_SetImage} $Image '$PLUGINSDIR\Vinni.bmp' $1
StrCpy $SetImage1 0
${EndIf}
${If} $SetImage2 = 1
${NSD_SetImage} $Image2 '$PLUGINSDIR\Vinni.bmp' $1
StrCpy $SetImage2 0
${EndIf}
${EndIf}
FunctionEnd
Function Click1
MessageBox MB_OK "Click1"
FunctionEnd
Function Click2
MessageBox MB_OK "Click2"
FunctionEnd
Section
SectionEnd
Цитата MKN:
Цитата MKN:
В код добавил 2 переменные $SetImage1 и $SetImage2, которые используются для того, чтобы постоянно не присваивать изображения элементам (происходит быстрое мерцание из-за постоянного перемещения мыши и присваивания изображений) в функции MainWndSubProc, возможно, можно обойтись без переменных и как-то поиграться с WM_SETREDRAW - оставлю это тебе p.s. Насчет своих изображений кнопкам, есть же плагин SkinnedButton plug-in, если у тебя будут кнопки одного типа - думаю, лучше этим плагом воспользоваться Кстати, вот можешь скачать архивчик с GitHub, там примеры своего интерфейса с парой интересных плюшек + свои мессаджбоксы со своим стилем, я сам в этом не разбирался, посмотрел мельком гугля инфу по твоему плагу WndProc |
||
|
------- Отправлено: 15:51, 20-08-2015 | #1775 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Из справочника по NSIS:
|
|
|
Отправлено: 21:59, 20-08-2015 | #1776 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Kopejkin:
В начале кода не забыли добавить? |
|
|
------- Отправлено: 22:34, 20-08-2015 | #1777 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить PM | Цитировать |
|
Отправлено: 09:24, 21-08-2015 | #1778 |
|
Пользователь Сообщения: 83
|
Профиль | Отправить PM | Цитировать Ребята, привет.
У меня вопрос по плагину md5 Как заставить его выполнить такую задачу: нужно чтобы в проверке на оригинальность файла участвовало две хэш-суммы, а не одна. Ну то есть предположим первая хеш-сумма проверяемого файла не совпадает, тогда идёт проверка на вторую хеш-сумму. Если и она не совпадает - прерывание установки и сообщение, мол версия файла неправильная. Надеюсь поможете... А то очень понадобилось реализовать такой вариант. Дело в том что в разных версиях моей программы один и тот же файл имеет разные размеры. Вот и нужно чтобы последнее обновление можно было установить на все предыдущие версии программы. |
|
Отправлено: 22:51, 23-08-2015 | #1779 |
|
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Kopejkin:
Цитата Serg866:
|
||
|
------- Отправлено: 00:03, 24-08-2015 | #1780 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
| [архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
| Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
| Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
| Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 | |
|