Skocz do zawartości

Burn

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Burn

  1. 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

    stuku napisał:
    Coś w asemblerze było chyba o monitorach, bodajże jakieś przerywania, ale wątpie aby to pod windosem działało, chyba że byś kożystał z przerywań biosowych...

    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

    ...potrzebuje zrobic projekt ktory bedzie wykrywal wszelkie informacje o monitorze ,no i najlepiej jesli moglby je zmieniac...

    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

    P.S. Najlepszym przykladem dla mnie bylby np kod ktory wygasilby monitor przy kliknieciu np myszka na formularz oraz wlaczal go przy nastepnym kliknieciu

    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

  5. 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

  6. 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

  7. 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 9_9 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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...