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のコードエディタ部に文字を送る方法を教えていただけないでしょうか?
よろしくお願いします><
申し訳ありません、コードが間違っておりました><
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;
このほかにも、指定の仕方が違うのかと思い、色々なパターンでやってみたのですが、やはりうまくいきません。
他の方法でもよいので、よろしくお願いします><
書きかけですが、よろしければご覧下さい
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BOpenToolsAPI%5D%5D
こんばんは。
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のハンドルを見つける
方法知っていたら教えてください。
ツイート | ![]() |