知道对话框的标题, 能不能阻止他弹出? ( 积分: 300 )

  • 主题发起人 主题发起人 SystemError
  • 开始时间 开始时间
S

SystemError

Unregistered / Unconfirmed
GUEST, unregistred user!
知道一个窗体或者对话框的标题,能不能阻止他弹出?而不是弹出之后再关闭.
 
hwnd := Findwindow(nil,标题);
SetWindowLong(hwnd,.....)把式样改为不可见状态,不知道是不是你要的
 
可以请楼上说明一下具体的参数是什么吗?
 
hwnd := Findwindow(nil,标题);
showwindow(hwnd,0);
就可以了 也可以试试直接关闭它
 
最好是关闭它,而不是让他不可见。阻止弹出是不行的,最好的办法是写个线程,检测到就关闭它。我写过类似的代码,给你参考一下。


type
TAutoCloseInfoWindow = class(TThread)
procedure Execute(); override;

end;
var
l_hWnd:THandle;//要关闭的那个窗口的父窗口

//--------------------实现部分-----------------

function EnumChildWindowsProc(hwnd: THandle; lParam:LPARAM): Boolean;stdcall;
var
Buff: array[0..255] of Char;
nID:Integer;
begin
GetWindowText(hwnd,buff,255);
nID := GetDlgCtrlID(hwnd);
if Pos('否',buff) > 0 then//系统设置改变,问你是否重启,要枚举到“否”按钮,点下它
begin
SendMessage(l_hWnd,WM_COMMAND,MAKEWPARAM(nID,BN_CLICKED),hwnd);
Result := FALSE;
Exit;
end;
Result := TRUE;
end;


function EnumWindowProc(hWnd :THandle;value :DWORD):BOOL;stdcall;
var
szClassName:array[0..99] of char;
szWinTitleName:array[0..256]of char;
begin
GetClassName(hWnd,szClassName,100);
GetWindowText(hWnd,szWinTitleName,256);
if (Pos('#32770',szClassName) > 0) and (
(Pos('不安全的移除裝置',szWinTitleName) > 0) or
(Pos('不安全的设备删除',szWinTitleName) > 0) or
(Pos('Unsafe Removal of Device',szWinTitleName) > 0)) then
begin
SendMessage(hWnd,WM_CLOSE,0,0);
Result := False;
Exit;
end;
if Pos('系统设置改变',szWinTitleName) > 0 then
begin
l_hWnd := hwnd;
EnumChildWindows(hwnd,@EnumChildWindowsProc,0);//这个窗口很特殊,发送关闭消息没用的,要找到窗口里面的按钮,模拟按下它
Result := FALSE;
Exit;
end;
Result := True;
end;


procedure TAutoCloseInfoWindow.Execute();
begin
while True do
begin
Sleep(20);
EnumWindows(@EnumWindowProc,0);
end;
end;
 
Sleep(20)是为了避免CPU占有率100%,线程Execute里最好改成While not Self.Terminated do
begin
end;
 
谢谢要楼上的回答..我以前是这样写的..

hMutex:= FindWindow(nil, 'XXX');
if hMutex <> 0 then
SendMessage(hMutex,WM_CLOSE,0,0);
这个窗体弹出的时候,会有个声音. 用上面的方法,会看到屏幕上一闪而过的窗体,并且会听到弹出窗体的声音.(windows自带的那种声音),
 
对钩子熟悉的话、直接闭屏
拦截 MessageboxA函数
if szCaption='你得到的标题' then exit;
 
不熟悉...能否麻烦你.给个例子?
 
都好厉害啊,学习同时接点分,谢谢!
 
to crazycock:
好象编译的时候不能通过的
 
to huay:
编译时候不能通过提示什么?

关注钩子方法实现的代码。
 
to crazycock:
能否方便将程序或完整的源代码给我参考一下?谢谢!
我是学习D的新手,对windows的相关系列函数并不全部熟悉
QQ:43416414,工作时间都在线
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
EnumChildWindows(hWnd,@EnumChildWindowsProc,0);

[Error]:Variable required
 
后退
顶部