タイトル通りですが、Delphiで作ったCGIの中で
FindWindowが効かないのですが原因が分かりません。
function TWebModule1.test(FormCaption:string):integer;
var
hd: HWND;
begin
hd := FindWindow(nil,pchar(FormCaption));
result := hd; // 0になる
end;
【環境】
・WinXP SP2 /Delphi5
他のファイル関連などの関数やAPI等は問題ないのですが
FindWindowは使えないのでしょうか。
どなたか経験のある方はいらっしゃいませんか?
よろしくお願いします。
探してるものがトップレベルWindowじゃなかったりして.....
もしかして さん、ありがとうございます
一応確認の為に、別立てで(下記ソース)
1.FindWindowでのプログラム検索機能
2.EnumWindowsProc(コールバック関数)での一覧リスト作成
..を可能にした、DLLを作成しまして
■一般PGのテスト用プログラム(test2.exe)を作りまして
上記 1&2 をテストしますと
1. 目的のトップレベルWindowフォーム名(モニター)が処理出来ます。
(例: Handle=999999)
2. 現在、起動されている複数のフォーム名等が出てきます。
(例: 受信トレイ - Outlook Express / Delphi 5 - Test ..etc)
■しかし、CGIプログラム(index.cgi)でこの dllを呼びますと
1. 目的のトップレベルWindowフォーム名(モニター)でハンドルが取れません。
(例: Handle=0)
2. 何か視点?の違う名称が出てきます。
( Zend Timeout Window / ModemDeviceChange / BadApplicationNotificationWindow ..etc)
因みに目的のプログラムは自作のもの(test.exe)で
フォームには「モニター」のような文字が入っています。
以上のように通常のプログラムとCGIでの動作が違う様です。
このような結果になる事は概略分かってきましたが、対策が取れません。
それとも、CGIベースでは出来ないのでしょうか。
よろしくお願いします。
-- 以下、多少手抜きリストですが -----------------
//---------------------------------------------
function fm_find(cap_str:PChar;hd:HWND): BOOL; stdcall;
begin
result := false;
hd := FindWindow(nil,cap_str);
if hd<>0 then begin
result := true;
end;
end;
//---------------------------------------------
function EnumWindowsProc(hwindow :HWnd; lparam :LPARAM):BOOL; stdcall;
var
PC :PChar;
Len :integer;
Name :string;
begin
Result :=false;
if hWindow <> 0 then begin
GetMem(PC, 500);
Len :=GetWindowtext(hWindow, PC, 500);
setstring(Name, PC, Len);
if Name <> '' then begin
p_enum(lParam)^.add('[hd='+inttostr(hWindow)+']:'+Name);
end;
FreeMem(PC);
Result :=true;
end;
end;
//---------------------------------------------
function fm_list(slist:PChar): BOOL; stdcall;
var
StrList:TstringList;
begin
StrList := TStringList.Create;
EnumWindows(@EnumWindowsProc, LParam(@StrList));
StrCopy(slist, PChar(StrList.Text));
StrList.Free;
end;
ツイート | ![]() |