Skocz do zawartości

Xtend.dll - Procesy


Easeful

Rekomendowane odpowiedzi

GML
arg="666"; //id procesu w systemie

arg=string_digits(arg); //usuniecie wszystkich liter i znakow z id (opcjonalnie)

arg=real(arg); //zamiana ze string na real

arg=process_open(arg); //zamiana na id Xtend.dll'a (otwieranie procesu)

pnm=process_get_name(arg); //pobieranie nazwy procesu

process_close(arg); //zamykanie procesu

show_message('Handle: '+string(arg)+' Name: '+string(pnm));

 

 

Show_msg pokazuje mi: "Handle: <jakaśliczba> Name: " - nie pokazuje żadnej nazwy. Łaj?

Odnośnik do komentarza
Udostępnij na innych stronach

arg="666"

[...]

arg=process_open(arg);

 

o zgrozo :0 a to ta funkcja nie zwraca czasem liczby a nie string?

Odnośnik do komentarza
Udostępnij na innych stronach

tak, ale pod "[...]" ukryty jest kod, który ze stringa na real zamienia

 

 

e: @Marek.S: nie ma takiej funkcji ;/ samo process_open powinno zwracać false jeżeli proces nie istnieje, ale on zwraca id tego procesu czyli proces jest dobry, tylko czemu tej nazwy nie wyciąga?

Odnośnik do komentarza
Udostępnij na innych stronach

nie rozumiesz. ogolem arg jest typu string, przypisujesz mu real gdzie juz powinien byc blad

Odnośnik do komentarza
Udostępnij na innych stronach

@PsichiX:

 

GML
arg="666"; //id procesu w systemie

arg=string_digits(arg); //usuniecie wszystkich liter i znakow z id (opcjonalnie)

arg=real(arg); //zamiana ze string na real <---------------------------

[...]

 

 

 

edit:

 

hmm... dopiero jak sie "przyjrzałem" to zczaiłem ;s

ale to chyba nic nie wnosi, bo nie ma żadnego błędu

Odnośnik do komentarza
Udostępnij na innych stronach

cholibka, Ty nadal nie rozumiesz :C

arg="666" // arg jest stringiem!

arg=real(arg); // przypisujesz real zmiennej typu string!!!

Odnośnik do komentarza
Udostępnij na innych stronach

PsichiX no napisałem wczesniej w edicie ze juz zczaiłem.

no to już działa, bo dałem drugą zmienną, tylko jest jakiś błąd z tym id ale to sie zaraz opanuje

 

 

edit:

 

GML
arg="666";

arg=string_digits(arg);

ar=real(arg);

ar=process_open(ar);

pnm=process_get_name(ar);

process_close(ar);

show_message('Handle: '+string(ar)+' Name: '+string(pnm));

 

to samo ;/ (brak Name)

Odnośnik do komentarza
Udostępnij na innych stronach

a jestes pewny ze proces o id 666 istnieje? :P

Odnośnik do komentarza
Udostępnij na innych stronach

a w Twoim programie to jak wyglada?

Odnośnik do komentarza
Udostępnij na innych stronach

ale to jest ciekawe troche, bo np jest ikonka dll'a jak każdego dll'a, tytuł Xtend.dll a na dole na szaro napisana wersja 1.2.0.0, a jak wejde w PPM>Właściwości>Cośtam: to mam wersja 2.0.0.0 producent Snake Dev czy cos itd.. i jeszcze pobieralem z snake.ovh.org czy jak to tam i było czarno na biało że pobieram 2.0.0.0

Odnośnik do komentarza
Udostępnij na innych stronach

haha, czyżby Snake w najnowszej wersji zapomniał o process_exists :D

Nie zapomniałem. Wystarczy pomyśleć: gdy funkcja process_find_id() (szukanie ID po nazwie) zwróci 0 to oznacza, że proces o danej nazwie nie istnieje; jak process_open() zwróci błąd, to znaczy, że proces o podanym identyfikatorze albo nie istnieje albo i tak nie masz uprawnień by go otwierać.

 

ale to jest ciekawe troche, bo np jest ikonka dll'a jak każdego dll'a, tytuł Xtend.dll a na dole na szaro napisana wersja 1.2.0.0, a jak wejde w PPM>Właściwości>Cośtam: to mam wersja 2.0.0.0 producent Snake Dev czy cos itd.. i jeszcze pobieralem z snake.ovh.org czy jak to tam i było czarno na biało że pobieram 2.0.0.0

Pewnie zapomniałem zaktualizować wartość którejś zmiennej z VERSIONINFO. ;p

A tą starszą wersję ze screenshota Marka.S nadal można znaleźć w pierwszym poście w temacie Xtenda.

Odnośnik do komentarza
Udostępnij na innych stronach

Problem rozwiązany, ale dodam na przyszłość, jakby ktoś nie wiedział:

nie rozumiesz. ogolem arg jest typu string, przypisujesz mu real gdzie juz powinien byc blad
W gmie tak można :)

Możesz sobie zamieniać stringi na reale, reale na stringi, i..., i to tyle typów zmiennych ;d

Odnośnik do komentarza
Udostępnij na innych stronach

no to już działa jak ma działać, ale zwraca inne ID.. wcześniej próbowałem też z execute_shell zamiast process_create, ale żeby zdobyć id tego co dałem w execute_shell to dawałem process_find_cośtam i po nazwie znajdywałem, ale jak były np 2 cmd.exe odpalone to dawało zawsze tego pierwszego id..

 

może masz jakiś pomysł jak odpalić cmd.exe w osobnym oknie i zdobyć jego id?

Odnośnik do komentarza
Udostępnij na innych stronach

no to już działa jak ma działać, ale zwraca inne ID.. wcześniej próbowałem też z execute_shell zamiast process_create, ale żeby zdobyć id tego co dałem w execute_shell to dawałem process_find_cośtam i po nazwie znajdywałem, ale jak były np 2 cmd.exe odpalone to dawało zawsze tego pierwszego id..

 

może masz jakiś pomysł jak odpalić cmd.exe w osobnym oknie i zdobyć jego id?

process_create zwraca uchwyt procesu, nie ID. Niestety niema ATM w Xtendzie funkcji, która pozyskałaby identyfikator procesu przez uchwyt. Masz 2 wyjścia.

Pierwsze: pobierzesz listę procesów za pomocą process_enumerate_processes() i przechwycisz ID wszystkich procesów o nazwie "cmd.exe".

Drugie: pobierasz GFFI: http://www.messy-mind.net/2009/gffi/ i z jego pomocą importujesz funkcję o nazwie GetProcessId z WinAPI. Tak to będzie wyglądało:

GML (Create)
gffi_init();

global.hKernel32 = gffi_dll_load( "kernel32.dll", gffi.STDCALL );

global.pGetProcessId = gffi_function_define( global.hKernel32, "GetProcessId", gffi.UINT32, gffi.UINT32 );

a potem gdzieś w kodzie:

GML
hProcess = process_create( environment_get_variable( "COMSPEC" ), "/k start", "", false );

processId = gffi_function_call( global.pGetProcessId, hProcess );

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...