Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 2 fragen zu HWND und HWND+Canvas (https://www.delphipraxis.net/101930-2-fragen-zu-hwnd-und-hwnd-canvas.html)

k4ni 20. Okt 2007 18:49


2 fragen zu HWND und HWND+Canvas
 
hallo leute,

Ich hab hier mal nach etwas gesucht das mit dem ich durch Canvas die farbe checken kann.
Dann hat mir jemand das hier gegeben:
http://forum.dsdt.info/viewtopic.php...3384bda0b2150d

Ich hab das dann auch benützt und geht alles super, doch ich will nicht das er es von dem gesammten desktop/bildschirm nimmt sondern nur von einem bestimmten fenster.
Also das ist was ich gerade benütze:


Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
 DCanvas: TCanvas;
 DHandle: HWND;
 currentcaption, currentminus2: Integer;
begin
 DHandle:=GetDC(0);
 if DHandle<>0 then
 begin
   try
     DCanvas:=TCanvas.Create;
     try
     DCanvas.Handle:=DHandle;
     if DCanvas.Pixels[293, 335] = RGB(239, 239, 239 )
       then
       begin
       Timer1.Enabled := false;
       Timer2.Enabled := false;

       Label4.Caption := inicurrent;
       Label4.Visible := true;
       Label5.Visible := true;


       if Checkbox1.Checked = true then
       PlaySound(PChar('logged.wav'),0,SND_ASYNC or SND_LOOP);
       
       ShowMessage (inicurrent);
       PlaySound(nil,0,0);
        end
     finally
       DCanvas.Free;
     end;
    finally
      if ReleaseDc(0, DHandle)<>1 then
        RaiseLastOSError;
    end;
 end
 else
   RaiseLastOSError;
end;
So nun hab ich versucht das fenster (in diesem fall MapleStory) zu nehmen, also
Delphi-Quellcode:
 DHandle:= FindWindow(NIL, 'MapleStory');
Und hab dann versucht es so dann nur von diesem einen fenster aus zu lesen, aber funktioniert nicht :(
Ist das überhaupt möglich ? auch wenn es minimiert ist? Wenn es nicht möglich ist wenn es minimiert ist dann brauch ich es garnicht.

nur 2. Frage;
Ich hab mal von irgendjemanden das hier bekommen:
Delphi-Quellcode:
procedure EnterText(AText: String);
var lCount    : Integer;
    lScanCode : Smallint;
    lWithAlt,
    lWithCtrl,
    lWithShift : Boolean;
begin
  for lCount := 1 To Length(AText) Do
  begin
    lScanCode := VkKeyScan(AText[lCount]);
    //Ermitteln ob Shift gedrückt wurde
    lWithShift := lScanCode and (1 shl 8) <> 0;
    //Ermitteln ob Strg gedrückt wurde
    lWithCtrl := lScanCode and (1 shl 9) <> 0;
    //Ermitteln ob Alt gedrückt wurde
    lWithAlt  := lScanCode and (1 shl 10) <> 0;

    if lWithShift then
      keybd_event(VK_SHIFT, 0, 0, 0);
    if lWithCtrl then
      keybd_event(VK_CONTROL, 0, 0, 0);
    if lWithAlt then
      keybd_event(VK_MENU, 0, 0, 0);

    keybd_event(lScanCode, 0, 0, 0);
    keybd_event(lScanCode, 0, KEYEVENTF_KEYUP, 0);

    if lWithAlt then
      keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
    if lWithCtrl then
      keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    if lWithShift then
      keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
  end;
end;
Weis jemand was ich machen muss damit es das keybd_event nur an ein bestimmtes window sendet ?

Apollonius 20. Okt 2007 19:15

Re: 2 fragen zu HWND und HWND+Canvas
 
Dein DHandle ist kein HWND sondern ein sogenannter Device Context, also das Handle einer Zeichenfläche. Um dieses Handle von einem anderen Fenster zu erhalten, musst du den Parameter von GetDC ändern. MSDN-Library durchsuchenGetDC

Die 2. Frage hat überhaupt nichts mit der ersten zu tun. Eröffne für sie bitte einen eigenen Thread.

k4ni 20. Okt 2007 19:52

Re: 2 fragen zu HWND und HWND+Canvas
 
dankee!!
Aber am anfang steht doch
Delphi-Quellcode:
var
 DCanvas: TCanvas;
 DHandle: HWND;           // <---- HIER
 currentcaption, currentminus2: Integer;

Apollonius 20. Okt 2007 19:55

Re: 2 fragen zu HWND und HWND+Canvas
 
Das muss streng genommen HDC heißen, also Handle eines Device Contexts. Jedoch sind alle Handles (THandle, HDC, HWND, HHook, hFile und wie sie alle heißen) letztlich nur Cardinals und können vom Compiler auch nicht unterschieden werden.

k4ni 20. Okt 2007 20:02

Re: 2 fragen zu HWND und HWND+Canvas
 
wenn ich das jetzt richtig verstehe müsste das hier gehen ?!:
Delphi-Quellcode:
var
 DCanvas: TCanvas;
 DHandle: HWND;
 damn: HWND;
 currentcaption, currentminus2: Integer;
begin
 damn := FindWindow(NIL, 'MapleStory');
 DHandle:=GetDC(damn);
 if DHandle<>0 then
 begin
   try
     DCanvas:=TCanvas.Create;
     try
     DCanvas.Handle:=DHandle;
     if DCanvas.Pixels[293, 335] = RGB(239, 239, 239 )
       then
       begin
       Timer1.Enabled := false;
       Timer2.Enabled := false;

       Label4.Caption := inicurrent;
       Label4.Visible := true;
       Label5.Visible := true;


       Ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'LastPin_CorrectPin.txt');
       Ini.WriteString('rCracker', 'Correct Pin', inicurrent);

       if Checkbox1.Checked = true then
       PlaySound(PChar('logged.wav'),0,SND_ASYNC or SND_LOOP);
       
       ShowMessage ('Eingeloggt, Pin ist: '+inicurrent);
       PlaySound(nil,0,0);
        end
     finally
       DCanvas.Free;
     end;
    finally
      if ReleaseDc(0, DHandle)<>1 then
        RaiseLastOSError;
    end;
 end
 else
   RaiseLastOSError;
end;
Hab es mal versucht auf dem desktop und es ging immernoch.

Apollonius 20. Okt 2007 20:06

Re: 2 fragen zu HWND und HWND+Canvas
 
Zitat:

Hab es mal versucht auf dem desktop und es ging immernoch.
Was soll das heißen?
Übrigens solltest du auch ReleaseDC mit dem Handle aufrufen, zu den Api-Funktion sollte man immer in der MSDN schauen.

k4ni 20. Okt 2007 20:07

Re: 2 fragen zu HWND und HWND+Canvas
 
is sollte ja eigentlich nur ingame gehen also im MapleStory window. Aber es hat die farbe auch auf dem desktop gefunden.

k4ni 20. Okt 2007 21:05

Re: 2 fragen zu HWND und HWND+Canvas
 
eigentlich müsste es so laut msdn funktionieren, aber geht irgendwie nicht, wer hat ne idee?

Muetze1 21. Okt 2007 13:30

Re: 2 fragen zu HWND und HWND+Canvas
 
Ja, z.B. folgende: Maple malt nicht auf dem Window DC sondern auf einem Overlay wie z.B. von OpenGL oder DirectX.

(Ich sollte dazu erwähnen, dass mir Maple nichts sagt und ich auch nicht kenne)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 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