Skip to content

Commit df693f3

Browse files
redddcycloneg-bougard
authored andcommitted
Added "Enable screenshot capture" settings button
This controls whether a screenshot is taken when clicking the "New ticket" button
1 parent fdea063 commit df693f3

File tree

4 files changed

+202
-139
lines changed

4 files changed

+202
-139
lines changed

CHANGES

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ Future release
1616
* Fixed a bug where "New Ticket" showed an error if the server URL didn't start
1717
with "http://" or "https://". This error persisted even after setting a custom
1818
new ticket URL and the Monitor wasn't closed and reopened after this.
19+
20+
* Added a setting to control whether a screenshot is taken when clicking the
21+
"New Ticket" button.
1922

2023

2124
1.3.1

GLPI-AgentMonitor.cpp

+65-26
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ WCHAR szNewTicketURL[300];
121121
// Agent logfile
122122
WCHAR szLogfile[MAX_PATH];
123123

124+
// Enable screenshot capture
125+
BOOL bNewTicketScreenshot = TRUE;
126+
124127
// Global string buffer
125128
WCHAR szBuffer[256];
126129
DWORD dwBufferLen = sizeof(szBuffer) / sizeof(WCHAR);
@@ -812,6 +815,14 @@ int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance
812815
wsprintf(szNewTicketURL, L"%s/front/ticket.form.php", szServer);
813816
}
814817
}
818+
819+
// Get new ticket screenshot enable
820+
DWORD dwNewTicketScreenshotTmp = NULL;
821+
DWORD dwNewTicketScreenshotLen = sizeof(dwNewTicketScreenshotTmp);
822+
lRes = RegQueryValueExW(hk, L"NewTicket-Screenshot", 0, NULL, (LPBYTE)&dwNewTicketScreenshotTmp, &dwNewTicketScreenshotLen);
823+
if (lRes == ERROR_SUCCESS) {
824+
bNewTicketScreenshot = (dwNewTicketScreenshotTmp == 1);
825+
}
815826
}
816827

817828
RegCloseKey(hk);
@@ -938,36 +949,43 @@ LRESULT CALLBACK SettingsDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM
938949
// Initialize dialog strings
939950
LoadString(hInst, IDS_SETTINGS, szBuffer, dwBufferLen);
940951
SetWindowText(hWnd, szBuffer);
941-
LoadString(hInst, IDS_SETTINGS_NEWTICKETURL, szBuffer, dwBufferLen);
942-
SetDlgItemText(hWnd, IDC_GROUPBOX_NEWTICKETURL, szBuffer);
952+
LoadString(hInst, IDS_SETTINGS_NEWTICKET, szBuffer, dwBufferLen);
953+
SetDlgItemText(hWnd, IDC_SETTINGS_GROUPBOX_NEWTICKET, szBuffer);
954+
LoadString(hInst, IDS_SETTINGS_NEWTICKET_URL, szBuffer, dwBufferLen);
955+
SetDlgItemText(hWnd, IDC_SETTINGS_TEXT_NEWTICKET_URL, szBuffer);
956+
LoadString(hInst, IDS_SETTINGS_NEWTICKET_SCREENSHOT, szBuffer, dwBufferLen);
957+
SetDlgItemText(hWnd, IDC_SETTINGS_CHECKBOX_NEWTICKET_SCREENSHOT, szBuffer);
943958
LoadString(hInst, IDS_CANCEL, szBuffer, dwBufferLen);
944-
SetDlgItemText(hWnd, IDC_BTN_CANCEL, szBuffer);
959+
SetDlgItemText(hWnd, IDC_SETTINGS_BTN_CANCEL, szBuffer);
945960
LoadString(hInst, IDS_SAVE, szBuffer, dwBufferLen);
946-
SetDlgItemText(hWnd, IDC_BTN_SAVE, szBuffer);
961+
SetDlgItemText(hWnd, IDC_SETTINGS_BTN_SAVE, szBuffer);
947962

948963
// Fill values
949-
SendDlgItemMessage(hWnd, IDC_SETTINGS_EDIT_NEWTICKETURL, WM_SETTEXT, 0, (LPARAM)szNewTicketURL);
964+
SendDlgItemMessage(hWnd, IDC_SETTINGS_EDIT_NEWTICKET_URL, WM_SETTEXT, 0, (LPARAM)szNewTicketURL);
965+
SendDlgItemMessage(hWnd, IDC_SETTINGS_CHECKBOX_NEWTICKET_SCREENSHOT, BM_SETCHECK, (bNewTicketScreenshot ? BST_CHECKED : BST_UNCHECKED), 0);
950966

951967
return TRUE;
952968
}
953969
case WM_COMMAND:
954970
{
955971
switch (LOWORD(wParam))
956972
{
957-
case IDC_SETTINGS_EDIT_NEWTICKETURL:
958-
// Prevent closing the dialog when clicking the text box
973+
case IDC_SETTINGS_EDIT_NEWTICKET_URL:
974+
case IDC_SETTINGS_CHECKBOX_NEWTICKET_SCREENSHOT:
975+
// Prevent closing the dialog when clicking these components
959976
return TRUE;
960-
case IDC_BTN_SAVE:
977+
case IDC_SETTINGS_BTN_SAVE:
961978
{
962979
HKEY hk, hkMonitor;
963980
LONG lRes;
964981
WCHAR szKey[MAX_PATH];
965982

966983
// Get settings from dialog
967984
WCHAR szTempNewTicketURL[300];
968-
LRESULT copiedChars = SendMessage(GetDlgItem(hWnd, IDC_SETTINGS_EDIT_NEWTICKETURL), WM_GETTEXT,
985+
LRESULT copiedChars = SendMessage(GetDlgItem(hWnd, IDC_SETTINGS_EDIT_NEWTICKET_URL), WM_GETTEXT,
969986
sizeof(szTempNewTicketURL), (LPARAM)szTempNewTicketURL);
970987
szTempNewTicketURL[copiedChars] = '\0';
988+
BOOL bTempNewTicketScreenshot = IsDlgButtonChecked(hWnd, IDC_SETTINGS_CHECKBOX_NEWTICKET_SCREENSHOT);
971989

972990
// Save settings in registry
973991
wsprintf(szKey, L"SOFTWARE\\%s", SERVICE_NAME);
@@ -1000,11 +1018,25 @@ LRESULT CALLBACK SettingsDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM
10001018
return FALSE;
10011019
}
10021020
}
1021+
10031022
// Save new ticket URL if it was changed
1004-
if (wcscmp(szTempNewTicketURL, szNewTicketURL) != 0) {
1023+
if (wcscmp(szTempNewTicketURL, szNewTicketURL) != 0)
1024+
{
10051025
size_t szTempNewTicketURLLen = wcslen(szTempNewTicketURL) * sizeof(WCHAR);
1006-
lRes = RegSetValueEx(hkMonitor, L"NewTicket-URL", 0, REG_SZ,
1007-
(LPBYTE)szTempNewTicketURL, (DWORD)szTempNewTicketURLLen);
1026+
lRes = RegSetValueEx(hkMonitor, L"NewTicket-URL", 0, REG_SZ, (LPBYTE)szTempNewTicketURL, (DWORD)szTempNewTicketURLLen);
1027+
if (lRes != ERROR_SUCCESS)
1028+
{
1029+
LoadStringAndMessageBox(hInst, hWnd, IDS_ERR_SAVE_SETTINGS, IDS_ERROR, MB_OK | MB_ICONERROR, lRes);
1030+
return FALSE;
1031+
}
1032+
}
1033+
1034+
// Save new ticket screenshot setting if it was changed
1035+
// Save new ticket URL if it was changed
1036+
if (bTempNewTicketScreenshot != bNewTicketScreenshot)
1037+
{
1038+
lRes = RegSetValueEx(hkMonitor, L"NewTicket-Screenshot", 0, REG_DWORD,
1039+
(LPBYTE)&bTempNewTicketScreenshot, sizeof(bTempNewTicketScreenshot));
10081040
if (lRes != ERROR_SUCCESS)
10091041
{
10101042
LoadStringAndMessageBox(hInst, hWnd, IDS_ERR_SAVE_SETTINGS, IDS_ERROR, MB_OK | MB_ICONERROR, lRes);
@@ -1023,11 +1055,12 @@ LRESULT CALLBACK SettingsDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM
10231055
// Store new ticket URL in memory
10241056
wcscpy_s(szNewTicketURL, szTempNewTicketURL);
10251057
}
1058+
bNewTicketScreenshot = bTempNewTicketScreenshot;
10261059

10271060
PostMessage(hWnd, WM_CLOSE, 0, 0);
10281061
return TRUE;
10291062
}
1030-
case IDC_BTN_CANCEL:
1063+
case IDC_SETTINGS_BTN_CANCEL:
10311064
PostMessage(hWnd, WM_CLOSE, 0, 0);
10321065
return TRUE;
10331066
}
@@ -1093,21 +1126,27 @@ LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
10931126
case IDC_BTN_NEWTICKET:
10941127
EndDialog(hWnd, NULL);
10951128
case ID_RMENU_NEWTICKET: {
1096-
// Take screenshot to clipboard (simulating PrintScreen) and open the ticket URL
1097-
INPUT ipInput[2] = { 0 };
1098-
Sleep(300);
1099-
ipInput[0].type = INPUT_KEYBOARD;
1100-
ipInput[0].ki.wVk = VK_SNAPSHOT;
1101-
ipInput[1] = ipInput[0];
1102-
ipInput[1].ki.dwFlags |= KEYEVENTF_KEYUP;
1103-
SendInput(2, ipInput, sizeof(INPUT));
1129+
if (bNewTicketScreenshot) {
1130+
// Take screenshot to clipboard (simulating PrintScreen)
1131+
INPUT ipInput[2] = { 0 };
1132+
Sleep(300);
1133+
ipInput[0].type = INPUT_KEYBOARD;
1134+
ipInput[0].ki.wVk = VK_SNAPSHOT;
1135+
ipInput[1] = ipInput[0];
1136+
ipInput[1].ki.dwFlags |= KEYEVENTF_KEYUP;
1137+
SendInput(2, ipInput, sizeof(INPUT));
1138+
}
1139+
// Open the new ticket URL
11041140
ShellExecute(NULL, L"open", szNewTicketURL, NULL, NULL, SW_SHOWNORMAL);
11051141

1106-
// Notify user that a screenshot is in the clipboard
1107-
nid.uFlags |= NIF_INFO;
1108-
LoadString(hInst, IDS_NOTIF_NEWTICKET_TITLE, nid.szInfoTitle, sizeof(nid.szInfoTitle) / sizeof(WCHAR));
1109-
LoadString(hInst, IDS_NOTIF_NEWTICKET, nid.szInfo, sizeof(nid.szInfo) / sizeof(WCHAR));
1110-
Shell_NotifyIcon(NIM_MODIFY, &nid);
1142+
if (bNewTicketScreenshot) {
1143+
// Notify user that a screenshot is in the clipboard
1144+
nid.uFlags |= NIF_INFO;
1145+
LoadString(hInst, IDS_NOTIF_NEWTICKET_TITLE, nid.szInfoTitle, sizeof(nid.szInfoTitle) / sizeof(WCHAR));
1146+
LoadString(hInst, IDS_NOTIF_NEWTICKET, nid.szInfo, sizeof(nid.szInfo) / sizeof(WCHAR));
1147+
Shell_NotifyIcon(NIM_MODIFY, &nid);
1148+
}
1149+
11111150
return TRUE;
11121151
}
11131152
// Settings

0 commit comments

Comments
 (0)