求socket5代理服务器服务器端delphi源码(200分)

  • 主题发起人 主题发起人 yzlufei
  • 开始时间 开始时间
楼上的还是不行(不能到前台),Handle是对的(findwindow查的)
SendMessage(h,WM_SYSCOMMAND,SC_RESTORE,0);
SetForegroundWindow(H);
能激活到前台只是最小化按钮失效罢了。(必须在任务栏点右键->[还原]后,才能最小化。)

1、我不是让要发消息让他最小化,而是要点最小化按钮使他能最小化。
2、对于“记事本是微软创建的,但是我用我的程序一样可以控制它(CREATEPROCESS) "我不要去创建他,是已经运行的。也就是某个时刻我的程序运行了,发现这个外部程序,发消息让它激活到前台。不存在我创建它的问题。
 
准备给golden_future分了。
 
关注&学习
procedure TForm1.Button1Click(Sender: TObject);
var
h:thandle;
begin
h:=shellexecute(0,'open','d:/1.exe',0,0,sw_show);
SendMessage(h,WM_SYSCOMMAND,SC_RESTORE,0);
SetForegroundWindow(H);
end;
我这里是这么些的一切都ok,findwindow也是ok,
不存在lz说的问题,只好
查找了一下msdn,也许
最后+上一句
sendmessage(h,wm_syscommand,sc_keymenu,0);
这个应该能帮你找回那个失效的按钮吧。
 
楼上的方法应该可以的吧,现在忙没有时间试一下
 
大家用的delphi什么版本的啊, 也许是版本的问题。
 
使窗口变成当前窗口,显示在最前面
wh是窗口句柄,用下面函数:
procedure SwitchWindowToTop(wh: THandle);
var
hCurrWnd: THandle;
iMyTID, iCurrTID: integer;
begin
hCurrWnd := GetForegroundWindow;
iMyTID := GetCurrentThreadId;
iCurrTID := GetWindowThreadProcessId(hCurrWnd, nil);
AttachThreadInput(iMyTID, iCurrTID, True);
showwindow(wh,SW_NORMAL);
SetForegroundWindow(wh);
AttachThreadInput(iMyTID, iCurrTID, False);
end;

如果窗口是自己用delphi写的,用下面函数:
procedure SwitchWindowToTop(wh: THandle);
var
hCurrWnd: THandle;
iMyTID, iCurrTID: integer;
XWndLong:integer;
begin
hCurrWnd := GetForegroundWindow;
iMyTID := GetCurrentThreadId;
iCurrTID := GetWindowThreadProcessId(hCurrWnd, nil);
AttachThreadInput(iMyTID, iCurrTID, True);
showwindow(wh,SW_NORMAL);
SetForegroundWindow(wh);
AttachThreadInput(iMyTID, iCurrTID, False);
windows.SetParent(application.Handle,GetdesktopWindow);//不加这句窗口就无法最小化了
end;
 
我也遇到过这个问题,感觉是由于vcl处理消息的机制引起的。
当时由于是调用自己的程序,所以没深究,搞了个消息,让被调用的程序收到指定消息后自己调到前台,这样就一切正常。
 
依然没有解决,如果是自己的写的程序不会有问题的,关键就是别人的程序啊。
 
楼主试试这样行不,不要SetForegroundWindow,就下面两步
好像对某窗口进行最小化,然后还原,也会提到前台而且没有后遗症
1。showwindow(目标窗口,最小化
2。showwindow(目标窗口,还原
 
SendMessage(h,WM_SYSCOMMAND,SC_RESTORE,0);
setwindowlong(h,GWL_STYLE,getwindowlong(h,GWL_STYLE) or WS_MINIMIZEBOX);//让最小化按钮可用
SetForegroundWindow(H);
 
仍然没有解决。
 
多人接受答案了。
 
后退
顶部