Skocz do zawartości

Omega

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Wszystko napisane przez Omega

  1. Przez ShellExecute() sie nie da. Dlaczego? A no dlatego, ze funkcja uruchamia dany program i przekazuje dalej dzialanie programowi, ktory wykonal ta funkcje. Aby moc to wykonac, trzeba caly czas monitorowac uruchomiona aplikacie az do zakonczenia i wtedy okreslic jaki wynik daje aplikacja. Aby moc to zrobic nalezy skorzystac z funkcji CreateProcess, lub ShellExecuteEx(). Monitorowanie odbywalo by sie w petli poprzez funkcje WaitForSingleObject().
  2. Omega

    Klikanie

    Tylko nie wiadomo, czy przyciski na stronach maja swoje klasy; czy maja uchwyt; czy sa tworzone jak normalne okna z funkcji API? Jezeli sa tworzone graficznie to jest problem.
  3. Edit Box??? Jezeli chodzi o edit, to wystarczy po zdarzeniu wcisniecia kontrolki dac fokusa na edit (setfocus(uchwyt edita)). Jezeli natomiast na ListBox to sie nie da , bo ta kontrolka jest tylko do odczytu. Ale mozna to obejsc. Wystarczy na niej utworzyc edita i w ramach potrzeby ukrywac i pokazywac. Edit bedzie nad listboxem, dodatkowo nie moze miec obramowania - aby wygladal jak niewidoczny.
  4. Nie o to chodzilo, jezeli chcesz w czystym api, wygladac moze to np. tak: uses windows, messages, commdlg; var Open:TOpenFileName; szFile:array[0..1024]of Char; VI: TOSVersionInfo; begin FillChar(VI,SizeOf(TOSVersionInfo),0); VI.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); GetVersionEx(VI); ZeroMemory(@Open,SizeOf(TOpenFileName)); with Open do begin if (VI.dwMajorVersion >= 5) and (VI.dwPlatformId = VER_PLATFORM_WIN32_NT) or ((VI.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS) and (VI.dwMajorVersion >= 4) and (VI.dwMinorVersion >= 90)) then lStructSize := SizeOf(TOpenFilename) else lStructSize := 76; hWndOwner:=0; nMaxFile:=SizeOf(szFile); lpstrFilter:='Pliki NFO'+#0+'*.nfo'+#0+'Wszystkie pliki'+#0+'*.*'+#0#0; lpstrFile:=szFile; Flags:=OFN_FILEMUSTEXIST; end; if GetOpenFileName(Open) then begin //tutaj wykonuje sie kod jak wyszlo wszystko pomyslnie end; end.
  5. Omega

    UserKontrol?

    Pamietaj, ze trzeba przewidziec wszystkie nieprzewidywalne rzeczy  
  6. Omega

    UserKontrol?

    I wlasnie o to caly czas chodzi, o kontrolke bedaca na krawedzi okna glownego. Szybki ruch myszki powoduje, ze okno juz nie obsluzy komunikatu (prawdopodobnie zadnego - nie jestem do konca pewien) jak kursor bedzie poza forma glownego okna. Ja nie widzialem innego wyjscia jak zastosowac zegar. Chyba, ze tworzy sie kontrolki globalne, jak salwadore podpowiedzial. W dll'ach mozna utworzyc hooka "maksymalnie" globalnego (w dllu musi byc zmienna wspoldzielaca miedzy wszystkie procesy - salwadore juz zadal to pytanie w jednym poscie), ktory by sprawdzal polozenie myszki. Wtedy to juz by byl luks.
  7. 4. w object pascalu? Przecierz jest odpowiedni komponent do tego.
  8. Omega

    Blad

    konczmy, konczmy...trzeba zaczac cos nowego.
  9. Omega

    DLL

    Musisz utworzyc biblioteke ze wspoldzielona zmienna. Wywoluje sie ja podczas inicjacji procesu dll'a w specjalnej funkcji DLLEntryPoint, ktora ma dodatkowo komunikaty: DLL_PROCESS_ATTACH - inicjacja DLL_PROCESS_DETACH - zakonczenie. Pamiec dla zmiennej inicjuje sie poprzez createfilemapping z pierwsza zmenna -1 (0XFFFFFF)
  10. Omega

    Co to za klasa?

    rebar: https://devstart.pl/temat/5080-jak-umiescic-menu-w-rebar/
  11. Omega

    UserKontrol?

    Ilosc timerow jest ograniczona, jak i jest ograniczona ilosc nowych klas okien.
  12. Omega

    UserKontrol?

    No i rozwiazal sie jeden problem. Kiedys byl takie pytanie w sprawie tworzenia wlasnych klas, ale takich, zeby mogly byc wykorzystywane przez wszystkie aplikacje, tak jak np. klasa EDIT. Salwadore odpowiedzial wlasnie na ten problem. Ale czy globalne klasy maja cos wspolnego z badanem ruchu kursora poza forma?
  13. Omega

    UserKontrol?

    To teraz wyobraz sobie, ze flat button lezy na krawedzi okna glownego. Unosisz myszke nad kontrolke, zmenna przyjmuje wartosc true (w kom. np. WM_MOUSEMOVE). Teraz rusz z kontrolki myszke szybciutko poza okno glowne. Jak zmienisz zmienna na true, jak do niej nie sa juz przesylane zadne komunikaty - mimo SetCapture(). Trzeba to sprawdzic, bo kazda sytuacja musi byc obsluzona. Ha, mozna zalozyc hooka na mysze. Ale jezeli oprocz tego, ze kursor znajdzie sie poza oknem to np. zostanie klikniety jakies inne okno, z poza naszego procesu. Wtedy hook juz tez nie bedzie funkcjonowal. Chyba, ze zalozysz globalnego hooka w dll'u o wspolnej pamieci dzielonej. Ale dla flatta takie rzeczy robic?
  14. Omega

    UserKontrol?

    komunikat WM_NCHITTEST jest wywolywany tylko w momencie kiedy myszka jest nad oknem. Nawet SetCapture() nic nie da jak dosc szybko przesuniesz myszke poza okno glowne. I tak w tym momencie do okna juz nie zostanie przeslany komunikat i nie odblokujesz aktywnego okna (releasecapture). Byc moze sie myle, ale jezeli ty znasz rozwiazanie to napisz krotki kod jak ty to widzisz. Zaintrygowala mnie twoja wiadomosc i chcialem sprawdzic czy to dziala. Okazuje sie, ze jak szybko usuniemy myszke poza okno glowne, jednoczesnie zjezdzajac z naszego flat buttona, do okna nie jest przesylany zaden komunikat - mimo setcapture(). I jak wtedy odblokowac aktywne okno?
  15. Omega

    Reg

    example: var key:HKEY; y:integer; b:array[Byte]of char; begin if RegOpenKeyEx(HKEY_LOCAL_MACHINE,'software\adobe', 0,KEY_QUERY_VALUE,Key)<>ERROR_SUCCESS then exit; Y:=SizeOf(B); RegQueryValueEx(Key,'vv',Nil,Nil,@B,@Y); RegCloseKey(Key); end. zwroc uwage na y. musi tam byc jakas wartosc zainicjowala, aby funkcja wiedziala na ile moze pozwolic sobie przeczytac z rejestru do bufora. Potem w niej zwraca tyle ile przeczytala.
  16. Samo monitorowanie mozna wykonac np. wykorzystujac funkcje FindFirstChangeNotification, FindNextChangeNotification. Ale, zeby nie zezwolic jak to np. robia programy antywirusowe to juz wyzsza szkola jazdy i przyznam szczerze, ze sam nie wiem. Napewno dla systemow opartych na NT robi sie to inaczej a inaczej dla reszty. Np. wirus win.cih 1.XX dzialajacy tylko w win 9.X i chyba milennium przydziela jakos sobie pamiec poprzez przerwanie int 3, i zmienia wpisy w tablicy przerwan (debugowalem go). Caly swoj kod tam laduje i tam nastepuje monitoring. Jezeli uruchamiasz jakis program to on to wykrywa i najpierw go zaraza a dopiero dalej daje mozliwosc wywolania kernelowej funkcji CreateProcess. Sa metody drastyczne jak podpiecie sie pod biblioteke kernel32.dll, ale np. programy antywirusowe tego nie robia. Jezeli bedziesz znal odpowiedz, lub ktos inny to niech napisze.
  17. Omega

    Ghost

    Moge tylko stwierdzic, ze probujesz skakac na zbyt gleboka wode jak dla ciebie. Musisz wiedziec, ze nikt za ciebie programu nie napisze; znudzi sie wrescie kazdemu dopowiadac ciagle cos na jeden temat bo ty sobie rady nie dajesz. Radzil bym ci zaopatrzec sie w jakas ksiazke o programowaniu dla windows i zaczac od podstaw. Co z tego, ze nauczysz sie tworzyc nowe watki jak w pewnym momencie nie bedziesz wiedzial jak wybrnac z pewnej sytuacji gdy np. program ci sie zawiesi. Musisz mimo wszystko poznac troche teorii dotyczacych problematyki api. Piszesz program antywirusowy. Czy masz definicje wzorow wirusow, ktore chcesz zwalczyc? W jaki sposob chcesz (jak juz poznasz przeszukiwanie wszystkich katalogow) otwierac dany plik, aby go sprawdzic tak, zeby to trwalo szybko. Chyba nie sadzisz, ze zwykle ReadFile ci wystarczy. Czy znasz takie funkcje jak CreateFileMapping czy MapViewOfFile? Czy masz juz w glowie szybki, zmyslny algorytm przeszukiwania zadanego ciagu? Czy znasz budowe plikow exe PE - 32 bitowych? Czy...Itd, itd. Nie twierdze, ze nic z tych rzeczy nie umiesz, ale powinienes po tym tekscie sie sam zorientowac czy podolasz tak trudnym zadaniom.
  18. Omega

    Parę pytań :)

    w gg jest to normalna kontrolka typu edit z muliline i tylko do odczytu. Wystarczy spojrzec kilka postow wstecz i znajdziesz rozwiazanie jak dodaje sie nowa linie do edita. Jezeli naprawde ci ciezko to podpwiem ze temat nazywa sie "po prostu edit".
  19. Omega

    Okno na srodku ekranu

    Najlatwiej to pobrac szerokosc i wysokosc ekranu aby na poczatku wyznaczyc jego srodek. Zeby to osiagnac nalezy pobrana wysokosc i szerokosc podzielic przez 2 (ALE UWAGA!!!) - przez dwa bez reszty, bo liczby zmiennoprzecinkowe nas nie interesuja. Samo pobranie tych parametrow mozemy zrealizowac przez odpwiednie funkcje api, ktora nazwano: GetSystemMetrics. Dodatkowo w nich trzeba wpakowac odpowiednie stale, tj: SM_CXSCREEN : jak latwo sie domyslic ta stala pozwoli zwrocic szerokosc SM_CYSCREEN natomiast ta, nie szerokosc jak niektorzy mogli by sie domyslic, ale (i tu niespodzianka) wysokosc. Po tak skomplikowanej operacji mamy wyznaczony srodek ekranu. Nastepnie pozostaje nam wysokosc i szerokosc samego okna podzielic na pol (i tu niektorzy bystrzaki domysla sie, ze chodzi o dzielenie bez reszty). No reszta to juz z gorki. Teraz dla polozenia x(x - to zmienna reprezentujaca polozenie horyzontalne) wystarczy od srodka odjac powstala zmienna. I tak samo zachodzi dla polozenia y (y - zmienna reprezentatywna dla polozenia wysokosci). Adam Słodowy.
  20. Omega

    Ghost

    Moze troche nie na temat napisze, a dodatkowo spowoduje lawinowe dodawanie postow ale cholernie zzera mnie ciekawosc. Ghost jakiego antywirusa starasz sie napisac?
  21. Omega

    Pasek

    utworz okno ze stylem WS_OVERLAPPED.
  22. Font=CreateFont(20,0,0,0,0,0,0,0,0,0,0,0,0,"Times New Roman CE");
  23. Omega

    Przyciski i zasoby

    Przedstaw wieksza czesc zawartosci pliku rysowanie.rc. Czy w nim jest tylko wpisana linia DEFPUSHBUTTON "Kolory",ID_BUT,10,5,30,15 ?
  24. Omega

    Ghost

    Najprostrzy algorytm przeszukujacy cala zawartosc dysku wyglada tak (w delphi): Procedure szuk(Path:String); Var F:TWIN32FindData; H:THandle; Begin H:=FindFirstFile(PChar(Path+'*.*'),F); If H=INVALID_HANDLE_VALUE then exit; Repeat If (F.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY<>0) and (F.cFilename[0]<>'.') then szuk(Path+F.cFilename+'\'); If (F.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)=0 then ;//i tutaj mozna obsluzyc sciezki znalezionych plikow until not FindNext(H,F); FindClose(H); end; funkcje wywoluje sie ze scezka, w ktorej chcemy przeszukac podkatalogi. Trzeba zapamietac, ze w tym algorytmie dodatkowo do konca podanej sciezki trzeba dodac backslash ("\").
  25. Omega

    Czcionka

    Właśnie o to chodzi. Jeżeli przy samej kompilacji wyskakuje błąd, to znaczy, że coś źle wpisaliśmy - błąd składni. Ja programuje w delphi i dlatego tak, a nie inaczej podałem a ty bez przystosowania kodu do danego języka i kompilatora skopiowałeś jak leci. I właściwie większość tutaj podpowiedzi jest dobra, ale błędy wychodzą właściwie z tak prozaicznych rzeczy. Bo nie jest wina podpowiadającego (bo przecież w tym dziale mówimy o api, a nie o jakimś szczegółowym języku programowania) tylko korzystającego z podpowiedzi. Przecież nie da się podpowiedzieć tak celnie, że wszystko to co przepiszesz to będzie działało idealnie. Własna inteligencja też jest potrzebna (Ghost ja nic nie sugeruje ).
×
×
  • Utwórz nowe...