Form içinde uyguluma çalıştırmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
CemErgun
Üye
Mesajlar: 91
Kayıt: 05 May 2009 11:31
Konum: antalya

Form içinde uyguluma çalıştırmak

Mesaj gönderen CemErgun »

Merhabalar,

ben form'um içinde bir uygulama çalıştırmak istiyorum, yani benim ana formumun içinde atıyorum xxx.exe çalısıcak böyle birşeyi nasıl gerçekleştirebilirim ? biryerde gördüm nasıl yapacağımı anlayamadım..

şimdiden çok teşekkürler. isteğimi tam anlatamamış olabilirim anlayamayan dostlarım söylerse birazdaha açıklayıcı şekilde anlatmayı deneyebilirim...
procedure TForm1.FormCreate(Sender: TObject);
begin
halt;
end;
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Form içinde uyguluma çalıştırmak

Mesaj gönderen Lord_Ares »

yanlış anlamadıysam şu belki işine yarar. diyelim ki bir hesap makinesini form1 in içine almak istiyorsan aşağıdaki kod işine yarar.

procedure pencerebulformagom;
Var
WindowsNumarasi : THandle;
WindowsAdi : String;

begin
WindowsNumarasi := FindWindow(nil, 'Hesap Makinası');

if WindowsNumarasi= 0 then begin
ShowMessage('pencere bulunamadı');
end else
Windows.Setparent( WindowsNumarasi, Form1.Handle );
end;
Kullanıcı avatarı
CemErgun
Üye
Mesajlar: 91
Kayıt: 05 May 2009 11:31
Konum: antalya

Re: Form içinde uyguluma çalıştırmak

Mesaj gönderen CemErgun »

ahhh evet bunu istiyordum teşekkürler peki gömülen exeyi task manager listesinden gizleyebilir miyiz?
procedure TForm1.FormCreate(Sender: TObject);
begin
halt;
end;
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Form içinde uyguluma çalıştırmak

Mesaj gönderen G.Arkas »

CemErgun yazdı:ahhh evet bunu istiyordum teşekkürler peki gömülen exeyi task manager listesinden gizleyebilir miyiz?
Gömülen exe derken?Resource olarakmı gömüyorsunuZ? Yoksa binder gibi yazılımlarla exetract file methodu ilemi?
Task manager den gizlemeniz için uygulamayı bir dll dosyasına enjekte edip "dll injection" yada "process injection" methodlarını kullanmalısınız.
Tabi burada şöyle bir durum var ki birde bunları şifreleyip antivirüslerden kaçırmanız gerekecek çünkü stub kaynaklı yazılımları direk dll yada sisteme enjekte etmeye çalıştığınızda bunu trojan olarak göremektedirler.

Örnek dll injection kodu

Kod: Tümünü seç

function InjectDll(PID:DWORD; sDll:string):Boolean;
var
hLib:     Pointer;
hThread:  THandle;
pMod:     Pointer;
hOpen:    THandle;
dWritten: Cardinal;
ThreadID: Cardinal;
begin
  Result := FALSE;
  hOpen := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
  if hOpen <> INVALID_HANDLE_VALUE then
  begin
    hLib := GetProcAddress(GetModuleHandle(PChar('kernel32.dll')), PChar('LoadLibraryA'));
    pMod := VirtualAllocEx(hOpen, nil, Length(sDll) + 1, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if WriteProcessMemory(hOpen, pMod, @sDll[1], Length(sDll), dWritten) then
      Result := TRUE;
    hThread := CreateRemoteThread(hOpen, nil, 0, hLib, pMod, 0, ThreadID);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hOpen);
    CloseHandle(hThread);
  end;
end;

function UnInjectDll(PID:DWORD; sDll:string):Boolean;
var
hSnap:  THandle;
MOD32:  MODULEENTRY32;
hLib:   Pointer;
hOpen:    THandle;
hThread:  THandle;
ThreadID: Cardinal;
begin
  Result := FALSE;
  hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
  if hSnap <> INVALID_HANDLE_VALUE then
  begin
    MOD32.dwSize := SizeOf(MOD32);
    Module32First(hSnap, MOD32);
    repeat
      if MOD32.szExePath = sDll then
      begin
        hOpen := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
        if hOpen <> INVALID_HANDLE_VALUE then
        begin
          Result := TRUE;
          hLib := GetProcAddress(GetModuleHandle(PChar('kernel32.dll')), PChar('FreeLibrary'));
          hThread := CreateRemoteThread(hOpen, nil, 0, hLib, MOD32.modBaseAddr, 0, ThreadID);
          CloseHandle(hOpen);
          CloseHandle(hThread);
        end;
      end;
    until Module32Next(hSnap, MOD32) = FALSE;
  CloseHandle(hSnap);
  end;
end;
Resim
Kullanıcı avatarı
CemErgun
Üye
Mesajlar: 91
Kayıt: 05 May 2009 11:31
Konum: antalya

Re: Form içinde uyguluma çalıştırmak

Mesaj gönderen CemErgun »

teşekkrler peki son bişey dha sorucam şimdi programım suspend oldu diyelim programımın içinde çalışan uygulama çalışmaya devam ediyor bunu nasıl engelleyebiliriz programımın suspend edilip edilmedigini nasıl anlayabilirim?
procedure TForm1.FormCreate(Sender: TObject);
begin
halt;
end;
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Form içinde uyguluma çalıştırmak

Mesaj gönderen G.Arkas »

Killtask ile engelleyebilirsin.Çalıştırdığın yazılımın exe sini
Killtask('deneme.exe'); olarak sonlandırısın bunu da senin projenin close sine yazarsın böylece seninki kapandığında oda kapanır.
Resim
Kullanıcı avatarı
CemErgun
Üye
Mesajlar: 91
Kayıt: 05 May 2009 11:31
Konum: antalya

Re: Form içinde uyguluma çalıştırmak

Mesaj gönderen CemErgun »

pardon yanlış anladınız galiba

suspend diyorum yani programı kitleyen birşey hani program kitlendiğinde yanıtvermiyor yazar ya. o işte.
procedure TForm1.FormCreate(Sender: TObject);
begin
halt;
end;
Kullanıcı avatarı
CemErgun
Üye
Mesajlar: 91
Kayıt: 05 May 2009 11:31
Konum: antalya

Re: Form içinde uyguluma çalıştırmak

Mesaj gönderen CemErgun »

yokmu yardım edebilcek olan
procedure TForm1.FormCreate(Sender: TObject);
begin
halt;
end;
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Form içinde uyguluma çalıştırmak

Mesaj gönderen Lord_Ares »

şöyle bir fikrim var ama denemedim. diyelim ki programın kapanmadan durdurmak istiyorsun. yani senin ana programın çalışacak fakat içine gömdüğün durucak. sana vermiş olduğum kod içinde bir pencere numarası bulup setparent ile forma çekiyorsak, programı durdurmak istediğinde ya free komutu ile setparenti boşaltmak , yada pence numarısı handle boş vermek belki çözum olabilir. aradığı pencereyi bulamayınca program hiç birşye yapamayacaktır.

bu benim ki sadece fikir yanılıyo olabilirim.
Cevapla