Einzelnen Beitrag anzeigen

k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#1

2 fragen zu HWND und HWND+Canvas

  Alt 20. Okt 2007, 18:49
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
 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 ?
  Mit Zitat antworten Zitat