Delphiのコードエディタに文字を送るには?


Canl  2004-12-26 10:17:50  No: 12486

Delphiのコードエディタ画面(名前は間違っているかもしれませんが、ソースを打ち込むところです。)に、SendMessageで文字を送りたいと思っているのですが、

var
  WND: HWND;
  i: Integer;
  Str: string;
begin
 WND := FindWindow('Delphi32',nil);
  if WND <> 0 then begin
     WND := FindWindowEx(WND, 0, 'EditControl', nil);
     Str := 'テスト';

     for i := 1 to Length(Str) do begin
         SendMessage(WND, WM_CHAR, Word(Str[i]), 0);
     end;

     PostMessage(WND, WM_KEYDOWN, VK_RETURN, 0);
  end;

としたところ、反応がありません。
SendMessageや、FindWindowの使い方が間違っているのかもしれませんが、メモ帳などではうまく動作することが出来たので、どこがいけないのか教えていただけないでしょうか?
または、Delphiのコードエディタ部に文字を送る方法を教えていただけないでしょうか?

よろしくお願いします><


Canl  2004-12-26 21:12:45  No: 12487

申し訳ありません、コードが間違っておりました><

var
  WND: HWND;
  i: Integer;
  Str: string;
begin
 WND := FindWindow('Delphi32',nil);
  if WND <> 0 then begin
     WND := FindWindowEx(WND, 0, 'EditControl', nil);
     Str := 'TEST';//ここです

     for i := 1 to Length(Str) do begin
         SendMessage(WND, WM_CHAR, Word(Str[i]), 0);
     end;
  end;

このほかにも、指定の仕方が違うのかと思い、色々なパターンでやってみたのですが、やはりうまくいきません。
他の方法でもよいので、よろしくお願いします><


RAN  2004-12-28 04:45:59  No: 12488

書きかけですが、よろしければご覧下さい
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BOpenToolsAPI%5D%5D


Fusa  2004-12-30 06:12:14  No: 12489

こんばんは。

Delphi6で試しましたが
Delphiのエディタ部分は
TEditWindow
└TPanel
  └TEditControl

になっていました。(おそらくD2005では違っていると思いますけど。)

EnumWindows
EnumChildWindows

を使ってこのTEditControlのハンドルを見つけておいて
hwndDelphiEditorに代入

  SendMessage( hwndDelphiEditor, WM_PASTE,0,LPARAM( PChar( S )));

このようにすればできました。

Enumxx部分のソースがわからなければまた質問してください。

FindWindowExでTEditControlを見つける方法がわからなかったので
Enumxxで求めてみました。
どなたかFindWindowExで2階層下のTEditControlのハンドルを見つける
方法知っていたら教えてください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加