Skip to content

Commit

Permalink
Uninstall sources v1.10.11.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Maximus5 committed Dec 26, 2020
1 parent c46033e commit 4fbf2ce
Show file tree
Hide file tree
Showing 15 changed files with 410 additions and 122 deletions.
2 changes: 2 additions & 0 deletions Uninstall/src/FarLang.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ enum {
MEnterWaitCompletion,
MUseElevation,
MLowPriority,
MForceMsiUse,
MEnterAction,
MShiftEnterAction,
MActionUninstallWait,
Expand Down Expand Up @@ -38,6 +39,7 @@ enum {
MMenuBottomLine1,
MMenuBottomLine2,
MMenuTopLine,
MMenuTopLineN,
MListHKLMx86,
MListHKLMx64,
MListHKLM,
Expand Down
16 changes: 12 additions & 4 deletions Uninstall/src/Lang.templ
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ MLowPriority
"Запуск с &низким приоритетом"
"Start with &low priority"

MForceMsiUse
"&Всегда использовать MsiExec"
"&Force use MsiExec"

MEnterAction
"Ente&r: "
"Ente&r: "
Expand Down Expand Up @@ -175,8 +179,8 @@ MInstallDate

MBottomLine
l:// Menu's top and bottom lines
"[Shift-]Enter: run, F8: del entry, F3: info, Ctrl-R: update"
"[Shift-]Enter: run, F8: del entry, F3: info, Ctrl-R: update"
"[Shift-]Enter: run, F8: del entry, F2: sort, F3: info, Ctrl-R: update"
"[Shift-]Enter: run, F8: del entry, F2: sort, F3: info, Ctrl-R: update"

MFilter
"Filter: [%s], Entries: [%d/%d]"
Expand All @@ -187,13 +191,17 @@ MMenuBottomLine1
"{Normal priority} F7"

MMenuBottomLine2
"{Low priority} F7"
"{Low priority} F7"
" {Low priority} F7"
" {Low priority} F7"

MMenuTopLine
"Выберите действие"
"Select action"

MMenuTopLineN
"Действие для %u элементов"
"Action for %u items"

MListHKLMx86
l:// Install location (registry)
"Mx86"
Expand Down
149 changes: 134 additions & 15 deletions Uninstall/src/UnInstall.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,27 +116,70 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)

ListSize = 0;
int NewPos = -1;
for (int i=0;i<nCount;i++)
if (OldPos >= 0 && OldPos < nCount)
{
const TCHAR* DispName = p[i].Keys[DisplayName];
if (strstri(DispName,Filter)) //áåç ó÷åòà ðåãèñòðà â OEM êîäèðîâêå
if (!*Filter || strstri(p[OldPos].Keys[DisplayName],Filter)) //áåç ó÷åòà ðåãèñòðà â OEM êîäèðîâêå
NewPos = OldPos;
}
for (int i = 0; i < nCount; i++)
{
const TCHAR* DispName = p[i].Keys[DisplayName], *Find;
if (*Filter)
Find = strstri(DispName,Filter);
else
Find = DispName;
if (Find != nullptr) //áåç ó÷åòà ðåãèñòðà â OEM êîäèðîâêå
{
FLI[i].Flags &= ~LIF_HIDDEN;
if (Param2 && (i == OldPos))
{
if (FLI[i].Flags & LIF_CHECKED)
{
FLI[i].Flags &= ~LIF_CHECKED;
}
else
{
FLI[i].Flags |= LIF_CHECKED;
}
}
//áåç ó÷åòà ðåãèñòðà - à êîäèðîâêà ANSI
if (NewPos == -1 && strstri(DispName,Filter) == DispName)
if (NewPos == -1 && Find == DispName)
NewPos = i;
ListSize++;
}
else
FLI[i].Flags |= LIF_HIDDEN;
}
if (NewPos == -1) NewPos = OldPos;
if (Param1 == 0 && Param2)
{
// Ñíÿòèå èëè óñòàíîâêà ïîìåòêè (Ins)
if (Param2 == 1)
{
for (int i = (OldPos+1); i < nCount; i++)
{
if (!(FLI[i].Flags & LIF_HIDDEN))
{
OldPos = i; break;
}
}
NewPos = OldPos;
}
// Ñíÿòèå èëè óñòàíîâêà ïîìåòêè (RClick)
else if (Param2 == 2)
{
NewPos = OldPos;
}
}
else if (NewPos == -1)
{
NewPos = OldPos;
}

Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0);

Info.SendDlgMessage(hDlg,DM_LISTSET,LIST_BOX,reinterpret_cast<LONG_PTR>(&FL));

FSF.sprintf(spFilter,GetMsg(MFilter),Filter,ListSize,nCount);
StringCchPrintf(spFilter,ARRAYSIZE(spFilter), GetMsg(MFilter),Filter,ListSize,nCount);
ListTitle.Title = spFilter;
ListTitle.TitleLen = lstrlen(spFilter);
Info.SendDlgMessage(hDlg,DM_LISTSETTITLES,LIST_BOX,reinterpret_cast<LONG_PTR>(&ListTitle));
Expand Down Expand Up @@ -169,24 +212,32 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)

case DN_MOUSECLICK:
{
if (Param1 == LIST_BOX) {
if (Param1 == LIST_BOX)
{
MOUSE_EVENT_RECORD *mer = (MOUSE_EVENT_RECORD *)Param2;
if (mer->dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) {
if (mer->dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
{
// find list on-screen coords (excluding frame and border)
SMALL_RECT list_rect;
Info.SendDlgMessage(hDlg, DM_GETDLGRECT, 0, reinterpret_cast<LONG_PTR>(&list_rect));
list_rect.Left += 2;
list_rect.Top += 1;
list_rect.Right -= 2;
list_rect.Bottom -= 1;
if ((mer->dwEventFlags == 0) && (mer->dwMousePosition.X > list_rect.Left) && (mer->dwMousePosition.X < list_rect.Right) && (mer->dwMousePosition.Y > list_rect.Top) && (mer->dwMousePosition.Y < list_rect.Bottom)) {
if ((mer->dwEventFlags == 0) && (mer->dwMousePosition.X > list_rect.Left) && (mer->dwMousePosition.X < list_rect.Right) && (mer->dwMousePosition.Y > list_rect.Top) && (mer->dwMousePosition.Y < list_rect.Bottom))
{
DlgProc(hDlg, DN_KEY, LIST_BOX, KEY_ENTER);
return TRUE;
}
// pass message to scrollbar if needed
if ((mer->dwMousePosition.X == list_rect.Right) && (mer->dwMousePosition.Y > list_rect.Top) && (mer->dwMousePosition.Y < list_rect.Bottom)) return FALSE;
return TRUE;
}
else if (mer->dwButtonState == RIGHTMOST_BUTTON_PRESSED)
{
Info.SendDlgMessage(hDlg,DMU_UPDATE,0,2);
return TRUE;
}
}
}
break;
Expand All @@ -199,7 +250,7 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
if (ListSize)
{
TCHAR DlgText[MAX_PATH + 200];
FSF.sprintf(DlgText, GetMsg(MConfirm), p[Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL)].Keys[DisplayName]);
StringCchPrintf(DlgText, ARRAYSIZE(DlgText), GetMsg(MConfirm), p[Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL)].Keys[DisplayName]);
if (EMessage((const TCHAR * const *) DlgText, 0, 2) == 0)
{
if (!DeleteEntry(static_cast<int>(Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL))))
Expand All @@ -211,6 +262,7 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
return TRUE;

case (KEY_F9|KEY_SHIFT|KEY_ALT):
case (KEY_F9):
{
Configure(0);
}
Expand All @@ -222,19 +274,74 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
}
return TRUE;

case KEY_INS:
{
Info.SendDlgMessage(hDlg,DMU_UPDATE,0,1);
}
return TRUE;

case KEY_ENTER:
case KEY_SHIFTENTER:
{
if (ListSize)
{
int liChanged = 0;
int pos = static_cast<int>(Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL));
if (Param2 == KEY_ENTER)
liChanged = ExecuteEntry(pos, Opt.EnterAction, (Opt.RunLowPriority!=0));
else if (Param2 == KEY_SHIFTENTER)
liChanged = ExecuteEntry(pos, Opt.ShiftEnterAction, (Opt.RunLowPriority!=0));
int liSelected = 0, liFirst = -1;

for (int i = 0; i < nCount; i++)
{
if (FLI[i].Flags & LIF_CHECKED)
{
if (liFirst == -1)
liFirst = i;
liSelected++;
}
}

if (liSelected <= 1)
{
int liAction = (Param2 == KEY_ENTER) ? Opt.EnterAction : Opt.ShiftEnterAction;
int pos = (liFirst == -1) ? static_cast<int>(Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL)) : liFirst;
liChanged = ExecuteEntry(pos, liAction, (Opt.RunLowPriority!=0));
}
else
{
int liAction = (Param2 == KEY_ENTER) ? Opt.EnterAction : Opt.ShiftEnterAction;
bool LowPriority = (Opt.RunLowPriority!=0);

// Îáÿçàòåëüíî îæèäàíèå - äâà èíñòàëëÿòîðà ñðàçó íåäîïóñêàþòñÿ
if (liAction == Action_Menu)
{
if (EntryMenu(0, liAction, LowPriority, liSelected) < 0)
return TRUE;
}
else if (liAction == Action_Uninstall)
liAction = Action_UninstallWait;
else if (liAction == Action_Modify)
liAction = Action_ModifyWait;
else if (liAction == Action_Repair)
liAction = Action_RepairWait;

for (int pos = 0; pos < nCount; pos++)
{
if (!(FLI[pos].Flags & LIF_CHECKED))
continue;
struct FarListPos FLP;
FLP.SelectPos = pos;
FLP.TopPos = -1;
Info.SendDlgMessage(hDlg,DM_LISTSETCURPOS,LIST_BOX,reinterpret_cast<LONG_PTR>(&FLP));
int li = ExecuteEntry(pos, liAction, LowPriority);
if (li == -1)
break; // îòìåíà
if (li == 1)
liChanged = 1;
}
}

if (liChanged == 1)
{
Info.SendDlgMessage(hDlg,DMU_UPDATE,1,0);
}
}
}
return TRUE;
Expand Down Expand Up @@ -273,6 +380,7 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
return TRUE;

case KEY_F3:
case KEY_F4:
{
if (ListSize)
{
Expand All @@ -282,6 +390,13 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
}
return TRUE;

case KEY_F2:
{
Opt.SortByDate = !Opt.SortByDate;
Info.SendDlgMessage(hDlg,DMU_UPDATE,1,0);
}
return TRUE;

case KEY_BS:
{
if (lstrlen(Filter))
Expand Down Expand Up @@ -372,12 +487,14 @@ int WINAPI Configure(int ItemNumber)
//BOOL bEnterWaitCompletion = (Opt.EnterFunction != 0);
BOOL bUseElevation = (Opt.UseElevation != 0);
BOOL bLowPriority = (Opt.RunLowPriority != 0);
BOOL bForceMsiUse = (Opt.ForceMsiUse != 0);

Config.AddCheckbox(MShowInEditor, &bShowInEditor);
Config.AddCheckbox(MShowInViewer, &bShowInViewer);
//Config.AddCheckbox(MEnterWaitCompletion, &bEnterWaitCompletion);
Config.AddCheckbox(MUseElevation, &bUseElevation);
Config.AddCheckbox(MLowPriority, &bUseElevation);
Config.AddCheckbox(MForceMsiUse, &bForceMsiUse);

Config.AddSeparator();

Expand Down Expand Up @@ -411,12 +528,14 @@ int WINAPI Configure(int ItemNumber)
//Opt.EnterFunction = bEnterWaitCompletion;
Opt.UseElevation = bUseElevation;
Opt.RunLowPriority = bLowPriority;
Opt.ForceMsiUse = bForceMsiUse;

SetRegKey(HKCU,_T(""),_T("WhereWork"),(DWORD) Opt.WhereWork);
SetRegKey(HKCU,_T(""),_T("EnterAction"),(DWORD) Opt.EnterAction);
SetRegKey(HKCU,_T(""),_T("ShiftEnterAction"),(DWORD) Opt.ShiftEnterAction);
SetRegKey(HKCU,_T(""),_T("UseElevation"),(DWORD) Opt.UseElevation);
SetRegKey(HKCU,_T(""),_T("RunLowPriority"),(DWORD) Opt.RunLowPriority);
SetRegKey(HKCU,_T(""),_T("ForceMsiUse"),(DWORD) Opt.ForceMsiUse);
}

return FALSE;
Expand Down
Loading

0 comments on commit 4fbf2ce

Please sign in to comment.