当窗体当前没有焦点,或者窗体被最小化了,在该窗体得到某一事件怎么显示窗体呀?让窗体得到焦点。我用以下代码不行:
procedure TForm1.WndProc(var message: TMessage);
var
dataStruct: PCOPYDATASTRUCT;
passingMessage: PMessage;
begin
inherited;
if message.Msg = WM_COPYDATA then begin
dataStruct := PCOPYDATASTRUCT(message.LParam);
passingMessage := PMessage(dataStruct.lpData);
if (passingMessage^.Msg = WM_KEYDOWN) then begin
//listBox1.Items.Add('message=' + IntToStr(passingMessage^.WParam));
if (passingMessage^.wParam = VK_HOME) then
begin
ShowWindow(self.Handle, SW_SHOWNORMAL or SW_RESTORE);
BringWindowToTop(self.Handle);
SetForegroundWindow(self.Handle);
end;
end;
end;
end;窗体在任务栏一闪一闪得,就是不提前现实。
procedure TForm1.WndProc(var message: TMessage);
var
dataStruct: PCOPYDATASTRUCT;
passingMessage: PMessage;
begin
inherited;
if message.Msg = WM_COPYDATA then begin
dataStruct := PCOPYDATASTRUCT(message.LParam);
passingMessage := PMessage(dataStruct.lpData);
if (passingMessage^.Msg = WM_KEYDOWN) then begin
//listBox1.Items.Add('message=' + IntToStr(passingMessage^.WParam));
if (passingMessage^.wParam = VK_HOME) then
begin
ShowWindow(self.Handle, SW_SHOWNORMAL or SW_RESTORE);
BringWindowToTop(self.Handle);
SetForegroundWindow(self.Handle);
end;
end;
end;
end;窗体在任务栏一闪一闪得,就是不提前现实。
解决方案 »
- 各位大侠们啊,这个分都不要,算是白进来了,求教啊!
- 菜鸟请教,关于多线程中调用方法或者控件的问题!
- 关于感情的问题。我的话可能有些偏激,不喜欢听的请不要进来。
- 连Access数据库时出现的问题!
- trim可以把字符串空格去掉,能否把分配过剩的数组去掉?
- Delphi高手请进,类继承问题.
- 本人想学delphi:寻苏州delphi高手做家教!
- 如何用dbgrid来显示多数据表内容。条件是不能做记录匹配.
- 如何在Service中读取NT的登陆用户名?谢谢。
- 我是菜鸟,问一个关于类的问题
- KsDhtmlEdit控件的使用问题,在线等。顶帖者都有分…………………………………………!!!
- ImageEn中怎么把各层的内容合并到一起,然后保存
ShowWindow(Application.Handle, SW_SHOWNORMAL or SW_RESTORE);
也是一样,就是不提前显示出来
目前处于别得窗体之后还不行
the system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true: The process is the foreground process.
The process was started by the foreground process.
The process received the last input event.
There is no foreground process.
The foreground process is being debugged.
The foreground is not locked (see LockSetForegroundWindow).
The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
No menus are active.
不信可以自己试验,
搞一个程序只有:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
SetForegroundWindow(Handle);
}
保存起来,运行它然后把窗体放在后面,这时它只能在任务栏里闪。再搞一个程序:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WinExec("C:\\Documents and Settings\\Ray\\桌面\\新建文件夹\\project1.exe",SW_SHOW);//运行上一个程序
}
这时按Button1就可以调到前面来。
真是这样,只在任务栏里闪,但是有没有办法直接掉到前面来?如果不开新进程。因为这个进程要一直开着,比如游戏外挂。我看到别得游戏外挂可以做到。