如何用VB实现隐藏程序窗口?
换而言之就是把这个Delphi改写成VB。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, jpeg, ShellApi;type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
{热键标识ID}
id1,id2,id3,ID4: Integer;
aboutme:string; {保存窗体句柄}
savehwnd:hwnd;
windowhwnd:array[0..50] of hwnd;
windowhwndnum:integer;
taf:bool; procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
procedure revisewindow;
procedure hidewindow;
procedure showwindow;
procedure hidewindowx;
procedure showwindowx;
public
{ Public declarations }
end;var
Form1: TForm1;implementationconst RSP_SIMPLE_SERVICE=1;
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external 'KERNEL32.DLL'; {$R *.DFM}//获取当前激活窗体的标题文字---开始
function fwindows:string;
var hw:hwnd;
buffer:array [0..1000] of char;begin
hw:=GetForegroundwindow;
GetWindowText(hw,buffer,1000);
result:=buffer;
end;
//获取当前激活窗体的标题文字---结束
{捕获热键消息}
procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin
if msg.HotKey = id1 then
if taf then
begin
hidewindow;
taf:=false;
end;IF msg.hotkey = id2 then
if not taf then
begin
showwindow;
taf:=true;
end;
IF msg.hotkey = id3 then
MESSAGEBOX(FORM1.HANDLE,pchar(ABOUTME),'关于... ...',MB_OK);
//showmessage(aboutme);//IF msg.hotkey = id4 then
//SHOWwindowX;form1.Visible :=true;
end;//改变窗体风格---开始
procedure tform1.revisewindow;
var hw:hwnd;
begin
hw:=GetForegroundwindow;
//setwindowpos(hw,hwnd_topmost,0,0,800,600,swp_drawframe);
enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,800,600,SWP_DRAWFRAME));
end;
//改变窗体风格---结束
//隐藏窗体---开始
procedure tform1.hidewindow;
var hw:hwnd;
begin
hw:=GetForegroundwindow;
savehwnd:=hw;
setwindowpos(hw,hwnd_top,0,0,800,600,SWP_HIDEWINDOW OR SWP_NOMOVE OR SWP_NOSIZE OR SWP_NOZORDER);
//enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,800,600,SWP_hidewindow));
end;
//隐藏窗体---结束
//显示窗体---开始
procedure tform1.showwindow;
var hw:hwnd;
begin
hw:=savehwnd;
setwindowpos(hw,hwnd_top,0,0,800,600,SWP_SHOWWINDOW OR SWP_NOMOVE OR SWP_NOSIZE OR SWP_NOOWNERZORDER);
SetForegroundWindow(hw);
//enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,500,500,SWP_SHOWWINDOW));
end;
//显示窗体---结束
//隐藏窗体(群)---开始
procedure tform1.hidewindowX;
var i:integer;
hw,thw:hwnd;
wintext:array[0..1000] of char;
begin
windowhwndnum:=0;
hw:=GetForegroundwindow;
thw:=getdesktopwindow;
while hw<>thw do
begin
setwindowpos(hw,hwnd_topmost,0,0,800,600,SWP_HIDEWINDOW OR SWP_NOMOVE OR SWP_NOSIZE OR SWP_NOZORDER);
//enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,800,600,SWP_hidewindow));
sleep(300);
windowhwnd[windowhwndnum]:=hw;
windowhwndnum:=windowhwndnum+1;
hw:=GetForegroundwindow;
end;end;
//隐藏窗体(群)---结束
//显示窗体(群)---开始
procedure tform1.SHOWwindowX;
var hw,thw:hwnd;
wintext:array[0..1000] of char;
i:integer;
begin
for i:=0 to windowhwndnum do
setwindowpos(windowhwnd,hwnd_topmost,0,0,800,600,SWP_SHOWWINDOW OR SWP_NOMOVE OR SWP_NOSIZE OR SWP_NOZORDER);
//enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,800,600,SWP_SHOWwindow));end;
//显示窗体(群)---结束
procedure TForm1.FormCreate(Sender: TObject);
Const
{ALT、CTRL和R键的虚拟键值}
MOD_ALT = 1;
MOD_CONTROL = 2;VK_R = 82;
VK_C = 67;
VK_A = 65;
VK_H = 72;
VK_S = 83;
VK_P = 80;beginaboutme:='软件名称:窗明几净'+#13+
'软件作者:普小红(Pch)'+#13+
'软件版本:20040816'+#13+
'软件类型:免费使用'+#13+
'使用说明:软件使用非常简单:'+#13+
' Alt + H 隐藏当前窗体'+#13+
' Alt + S 显示被隐藏窗体'+#13+#13+
' 公司领导决心整顿劳动纪律,禁止使用一切聊天工具。'+#13+
' 当发现老板来巡视,您是否扔了键盘以瞬间速度关机?'+#13+
' 家长不允许你去玩游戏,你只有挺而走险,小心翼翼!'+#13+
' 偷偷的玩还被他们发现,你是否有毁灭计算机的冲动。'+#13+
' 道高一尺 魔高一丈,使用本软件给你解除后顾之忧。'+#13+#13+#13+
'联系方式:E-mail: [email protected]'+#13+
' WEB: Www.Chonps.Com';{首先判断程序是否已经运行}
if GlobalFindAtom('MyHotkeyID1') = 0 then
begin
{注册全局热键Ctrl + Alt + R}
id1:=GlobalAddAtom('MyHotkeyID1');
RegisterHotKey(handle,id1,MOD_Alt,VK_H);
id2:=GlobalAddAtom('MyHotkeyID2');
RegisterHotKey(handle,id2,MOD_Alt,VK_S);
id3:=GlobalAddAtom('MyHotkeyID3');
RegisterHotKey(handle,id3,MOD_CONTROL+MOD_Alt,VK_P);
//id4:=GlobalAddAtom('MyHotkeyID4');
//RegisterHotKey(handle,id4,MOD_Alt,VK_S);
endelse
halt;setwindowlong(application.handle,gwl_exstyle,ws_ex_toolwindow);
taf:=true;
Timer1.Enabled:=true;end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle,id1);
GlobalDeleteAtom(id1);
UnRegisterHotKey(handle,id2);
GlobalDeleteAtom(id2);
UnRegisterHotKey(handle,id3);
GlobalDeleteAtom(id3);
UnRegisterHotKey(handle,id4);
GlobalDeleteAtom(id4);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
hidewindowX;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
//showmessage(aboutme);
setwindowpos(handle,hwnd_topmost,0,0,800,600,SWP_HIDEWINDOW OR SWP_NOMOVE OR SWP_NOSIZE);
Timer1.Enabled:=false;
end;end.
换而言之就是把这个Delphi改写成VB。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, jpeg, ShellApi;type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
{热键标识ID}
id1,id2,id3,ID4: Integer;
aboutme:string; {保存窗体句柄}
savehwnd:hwnd;
windowhwnd:array[0..50] of hwnd;
windowhwndnum:integer;
taf:bool; procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
procedure revisewindow;
procedure hidewindow;
procedure showwindow;
procedure hidewindowx;
procedure showwindowx;
public
{ Public declarations }
end;var
Form1: TForm1;implementationconst RSP_SIMPLE_SERVICE=1;
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external 'KERNEL32.DLL'; {$R *.DFM}//获取当前激活窗体的标题文字---开始
function fwindows:string;
var hw:hwnd;
buffer:array [0..1000] of char;begin
hw:=GetForegroundwindow;
GetWindowText(hw,buffer,1000);
result:=buffer;
end;
//获取当前激活窗体的标题文字---结束
{捕获热键消息}
procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin
if msg.HotKey = id1 then
if taf then
begin
hidewindow;
taf:=false;
end;IF msg.hotkey = id2 then
if not taf then
begin
showwindow;
taf:=true;
end;
IF msg.hotkey = id3 then
MESSAGEBOX(FORM1.HANDLE,pchar(ABOUTME),'关于... ...',MB_OK);
//showmessage(aboutme);//IF msg.hotkey = id4 then
//SHOWwindowX;form1.Visible :=true;
end;//改变窗体风格---开始
procedure tform1.revisewindow;
var hw:hwnd;
begin
hw:=GetForegroundwindow;
//setwindowpos(hw,hwnd_topmost,0,0,800,600,swp_drawframe);
enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,800,600,SWP_DRAWFRAME));
end;
//改变窗体风格---结束
//隐藏窗体---开始
procedure tform1.hidewindow;
var hw:hwnd;
begin
hw:=GetForegroundwindow;
savehwnd:=hw;
setwindowpos(hw,hwnd_top,0,0,800,600,SWP_HIDEWINDOW OR SWP_NOMOVE OR SWP_NOSIZE OR SWP_NOZORDER);
//enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,800,600,SWP_hidewindow));
end;
//隐藏窗体---结束
//显示窗体---开始
procedure tform1.showwindow;
var hw:hwnd;
begin
hw:=savehwnd;
setwindowpos(hw,hwnd_top,0,0,800,600,SWP_SHOWWINDOW OR SWP_NOMOVE OR SWP_NOSIZE OR SWP_NOOWNERZORDER);
SetForegroundWindow(hw);
//enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,500,500,SWP_SHOWWINDOW));
end;
//显示窗体---结束
//隐藏窗体(群)---开始
procedure tform1.hidewindowX;
var i:integer;
hw,thw:hwnd;
wintext:array[0..1000] of char;
begin
windowhwndnum:=0;
hw:=GetForegroundwindow;
thw:=getdesktopwindow;
while hw<>thw do
begin
setwindowpos(hw,hwnd_topmost,0,0,800,600,SWP_HIDEWINDOW OR SWP_NOMOVE OR SWP_NOSIZE OR SWP_NOZORDER);
//enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,800,600,SWP_hidewindow));
sleep(300);
windowhwnd[windowhwndnum]:=hw;
windowhwndnum:=windowhwndnum+1;
hw:=GetForegroundwindow;
end;end;
//隐藏窗体(群)---结束
//显示窗体(群)---开始
procedure tform1.SHOWwindowX;
var hw,thw:hwnd;
wintext:array[0..1000] of char;
i:integer;
begin
for i:=0 to windowhwndnum do
setwindowpos(windowhwnd,hwnd_topmost,0,0,800,600,SWP_SHOWWINDOW OR SWP_NOMOVE OR SWP_NOSIZE OR SWP_NOZORDER);
//enddeferwindowpos(deferwindowpos(begindeferwindowpos(1),hw,hwnd_top,0,0,800,600,SWP_SHOWwindow));end;
//显示窗体(群)---结束
procedure TForm1.FormCreate(Sender: TObject);
Const
{ALT、CTRL和R键的虚拟键值}
MOD_ALT = 1;
MOD_CONTROL = 2;VK_R = 82;
VK_C = 67;
VK_A = 65;
VK_H = 72;
VK_S = 83;
VK_P = 80;beginaboutme:='软件名称:窗明几净'+#13+
'软件作者:普小红(Pch)'+#13+
'软件版本:20040816'+#13+
'软件类型:免费使用'+#13+
'使用说明:软件使用非常简单:'+#13+
' Alt + H 隐藏当前窗体'+#13+
' Alt + S 显示被隐藏窗体'+#13+#13+
' 公司领导决心整顿劳动纪律,禁止使用一切聊天工具。'+#13+
' 当发现老板来巡视,您是否扔了键盘以瞬间速度关机?'+#13+
' 家长不允许你去玩游戏,你只有挺而走险,小心翼翼!'+#13+
' 偷偷的玩还被他们发现,你是否有毁灭计算机的冲动。'+#13+
' 道高一尺 魔高一丈,使用本软件给你解除后顾之忧。'+#13+#13+#13+
'联系方式:E-mail: [email protected]'+#13+
' WEB: Www.Chonps.Com';{首先判断程序是否已经运行}
if GlobalFindAtom('MyHotkeyID1') = 0 then
begin
{注册全局热键Ctrl + Alt + R}
id1:=GlobalAddAtom('MyHotkeyID1');
RegisterHotKey(handle,id1,MOD_Alt,VK_H);
id2:=GlobalAddAtom('MyHotkeyID2');
RegisterHotKey(handle,id2,MOD_Alt,VK_S);
id3:=GlobalAddAtom('MyHotkeyID3');
RegisterHotKey(handle,id3,MOD_CONTROL+MOD_Alt,VK_P);
//id4:=GlobalAddAtom('MyHotkeyID4');
//RegisterHotKey(handle,id4,MOD_Alt,VK_S);
endelse
halt;setwindowlong(application.handle,gwl_exstyle,ws_ex_toolwindow);
taf:=true;
Timer1.Enabled:=true;end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle,id1);
GlobalDeleteAtom(id1);
UnRegisterHotKey(handle,id2);
GlobalDeleteAtom(id2);
UnRegisterHotKey(handle,id3);
GlobalDeleteAtom(id3);
UnRegisterHotKey(handle,id4);
GlobalDeleteAtom(id4);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
hidewindowX;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
//showmessage(aboutme);
setwindowpos(handle,hwnd_topmost,0,0,800,600,SWP_HIDEWINDOW OR SWP_NOMOVE OR SWP_NOSIZE);
Timer1.Enabled:=false;
end;end.
解决方案 »
- 请问如何检测版本是否需要升级。
- 各位高手请给小弟帮一帮忙,关于sql的问题......................急
- 在线等待,请告知答案? 如何解决。。。。。。。。。。。。。。。。。。。
- 在做一个通讯组件时出了问题,急。。。。。。。。。。。。
- 一个白痴的高级问题,走过,路过,不要错过...................................
- 在线等!去哪下载VB6.0中文版的
- 如果得到Shell后DOS窗口内的内容
- 我要将一个EXECL表中的数据导到SQL SERVER 里的一个表
- 关于调换VB编写的工具栏界面???????????????????????????
- !!!!抢分了,有关文件处理
- 我为什么找不到某个dll文件?急死了。谢谢大家。
- 如何用代码生成一个ODBC数据源..?
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
用这个函数
热键
http://www.sijiqing.com/vbgood/experience/index.asp?action=read&id=2471
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
配合来做?
ShowWindow 句柄,0-----隐藏
ShowWindow 句柄,1-----显示
在:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, jpeg, ShellApi;这里,类似类
获得鼠标下的窗口句柄,参数是x坐标,y坐标