AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Postmessage Problem

Ein Thema von Serpentine · begonnen am 25. Nov 2008 · letzter Beitrag vom 1. Dez 2008
Antwort Antwort
Serpentine

Registriert seit: 1. Sep 2007
32 Beiträge
 
Delphi 2005 Personal
 
#1

Postmessage Problem

  Alt 25. Nov 2008, 20:50
Hi Leute, ich habe folgenden Quelltext geschrieben, er ließ sich auch kompilieren, aber die Main Funktion (Button1Click funktioniert einfach nicht richtig), VK_END und VK_INSERT drückt er wohl aber die Zahlen nicht.

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ShellAPI, Menus, Appevnts, XPMan, ExtCtrls,
  ComCtrls,DateUtils;

const
  WM_TASKABAREVENT = WM_USER+1;

type
  TForm2 = class(TForm)
    PopupMenu1: TPopupMenu;
    disable1: TMenuItem;
    enable1: TMenuItem;
    close1: TMenuItem;
    CheckBox1: TCheckBox;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure close1Click(Sender: TObject);
    procedure enable1Click(Sender: TObject);
    procedure disable1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure TaskbarEvent(var Msg: TMessage);
    Message WM_TASKABAREVENT;
  public
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
  end;

var
  Form2: TForm2;
  wnd:hwnd;

implementation

{$R *.dfm}

procedure delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
  stop := gettickcount;
  application.processmessages;
  until (stop - start ) >= msec;
end;

procedure TForm2.WMSysCommand(var Message: TWMSysCommand);
begin
  if Message.CmdType and $FFF0 = SC_MINIMIZE then
  begin
    Hide;
  end
  else
    inherited;
end;

procedure TForm2.TaskbarEvent(var Msg: TMessage);
var Point : TPoint;
begin
  case Msg.LParam of
    WM_LBUTTONDBLCLK:
      begin
        form2.show;
      end;
    WM_LBUTTONUP:
      begin
      form2.show;
      end;
    WM_RBUTTONUP:
      begin
        SetForegroundWindow(Handle);
        GetCursorPos(Point);
        PopupMenu1.Popup(Point.x, Point.y);
      end;
  end;
end;



procedure TForm2.FormCreate(Sender: TObject);
var
  NotifyIconData: TNotifyIconData;
begin
  wnd := FindWindow(nil,pchar(edit3.text));
  Fillchar(NotifyIconData,Sizeof(NotifyIconData),0);
  NotifyIconData.cbSize := Sizeof(NotifyIconData);
  NotifyIconData.Wnd := Handle;
  NotifyIconData.uFlags := NIF_MESSAGE
    or NIF_ICON
    or NIF_TIP;
  NotifyIconData.uCallbackMessage := WM_TASKABAREVENT;
  NotifyIconData.hIcon := Application.Icon.Handle;
  NotifyIconData.szTip := 'AFK Buffer';
  Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
end;


procedure TForm2.FormDestroy(Sender: TObject);
var
  NotifyIconData: TNotifyIconData;
begin
  FillChar(NotifyIconData,Sizeof(NotifyIconData),0);
  NotifyIconData.cbSize := Sizeof(NotifyIconData);
  NotifyIconData.Wnd := Self.Handle;
  NotifyIconData.uFlags := NIF_MESSAGE
    or NIF_ICON
    or NIF_TIP;
  NotifyIconData.uCallbackMessage := WM_TASKABAREVENT;
  NotifyIconData.hIcon := Application.Icon.Handle;
  NotifyIconData.szTip := 'Punkt';
  Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
end;

procedure TForm2.disable1Click(Sender: TObject);
begin
checkbox1.checked:=true;
end;

procedure TForm2.enable1Click(Sender: TObject);
begin
checkbox1.checked:=false;
button1.click;
end;

procedure TForm2.close1Click(Sender: TObject);
begin
form2.close;
end;

procedure TForm2.Button1Click(Sender: TObject);
var i,delay0r:integer;
begin
delay0r:= strtoint(edit1.Text);
wnd := FindWindow(nil,pchar(edit3.Text));
if wnd=0 then begin
showmessage('Client not found!');
exit;
end;
application.ProcessMessages;
   PostMessage(wnd, WM_Keydown, VK_END, 0);
   PostMessage(wnd, WM_Keyup, VK_END, 0);
   sleep(50);
   application.ProcessMessages;
   PostMessage(wnd, WM_Keydown, $31, 0);
   PostMessage(wnd, WM_Keyup, $31, 0);
   sleep(delay0r);
   application.ProcessMessages;
   PostMessage(wnd, WM_Keydown, $32, 0);
   PostMessage(wnd, WM_Keyup, $32, 0);
   sleep(delay0r);
   application.ProcessMessages;
   PostMessage(wnd, WM_Keydown, $33, 0);
   PostMessage(wnd, WM_Keyup, $33, 0);
   sleep(delay0r);
   application.ProcessMessages;
   PostMessage(wnd, WM_Keydown, $34, 0);
   PostMessage(wnd, WM_Keyup, $34, 0);
   sleep(delay0r);
   application.ProcessMessages;
   PostMessage(wnd, WM_Keydown, $35, 0);
   PostMessage(wnd, WM_Keyup, $35, 0);
   sleep(50);
   application.ProcessMessages;
   PostMessage(wnd, WM_Keydown, VK_INSERT, 0);
   PostMessage(wnd, WM_Keyup, VK_INSERT, 0);
//repeat
//delay(strtoint(edit2.text)*1000);
//buffen;
//until checkbox1.checked=true;
end;



end.
Ich verstehe einfach nicht warum -.-
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#2

Re: Postmessage Problem

  Alt 25. Nov 2008, 20:55
Zitat von Serpentine:
(Button1Click funktioniert einfach nicht richtig)
Was heißt nicht Richtig?

Was passiert und was soll passieren?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Serpentine

Registriert seit: 1. Sep 2007
32 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Postmessage Problem

  Alt 25. Nov 2008, 21:01
Es soll passieren:
Er sendet die Tastenanschläge mit zwischenzeitlichem delay, also z.b.:

ENDE
Pause, 50msec
1
Pause, 50msec
2
Pause, delay0r
3
Pause, delay0r
4
Pause, delay0r
5
Pause, 50msec
EINFG

Was er macht:
ENDE
EINFG

Ob er dazwischen Pausen macht weiß ich nicht genau, das sieht man in der Anwendung leider nicht so genau.
Auf jedenfall werden keine Nummerntasten gesendet(NICHT Numpad,sondern die anderen).
  Mit Zitat antworten Zitat
Serpentine

Registriert seit: 1. Sep 2007
32 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Postmessage Problem

  Alt 1. Dez 2008, 23:45
Kann es sein, dass ein Fenster bestimmte virtuelle Tastendrücke nicht animmt und kann man dies umgehen?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz