偶在人物的click事件里添加代码SetForegroundWindow(hMain),
这样能够使main窗口激活,当拖动人物后,虽然我在dragcomplete事件里也添加了代码SetForegroundWindow(hMain),但是main窗口却不能激活,只是在任务栏闪动,
后来偶换成了postmessage,然后在主窗口获取消息再调用SetForegroundWindow(hMain),
但是结果一样。在word中,拖动助手放开后,word就被激活了,偶想做的就是那种效果,
望知道的大虾指点 ^_^
这样能够使main窗口激活,当拖动人物后,虽然我在dragcomplete事件里也添加了代码SetForegroundWindow(hMain),但是main窗口却不能激活,只是在任务栏闪动,
后来偶换成了postmessage,然后在主窗口获取消息再调用SetForegroundWindow(hMain),
但是结果一样。在word中,拖动助手放开后,word就被激活了,偶想做的就是那种效果,
望知道的大虾指点 ^_^
解决方案 »
- delphi2010里,怎样把TMemoryStream中的字符倒到string中?
- 在ie里输入地址就能进入网站,idhttp post的方式提示连接拒绝
- 如何用DELPHI开发一个视屏监控的实时画面转换系统
- dephi数据库连接配置保密:
- varisnull 在什么单元中,在线等?
- 用ADO控件连接数据库,运行的时候每次都要输入sa才行,很麻烦,怎么可以不输入啊?
- 一个关于结构数组问题.如果解决不了的话只有用土办法了:)
- 关于form2.ShowModal的一个问题
- 一个插入SQL+控件插入的问题?
- sting类型转换为 TClass; TForm,大牛们来大把手吧!
- MDI子窗体问题。
- fs.SetFieldType(ftString)不起作用
external user32 Name 'SwitchToThisWindow';
{x = false: Size unchanged, x = true: normal size}
procedure TForm1.Button2Click(Sender: TObject);
begin
SwitchToThisWindow(FindWindow('notepad', nil), True);
end;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
timeout: DWORD;
begin
if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE); if GetForegroundWindow = hwnd then Result := True
else
begin
// Windows 98/2000 doesn't want to foreground a window when some other
// window has keyboard focus if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
(Win32MinorVersion > 0)))) then
begin
// Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
// Converted to Delphi by Ray Lischner
// Published in The Delphi Magazine 55, page 16 Result := False;
ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
Result := (GetForegroundWindow = hwnd);
end;
if not Result then
begin
// Code by Daniel P. Stasinski
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
SPIF_SENDCHANGE);
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
end;
end
else
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
end; Result := (GetForegroundWindow = hwnd);
end;
end; { ForceForegroundWindow }
但是在拖动人物后该函数就没能做到那种效果了。或者说我想要的功能是拖动人物结束后,
激活自己的主窗体
使用了键盘模拟api,
keybd_event(VK_TAB,MapVirtualKey(VK_TAB, 0), 0, 0);
keybd_event(VK_TAB, MapVirtualKey(VK_TAB, 0), KEYEVENTF_KEYUP, 0);
这样的确得到了我需要的结果。
但是这个函数是模拟键盘的,但是我不调用函数,直接按Tab键,却不能得到结果,
感觉真是有点古怪!
有兴趣的大家讨论讨论 :)