怎样知道程序创建或关闭了一个窗体 ( 积分: 100 )

  • 主题发起人 主题发起人 流水先生
  • 开始时间 开始时间

流水先生

Unregistered / Unconfirmed
GUEST, unregistred user!
请帮帮忙
 
问题说的太模糊了。
如果应用程序是自己的,可以通过全局变量或者消息。
 
自已的程序,截消息判断应该是WM_CREATE和WM_DESTROY,在网上找了很久也没找到满意的答案。
 
既然是自己的程序,利用窗体本身的事件就可以知道窗体的创建和关闭了。
好像太简单了,不知道理解错楼主的意思没有!
 
var
LV: TLVColumn;
begin
Result := 0;

case MSG of
WM_CREATE: begin
LV.mask := LVCF_TEXT or LVCF_WIDTH;
LV.cx := 60;
LV.pszText := PChar('12');
SendMessage(LSV, LVM_INSERTCOLUMN, 0, LongInt(@LV));
SendMessage(LSV, LVM_INSERTCOLUMN, 1, LongInt(@LV));
end;
else
Result := CallWindowProc(GPBWndProcOld, HGPB, MSG, wParam, lParam);
end;
WM_CREATE是在CreateWindow, CreateWindowEx调用返回前被触发的,因此只有在RegisterClass时事先定义的lpfnWndProc过程中才会收到WM_CREATE
 
if findwindow('your application name')<> 0 then means exist
if = 0 means has been closed;

You can alse use Mutex to solve
if openMutex('name')<>0 then means exist
if = 0 then means has been close;
(you would better make the application only one instance)

Also have other methods...
 
to:那年黄梅花开 这种方法不符合我的要求。
to:delphi_lp 能否再详细点,比如在哪里写这段过程。我比较菜,这段代码好像在网上收到过,但是没太能理解具体怎么做。
 
SetWindowsHook 钩挂 消息 事件!
苯BBS 全文检索 中有例子!
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
private
{ Private declarations }
procedure WMCreate(var Message: TWMCreate); message WM_CREATE;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.WMCreate(var Message: TWMCreate);
begin
inherited;
with Message.CreateStruct^ do
Caption := Format('Width=%d, Height=%d', [cx, cy]);
end;

end.
 
感谢wql指点,我的代码如下。
function FormWMHookHandler(iCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall;
begin
Result := 0;
If iCode < 0 Then
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
if wParam = WM_CREATE then
begin
MessageBeep(0);
end;
end;
function EnableHotKeyHook: BOOL;
begin
Result := False;
if hNextHookProc <> 0 then Exit;
hNextHookProc := SetWindowsHookEx(
WH_CALLWNDPROC,//WH_CALLWNDPROCRET
FormWMHookHandler,
0,
GetCurrentThreadId);
Result := hNextHookProc <> 0;
end;

function DisableHotKeyHook: BOOL;
begin
if hNextHookProc <> 0 then
begin
UnhookWindowshookEx(hNextHookProc);
hNextHookProc := 0;
end;
Result := hNextHookProc = 0;
end;

但是我还是截不到WM_CREATE消息,请帮帮啊。。
 
很简单啊
你只要在窗体的create和close里分别写个消息函数不就可以了...
 
同意楼上的,很简单的一个问题,怎么弄的这么复杂了
 
不能在create和close里写,这样不能满足要求。用hook办法好,但是我就是截不出窗体的消息,还请大家帮帮忙。
 
Application.OnMessage事件找消息
自己的程序,基本上还是不用Hook的
 
Application.OnMessage用过,也没找到。我快晕了
 
我晕翻,翻遍了所有网络才找到问题所在。
 
多人接受答案了。
 
后退
顶部