Jump to content

Burn

Members
  • Content Count

    0
  • Joined

  • Last visited

    Never

Community Reputation

0 Neutral

About Burn

  • Rank
    Newbie
  1. Witam Najprosciej używajac funkcji ShellExecute :) Można też uzyć CreateProcess w zależnosć co chcesz z danym programem (który chcesz uruchomić) zrobć. Jeżeli chcesz tylko go uruchomić to ShellExecute w zupełności wystarczy. Pozdrawiam
  2. Witam Jeżeli główne okno ma odpowiadającą Ci czcionkę to najprosćiej jest probrać za pomocą komunikatu WM_GETFONT uchwyt czcionki głownego okna i wysłać komunikat WM_SETFONT do Twojej kontrolki Tab. Jeżeli chcesz stworzyć własna czcionkę to służą do tego funkcje: CreateFont i CreateFontIndirect do usunięcia czcionki (gdy już nie będzie potrzebna) użyj DeleteObject Pozdro
  3. Niestety w kontrolce Tab poszczególne zakładki nie posiadają uchwytów :( Tak jak tutaj napisał kiedyś Nicon, trzeba na piechotę bawić się funkcją ShowWindow.
  4. Witam Jak tworzyłeś kontrolkę Tab Jeżeli robileś to za pomocą CreateWindow (ew. CreateWindowEx) to te funkcje właśnie zwracają uchwyt kontrolki którą tworzysz. :) Jeżeli natomiast zrobiłeś kontrolkę Tab w zasobach to do pobrania jej uchwytu możesz użyć funkcji GetDlgItem . Pozdro
  5. Burn

    Ping

    Dzięki, już sobie poradziłem :) Wszystko działa :) Napisałem (w MASM) to tak: To jest kod modułu ping.inc include wsock32.inc includelib wsock32.lib PingInit PROTO PingClean PROTO Ping PROTO :DWORD,:DWORD,:DWORD,:WORD .const ECHO_PACKET_SIZE equ 32 ;rozmiar pakietu danych PING_INIT_OK equ 0 PING_INIT_ERROR_LOADLIB equ 1 PING_INIT_ERROR_GETPROCADDR equ 2 PING_INIT_ERROR_WSASTARTUP equ 3 PING_INVALID_HOSTNAME equ -1 .data szIcmp db "icmp.dll",0 szIcmpCreateFile db "IcmpCreateFile",0 szIcmpCloseHandle db "IcmpCloseHandle",0 szIcmpSendEcho db "IcmpSendEcho",0 .data? hIcmp dd ? lpIcmpCreateFile dd ? lpIcmpCloseHandle dd ? lpIcmpSendEcho dd ? .code PingInit proc LOCAL wsa: WSADATA invoke LoadLibrary, offset szIcmp cmp eax, 0 je errorloadlib mov hIcmp, eax invoke GetProcAddress, hIcmp, offset szIcmpCreateFile cmp eax, 0 je errorgetprocaddr mov lpIcmpCreateFile, eax invoke GetProcAddress, hIcmp, offset szIcmpCloseHandle cmp eax, 0 je errorgetprocaddr mov lpIcmpCloseHandle, eax invoke GetProcAddress, hIcmp, offset szIcmpSendEcho cmp eax, 0 je errorgetprocaddr mov lpIcmpSendEcho, eax invoke WSAStartup, 0101h, addr wsa cmp eax, 0 jne errorwsastartup sub eax, eax ret errorwsastartup: inc eax ;eax = 3 Error PING_INIT_ERROR_WSASTARTUP errorgetprocaddr: push eax invoke FreeLibrary, hIcmp pop eax inc eax ;eax = 2 Error PING_INIT_ERROR_GETPROCADDR errorloadlib: inc eax ;eax = 1 Error PING_INIT_ERROR_LOADLIB ret PingInit endp PingClean proc invoke WSACleanup invoke FreeLibrary, hIcmp ret PingClean endp Ping proc uses esi lpAddr:DWORD, lpEcho:DWORD, lpOptions:DWORD, TimeOut:WORD LOCAL addrIP: DWORD LOCAL hIcmpFile: DWORD LOCAL acPingBuffer[ECHO_PACKET_SIZE]: BYTE invoke inet_addr, lpAddr mov addrIP, eax .if eax == INADDR_NONE invoke gethostbyname, lpAddr .if eax == 0 dec eax ;eax = -1 PING_INVALID_HOSTNAME ret .endif mov eax, dword ptr [eax + 12] mov eax, dword ptr [eax] mov eax, dword ptr [eax] mov addrIP, eax .endif invoke RtlFillMemory, addr acPingBuffer, ECHO_PACKET_SIZE, 0AAh call lpIcmpCreateFile mov hIcmpFile, eax mov esi, lpEcho assume esi: ptr ICMP_ECHO_REPLY lea eax, acPingBuffer mov [esi].DataPointer, eax mov [esi].DataSize, ECHO_PACKET_SIZE assume esi: nothing push TimeOut push sizeof ICMP_ECHO_REPLY + ECHO_PACKET_SIZE push lpEcho push lpOptions push ECHO_PACKET_SIZE lea eax, acPingBuffer push eax push addrIP push hIcmpFile call lpIcmpSendEcho push eax push hIcmpFile call lpIcmpCloseHandle pop eax ret Ping endp Najpierw wywołuję funkcję PingInit, później Ping i odpowiednio formatuję dane które podaję/otrzymuję no i po wszystkim PingClean. Parametry funkcji Ping to: lpAddr - adres lub nazwa hosta lpEcho - adres zmiennej typu ICMP_ECHO_REPLY (zwraca potrzebne mi informacje) lpOptions - adres zmiennej typu ICMP_OPTIONS (tu podaję niektóre dane np. TTL) TimeOut - max. czas odpowiedzi Wydaje mi się że wszystko działa poprawnie, gdyby jednak ktos zauważył jakiś błąd to proszę o wyjaśnienie co i dlaczego jest źle. Pozdrawiam
  6. Burn

    Ping

    Witam Może i to dość proste, jednak ja nigdy nie zajmowalem sie programowaniem aplikacji sieciowych przy użyciu WinApi. Czy ktoś może podać przykład jak napisać (oczywiście w WinApi) funkcję która zwróci te informacjie co komenda Ping (W takiej lub podobnej postaci) z tym, że chcę mieć dostęp do poszczególnych zawartych tam informacji. Dobrze by było gdyby można podać nazwę lub adres IP. Pozdro
  7. Burn

    odswiezanie okna

    Witam Okno (a nawet jego określony obszar) możesz odrysować za pomocą funkcji InvalidateRect (ewentualnie InvalidateRgn) którą byś musiał wywołać po każdej operacji po której okno wymagałoby odświezenia. Zastanawiam sie nad tym w jaki sposób wyświetlasz bitmapy, ale chyba na w obsłudze komunikatu WM_PAINT. Radzę wszyskie operacje rysowania, wyświetlania bitmap wykonywać właśnie w po wywołaniu przez system tego komunikatu (WM_PAINT), wtedy pobierasz za pomocą BeginPaint uchwyt device context okna ktore wymaga odrysowania następnie malujesz po oknie (wyświetlasz bitmapy) i po tym wszystkim wywołujwsz EndPaint. Pozdro
  8. Burn

    VERSION_INFO z innego exeka

    Witam Nie bardzo wiem o co chodzi Czu chodzi tylko o odczytanie wersji programu czy faktycznie o wydobycie z pliku zasobów typu RT_VERSION . Jeżeli chcesz tylko uzyskać informacje o wersji trzeba użuć funkcji GetFileVersionInfo przykład jest tutaj:) Pozdro
  9. Witam Czy nie chodzi Ci przypadkiem o PropertySheet czyli Dialog na którym znajduje się SysTabControl32( na którego zakładkach możesz wyświetlać okna dialogowe) i posiadający Buttony OK, Anuluj, Zastosuj . Czyli po prostu taki dialog na który dobrze nadaje się jako okno ustawień programu Jeżeli tak to proponuję poszukać w google właśnie pod hasłem PropertySheet Jeżeli nie znajdziesz nic ciekawego to napisz jak będę miał czas to napisze jutro (dzisiaj nie mam czasu) przykład (tylko pewnie w MASM) :) Pozdro
  10. Burn

    Problem z ecvt

    Witam Kod w porządku :) W kontrolce EDIT powinno pojawić się 3298 (tak jak napisałem bez separatora dziesiętnego). Jeżeli kontrolka EDIT nie wyświetla tekstu to winne za to mogą być nieprawidłowy uchwyt hKalk lub nieprawidłowy ID kontrolki 502. Pomijam już to, że z niewiadomych przyczyn używasz EM_REPLACESEL do wyświetlenia tekstu w EDIT zamiast WM_SETTEXT lub SetWindowText. Chyba, że rzeczywiście chcesz zmieniać zaznaczony tekst. W każdym razie podany kod powinien dzialać chyb, że popełniłeś jeden ze wspomnianych błedów (ew. oba na raz). Pozdro
  11. Burn

    uchwyt do procesu

    Witam O jakie procesy chodzi Może o usługi systemów NT , jeżeli tak to nie wiem dokładnie bo mam Win 98 ale chyba trzeba by coś pokombinować z funkcjami OpenSCManager, OpenService, SetServiceStatus ale nic więcej na ten temat nie wiem bo nie mam na czym z tym poeksperymentować. Pozdro
  12. Burn

    uchwyt do procesu

    Nie no nie zalamuj się. To mój pierwszy program w C++ ale wcześniej z WinApi korzystałem w Delphi i MASM. Co do ksiązek o WinApi to najbardziej znana jest Charles Petzold "Programowanie Windows" niestety dotyczy ona tylko GUI. Nie znam niestety polskiej ksiązki w której były by opisane funkcje dotyczące procesów.
  13. Witam Nie na pisałeś z czym już kombinowałeś i jak tworzysz ten BUTTON. Nie sprawdziłem ale może spróbuj CreateWindowEx a w pierwszym parametrze podając WS_EX_TRANSPARENT (reszta parametrów jak CreateWindow). Nie wiem też co chcesz uzyskać czy chodzi o zwykłą zmianę koloru tła czy on musi być koniecznie przezroczysty np. po to aby nie przykrywał obrazka tła. Pozdro
  14. Burn

    Windows Longhorn

    Witam Nie wydaje mi się, aby były to jakieś drastyczne zmiany. Co najwyżej dojdą nowe funkcje, a to przecież pozytywna zmiana :) Wydaje mi się, że M$ nie może wprowadzić zbyt dużych zmian, ponieważ na tym systemie muszą (a przynajmniej powinny) się też uruchamiać programy napisane pod starsze systemy (kompatybilność wstecz). Więc wydaje mi się, że nie ma powodów do obaw. Pozdro
  15. Burn

    uchwyt do procesu

    Witam Napisałem przykład :D To mój pierwszy program w C++ wiec proszę się nie śmiać jak coś namieszałem :P Jest to program, który zamyka Gadu-Gadu (Tlena nie mam). Program był kompilowany pod Dev-C++ 4.9.9.0 i sprawdzony na Win 98 ale wydaje mi się że powinien też działać na Win XP. :) #include <windows.h> #include <tlhelp32.h> int main(void) { HANDLE hSnapshot = NULL; //Uzyskaj uchwyt migawki systemu hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 ProcInfo; //W tej zmiennej bedziemy otrzymywać info o procesach ZeroMemory(&ProcInfo, sizeof(ProcInfo)); //Wyczyść strukturę PROCESSENTRY32 ProcInfo.dwSize = sizeof(ProcInfo); //Zapisz jej rozmiar Process32First(hSnapshot, &ProcInfo); //Pierwszy Proces DWORD GGProcID = 0; //Nowa zmienna do przzechowywania ID Procesu do { //Szukamy Gadu-Gadu. Zwróć uwagę na podwójny "\" w ścieżce if (lstrcmpi(ProcInfo.szExeFile, "C:\\Program Files\\Gadu-Gadu\\GG.EXE") == 0) { GGProcID = ProcInfo.th32ProcessID; //Zapisz ID Procesu break; //Przerwij - po co dalej szukać jak już znaleźliśmy :) } } while (Process32Next(hSnapshot, &ProcInfo)); //Następny uruchomiony proces CloseHandle(hSnapshot); //Zamklnij uchwyt if (!GGProcID) { //Czy ID Procesu to 0 //Wyświetl komunikat MessageBox(0, "Nie znaleziono Gadu-Gadu", NULL, MB_ICONERROR); return 0; //Zwróć 0 } HANDLE hGGProc = NULL; //Uchwyt procesu //Trzeba otworzyć proces z proces aby uzyskać prawa do jego zakończenia if (!(hGGProc = OpenProcess(PROCESS_TERMINATE, FALSE, GGProcID))) { //Wyświetl komunikat MessageBox(0, "Błąd OpenProcess. Nie udało się uzyskać praw do zamknięcia.", NULL, MB_ICONERROR); return 0;//Zwróć 0 } TerminateProcess(hGGProc, 0); //Zakończ proces CloseHandle(hGGProc); //Zamknij uchwyt //Zwróć 1 return 1; } W przykładzie dla uproszczenia założyłem, że CreateToolhelp32Snapshot nie zwróci błedu i Process32First też się powiedzie (najprawdopodobniej w systemie jest uruchomiony conajmniej 1 proces). Ale jeżeli wykorzystujesz go w "normalnym" programie to oczywiście musisz liczyć się z możliwością wystąpienia błedu. Mam nadzieję, że Ci pomoże. Gdyby coś jeszcze było niejasne to pytaj. Pozdro
×
×
  • Create New...