Skocz do zawartości

Burn

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Wszystko napisane przez Burn

  1. Burn

    okna dialogowe

    Witam Rozumiem że chodzi o dialog wywoływany za pomocą GetOpenFileName lub GetSaveFileName jeżeli tak to: Struktura OPENFILENAME ma pole LPOFNHOOKPROC lpfnHook; . W tym polu podajesz adres nowej procedurki obsługi dialogu i wszystkie kontrolki możesz obsługiwać tak jakby były przez Ciebie utworzone. Resztę sprawdź w helpie. Jeżeli jednak nie zrozumiesz tego to mogę ci napisać przykład ale w MASM jażeli będziesz zainteresowany to napisz. Pozdro
  2. Witam Niestety (a może na szczęscie) pisząc program pod Windows nie można kożystać bezpośrednio z przerwań. Wyjątkiem są sterowniki VXD ,które były obecne w starszych wersjach Windows, w Windows XP nie mozna uruchomić statycznego sterownika VXD pozostają jeszcze pliki SYS. Niestety Microsoft publicznie nie udostępnia żadnego SDK (DDK) (przynajmniej ja nie widziałem) na temat sterowników pod Windows. Ale to w tym wypadku nie ma znaczenia bo niesądzę, że aby uzyskać informacje o monitorze trzeba było korzystać z przerwań. Pozdro
  3. Witam Tworzysz sobie zmienne globalne i deklarujesz. #include <windows.h> // -= tu deklaracje pozostałych modółów =- // -= tu ewentualne nagłówki procedur =- // -= a tutaj deklaracje zmiennych globalnych np.: => HWND hDialog; HWND hZdanie; // -= no i dopiero dalej właśiwy kod programu =- Mam nadzieję, że teraz już wszystko jest jasne :D Podro
  4. Witam hDialog w przykładzie to uchwyt kontrolki do której dodajesz tekst (durzego RichEdit-a) zwraca go funkcja CreateWindow lub CreateWindowEx w zależności którą funkcją tworzysz wspomnianego RichEdit-a. hZdanie to jest uchwyt kontrolki do której wpisujesz tekst Pozdro
  5. Witam Niestety obawiam się że z twoją wiedzą takiego programu nie napiszesz :( Ciężko cokolwiek na ten temat z pamięci powiedzieć... Może ktoś inny będzie wiedział. Spróbuj może użyć Google Napisałem trochę inaczej :) Po kliknięciu na okienko program wyłącza monitor, czeka 10 sek. i włącza go spowrotem (nie chciałem Cię narazać na próbę szukania okienka przy wyłączonym monitorze). Jak widać to co wydawało Ci się najtrudniejsze w rzeczywistości jest najprostrze :D //---- case WM_LBUTTONDOWN: SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER,0); //Wył Monitor Sleep(10000); //Poczekaj 10 sekund SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER,1); //Wł Monitor break ; //---- Pozdro
  6. Witam Jak widzę już po problemie, codeguy rzeczywiście Twoja procedurka jest bardziej zoptymalizowana od mojej bo moja była pisana pod kątem wstawienia nowej linii w podanej linii tekstu a w tym wypadku (przy wstawianiu na końcu) rzeczywiście można prościej. Mi się też to przyda. Thanx Pozdrawiam
  7. Witam No to nie rozumiem w czym problem przecież napisalem jak wstawić tekst do nowej linii a z resztą chyba niema problemu ;Pobierz tekst z RighEdit invoke GetWindowText, hRichEditMaly, addr szBufText, 1024 ;Sprawdź do której linii wstawić invoke SendMessage, hRichEditDuzy, EM_GETLINECOUNT, 0, 0 ;Kod funkcji InsertText masz w moim poprzednim poście ;w eax jest numer linii d o której wstawiamy tekst ;(w tym wypadku na koniec) invoke InsertText, hRichEditDuzy, eax, addr szBufText ;Wyczyść tekst invoke SetWindowText, hRichEditMaly, NULL PS: Moja funkcja InsertText ma pewną wadę: Jeżeli w RichEdit znajduje sie już tekst wstawiony np. przez SetWindowText to na jego końcu nie ma znaków końca linii #13#10 więc przed wstawieniem tekstu trzeba wstaić te znaki na początku wstawianego tekstu. Jeżeli natomiast użyjesz InsertText na wyczyszczonym RichEdit to i czały czas za pomocą tej funkcji dokładasz nowy tekst to niema problemu :) PS2: Jeżeli cos nie działa albo nie umiesz przetłymaczyć tego na C++ to napisz spróbuję wyjaśnić o co chodzi. Bo ten kod działa sprawdziłem (przynajmniej w tekscie bez obrazków) :D Pozdro
  8. Witam Nie wiem czy dobrze zrozumiałem ale jeżeli chodzi o procedurę wstawiającą tekst jako dowolną nową linię w RichEdit (w Edit też prawdopodobnie działa) to zobacz coś takiego (kod w MASM :D ): InsertText proc uses esi hEdit:HWND, LineIndex: DWORD, lpText: LPSTR LOCAL SelStart, LineLen: DWORD ;Rozmiar bufora rowny maksymalemu długości linji + 2 LOCAL Buf[1024]: BYTE LOCAL lpNewLine[3]: BYTE lea esi, lpNewLine mov dword ptr [esi], 0A0Dh ;Znaki nowej linii do buforka #13#10 .if LineIndex > 0 invoke SendMessage, hEdit, EM_LINEINDEX, LineIndex, 0 mov SelStart, eax .if eax >= 0 ;Kopiujemy wstawiany Tekst do buforka invoke lstrcpy, addr Buf, lpText ;Dołanczamy znaki nowej linii #13#10 do buforka invoke lstrcat, addr Buf, addr lpNewLine .else invoke SendMessage, hEdit, EM_LINEINDEX, LineIndex - 1, 0 mov SelStart, eax .if eax < 0 ret .endif invoke SendMessage, hEdit, EM_LINELENGTH, eax, 0 mov LineLen, eax .if eax < 0 ret .endif add SelStart, eax ;SelStart = SelStart + LineLen ;Kopiujemy znaki nowej linii #13#10 do buforka invoke lstrcpy, addr Buf, addr lpNewLine ;Dołanczamy wstawiany Tekst do buforka invoke lstrcat, addr Buf, lpText .endif invoke SendMessage, hEdit, EM_SETSEL, SelStart, SelStart invoke SendMessage, hEdit, EM_REPLACESEL, 0, addr Buf .endif ret InsertText endp Parametry: hEdit:HWND - Uchwyt RichEdit LineIndex: DWORD - Nr. linii do ktorej ma być wstaiony tekst lpText: LPSTR - Adres buforka z tekstem który ma być wstawiony Jeżeli chcesz dodać nową linię na końcu tekstu to wcześniej wysyłasz komunikat EM_GETLINECOUNT który zwraca ilosć linii w RichEdit-a więc to podstawiasz jako LineIndex A jeżeli chcesz aby RightEdit zachowywał sie jak Static (Nie można edytować, brak migającego kursora, nie można zaznaczać tekstu) to kiedyś wymyśliłem takie rozwiązanie (choć nie wiem czy najlepsze). Ustawiasz mu styl ES_READONLY i pomocą SubClassingu podmieniasz procedurę obsługi RichEdit na coś takiego: RichEditProc proc hRichEdit:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD .if (uMsg==WM_CHAR) || (uMsg == WM_LBUTTONDOWN) ;Wywołaj starą procedurę obsługi okna invoke CallWindowProc,lpRichEdit,hRichEdit,uMsg,wParam,lParam invoke HideCaret, hRichEdit ;Ukryj kursor sub eax, eax ;Zwroc 0 ret .elseif (uMsg == WM_SETFOCUS) || (uMsg == WM_SETCURSOR) sub eax, eax ;Zwroc 0 ret .endif ;Wywołaj starą procedurę obsługi okna invoke CallWindowProc,lpRichEdit,hRichEdit,uMsg,wParam,lParam ret RichEditProc endp Celowo nie robiłem nic przez EnableWindow ponieważ jak próbowałem ustawić na FALSE to nie mogłem zmienić koloru tła tekstu. Jeżeli jednak nie o to chodziło to sorry Pozdro
  9. Witam! Ponieważ nie mam narazie zainstalowanego VC++ (piszę w MASM i Delphi) nie mgę Ci podać konkretnego, sprawdzonego przykładu ale zobacz to: Tworzenie okna statusu: https://webmasterszukapracy.webpark.pl/windows/statusbar/statusbar_01.htm Inicjowanie okna statusu (to właśnie jest o podziale paska stanu na części): https://webmasterszukapracy.webpark.pl/windows/statusbar/statusbar_02.htm Pozdro
  10. Burn

    double buffering w gdi

    Witam! Znalazłem w internecie przykład robienia animacji. Niestety nie miałem czasu sprawdić czy działa :( ale może Cię zainteresuje: https://www.modula2.org/win32tutor/animation.php Zauważyłem że znajdują się tam wywołania funkcji SelectBitmap zdefiniowanej chyba w windowsx.h dla C++. W MASM nie ma zdefiniowanej tej funkcji ale możesz ja zastąpić funkcją SelectObject i powinno działać :) Gdyby jednak nie pomogło to się odewij może coś wymyślę. Pozdrowienia
  11. Burn

    double buffering w gdi

    Witam! Nie wiem czy dokładnie zrozumiałem o co Ci chodzi. Bo troszkę namieszałeś :) Ale jeżeli chodzi Ci o kod kopiujący jedną bitmapę na drugą to go zamieszczem poniżej. I jeszcze jedno napisałeś że potrzebujesz kodu w assemlerze pod Windows więc na przyszłość sprecyzuj pytanie bo jest kilka odmian (min.: masm, fasm, tasm, nasm). Ten kod jest pod Masm i celowo nie używałem makra "invoke" abyś mógł go łatwo dostosować do innego kompilatora. LOCAL mDC1, mDC2 :HDC LOCAL bm :BITMAP ........ lea eax, dword ptr [bm] push eax push sizeof BITMAP push hBmp2 call GetObject push 0 call CreateCompatibleDC mov mDC1,eax push hBmp1 push eax call SelectObject push 0 call CreateCompatibleDC mov mDC2,eax push hBmp2 push eax call SelectObject push SRCCOPY push 0 push 0 push mDC2 push bm.bmHeight push bm.bmWidth push 0 push 0 push mDC1 call BitBlt push mDC1 call DeleteDC push mDC2 call DeleteDC W tym przykładzie kopiowana jest cała bitmapa hBmp2 w lewy górny róg bitmapy hBmp1. Opisy funkcj masz w helpie. PS: Gdyby jednak nie o to Ci chodziło to postaraj się napisać dkładnie o co Ci chodzi. Mozesz wtawić też kawałek Twojego kodu, napisać co nie działa itd. Pozdrowienia
  12. Witam! Tym razem nie pomogę :( 1. U mnie jest "normalnie" więc nie wiem dlaczego u Ciebie jest inaczej być może to wina wersji lub sposobu kompilacj. Ja mam MASM v. 8.2 a kompilacja: F:\MASM32\BIN\Ml.exe /c /coff test.asm F:\MASM32\BIN\Link.exe /SUBSYSTEM:WINDOWS test.obj 2. Niestety nie wiem Pozdrowienia
  13. Witam! Widzę że nie tylko ja z uczestników tego forum piszę w MASM :) W jakim dissasemblerze to sprawdziłeś? Bo to ważne ponieważ niektóre nie radzą sobie z instrukcjami pod nowe procesory np. ja mam coś takiego W W32Dasm ver. 8.93: 0F BYTE 0fh 10CA adc dl, dl 0F740E pcmpeqb mm1, dword ptr [esi] 66 BYTE 066h 0F BYTE 0fh D7 xlat C161EB33 shr ebx, 33 Czyli poprostu totalne siano :( Jak widać w ostatniej instrukcji W32Dasm próbuje C1 łaczyć z następnymi i dlatego wychodzi mi cos takiego. W OllyDbg ver. 1.04: 0F DB 0F 10CA ADC DL,CL 0F740E PCMPEQB MM1,QWORD PTR DS:[ESI] OFD7C1 PMOVMSKB EAX,MM1 Tu okazuje się że nie zna instrukcji MOVUPS więc czas na OllyDbg ver. 1.10: 0F10CA MOVUPS XMM1, XMM2 0F740E PCMPEQB MM1,QWORD PTR DS:[ESI] OFD7C1 PMOVMSKB EAX,MM1 Więc sprawdziłem w IA-32 Opcode Map 1.5 i mam coś takiego: PCMPEQB: Opcode: 0F 74 /r Memonics: PCMPEQB mm1,mm2/m64 Procesor: MMX Destription: Compare packed bytes for equality dalej patrząc mam coś takiego: Opcode: 66 74 D7 /r Memonics: PCMPEQB mm1,mm2/m128 Procesor: SSE2 Destription: Compare packed bytes for equality PMOVMSKB: Opcode: 0F D7 /r Memonics: PMOVMSKB reg32,mm Procesor: SSE Destription: Move mask byte to register niżej mam: Opcode: 66 0F D7 /r Memonics: PMOVMSKB reg32,xmm Procesor: SSE2 Destription: Move mask byte to register no to napisałem tak: .686 .XMM .model flat,stdcall option casemap:none ....... movups xmm(1),xmm(2) db 66h ;Właśnie to ma znaczenie pcmpeqb xmm(1),[esi] db 66h ;Właśnie to ma znaczenie pmovmskb eax,xmm(1) ....... I mam w OllyDbg ver. 1.10: 0F10CA MOVUPS XMM1, XMM2 66:0F740E PCMPEQB MM1,QWORD PTR DS:[ESI] 66:OFD7C1 PMOVMSKB EAX,MM1 Niby dalej twierdzi, że PCMPEQB MM1,QWORD PTR DS:[ESI] a nie PCMPEQB XMM1,QWORD PTR DS:[ESI] i PMOVMSKB EAX,MM1 a nie PMOVMSKB EAX,XMM1 widocznie on też nie obsługuje SSE2 :( No to pogrzebałem w internecie i znalazłem BDASM https://www.bdasm.com/binaries/bdasmv1d_setup.exe Uwaga: To jest wersja demo i obsługuje max 90000 linji kodu. Ale na potrzeby sprawdzenia wystarczyło. :) 0F10CA movups xmm1,xmm2 660F740E pcmpeqb xmm1, qword ptr [esi] 660FD7C1 pmovmskb eax,xmm1 Więc chyba jest OK. :D PS1: Sorry, że długo nie odpisywałem ale miałem problemy z wejściem na stronę mimo że ping wydawał sie niezły wiec nie wiem o co chodzi... PS2: Sorry, że ten post jest taki długi ale ma on na celu wyjaśnienie jak pradzić sobie z takimi problemami a nie tylko suchą odpowiedź Pozdrowienia
  14. Burn

    Systray Info...

    Witam! Niestety najprawdopodobniej nie ma funkcji która zwróci zawartość zasobnika systemowego :( Jednak wydaje mi się że gdyby pobrać uchwyt okna którego klasa to Shell_TrayWnd a później TrayNotifyWnd to mielibyśmy uchwyt Traya. Mająć uchwyt można by sie pobawić funkcją SetWindowsHookEx i spróbować przechwycić komunikaty które dostaje okno przy dodawaniu, usuwaniu i zmianie ikony (NIM_ADD, NIM_DELETE, NIM_MODIFY) i na tej podstawie jakoś pobrać uchyt okna programu który wysłał komunikat. Niestety takie rozwiązanie ma niestety bardzo poważną wadę: Program musiałby sie uruchamiać wraz z systemem Windows i pracować cały czas w tle. I jeszcze pozostaje jedno pytanie jak zrobić zeby akurat ten program uruchomił sie jako pierwszy? Uwaga: To co napisałem to tylko czysto teoretyczny wywód, nie sprawdzałem czy to działa więc za ewentualne skutki nie odpowiadam Pozdrowienia
  15. Burn

    jak debugowqac dlla?

    Witam! Niestety nie wiem bo nie używam Visual Studio :( Ale zobacz to: Methods for Debugging DLLs https://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_core_methods_for_debugging_dlls.asp Why Don’t My DLL Breakpoints Work? https://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_core_why_don.92.t_my_dll_breakpoints_work.3f.asp No i oczywiście GOOGLE! PS: Proponuję zainstalować SoftICE to jest debugger o ogromnych możliwościach. Pozdrowienia
  16. Witam! Nie wiem co robisz że nie możesz załadować ikony przez LoadIcon ale w takim razie spróbuj ExtractIcon lub ExtractIconEx parametry znajdziesz w helpie Pozdrowienia
  17. Burn

    BM_SETCHECK

    Witam! Niestety (przynajmniej u mnie) nie działa to co napisał pamelus ale rzeczywiście można sie obejść bez subclassingu. Komunikat WM_COMMAND dostaję tylko po kliknięciu na CheckBox-a ale jeżeli zrobie cos takiego: invoke SendMessage, hCheckBox, BM_SETCHECK, BST_CHECKED, 0 and eax, BN_CLICKED invoke SendMessage, hWnd, WM_COMMAND, eax, hCheckBox to oczywiście zostanie wysłany komunikat WM_COMMAND :D który wystarczy tylko odpowiednio obsłużyć np. coś takiego .ELSEIF uMsg == WM_COMMAND HIWORD wParam .if eax == BN_CLICKED mov eax, lParam .if eax == hCheckBox invoke SendMessage, hCheckBox, BM_GETCHECK, 0, 0 ;i tu dopiero mamy stan naszego CheckBox-a .endif .endif .ELSE Więc jest to alternatywne rozwiązanie :D W tym miejscu chciałem prosić pamelusa aby napisał jak zrobić żeby CheckBox wysyłał komunikat WM_COMMAND po wysłaniu BM_SETCHECK Być może to kwestia nadania mu tylko odpowiedniego stylu ??!! Pozdrowienia
  18. Burn

    BM_SETCHECK

    Witam! Nie wiem czy o to Ci chodzi ale zobacz cos takiego (Przykład w MASM) MyCheckBoxProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM mov eax, uMsg .if eax == BM_SETCHECK ; <-- tu wstawiasz kod wywołujący twoją procedurę .endif invoke CallWindowProc, lpOldProc, hWin, uMsg, wParam, lParam ret MyCheckBoxProc endp WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM mov eax, uMsg .if eax == WM_CREATE invoke CreateWindowEx, 0, addr szButton, 0, WS_VISIBLE or WS_CHILD or BS_AUTOCHECKBOX, 25, 75, 100, 20, hWnd, 0, hInstance, 0 mov hCheckBox, eax invoke GetWindowLong, eax, GWL_WNDPROC mov lpOldProc, eax invoke SetWindowLong, hCheckBox, GWL_WNDPROC, addr MyCheckBoxProc .elseif eax == WM_DESTROY invoke PostQuitMessage,NULL .else invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .endif xor eax,eax ret WndProc endp Procedura wstawiona w obsłudze komunkatu BM_SETCHECK wywoła sie zarówno po ręcznym kliknięciu na CheckBoxa jak i przy zmianie jego stanu za pomocą wywołania komunkatu BM_SETCHECK Jeżeli dalej nie o to Ci chodzi to napisz kawałek kodu co jak robisz bo już nie wiem. Pozdrowienia
  19. Burn

    Buforek :)

    Witam! Nie znam dobrze C (piszę w MASM) ale wydaje mi sie że kompilator ma rację :P Według mnie próbujesz zastąpić jeden znak (byte) w buforze ciągiem 4 znaków (dword) a ten numer napewno nie przejdzie!!! No ale według mnie powinieneś utworzyć 2 buforki. Pierwszy na to co chcesz dołączyć (".web" na przykładzie) drugi mający wielkość tekstu w kontrolce z której pobierasz tekst + rozmiar tekstu który chcesz dołączyć + 1 wtedy możesz sobie je połączyć np. za pomocą API lstrcat oczywiście jako pierwszy parametr podajesz adres drugiego buforka a jako drugi pierwszego. Mam nadzieję że to co napisałem jest choć trochę zrozumiałe. Pozdrowienia
  20. Burn

    BM_SETCHECK

    Witam! Nie wiem co kombinujesz ale teoretycznie wszystko powinno działać... Jak zmieniasz stan CheckBox-a za pomocą komunikatu BM_SETCHECK, a odczytujesz za pomocą BM_GETCHECK to działa na 100%. Sprawdziłem!!! :D U mnie działa taki kod (niestety w MASM) :( invoke CreateWindowEx, 0, addr szButton, 0, WS_VISIBLE or WS_CHILD or BS_AUTOCHECKBOX, 25, 25, 100, 20, hWnd, 0, hInstance, 0 mov hButtonGenrate, eax invoke SendMessage, hButtonGenrate, BM_GETCHECK, 0, 0 PrintDec eax ;Sprawdzam stan CheckBox-a - mam 0 invoke SendMessage, hButtonGenrate, BM_SETCHECK, BST_CHECKED, 0 invoke SendMessage, hButtonGenrate, BM_GETCHECK, 0, 0 PrintDec eax ;Sprawdzam stan CheckBox-a - mam 1 Jeżeli dalej nie będzie śmigało napisz kawałek kodu jak tworzysz CheckBox i jak zmieniasz i odczytujesz jego stan. Pozdrowienia
  21. Burn

    zasoby internetowe

    Witam! Proponuję https://www.win32asm.pl/ A to co piszą o niej na stronie: Serwis Programming & Security jest obecnie największym w Polsce hobbistycznym serwisem opisującym zagadnienia związane z programowaniem w assemblerze pod Win9x/Me/NT/2k/XP, metody zabezpieczeń oprogramowania przed crackerami, a także tematy związane z programowaniem "gadżetów" elektronicznych. A to mój krótki opis: Strona zawiera bardzo wiele przykładowych programów. Autorzy tych programów często wykorzystują ciekawe rozwiązania i częto w zawartych tam przykładach znajduję rozwiązania moich problemów. Pomimo że większość (jeżeli nie wszystkie) przykłady są w assemblerze to jednak warto tam zajrzeć. Pozdrowienia
  22. Burn

    [GDI] deklaracja hDC

    Witam! Zamieszczem poniżej bardzo prosty przykład wykorzystujący funkcję LineTo. Przykład jest w MASM więc będziesz sobie musiał to przetłumaczyć To oczywiście umiesczasz w procedurze obsługi okna: LOCAL hDC: HDC LOCAL ps: PAINTSTRUCT ...... .ELSEIF uMsg==WM_PAINT invoke BeginPaint, hWnd, addr ps mov hDC, eax invoke MoveToEx, hDC, 10, 10, NULL invoke LineTo, hDC, 100, 10 invoke EndPaint, hWnd, addr ps .ELSE ...... Dla wyjaśnienia: BeginPaint - zwaraca device context MoveToEx - ustawia współrzędne LineTo - rysuje linię do punktu o podanych współrzędnych EndPaint - informuje system o zakończeniu malowania określonego okna Gdyby coś jescze było niejasne to polecam GOOGLE. Tam na 100% znajdziesz odpowiedź. Pozdrowienia
  23. Burn

    Okno dialogowe

    Witam! Znowu muszę Cię skierować do tego co napisałem poprzednio tylko tym razem pobaw się komunikatem WM_CTLCOLORSTATIC Powodzenia
  24. Burn

    Okno dialogowe

    Witam Nie tak dawno na tym forum był już podobny temat tyle że chodziło o kolor kontrolki EDIT. Z DIALOGIEM jest to samo tylko trzeba obsłużyć inny komunikat: WM_CTLCOLORDLG https://www.winapi.org/forum/viewtopic.php?t=637 Pozdrowienia
  25. Witam! Niestety nie znam odpowiedzi na to pytanie. Chciałem tylko napisać że swego czasu pisałem podobny program w MASM ale opierał sie on na sterowniku VXD w którym przejmowałem obsługę CREATE_PROCESS. Niestety miałem problem z komunikacją się z programem w który mógłby pytać o hasło, choć napewno jest na to sposób ale ja dałem sobie spokój zwłaszcza że Windows XP stał się bardzo popularny a w nim jak wiadomu VXD-ki nie mają racji bytu wiec pozostawał by jedynie SYS. Ale o pisaniu SYS-ów mam jeszcze mniejsze pojęcie niż o VXD. Gdyby ktoś znał inny dobry sposób (nie dający się obejść w taki banalny sposób jak uruchomienie programu poprzez jakiegoś menadżera plików)też dołanczam sie do prośby o odpowiedź. Powodzenia!
×
×
  • Utwórz nowe...