AGB  ·  Datenschutz  ·  Impressum  







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

Taste senden/DCOM

Ein Thema von golisan · begonnen am 1. Jun 2012 · letzter Beitrag vom 12. Jun 2012
 
golisan

Registriert seit: 17. Jan 2007
43 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Taste senden/DCOM

  Alt 12. Jun 2012, 07:28
Hallo,

so, habe inzwischen (m)eine Lösung gefunden.
Das Problem war ja, dass der FindWindow und FindWindowEX nicht im DCOM-Modus funktioniert hat.
Warum weiss ich immer noch nicht.
Aus einer Eingebung heraus, habe ich das Suchen der Fenster in eine DLL ausgelagtert und da tut es...

Hier mal der Code:

Delphi-Quellcode:
procedure TCoQS.Set_eGoto(Value: Integer);
var wnd : HWND;
begin
  wnd := sucheFenster(PChar(fNatName)); // Funktion aus DLL
  if wnd <> 0 then
  begin
  SetForegroundWindow(wnd);
  SendMessage(wnd, WM_CHILDACTIVATE, 0, 0); // Sonst kommen die Tasten nicht an

   Sleep(200); // kurz warten

   // CONTROL+G senden
   Keybd_Event(VK_CONTROL,0,0,0);
   Keybd_Event(byte('G'),0,0,0);
   Keybd_Event(byte('G'),0,KEYEVENTF_KEYUP,0);
   Keybd_Event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
   SendMessage(wnd, WM_SETFOCUS, 0, 0);

   sleep(200); // nochmal kurz warten

   // Zeilennummer im GoTo-Dialog eintragen
   wnd := FindWindow('#32770', 'Go To');
   wnd := FindWindowEx(wnd, 0, 'Edit', nil);
   SendMessage(wnd, WM_SETTEXT, 0, Integer(inttostr(value)));

   // auf physische Zeilensuche umstellen
   wnd := FindWindow('#32770', 'Go To');
   wnd := FindWindowEx(wnd, 0, 'Button', '&Physical Line');
   SendMessage(wnd,BM_CLICK,2,0);

   // OK-Button drücken
   wnd := FindWindow('#32770', 'Go To');
   wnd := FindWindowEx(wnd, 0, 'Button', 'OK');
   SendMessage(wnd,BM_CLICK,2,0);

  end
  else
    showmessage('Kein Handle ermittelt');
end;

Hier die DLL
Delphi-Quellcode:
function sucheFenster(name : PChar): HWND; stdcall;
var
  hWndTemp, wnd, pgm: hWnd;
  iLenText: Integer;
  cTitletemp: array [0..254] of Char;
  sTitleTemp: string;
begin
  result := 0;
  wnd := FindWindow('NIDEWindowClass', nil); //Anwendung suchen
  wnd := FindWindowEx(wnd, 0, 'MDIClient', nil); //unsichtbares Hintergrundfenster(was immer das auch ist...)
  if wnd <> 0 then begin
// da der Fenstertitel nicht immer gleich ist...umständlich suchen...
    hWndTemp := GetWindow(wnd, GW_CHILD);
    while hWndTemp <> 0 do begin
      iLenText := GetWindowText(hWndTemp, cTitletemp, 255);
      sTitleTemp := cTitletemp;
      sTitleTemp := UpperCase(copy( sTitleTemp, 1, iLenText));
      if pos( name, sTitleTemp ) <> 0 then begin
        result := hWndTemp;
        Exit;
      end;
      hWndTemp := GetWindow(hWndTemp, GW_HWNDNEXT);
    end;
  end;
end;

falls jemand ein ähnliches Problem haben sollte...
  Mit Zitat antworten Zitat
 


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 17:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz