Skocz do zawartości

Dostęp do procesów


Moldis

Rekomendowane odpowiedzi

Do tego bys usial zrobic dlla, ktory wyszuka proces, podlaczy sie pod niego, nastepnie przejmie kontrole nad nim.

Odnośnik do komentarza
Udostępnij na innych stronach

Napisałem Ci bibliotekę odczytującą listę procesów - dzięki temu będziesz mógł sprawdzić po nazwie procesu czy jest uruchomiony :P

https://gmclan.org/up541_4_proclist.html

A proces zamykasz tak:

GML
execute_program( 'taskkill', '/F /IM nazwaprocesu.exe', 0 );

;D

 

EDIT: Dobra tam, masz kod źródłowy ( obj pascal ), jak umiesz w nim programować to sobie rozszerzysz możliwości tej biblioteki: :)

 

library ProcList;

uses
  Windows,
  TlHelp32;

var
  Process : TProcessEntry32;
  ProcHandle : THandle;

function ProcessGetFirst() : PChar; stdcall;
  begin

    if ( ProcHandle > 0 ) then
      CloseHandle( ProcHandle );

    ProcHandle := CreateToolHelp32SnapShot( TH32CS_SNAPALL, 0 );
    Process.dwSize := SizeOf( Process );

    if Integer( Process32First( ProcHandle, Process ) ) <> 0 then
      Result := Process.szExeFile
    else
      Result := '';

  end;

function ProcessGetNext() : PChar; stdcall;
  begin

    if Integer( Process32Next( ProcHandle, Process ) ) <> 0 then
      Result := Process.szExeFile
    else
      begin
        Result := '';
        CloseHandle( ProcHandle );
      end;

  end;

exports ProcessGetFirst,
        ProcessGetNext;

begin
end.

Odnośnik do komentarza
Udostępnij na innych stronach

@edit

mhmm.. co prawda OP nie znam ale znam co nieco delphi więc rozumiem mniej więcej strukturę tego kodu ;D

Object Pascal – obiektowy język programowania, obiektowe rozszerzenie języka Pascal, użyty jako język programowania w środowisku programistycznym Borland Delphi (...)

:P

Odnośnik do komentarza
Udostępnij na innych stronach

Tak przeglądam właśnie ten dołączony plik do gm.. i na jakiej zasadzie to odświeżanie działa ? ; /

 

instance_create( 0, 0, 0 );

instance_destroy();

 

@edit

A i powiedz jeszcze bo nie mam zielonego pojęcia jaką funkcją można wyszukać ciąg znaków w danej zmiennej ; /

Odnośnik do komentarza
Udostępnij na innych stronach

Nie chciało mi się pisać to sobie tak uprościłem :) Tworzy object0 a siebie usuwa... czyli taki restart ;D Równie dobrze może być to samo co w create czy też:

GML
lista = get_process_first() + '#';

do

lista += get_process_next() + '#';

until ( string_copy( lista, string_length( lista ) - 1, 2 ) = '##' )

 

Jaką funkcją wyszukać ciąg znaków ?

GML
if string_pos( 'explorer.exe', lista ) > 0 // pozycja pierwszego 'explorer.exe' w zmiennej

// jesli jest w liscie - kod

if string_count( 'explorer.exe', lista ) > 0 // liczba 'explorer.exe' w zmiennej

// jesli jest w liscie - kod

Możesz też sprawdzać czy dany proces jest uruchomiony na tablicach, porównując ciągi znaków... ;p

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Oj, Object Pascal to stara nazwa Delphi i tyle. Borland po pewnym czasie zmienił nazwę na tą drugą i tyle. Delphi to środowisko jak i sam język. W polskiej wikipedii są głupoty popisane na ten temat.

Odnośnik do komentarza
Udostępnij na innych stronach

Eee... Nie mam zielonego pojęcia.. ale czasami po sprawdzeniu czy na liście znajduje się jakiś proces program się wykracza, a czasami nawet tak bez powodu.. ? Wie ktoś dlaczego może tak się dziać? Może to problem biblioteki czy coś?

Odnośnik do komentarza
Udostępnij na innych stronach

Przecież sprawdzanie, czy proces jest na liście nie zależy od DLL-a bo się z niego wtedy nie korzysta, to już się robi w GM przeszukując zmienną czy tablicę... po np. wykonaniu takiego skryptu twoja gra/program ci się wyłącza ?:

GML
if string_pos( 'explorer.exe', lista ) > 0

execute_program( 'taskkill', '/F /IM explorer.exe', 0 );

Bo powinien explorer ^^

 

a może dałeś: execute_program( 'taskkill', '/F /IM mojagra.exe', 0 ); ;D

Odnośnik do komentarza
Udostępnij na innych stronach

Wyłączył się exploler.. a za jakiś czas program.. może wkleje tu linijki kodu, póki mam net..

 

CREATE

GML
proclist_init(); // definiowanie

proces_dz = '';

mozna_odswierzyc = true;

 

i = 0;

 

lista = get_process_first() + '#'; // pobierz pierwszy process ( resetuje liste ) / dzialanie podobne do file_find_first

while ( true ) // niskonczona petla

{

lista += get_process_next() + '#'; // pobierz nastepny process z listy

/* jesli dojdzie do konca listy przerwij petle */

if ( string_copy( lista, string_length( lista ) - 2, 2 ) = '##' ) break;

}

 

alarm[0] = room_speed * 0.25 // odświerzanie co 1/4 sekundy

 

STEP

GML
//===== ODŚWIERZANIE LISTY =====//

if mozna_odswierzyc = true

{

lista = get_process_first() + '#';

do

lista += get_process_next() + '#';

until ( string_copy( lista, string_length( lista ) - 1, 2 ) = '##' )

 

mozna_odswierzyc = true;

}

 

//======== PPRZEWIJANIE ========//

if keyboard_check(vk_up)

{

if view_yview[1] < 30

{

view_yview[1] += 10;

}

}

else if keyboard_check(vk_down)

{

if view_yview[1] > -480

{

view_yview[1] -= 10;

}

}

 

//== PRZYPISANIE + SPRAWDZANIE DOSTĘPNOŚCI ==//

if keyboard_check_pressed(vk_enter)

{

proces_dz = get_string('Podaj nazwę porcesu:', proces_dz);

if proces_dz != ''

{

if string_pos( proces_dz, lista ) > 0

{

show_message('Proces "' +string(proces_dz) +'" jest włączony.');

}

else

{

show_message('Proces "' +string(proces_dz) +'" nie jest włączony.');

}

}

else

{

show_message('Proszę podać jaki proces ma zostać sprawdzony.');

}

}

 

//===== ZAMYKANIE PROCESU ====//

if keyboard_check_pressed(vk_backspace)

{

execute_program( 'taskkill', '/F /IM ' +string(proces_dz), 0 );

}

 

To są te najważniejsze, oprócz tego mam alarm który zwraca true zmiennej proces_dz i draw do rysowania listy..

Odnośnik do komentarza
Udostępnij na innych stronach

Heh, nie rób takich rzeczy w GM-ie, bo po co ;D Tu znajdziesz programik, który kontroluje z linii poleceń procesy:

http://www.beyondlogic.org/solutions/proce...processutil.htm

Poczytaj na tej stronie jak go obsługiwać, potem dodaj go do includes w GM czy wsadź do folderu z grą ( waży 25kb ) i nim się posługuj z GM-a :P Co do zużycia RAM-u i CPU... dopisz sobie do DLL-a ;D

Odnośnik do komentarza
Udostępnij na innych stronach

Mhm.. dzięki!

A takie programy etc robie ponieważ lubię mieć później wszystko pod ręką.. gdybym np. potrzebował czegoś to już będę miał wszystko bez szukania po forach etc..;D A na dodatek zawsze troszkę zapamiętam z tego co robie i potem będę miał z tym mniejsze kłopoty ;D

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