Диалог About
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.12.13 20:07
Оценка:
Здравствуйте!

Что-то скучно тут стало

Вопрос такой — любите ли вы делать диалоги типа "О программе"?
Как обходитесь?
Сделали один раз и таскаете из проекта в проект?
Каким требованиям должен соответствовать такой диалог?
Маньяк Робокряк колесит по городу
Re: Диалог About
От: Brice Tribbiani Россия http://vzaguskin.github.io
Дата: 14.12.13 20:13
Оценка:
Здравствуйте, Marty, Вы писали:

M>Вопрос такой — любите ли вы делать диалоги типа "О программе"?


Заинтриговал
Расскажи, что-ли о себе — как ты любишь делать такие диалоги, продемонстрируй свою коллекцию

У меня обычный QMessageBox с названием сайта в качестве копирайта.
хотел уже на боковую
папаху снял и сапоги
но в комментариях проснулись
враги
Re: Диалог About
От: Unhandled_Exception Россия  
Дата: 14.12.13 20:37
Оценка:
Здравствуйте, Marty, Вы писали:

M>Каким требованиям должен соответствовать такой диалог?


Ну mfc чего-то там генерит

Ты это, сразу скажи, диалог About и есть главная шароварная тайна?!
Re: Диалог About
От: Aniskin  
Дата: 14.12.13 20:45
Оценка:
Здравствуйте, Marty, Вы писали:

M>Вопрос такой — любите ли вы делать диалоги типа "О программе"?


Просто обожаю Я серьезно. В About окно одной из программ я запихал пасхалку. Это дает мне повод периодически на форумах создавать темы вида "В честь нового года первым 10 нашедшим пасхальное яйцо приз — бесплатная лицензия". Это некое подобие PR.
Re[2]: Диалог About
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.12.13 21:03
Оценка:
Здравствуйте, Brice Tribbiani, Вы писали:

BT>Заинтриговал

BT>Расскажи, что-ли о себе — как ты любишь делать такие диалоги, продемонстрируй свою коллекцию

Сам такие утилитарные диалоги делать просто ненавижу

Я тут сначала для себя кой-какой пак делал, а потом решил сделать его на продажу, коллегам шароварщикам .
В том числе туда входит и гибко настраиваемый диалог About, с картинками, ссылками, копирайтами, красивыми шрифтами и прочим блекджекомб, правда только Win32, зато никаких зависимостей, весь пак кил 150 весит.

BT>У меня обычный QMessageBox с названием сайта в качестве копирайта.

А Ctrl+C (Ctrl+Ins) поддерживается?
Чтобы скопировать всю инфу о программе, например, при обращении в саппорт?
Маньяк Робокряк колесит по городу
Re[2]: Диалог About
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.12.13 21:03
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Ну mfc чего-то там генерит


U_E>Ты это, сразу скажи, диалог About и есть главная шароварная тайна?!


Если удастся его продать, то да
Маньяк Робокряк колесит по городу
Re[2]: Диалог About
От: iconix http://www.aha-soft.com/
Дата: 14.12.13 21:08
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Ты это, сразу скажи, диалог About и есть главная шароварная тайна?!


У меня About главный источник профита.
Stock icon sets for web and app design
Re[2]: Диалог About
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.12.13 21:15
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>Здравствуйте, Marty, Вы писали:


M>>Вопрос такой — любите ли вы делать диалоги типа "О программе"?


A>Просто обожаю Я серьезно. В About окно одной из программ я запихал пасхалку. Это дает мне повод периодически на форумах создавать темы вида "В честь нового года первым 10 нашедшим пасхальное яйцо приз — бесплатная лицензия". Это некое подобие PR.


Пасхалку тоже предусмотрел.
  Скрытый текст

Можно задать обработчик клика по картинке, проверить там Ctrl/Alt/Shift и показать пасхалку.

А вообще, прототип функции диалога так выглядит:

#define VMPIK_ABOUT_CLOSE_BUTTON                   0x00000001 /* Use 'Close' button instead of 'Ok' */
/* Default Ok/Close button position is bottom-right */
#define VMPIK_ABOUT_BUTTON_WITH_IMAGE              0x00000010 /* Place Ok/Close button below the image */
#define VMPIK_ABOUT_BUTTON_AT_LEFT                 0x00000020 
#define VMPIK_ABOUT_BUTTON_AT_CENTER               0x00000040 
#define VMPIK_ABOUT_IMAGE_BITMAP                   0x00000100 /* Default - icon (HICON) */
#define VMPIK_ABOUT_IMAGE_EMF                      0x00000200 /* Default - icon (HICON) */
#define VMPIK_ABOUT_IMAGE_AT_LEFT                  0x00000400 /* Default - at right */
#define VMPIK_ABOUT_PREPEND_COPYRIGHT_SIGN         0x00001000
#define VMPIK_ABOUT_COMPOSITE_COPYRIGHT_SIGN       0x00002000 /* In ANSI version, if this flag is set, the "(c)" string is used instead of single copyright sign */
#define VMPIK_ABOUT_COPYRIGHT_APPEND_ALL_RIGHTS    0x00004000 /* Append 'All reights reserved' to copyright string. Comma and space are automatically appended */
#define VMPIK_ABOUT_SYS_INFO_WINDOWS_INFO          0x00010000
#define VMPIK_ABOUT_SYS_INFO_MEM_INFO              0x00020000
#define VMPIK_ABOUT_SYS_INFO_CPU_INFO              0x00040000
#define VMPIK_ABOUT_DISABLE_CLIPBOARD_COPY         0x00080000 /* Don't copy information to clipboard when Ctrl+C (Ctrl+Ins) pressed */
#define VMPIK_ABOUT_ALWAYS_SHOW_REGISTERED         0x00100000 /* Show 'Registered version' even if lpcRegisteredToNameString, lpcRegisteredToEmailString and lpcRegistrationExpiresDateString are 0 */
#define VMPIK_ABOUT_CLOSE_ON_URL_EVENT             0x00200000 /* Close dialog when URL link labek clicked */

INT 
VMPIK_AboutAppDlg( HWND     hWndParent
                 , LPCTSTR  lpcDlgTitle
                 , const VMPIK_ABOUTDLG_FONTS_INFO *lpcLabelsFonts
                 , UINT     horScale                  /* If labels text doesn't fit to labels, or automaticaly calculated labels width is too long or too short, set this scale to value <100 to reduce width or >100 to enlarge width. Default value is 0 (keep size untouched) */
                 , HICON    hIcon                     /* Set dialog icon. Use LoadImage with GetSystemMetrics(SM_CXICON)*/
                 , HICON    hIconSmall                /* Set dialog small icon. Use LoadImage with GetSystemMetrics(SM_CXSMICON) */
                 , HANDLE   hAppImage
                 , POINT    *pLeftTop                 /* In/Out position of left top corner of dialog, set pounter to 0 or p->x=-1 and p->y=-1 to center dialog */
                 , DWORD    aboutFlags
                 /*--------------------------*/
                 , LPCTSTR  lpcAppName
                 , LPCTSTR  lpcAppNameSubtitle
                 , LPCTSTR  lpcAppInfoString
                 , LPCTSTR  lpcAppVersionString
                 /*--------------------------*/
                 , LPCTSTR  lpcAppCopyrightString
                 , LPCTSTR  lpcAppUrlString
                 /*--------------------------*/
                 , BOOL     bTrial
                 , LPCTSTR  lpcRegisteredToNameString
                 , LPCTSTR  lpcRegisteredToEmailString
                 , LPCTSTR  lpcRegistrationExpiresDateString
                 /*--------------------------*/
                 , LPCTSTR  lpcAdditionalInfoText
                 , LPCTSTR  lpcAdditionalInfoTextTitle
                 /*--------------------------*/
                 , PFN_VMPIK_AboutBoxImageClickCallback pfnImageClickCallback
                 , LPVOID                               lpvImageClickCallbackParam
                 );
Маньяк Робокряк колесит по городу
Re[3]: Диалог About
От: Brice Tribbiani Россия http://vzaguskin.github.io
Дата: 14.12.13 21:37
Оценка:
Здравствуйте, Marty, Вы писали:

M>Сам такие утилитарные диалоги делать просто ненавижу


M>Я тут сначала для себя кой-какой пак делал, а потом решил сделать его на продажу, коллегам шароварщикам .

M>В том числе туда входит и гибко настраиваемый диалог About, с картинками, ссылками, копирайтами, красивыми шрифтами и прочим блекджекомб, правда только Win32, зато никаких зависимостей, весь пак кил 150 весит.

Без шансов Хотя нарисовал нормально.


BT>>У меня обычный QMessageBox с названием сайта в качестве копирайта.

M>А Ctrl+C (Ctrl+Ins) поддерживается?
M>Чтобы скопировать всю инфу о программе, например, при обращении в саппорт?

Проверил — оказывается поддерживается На венде по крайней мере, мак лень запускать.
хотел уже на боковую
папаху снял и сапоги
но в комментариях проснулись
враги
Re[4]: Диалог About
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.12.13 22:14
Оценка:
Здравствуйте, Brice Tribbiani, Вы писали:

M>>Я тут сначала для себя кой-какой пак делал, а потом решил сделать его на продажу, коллегам шароварщикам .

M>>В том числе туда входит и гибко настраиваемый диалог About, с картинками, ссылками, копирайтами, красивыми шрифтами и прочим блекджекомб, правда только Win32, зато никаких зависимостей, весь пак кил 150 весит.

BT>Без шансов Хотя нарисовал нормально.


Ну, в паке основная фишка в сглаживании проблем установки и интеграции x86/x64 приложений, интеграция с VMProtect Ultimate+Web License Manager, Гуй для различных вариантов активации (причем VMProtect вообщем-то не обязательно Ultimate+Web License Manager, VMProtect в принципе откручивается без проблем ), скрипты для интеграции с InnoSetup — ввод серийника/активация на этапе инсталляции программы (в перспективе думаю и с другими инсталеррами разобраться). Пока вроде все. А About чисто бонусом идет
Вот, к примеру, нейтральные от протектора хелперы (к слову, думаю, кто-то и не знал о каких-то нюансах):
  Скрытый текст
/* Helper function */
/* Next functions return exact FALSE, TRUE, or (BOOL)-1 for N/A state */
BOOL VMPIKAPI VMPIK_IsUserInAdminGroup();
BOOL VMPIKAPI VMPIK_IsRunAsAdmin();
BOOL VMPIKAPI VMPIK_IsProcessElevated();
BOOL VMPIKAPI VMPIK_GetVirtualizationStatus();

/* if vst==(BOOL)-1 nothing to be done 
   return TRUE if done, FALSE if failed - not a prev virtualization status
*/
BOOL VMPIKAPI VMPIK_SetVirtualizationStatus(BOOL vst); 
/* return VMPIK_SECURITY_MANDATORY_* value */
DWORD VMPIKAPI VMPIK_GetProcessIntegrityLevel();
DWORD VMPIKAPI VMPIK_GetWindowsVersion( DWORD *pMinorVersion /* optional */ ); /* return 0 if fail or windows major version number */
BOOL VMPIKAPI VMPIK_IsWindowsXp();    /* or later Windows */
BOOL VMPIKAPI VMPIK_IsWindowsVista(); /* or later Windows */
BOOL VMPIKAPI VMPIK_IsWindows64();    /* return TRUE if current app is 32/64 bits app is running on 64 bit Windows */
VOID VMPIKAPI VMPIK_GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);

/* Return FALSE if run elevated failed or process allready has elevation level same as bElevated (if lpExeName is 0)
   lpParams can be 0 
   if lpExeName is 0, current executable will be started
*/
BOOL VMPIKAPI VMPIK_RunElevatedA( HWND hWnd, BOOL bElevated, LPCSTR  lpcExeName, LPCSTR  lpcParams, LPCSTR  lpcDirectory);
BOOL VMPIKAPI VMPIK_RunElevatedW( HWND hWnd, BOOL bElevated, LPCWSTR lpcExeName, LPCWSTR lpcParams, LPCWSTR lpcDirectory);


/* Automaticaly uses classic or 'Vista' file dialogs
   NOTE: lpszFilenameBuf must be initialized by zero in lpszFilenameBuf[0] or must contain file name used to initialize dialog.
   If pFilterIndex taken and function returns TRUE, *pFilterIndex contains index of selected filter, 1 - first filter, 2 - second, and so on;
   *pFilterIndex contains 0 if there is no selected filter at all.
 */
BOOL VMPIKAPI VMPIK_OpenFileDialogA( HWND hWndParent, DWORD osfdFlags, LPCSTR  lpszDialogTitle, LPCSTR  lpszDefExt, LPCSTR  lpszFilter, LPCSTR  lpszInitialDir, LPSTR  lpszFilenameBuf, DWORD dwBufSize, /*out*/ DWORD *pFilterIndex );
BOOL VMPIKAPI VMPIK_OpenFileDialogW( HWND hWndParent, DWORD osfdFlags, LPCWSTR lpszDialogTitle, LPCWSTR lpszDefExt, LPCWSTR lpszFilter, LPCWSTR lpszInitialDir, LPWSTR lpszFilenameBuf, DWORD dwBufSize, /*out*/ DWORD *pFilterIndex );
                                                                                                                                               
BOOL VMPIKAPI VMPIK_SaveFileDialogA( HWND hWndParent, DWORD osfdFlags, LPCSTR  lpszDialogTitle, LPCSTR  lpszDefExt, LPCSTR  lpszFilter, LPCSTR  lpszInitialDir, LPSTR  lpszFilenameBuf, DWORD dwBufSize, /*out*/ DWORD *pFilterIndex );
BOOL VMPIKAPI VMPIK_SaveFileDialogW( HWND hWndParent, DWORD osfdFlags, LPCWSTR lpszDialogTitle, LPCWSTR lpszDefExt, LPCWSTR lpszFilter, LPCWSTR lpszInitialDir, LPWSTR lpszFilenameBuf, DWORD dwBufSize, /*out*/ DWORD *pFilterIndex );

BOOL VMPIKAPI VMPIK_SetThreadLocaleAndUiLang( WORD langid );
/* lpszLangId can be in form lang-COUNTRY, lang_COUNTRY or langCOUNTRY: enuUS, en_US, enUS */
WORD VMPIKAPI VMPIK_GetLangIdByStringA( LPCSTR lpszLangId );
WORD VMPIKAPI VMPIK_GetLangIdByStringW( LPCWSTR lpszLangId);

BOOL VMPIKAPI VMPIK_SetThreadLocaleAndUiLangByLangNameA( LPCSTR lpszLangId  );
BOOL VMPIKAPI VMPIK_SetThreadLocaleAndUiLangByLangNameW( LPCWSTR lpszLangId );

/* Parse serial number format into pSerialNumberNumChars (array of 16 UINTs at least)
   strFormat can be in form N-M-K-L - N, M, K, L - integers
             or ####-####-####-####
             or mixed such N-####-K-L
   Symbol '-' in format string means sepChar
   sepChar - of 0 taken, '-' will be used
   Return: number of successfully parsed parts, number of total found parts will be placed to pNumPartsFound (if taken)
*/
UINT VMPIKAPI VMPIK_ParseSerialNumberFormatA( LPCSTR  strFormat, CHAR  sepChar, UINT *pSerialNumberNumChars, UINT *pNumPartsFound);
UINT VMPIKAPI VMPIK_ParseSerialNumberFormatW( LPCWSTR strFormat, WCHAR sepChar, UINT *pSerialNumberNumChars, UINT *pNumPartsFound);

Протектор-нейтральные функции чтения/записи данных активации

  Скрытый текст
/* Return 0 if ok
   VMPIK_ACTIVATION_SMALL_BUFFER   - if buffer is not enough size
   VMPIK_ACTIVATION_NO_CONNECTION  - if failed to read/write file or registry; try GetLastError to get WIN API error code
*/
/* hRootKey - put 0 if file used, HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER for registry 
   if file used and lpcRegValOrFileName is 0, lpcRegOrFilePath must contain file name
 */
INT VMPIKAPI VMPIK_ActivationCodeReadA   ( DWORD acfFlags, HKEY hRootKey, LPCSTR  lpcRegOrFilePath, LPCSTR  lpcRegValOrFileName, LPSTR lpActivationCodeBuf, UINT ActivationCodeBufSize );
INT VMPIKAPI VMPIK_ActivationCodeReadW   ( DWORD acfFlags, HKEY hRootKey, LPCWSTR lpcRegOrFilePath, LPCWSTR lpcRegValOrFileName, LPSTR lpActivationCodeBuf, UINT ActivationCodeBufSize );
INT VMPIKAPI VMPIK_ActivationCodeWriteA  ( DWORD acfFlags, HKEY hRootKey, LPCSTR  lpcRegOrFilePath, LPCSTR  lpcRegValOrFileName, LPCSTR lpcActivationCode );
INT VMPIKAPI VMPIK_ActivationCodeWriteW  ( DWORD acfFlags, HKEY hRootKey, LPCWSTR lpcRegOrFilePath, LPCWSTR lpcRegValOrFileName, LPCSTR lpcActivationCode );
BOOL VMPIKAPI VMPIK_ActivationCodeTestIsWritableA( DWORD acfFlags, HKEY hRootKey, LPCSTR  lpcRegOrFilePath );
BOOL VMPIKAPI VMPIK_ActivationCodeTestIsWritableW( DWORD acfFlags, HKEY hRootKey, LPCWSTR lpcRegOrFilePath );
INT VMPIKAPI VMPIK_ActivationCodeRemoveA ( DWORD acfFlags, HKEY hRootKey, LPCSTR  lpcRegOrFilePath, LPCSTR  lpcRegValOrFileName );
INT VMPIKAPI VMPIK_ActivationCodeRemoveW ( DWORD acfFlags, HKEY hRootKey, LPCWSTR lpcRegOrFilePath, LPCWSTR lpcRegValOrFileName );
BOOL VMPIKAPI VMPIK_ActivationCodeIsStoredOnComputerA( DWORD acfFlags, HKEY hRootKey, LPCSTR  lpcRegOrFilePath, LPCSTR  lpcRegValOrFileName );
BOOL VMPIKAPI VMPIK_ActivationCodeIsStoredOnComputerW( DWORD acfFlags, HKEY hRootKey, LPCWSTR lpcRegOrFilePath, LPCWSTR lpcRegValOrFileName );

/* Return TRUE if success, FALSE overwise
   if bTrialState==(BOOL)-1 then trial state will be cleared and further reading will returns 'Undefined' trial state
 */
BOOL VMPIKAPI VMPIK_ActivationWriteTrialStateA(DWORD acfFlags, HKEY hRootKey, LPCSTR  lpcRegOrFilePath, LPCSTR  lpcRegValOrFileName, BOOL bTrialState );
BOOL VMPIKAPI VMPIK_ActivationWriteTrialStateW(DWORD acfFlags, HKEY hRootKey, LPCWSTR lpcRegOrFilePath, LPCWSTR lpcRegValOrFileName, BOOL bTrialState );
/* Return TRUE if trial mode is on, FALSE - trial mode off (full version used), (BOOL)-1 if no information 
   Do not forget to save trial state information from setup programm if app activated using the trial serial during setup process
 */
BOOL VMPIKAPI VMPIK_ActivationReadTrialStateA(DWORD acfFlags, HKEY hRootKey, LPCSTR  lpcRegOrFilePath, LPCSTR  lpcRegValOrFileName );
BOOL VMPIKAPI VMPIK_ActivationReadTrialStateW(DWORD acfFlags, HKEY hRootKey, LPCWSTR lpcRegOrFilePath, LPCWSTR lpcRegValOrFileName );

BT>>>У меня обычный QMessageBox с названием сайта в качестве копирайта.
M>>А Ctrl+C (Ctrl+Ins) поддерживается?
M>>Чтобы скопировать всю инфу о программе, например, при обращении в саппорт?

BT>Проверил — оказывается поддерживается На венде по крайней мере, мак лень запускать.

Хм, прикольно, но это Qt надо таскать, это хорошо, когда аппа на Qt и написана. А мое и из дельфей можно вызывать, и таскать ничего не надо. Ну и некоторая информация о системе собирается без лишних телодвижений. Вот пример, по Ctrl+C в приведенном диалоге в буфере появится такое:

About VMPIK Demo
----------------------------------------
VMPIK Demo App
VMProtect Integration Kit Demo application
Demonstrates the basic features of the VMPIK.
Version: 1.0 alpha

(c) 2013 PureFractalSolutions. All rights reserved.
http://vmpkit.com
----------------------------------------
Trial version
Registered to: Tester (test@vmpkit.com)
Expires: 12/24/2016
----------------------------------------
Microsoft Windows 6.1/x64, build 7601, Service Pack 1
CPU: 4 X x64
Memory: 8155Mb, used: 68%
----------------------------------------


Думаю, те, кто прикупил VMProtect Ultimate+Web License Manager, заглянут и ко мне. Хотя, спорить не буду, все вообщем-то довольно просто, гугл, медитация и пара недель времени позволяют обойтись и без моего пака
Маньяк Робокряк колесит по городу
Re[4]: Диалог About
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.12.13 22:22
Оценка:
Здравствуйте, Brice Tribbiani, Вы писали:

M>>Я тут сначала для себя кой-какой пак делал, а потом решил сделать его на продажу, коллегам шароварщикам .

M>>В том числе туда входит и гибко настраиваемый диалог About, с картинками, ссылками, копирайтами, красивыми шрифтами и прочим блекджекомб, правда только Win32, зато никаких зависимостей, весь пак кил 150 весит.

BT>Без шансов Хотя нарисовал нормально.


Ну, попробовать все равно стоило. Все равно для себя делал почти все то же
(Хотя что я вру, для универсальности пришлось потрудится побольше )

А вот для примера тот же диалог, просто пару битов во флагах по другому задал:
  Скрытый текст
Маньяк Робокряк колесит по городу
Re: Диалог About
От: Figaro Россия  
Дата: 15.12.13 02:44
Оценка:
Я лично люблю, все продукты состоят из небычайно грандиозного ебаута
avalon/1.0.433
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.