Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Wymiary okna programu, AutoSizer i rozważania filozoficzne

Wiele rzeczy można sobie na komputerze ułatwić. Można powiedzieć, że komputer zrobi za nas dowolną rzecz, jaką sobie wymyślimy. Problem polega na tym, że najpierw trzeba go tego "nauczyć". Innymi słowy trzeba przygotować algorytm postępowania oraz narzędzia, dzięki którym osiągniemy zamierzony efekt.

W warunkach domowo-biurowych - jeżeli akurat nie mamy zamiaru nauczenia naszego laptopa, żeby nas zawiózł do pracy naszym samochodem - wystarczą dostępne narzędzia programowe i ich optymalna konfiguracja lub ewentualnie, jeżeli jesteśmy w stanie, stworzenie własne prostych narzędzi.

Jak już napisałem na początku możliwości realizacji naszych potrzeb są ograniczone tylko naszymi umiejętnościami i chęcią poświęcenia odpowiedniej ilości czasu. Gdybym opisał Wam wszystkie narzędzia, które sam sobie stworzyłem, aby osiągnąć efekty dokładnie takie jakich oczekiwałem, być może w reakcji usłyszałbym salwy śmiechu. Daruję więc sobie i przywołam tylko jeden, mało spektakularny przykład. Zatem będzie: z jednej strony - instruktarzowo, z drugiej - opis pokaże, jak w różny sposób można osiągnąć zbliżony efekt, choć nie zawsze idealny. A, tym samym, że aby osiągnąć efekt idealnie taki jak oczekiwany, trzeba włożyć nieco więcej pracy niż w rozwiązaniu najprostszym. Pytanie tylko: czy warto?

Cel:

otwieranie okna programu zawsze w tym samym położeniu i rozmiarze; program nie zapamiętuje wymiarów okna; (w tym przypadku - program: VirtualDub)

Rozwiązanie nr 1:

Zgodnie z tym co napisałem we wstępie: najczęściej wystarczają dostępne narzędzia i ich dobra konfiguracja. W tym przypadku: program AutoSizer. Programowi można przypisać aby po włączeniu dowolnego programu okno tego programu miało określony wymiar i położenie. AutoSizer musi być uruchomiony - więc, żeby nie było konieczności pamiętania o włączeniu go, trzeba zaznaczyć opcję startu z systemem w ustawieniach programu.

Owszem dla większości rozwiązanie nr 1 zakończyłoby problem. Niestety nie dla mnie. Ilość programów uruchamianych wraz ze startem systemu ograniczam do minimum. Jeżeli coś nie musi działać od razu - niech nie działa. Nie wchodziło też w grę ręczne uruchamianie programu przed włączeniem VirtualDuba.

Rozwiązanie nr 2:

Należało więc sprawić aby programu po jednym kliknięciu startowały jeden po drugim. I tu nasuwa się oczywiste rozwiązanie: utworzenie pliku bat, który zrobi to za nas. W miejscu z którego uruchamiamy program (menu Start lub pulpit) zmieniamy skrót aby odwoływał się do pliku bat zamiast do programu (ikonka zostaje :). Jeżeli nie chcemy oglądać okna wiersza poleceń możemy w opcjach skrótu ustawić "uruchom zminimalizowane", co spowoduje, że zminimalizowane okno wiersza poleceń pojawi się tylko na chwilę w pasku zadań aż uruchomią się właściwe programy. Plik bat powinien wyglądać tak:@echo off cd "C:\Program Files\Akcesoria\AutoSizer" start AutoSizer.exe PING -n 2 127.0.0.1>nul cd "C:\Program Files\Akcesoria\VirtualDubMod 1.6.0.0 Surround" start VirtualDubMod.exeJa z umiejętnością pisania skryptów jestem nieco na bakier, więc nie wiem jaki jest najlepszy sposób na odczekanie dwóch sekund, które trzeba dać AutoSizer'owi na uruchomienie. Niestety żadne tradycyjne Pause czy Wait z parametrem czasowym nie dawało efektu, natomiast natknąłem się na rozwiązanie wykorzystujące PING. Skoro działa - zostało.

Niestety efekt końcowy nie jest satysfakcjonujący. Dlaczego? Program AutoSizer działa w ten sposób, że jeżeli jest już uruchomiony próba ponownego uruchomienia go skutkuje przywołaniem okna ustawień, które normalnie jest schowane w zasobniku. Oczywiście niejednokrotnie mogłoby się zdarzyć, że będziemy chcieli uruchomić VirtualDuba, a AutoSizer będzie już włączony po poprzednim korzystaniu z VD. Wtedy wyskakiwałoby okno AutoSizera. Takie rozwiązanie mi nie odpowiadało.

Rozwiązanie nr 3:

Pora na wersję najbardziej rozwiniętą. Skoro już się powiedziało "a" i wdepnęło w skrypty bat, trzeba powiedzieć "b" i zrobić to jak należy. A zatem skrypt powinien sprawdzać czy konieczne jest włączenie AutoSizer'a, czy też program już działa.

Wspominałem już, że w skryptach nie jestem najmocniejszy, musiałem więc sięgnąć po pomoc do internetu i odnalazłem rozwiązanie z poleceniem "tasklist". Tasklist jest w rzeczywistości programem umożliwiającym wyświetlanie w linii komend informacji o procesach. Jak się dodatkowo okazało program Tasklist nie jest "na wyposażeniu" Windowsa XP Home Edition. Trzeba go było ściągnąć i umieścić w folderze Windowsa.

Możecie sobie wyobrazić, że dokopanie się do tych wszystkich informacji nie było wcale proste. Ostatecznie udało mi się sklecić odpowiedni skrypt, który realizował wszystko tak jak sobie to wymyśliłem:

@echo off cd "C:\Program Files\Akcesoria\AutoSizer" tasklist /FI "IMAGENAME eq AutoSizer.exe" 2>NUL | find /I /N "AutoSizer.exe">NUL if "%ERRORLEVEL%"=="1" start AutoSizer.exe PING -n 2 127.0.0.1>nul cd "C:\Program Files\Akcesoria\VirtualDubMod 1.6.0.0 Surround" start VirtualDubMod.exe

Na początku zadałem pytanie: "czy warto?. To niestety nie do końca trafne pytanie. Oczywiście celem było ułatwienie sobie pracy w ten sposób, żeby nie trzeba było za każdym razem ustawiać właściwego wymiaru okna, jednak "idealne", trzecie rozwiązanie to już kaprys - nie chcę autostartu, nie chcę minimalizować. Kaprys wynikający pewnie z psychologii. Tak po prostu mam, że nie lubię sprawy zostawić zrobionej w połowie, "częściowo dobrze", jeżeli wiem, że na pewno dałoby się to zrobić lepiej. Tyle, że "lepiej" zawsze wymaga poświęcenia czasu. (Czy ktoś zdiagnozował u siebie podobną przypadłość?)

Informacje o Tasklist:microsoft.com

Do pobrania i dodatkowe informacje po polsku:www.computerhope.com/download/winxpwww.colorconsole.de/console/pl/158 

Komentarze

0 nowych
  #1 23.02.2011 11:20

Kodowanie takich x-sekundowych timeoutów to proszenie się o kłopoty. A jeśli dysk przymuli i program nie uruchomi się przed upływem dwóch sekund? Może w tym wypadku nie będzie katastrofy, ale skoro piszesz o robieniu czegoś dobrze i nie godzisz się na półśrodki, to zdecydowanie lepszym rozwiązaniem jest poczekanie, aż program się naprawdę uruchomi.

Niestety nie wiem, jak zrobić to w pliku wsadowym, dlatego do tego celu napisałbym sobie małą aplikację w C/C++ :-)

wampir_   3 #2 23.02.2011 16:21

To dowód na to, że każdy program można rozwiązać na naprawdę wiele sposobów.
Niestety C++ znam równie dobrze co skrypty bat (ironia;) więc musiałbym jeszcze bardziej się doszkalać z dobieraniem się do WinAPI włącznie (sprawdzanie procesów).
Dużo sprawniej by mi to poszło w C# ale pisanie startera w .NET to już parodia.

I dodam, że zdaję sobie sprawę z tego że odczekanie 2 sekund może czasem nie wystarczyć, ale do tej pory zawsze uruchamia mi się poprawnie.