Problem z pobraniem procesu oraz sendmessage

0

Witam.. Mam taki napisany program:

unit Bot;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,sndkey32, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Timer1: TTimer;
    GroupBox1: TGroupBox;
    Label2: TLabel;
    Label3: TLabel;
    StatusBar1: TStatusBar;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x : integer;
  op:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Caption = 'Wlacz' then
  begin
if Edit1.Text = '' then Application.MessageBox('Wpisz nazwę procesu', 'Brak nazwy', 0)
    else
        begin
          Timer1.Enabled := True;
          Button1.Caption := 'Wylacz';
          Edit1.Enabled := False;
          StatusBar1.SimpleText := '   Bot: Włączony';

    end;
    end
else
      if Edit1.Text = '' then Application.MessageBox('Wpisz nazwę procesu', 'Brak nazwy', 0) else
        begin
        Timer1.Enabled := False;
        Button1.Caption := 'Wlacz';
        Edit1.Enabled := True;
        StatusBar1.SimpleText := '   Bot: Wyłączony';

        end;
    end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  proces : HWND;
begin
  //proces := FindWindow(PChar(Edit1.Text), nil);
  proces := FindWindow('MozillaContentWindowClass',nil);
  if proces = 0 then Application.MessageBox('Uchwyt Pusty', 'Blad', 0) else
  begin
  //EditH := FindWindowEx(proces, 0, 'Edit', nil);
  SendMessage(proces, WM_CHAR, VK_SPACE, 0);
  end;
end;

end.

Ale niestety mam problem. Jak zrobic zeby pobieralo po nazwie procesu a nie uchwytu : (

0

Pobierało co?

0

Moj caly problem polega na tym.. Koledze pisze bota.. Chce aby w polu tekstowym podawalo sie nazwe procesu w tym np. nostale.exe ... Klikasz Wlacz i tam co 1 s wysyla spacje(aby gra mogla byc zminimalizowana).. Caly problem w tym zeby to dzialo sie za pomoca nazwy procesu a nie uchwytu.

1

ja [CIACH!]. Nie wiem czy to kompletny brak podstaw programowania, lenistwo, upośledzenie umysłowe czy może po prostu brak mózgu...
FindWindow ma DWA parametry, opis choćby tu FindWindow tak ciężko przeczytać dwa zdania o funkcjach, z których się korzysta czy choćby googla zapytać????

0

Misiekd: nie denerwuj się, do występowania tych symptomów, które wymnieniłeś u pytających na tym forum - powinieneś się przyzwyczaić ;) Przy okazji prośba, sprawdź prywatne wiadomości, bo nie wiem czy tą ode mnie nie przeoczyłeś. A do pytającego, jak chcesz pobierać uchwyt na podstawie nazwy procesu to poczytaj to: Uchwyt na podstawie nazwy pliku exe programu

0

Poprawilem i teraz mam tak:

proces := ExeProcessToHWnd('firefox.exe');
SendMessage(proces, WM_CHAR, VK_SPACE, 0);

Z tym ze spacji nie wysyla..

1

Nie rozumiesz podstawowej rzeczy. Tak nie wyślesz znaków do wciskania. WM_CHAR akceptują tylko kontrolki edycyjne, nie wiem jak w FireFoxie, ale na przykład pod Operą, wszystkie elementy okna przeglądarki są pod jedną klasą i uchwytem przez co nie da się w łatwy sposób do nich dostać. Chcesz symulować wciskanie klawiszy to użyj Keybd_Event albo SendInput, o ile okno będzie aktywne FireFoxa to może zareaguje na wciskanie klawiszy. W google znajdziesz więcej informacji jak używać tych metod. A ja kiedyś skorzystałem z programu AutoHotKey i wygenerowałem exe z "nagranych" ruchów myszką oraz wciskania klawiszy do skryptu w celu symulowania po to aby pod Operą wygodniej po naciśnięciu Buttona wywołać Exe który wykona takie same czynności jakie są koniecznie do opróżnienia folderu z usuniętymi wiadomościami z kanałów RSS. Tylko, że od którejś wersji 11.X już udoskonalono okno do zarządzania wiadomościami i wszystko da się wygodnie usuwac, bez koniecznych wcześniej kombinacji.

0

@olesio... Z calym szacunkiem ale keybd_event oraz SendInput nie da sie uzyc zeby tylko na danym procesie wysylalo dany klaiwsz.. A wlasnie o to mi chodzi. Chyba ze jest mozliwosc taka to prosze o pomoc..
P.S. Chodzi mi o to by aplikacja moglabyc zminimalizowana

0

No to tak jak pisałem. Można wysłać WM_CHAR głownie do kontrolek edycyjnych, bo one na taki komunikat reagują. Do całego okna się nie da. Jeżeli FireFox ma rozgraniczone elementy okna i pola edycyjne posiadają uchwyt to możes spróbowac do nich wysłać. innej możliwości z użyciem WM_CHAR nie widzę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0