Page 1 of 1
TC jako Terminarz
Posted: 2024-12-19, 17:30 UTC
by eltome
Terminarz w zamyśle trochę podobny do gadżetu 'Calendar' (PHSM) , Total Organizer w panelu, a bardziej 2stronowy, zdygitalizowany "filofax" - URL obrazu. Terminarz nie ma zastępować istniejących już dodatków tylko uzupełniać, nie wykluczone by ewoluować do typowej wtyczki, biblioteki niemodularnej - oddzielnej.
Terminarz to koncepcja wsparcia zarządzania użytkownika Total Commandera. Umożliwi zaplanować jakieś zadanie, edytować liste zadań z usuwaniem, zapisać notatki używając symboli emoji (
+.), importować dane, ustawić tryb przeglądania, konfigurować języki interfejsu (tylko i osobno).
Nie zawiera instalatora, wystarczy najpierw umiejscowić w tej samej lokalizacji co \totalcmd\ , obok nowy folder skąd mogą być wczytywane polecenia, jak zakładki paneli dla odpowiedniego przedziału kalendarzowego , podkatalogi.
W Terminarzu wymieniane są poszczególne elementy:
- katalog \Terminarz\ , tworzony raz do wszelkich szablonów
- specjalny subpas przycisków terminarz.bar , dołączany do istniejących (obejmuje przełączniki zakładek etc.)
- zakładki w terminarz.tab , wstawiane jednym kliknięciem
- skrypt terminarz.wsf , docelowo służący konstruowaniu funkcjonalnych skryptów (m.in. jScript. , z rozszerzeniem.wsf - vbs zostanie niebawem wycofany przez Microsoft jako standard), deaktywujący nieprzydatne i przenoszące do kosza.
Mechanizm Terminarza oparty na systemowym 'Harmonogramie Zadań', który może samoczynnie włączać przygotowane zdarzenia o określonej dacie i czasie. Na przykład: wyświetlić przypomnienie z efektem dźwiękowym by zmienić atrybuty pliku lub nazwy, uruchomić program po sprawdzeniu jakiegoś warunku albo zakończyć inne działanie za potwierdzeniem.
Można zastosować całkowicie możliwości TC,
np. zrobić kolorem innym święta - z regWyr :
lub zakładki z ikonami , w zależności od nazwy (podfolderu) - 329 z: shell32.dll
Dodanie katalogu z linii poleceń :
Code: Select all
powerShell md %COMMANDER_PATH%\..\terminarz\
alternatywnie:
Code: Select all
cmd /k mkdir %COMMANDER_PATH%\..\terminarz\ & exit
Otwarcie zaznaczonego pliku paska przycisków:
Być może wykonanie pierwszego przycisku w katalogu Terminarza najlepiej uprościć z Power Automate i json (tzw. definiowany przepływ zdarzeń).
Pasująca ikona przycisku:
https://icon-icons.com/icon/read-open-book/187103
Re: TC jako Terminarz
Posted: 2024-12-19, 17:44 UTC
by eltome
Terminarz № 1 (oznaczenie) o treści z wyprzedzeniem jednego roku, chociaż nie jest to limit (początkowe ograniczenie zasobów, rozwijane ).
Ad. A - Odnośnie rozpoczęcia, sposobem dowolnym uwzględnionym w założeniach ;
Code: Select all
TOTALCMD#BAR#DATA
OPENBAR %COMMANDER_PATH%\..\Terminarz\terminarz.bar
shell32.dll,329
Terminarz submenu
-1
Ad. B - Pasek przycisków wystarczy skopiować i wkleić kod:
Code: Select all
; Pasek przycisków Total Commander'a SubMenu (terminarz.bar)
; Język: Polish (Poland) [pl-PL]
; ID: 1045 (0x415)
; CodePage: UTF-8 *
; * znacznik kolejności bajtów
; tested :
; System : Ms Windows 11 (64-bit)
; Program: Total Commander (64-b.)
[Buttonbar]
Buttoncount=6
;pasek nadrzędny
button1=wcmicons.dll,15
cmd1=%COMMANDER_PATH%\default.bar
menu1=Domyślny pasek T C
;separator
button2=
button3=wcmicons.dll,85
cmd3=SAVETABS2L
menu3=Zapis kopii zapasowej zakładek
menu4=załadowanie zakładki terminarza
button4=wcmicons.dll,83
cmd4=APPENDTABS %COMMANDER_PATH%\..\Terminarz\terminarz1.tab
;separator
button5=
button6=wcmicons.dll,80
cmd6=wScript %COMMANDER_PATH%\..\Terminarz\terminarz.wsf
menu6=skrypt WSF
Ad. C - Zakładka podkatalogu roku - widoki paneli sprawdzane skryptem .
Np. w drugim panelu tydzień przyszły , w pierwszym panelu tydzień poprzedni - modyfikowane
Code: Select all
[activetabs]
;...
0_path= %COMMANDER_PATH%\..\terminarz\2024\
0_options=1|0|0|0|0|0|0|
activetab=0
;... więcej wkrótce
Ad. D - JScript.
Opcjonalnie powielający dni pozostałe do końca roku - od aktualnej daty albo z parametrem .
Code: Select all
<package id="Terminarz">
<job id="Pliki-Dni">
<script language="JScript">
// Funkcja do dodawania zer z przodu, aby otrzymać liczby dwucyfrowe
function zeroPad(number, length) {
var str = '' + number;
while (str.length < length) {
str = '0' + str;
}
return str;
}
// Funkcja do konwersji numerów (miesięcy) na liczby szesnastkowe
function hexify(num) {
return num.toString(16).toUpperCase();
}
// Funkcja do pobierania dwuliterowych skrótów dni tygodnia
function getDaySuffix(day) {
var daySuffixes = ["Nd", "Pn", "Wt", "Śr", "Cz", "Pt", "So"];
return daySuffixes[day];
}
// Funkcja do tworzenia plików z nazwami w odpowiednim formacie od daty początkowej do końca roku
function createFilesFromDate(startDate) {
var endDate = new Date(startDate.getFullYear(), 11, 31);
var currentDate = new Date(startDate);
var lastFileCreated = false;
var year = startDate.getFullYear();
var fso = new ActiveXObject("Scripting.FileSystemObject");
// Sprawdź, czy katalog o nazwie roku istnieje
if (fso.FolderExists(year.toString())) {
WScript.Echo("Dane na wskazany rok zostały już wprowadzone.");
return;
}
// Utworzenie podkatalogu o nazwie roku
fso.CreateFolder(year.toString());
var firstFileCreated = false;
while (currentDate <= endDate) {
var prefix = hexify(currentDate.getMonth() + 1);
var prefix2 = zeroPad(currentDate.getDate(), 2);
var suffix = getDaySuffix(currentDate.getDay());
var fileName = year + "\\" + prefix + '-' + prefix2 + '-' + suffix + '.htm';
var file = fso.CreateTextFile(fileName, true);
if (!firstFileCreated) {
file.WriteLine("<meta charset='UTF-8'>");
file.WriteLine("🕘<br><br><hr>🕛<br><br><hr>🕒<br><br><hr>🕕<br><br><hr>");
firstFileCreated = true;
}
file.Close();
if (prefix === "C" && prefix2 === "31") {
lastFileCreated = true;
}
currentDate.setDate(currentDate.getDate() + 1);
}
if (!lastFileCreated) {
var lastDayDate = new Date(endDate);
lastDayDate.setDate(31);
var prefix = "C";
var prefix2 = "31";
var suffix = getDaySuffix(lastDayDate.getDay());
var fileName = year + "\\" + prefix + '-' + prefix2 + '-' + suffix + '.htm';
var file = fso.CreateTextFile(fileName, true);
file.Close();
}
}
// Funkcja do parsowania daty z parametru
function parseDate(dateString) {
var parts = dateString.split("-");
var year = parseInt(parts[0], 10);
var month = parseInt(parts[1], 10) - 1; // Miesiące w JavaScript są indeksowane od 0
var day = parseInt(parts[2], 10);
return new Date(year, month, day);
}
// Pobieranie bieżącej daty z kalendarza systemowego Windows lub użycie daty z parametru: YYYY-MM-DD
var today = new Date();
if (WScript.Arguments.length > 0) {
today = parseDate(WScript.Arguments(0));
}
createFilesFromDate(today);
// Wyświetlanie komunikatu końcowego
WScript.Echo("Pliki dni zostały utworzone w podkatalogu roku");
</script>
</job>
</package>
Re: TC jako Terminarz
Posted: 2024-12-19, 17:50 UTC
by eltome
Terminarz № 2
wprowadzane ulepszenia:
· kompletny pasek przycisków,
· podkatalog z szablonami skrótów na rok 2026, ładowanie układu zakładek
· skrypty integrujące np. Wpis terminu do terminów w Harmonogramie Zadań i odznaczający dzień w Terminarzu , parametry , ukrywane minione dni
Code: Select all
<job id="RunPowerShell">
<script language="JScript">
/* wywołanie ps */
var objShell = new ActiveXObject("WScript.Shell");
//objShell.Run("powershell.exe -Command \"Write-Output 'komunikat!'\"", 1, true);
objShell.Run("powershell.exe -File \"C:\\sciezka\\do\\script.ps1\"", 1, true);
</script>
</job>
Code: Select all
#kodowanie UTF-8 z sygnaturą
<#
skrypt tworzy folder z zadaniem w Harmonogramie
#>
# przykładowy parametr: 2024-12-20T21:56:00
param (
[string]$TaskDateTime
)
# Sprawdzenie, czy podano parametr i czy jest w prawidłowym formacie
if (-not $TaskDateTime -or -not $TaskDateTime -match '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$') {
Write-Output "Nie podano parametru lub nieprawidłowy format. Użyj formatu: RRRR-MM-DDTHH:MM:SS"
exit
}
# Sprawdzenie, czy istnieje podkatalog 'terminy'
$taskFolder = "\terminy"
$taskService = New-Object -ComObject Schedule.Service
$taskService.Connect()
$rootFolder = $taskService.GetFolder("\")
$folderExists = $false
foreach ($folder in $rootFolder.GetFolders(0)) {
if ($folder.Path -eq $taskFolder) {
$folderExists = $true
break
}
}
# Utworzenie podkatalogu 'terminy', jeśli nie istnieje
if (-not $folderExists) {
$rootFolder.CreateFolder($taskFolder)
}
# Sprawdzenie, czy istnieje zadanie o nazwie 'termin'
$taskName = "termin"
$taskExists = $false
$taskFolderObj = $taskService.GetFolder($taskFolder)
foreach ($task in $taskFolderObj.GetTasks(0)) {
if ($task.Name -eq $taskName) {
$taskExists = $true
break
}
}
# Jeśli zadanie istnieje, wyświetlenie komunikatu i zakończenie skryptu
if ($taskExists) {
Write-Output "Zadanie o tej nazwie już istnieje."
exit
}
# Utworzenie zadania, jeśli nie istnieje
$taskDefinition = $taskService.NewTask(0)
$taskDefinition.RegistrationInfo.Description = "Zadanie uruchamiające efekt dźwiękowy i skrypt.wsf"
#nazwa użytkownika:
#$taskDefinition.Principal.UserId = "..."
$taskDefinition.Principal.LogonType = 3
$taskDefinition.Settings.Enabled = $true
$taskDefinition.Settings.AllowDemandStart = $true
# Ustawienie wyzwalacza na określoną datę i czas
$trigger = $taskDefinition.Triggers.Create(1)
$trigger.StartBoundary = $TaskDateTime
$trigger.Enabled = $true
# Dodanie akcji uruchamiającej efekt dźwiękowy - m.in. chimes.wav
$action1 = $taskDefinition.Actions.Create(0)
$action1.Path = "powershell.exe"
$action1.Arguments = "-c (New-Object Media.SoundPlayer '%WinDir%\Media\Alarm01.wav').PlaySync()"
# Dodanie akcji uruchamiającej skrypt.wsf ze ścieżki
$action2 = $taskDefinition.Actions.Create(0)
$action2.Path = "wscript.exe"
$action2.Arguments = "c:\paths\Terminarz\komunikat.wsf"
# Zarejestrowanie zadania
$taskFolderObj.RegisterTaskDefinition($taskName, $taskDefinition, 6, $null, $null, 3)
Write-Output "Zadanie zostało utworzone."
Re: TC jako Terminarz
Posted: 2024-12-20, 19:25 UTC
by eltome
(1 post zarezerwowany)