在Delphi中隐藏程序进程的方法
DELPHI控件属性方法事件及常用函数

DELPHI控件属性方法事件及常用函数DELPHI是一种面向对象的编程语言,用于开发Windows平台上的应用程序。
在DELPHI中,控件是程序的可视化部件,用于用户界面的创建和交互。
以下是一些常用的DELPHI控件属性、方法、事件和常用函数的详细介绍。
一、控件属性:1. Name属性:用于指定控件的名称,以便在程序中引用它。
2. Caption属性:用于指定控件的显示文本。
3. Visible属性:用于控制控件是否可见。
4. Enabled属性:用于控制控件是否可用。
5. Color属性:用于指定控件的背景颜色。
6. Font属性:用于指定控件的字体。
7. Width和Height属性:用于指定控件的宽度和高度。
8. Top和Left属性:用于指定控件在父容器中的位置。
9. Parent属性:用于指定控件的父容器。
二、控件方法:1. SetFocus方法:用于使控件获得焦点。
2. Show方法:用于显示当前控件。
3. Hide方法:用于隐藏当前控件。
4. BringToFront方法:用于将当前控件移到其他控件之前显示。
5. SendToBack方法:用于将当前控件移到其他控件之后显示。
6. Invalidate方法:用于使控件的绘制区域无效,触发重绘操作。
三、控件事件:1. OnClick事件:当用户单击控件时触发。
2. OnDblClick事件:当用户双击控件时触发。
3. OnEnter事件:当控件获得焦点时触发。
4. OnExit事件:当控件失去焦点时触发。
5. OnKeyPress事件:当用户按下键盘上的字符键时触发。
6. OnMouseDown事件:当用户按下鼠标按钮时触发。
7. OnMouseUp事件:当用户释放鼠标按钮时触发。
8. OnMouseMove事件:当用户移动鼠标时触发。
四、常用函数:1. ShowMessage函数:用于在屏幕上显示一个消息框。
2. MessageBox函数:用于在屏幕上显示一个消息框,并且返回用户的选择。
delphi窗体隐藏方法

delphi窗体隐藏方法Delphi是一个集成化开发环境,其中包括了许多功能强大的工具和组件。
当我们开发完一个窗体后,可能希望将窗体进行隐藏以达到特定的目的。
这个目的可以是在程序运行期间隐藏窗体,使得窗体不再显示在屏幕上,也可以是在程序启动时隐藏窗体,使得程序不会一开始就显示窗体。
下面我们将会介绍几种在Delphi中实现窗体隐藏的方法。
方法一:使用Visible属性您可以使用Visible属性将窗体隐藏。
这个方法非常简单,只需要将Visible属性设置为False即可。
这将使得窗体不再显示在屏幕上。
如果您需要将窗体再次显示出来,则需要将Visible属性再次设置为True,如下所示:Form1.Visible := False; //隐藏窗体Form1.Visible := True; //显示窗体需要注意的是,即使将窗体隐藏后,仍然可以访问窗体并在其上运行Delphi条款中的所有代码。
方法二:使用AlphaBlend属性AlphaBlend属性允许您使用透明度来隐藏窗体。
这给了您更大的灵活性,因为您可以设置窗体的透明度以实现许多隐藏效果。
您可以使用AlphaBlendValue属性来设置透明度,该属性的值仅在0到255之间。
AlphaBlend属性的默认值为False,您需要将它设置为True才能启用窗体透明度。
以下是示例代码:Form1.AlphaBlendValue := 100; //设置透明度为100Form1.AlphaBlend := True; //启用AlphaBlend功能Form1.AlphaBlendValue := 255; //窗体不再是透明的AlphaBlend的主要缺点是性能开销,所以在窗体中有很多控件时,会使窗体的响应变得缓慢。
方法三:使用Visible和AlphaBlend属性的组合如果您希望更多地控制您的窗体隐藏效果,您可以结合使用Visible和AlphaBlend属性。
隐藏进程_精品文档

隐藏进程什么是隐藏进程?在操作系统中,进程是指正在运行的程序的执行实例。
正常情况下,操作系统会为每个正在运行的程序创建一个进程,并分配资源给它。
这些进程会被显示在任务管理器或进程管理器中,以便用户可以监控和管理它们。
然而,有时候会有一些恶意软件或黑客攻击会隐藏自己的进程,以逃避用户或系统管理员的监控和控制。
隐藏的进程可以执行各种恶意行为,如损坏文件、窃取敏感信息、攻击网络等。
隐藏进程常常被用于恶意软件中,如计算机病毒、木马和恶意软件。
它们通过各种技术手段来隐藏自己的存在,使自己难以被检测和清除。
隐藏进程的常见技术RootkitRootkit 是一种恶意软件,它通过操纵操作系统的功能来隐藏自己。
Rootkit 可以修改操作系统的核心组件,如内核模块、驱动程序等,以便隐藏进程和其他恶意活动。
Rootkit 通常会修改系统函数调用,使它们返回虚假的结果,以掩盖自己的存在。
它还可以修改进程列表、进程状态和文件系统,来隐藏进程和文件。
HookingHooking 是一种技术,通过修改函数调用表或中断向量表来劫持系统的正常行为。
恶意软件可以使用 Hooking 技术来修改操作系统的函数调用,从而隐藏自己的进程。
通常,Hooking 会劫持一些与进程管理相关的函数,如寻找和遍历进程列表的函数。
当用户或系统管理员尝试查看进程列表时,这些被劫持的函数会返回虚假的结果,隐藏恶意进程的存在。
用户模式隐藏用户模式隐藏是一种技术,恶意软件使用它来隐藏自己的进程。
在用户模式下,操作系统提供了一组 API,用于管理进程和线程。
恶意软件可以使用这些 API 来隐藏自己的进程。
恶意软件可以通过修改自身进程的属性和访问权限来隐藏自己。
例如,它可以将自己的进程标记为“隐藏”或修改进程列表,使自己不可见。
驱动程序隐藏驱动程序是操作系统中的一种特殊类型的软件,它们用于控制硬件设备和提供操作系统功能。
恶意软件可以使用驱动程序来隐藏自己的进程。
DELPHI编程经典源码总结

个人收集资料系列Delphi精典技艺问:如何让del+CTRL+ALT看不见程序运行?答:为了让程序用ALT+DEL+CTRL看不见,在implementation后添加声明:function RegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL';再在上面的窗口Create事件加上一句:RegisterServiceProcess(GetCurrentProcessID,1);//隐藏也可以使用下面的函数:function My_SelfHide:Boolean;typeTRegisterServiceProcess=function(dwProcessID,dwType:DWord):DWORD;stdcall;varhNdl:THandle;RegisterServiceProcess:TRegisterServiceProcess;beginResult:=False;if Win32Platform<>VER_PLATFORM_WIN32_NT then//不是NTbeginhNdl:=LoadLibrary('KERNEL32.DLL');RegisterServiceProcess:=GetProcAddress(hNdl,'RegisterServiceProcess');RegisterServiceProcess(GetCurrentProcessID,1);FreeLibrary(hNdl);Result:=True;endelseExit;end;问:自我拷贝法怎么样使用?答:这种方法的原理是程序运行时先查看自己是不是在特定目录下,如果是就继续运行,如果不是就把自己拷贝到特定目录下,然后运行新程序,再退出旧程序.打开Delphi,新建一个工程,在窗口的Create事件中写代码:procedure TForm1.FormCreate(Sender:TObject);var myname:string;beginmyname:=ExtractFilename(Application.Exename);//获得文件名if application.Exename<>GetWindir+myname then//如果文件不是在Windows\System\那么..begincopyfile(pchar(application.Exename),pchar(GetWindir+myname),False);{将自己拷贝到Windows\System\下}Winexec(pchar(GetWindir+myname),sw_hide);//运行Windows\System\下的新文件application.Terminate;//退出end;end;其中GetWinDir是自定义函数,起功能是找出Windows\System\的路径.function GetWinDir:String;varBuf:array[0..MAX_PATH]of char;beginGetSystemDirectory(Buf,MAX_PATH);Result:=Buf;if Result[Length(Result)]<>'\'then Result:=Result+'\';end;问:如何避免同时运行多个相同程序?答:为了避免同时运行多个程序的副本(节约系统资源也),程序一般会弄成每次只能运行一个.这又有几种方法.一种方法是程序运行时先查找有没有相同的运行了,如果有,就立刻退出程序.修改dpr项目文件,修改begin和end之间的代码如下:beginApplication.Initialize;if FindWindow('TForm1','Form1')=0then begin//当没有找到Form1时执行下面代码Application.ShowMainForm:=False;//不显示主窗口Application.CreateForm(TForm1,Form1);Application.Run;end;end.另一种方法是启动时会先通过窗口名来确定是否已经在运行,如果是则关闭原先的再启动。
易语言驱动隐藏进程

驱动保护-隐藏进程躲避封号检测隐藏进程有2种级别:1.是应用级在R3层,这种级别隐藏进程容易,但也比较容易查出进程。
2.是驱动级在R0层,这种级别是最高级别隐藏,隐藏容易,但查出来比较难,需要一定的内核编程技术才能取出驱动隐藏的进程信息。
那么我们这就来讲讲驱动级隐藏进程吧,在Game-EC 驱动版本模块中,加入了RO级的隐藏进程命令,由于Game驱动是我在xp SP3和win7 32位系统里写的,所以支持这2种系统,当然其他版本系统没测试过,也许也支持2000或2003,如果谁有空就在这2个2000或2003系统测试吧,如果有问题就联系我,修改支持兼容即可,64位系统就不用测试了,因为64位系统上运行驱动,需要微软数字签名认证,需要购买。
所以模块驱动不会支持64位系统使用,切勿在64位系统中使用,以免蓝屏!很多游戏会检测辅助程序的进程,来判断机器上是否运行着可疑的程序(对游戏有破坏性的),包括现在有的游戏居然会直接检测易语言进程,禁止运行时候时候运行易语言,这种情况,就是游戏枚举了系统进程,发现了针对它的程序进程,对此做的各种限制。
所以隐藏进程在反游戏检测中也是很有一席之地的,下面我们来写个小例子,举例下如何运用驱动版本模块中的隐藏进程,来隐藏我们的辅助进程,例子的代码:例子布局:没有隐藏进程之前,在任务管理器里,我们可以查看到,当前程序进程如图:我们开始加载驱动隐藏我们程序进程,特别注意哦,我们的驱动加载时候会释放驱动文件到C盘文件去,驱动文件名为:Dult.SYS ,如果有杀毒拦截提示,请允许放行加载!如图:隐藏我们的进程后,我们在任务管理器里找找,或者自己写一份枚举系统进程的代码,枚举下全部系统进程,查看下我们是否能枚举出我们隐藏的进程呢,嘿嘿,当然是无法枚举出来,如图:我们已经无法在任务管理器里找到我们的进程了,因为我们已经以驱动级把我们的进程信息从系统中抹掉了。
这样任何应用级程序枚举或查找进程,都无法找到我们的程序进程。
如何隐藏进程

在WINDOWS操作系统下,当我们无法结束或者不知道怎样结束一个程序的时候,或者是懒得去找“退出”按钮的时候,通常会按“CTRL+ALT+DEL”呼出任务管理器,找到想结束的程序,点一下“结束任务”就了事了,呵呵,虽然有点粗鲁,但大多数情况下都很有效,不是吗?设想一下,如果有这么一种软件,它所要做的工作就是对某个使用者在某台电脑上的活动作一定的限制,而又不能被使用者通过“结束任务”这种方式轻易地解除限制,那该怎么做?无非有这么三种方法:1.屏蔽“CTRL+ALT+DEL”这个热键的组合;2.让程序不出现在任务管理器的列表之中;3.让任务管理器无法杀掉这个任务。
对于第一种方法,这样未免也太残酷了,用惯了“结束任务”这种方法的人会很不习惯的;对于第二种方法,在WINDOWS 9X下可以很轻易地使用注册服务进程的方法实现,但是对于WINDOWS NT 架构的操作系统没有这个方法了,进程很难藏身,虽然仍然可以实现隐藏,但实现机制较为复杂;对于第三种方法,实现起来比较简单,我的作品:IPGate 网址过滤器就是采用的这种方式防杀的,接下来我就来介绍这种方法。
任务管理器的“结束任务”实际上就是强制终止进程,它所使用的杀手锏是一个叫做TerminateProcess()的Win32 API函数,我们来看看它的定义:BOOL TerminateProcess(HANDLE hProcess, // 将被结束进程的句柄UINT uExitCode // 指定进程的退出码);看到这里,是不是觉得不必往下看都知道接下来要做什么:Hook TerminateProcess()函数,每次TerminatePro cess()被调用的时候先判断企图结束的进程是否是我的进程,如果是的话就简单地返回一个错误码就可以了。
真的是这么简单吗?先提出一个问题,如何根据hProcess判断它是否是我的进程的句柄?答案是:在我的进程当中先获得我的进程的句柄,然后通过进程间通讯机制传递给钩子函数,与hProcess进行比较不就行了?错!因为句柄是一个进程相关的值,不同进程中得到的我的进程的句柄的值在进程间进行比较是无意义的。
电脑进程隐藏方法

电脑进程隐藏方法
1、方法比较简单,首先,你需要在网上搜索相关的隐藏进程的第三方软件工具。
这里就以HideToolz为例子,你在浏览器上输入“HideToolz”就会出现相关的官方下载界面,下载并将这个软件安装到你的电脑当中。
2、下载完后,电脑桌面上就会显示出一个HideToolz的压缩包,鼠标选中这个压缩包,双击打开这个压缩包。
然后在压缩包中找到该软件的应用程序,就能够进入到这个软件了。
通过这个软件,你可以看到目前电脑正在运行的软件有哪些、一共有多少软件是电脑当下所在运行的。
3、做完上面的步骤后,现在就开始隐藏电脑的进程。
找到电脑键盘上Ctrl + Alt +【启动任务管理器】,这几个按键,同时按下去,接着在HideToolz软件上面找到你即将要将其隐藏的运行程序,鼠标放在你要进行隐藏的程序上面,然后点击右键,选择隐藏。
做完这个步骤后,你可以进入到人物管理器里面,看看程序是否已经成功隐藏了。
被成功隐藏的程序是不会出现在任务管理器里面的。
4、最后,在隐藏了相关的运行程序之后,如果你想要将隐藏的程序再次调处来,那么你则需要再次打开HideToolz这个软件,在里面找到已经隐藏的程序,并且鼠标放在隐藏的程序上,单击右键,选择“显示”这个按钮,那么随后你就又能在任务管理器中看到该运行
的进程了!
5、除了利用上面说的第三方软件进行隐藏进程,其他不利用第三方软件隐藏进程的方法也有。
但是相对来说步骤复杂一些。
进程隐藏的若干方法

一、最为古老的DLL注入方法。
虽说古老,但也经历了不少变动,最初的win9X的系统没有Psapi,没有进程快照,所以一般是三级跳。
跳啊跳……NT下可以直接用OpenProcess打开进程(打不开的话,提权到Debug 权限),利用LoadLibrary,并且申请远程地址空间,然后把DLL注入到目标EXE进程当中,可谓省时省力,这也是目前应用作为普遍的方法之一。
典型代码:Delphi(Pascal) codefunction AttachToProcess(const HostFile, GuestFile: string; const PID: DWORD = 0): DWORD;varhRemoteProcess: THandle;dwRemoteProcessId: DWORD;cb: DWORD;pszLibFileRemote: Pointer;iReturnCode: Boolean;TempVar: DWORD;pfnStartAddr: TFNThreadStartRoutine;pszLibAFilename: PwideChar;beginResult := 0;EnabledDebugPrivilege(True);Getmem(pszLibAFilename, Length(GuestFile) * 2 + 1);StringToWideChar(GuestFile, pszLibAFilename, Length(GuestFile) * 2 + 1);if PID > 0 thendwRemoteProcessID := PIDelseFindAProcess(HostFile, False, dwRemoteProcessID);hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD + {允许远程创建线程}PROCESS_VM_OPERATION + {允许远程VM操作}PROCESS_VM_WRITE, {允许远程VM写}FALSE, dwRemoteProcessId);cb := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR);pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, cb, MEM_COMMIT, PAGE_READWRITE));TempVar := 0;iReturnCode := WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, cb, TempVar);if iReturnCode thenbeginpfnStartAddr := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW'); TempVar := 0;Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar);end;Freemem(pszLibAFilename);end;二、EXE注入。
在Delphi中隐藏程序进程的方法

在Delphi中隐藏程序进程方法[1]主要需要解决两个问题,即隐藏窗口和设定热键。
一. 隐藏窗口通过API函数GETACTIVEWINDOW获取当前窗口;函数ShowWindow(HWND,nCmdShow)的参数nCmdShow取SW_HIDE时将之隐藏,取SW_SHOW时将之显示。
例如:showwindow(getactivewindow,sw_hide)。
隐藏好窗体后,须记住窗体句柄以便恢复。
二. 键盘监控为了实现键盘监控须用到钩子。
以下是程序的源文件:一、创建一个动态链接库unit HKHide; //链接库中的Unit文件interfaceusesWindows, Messages, sysutils;varhNextHookHide: HHook;HideSaveExit: Pointer;hbefore:longint;function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;function EnableHideHook: BOOL; export;function DisableHideHook: BOOL; export;procedure HideHookExit; far;implementationfunction KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;const _KeyPressMask = $80000000;varf:textfile;temp:string;beginResult := 0;If iCode < 0 ThenbeginResult := CallNextHookEx(hNextHookHide, iCode, wParam, lParam); Exit;end;//侦测 Ctrl + Alt + F12 组合键if ((lParam and _KeyPressMask) = 0) //按下时生效and (GetKeyState(vk_Control) < 0)and (getkeystate(vk_menu)<0)and (wParam = vk_F12) thenbeginResult := 1;//文件不存在则创建if not fileexists('c:\test.txt') thenbeginassignfile(f,'c:\test.txt');rewrite(f);writeln(f,0);closefile(f);endelsebeginassignfile(f,'c:\test.txt');reset(f);readln(f,temp);hbefore:=strtoint(temp);beginhbefore:=getactivewindow;temp:=inttostr(hbefore);rewrite(f);writeln(f,temp);closefile(f);ShowWindow(hbefore, SW_HIDE);end;end; //end if FileExists(....)endelse beginshowwindow(hbefore,SW_SHOW);rewrite(f);writeln(f,0);closefile(f);end;//end if Ctrl+Alt+F12按键end;function EnableHideHook: BOOL; export;beginResult := False;if hNextHookHide <> 0 then Exit;// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下 // 来, 免得 HOOK 呼叫链结断掉hNextHookHide := SetWindowsHookEx(WH_KEYBOARD,KeyboardHookHandler,HInstance,0);Result := hNextHookHide <> 0;end;function DisableHideHook: BOOL; export;beginif hNextHookHide <> 0 thenbeginResult:=True;UnhookWindowshookEx(hNextHookHide); // 解除 Keyboard Hook hNextHookHide:=0;endelseResult:=False;end;procedure HideHookExit;begin// 如果忘了解除 HOOK, 自动代理解除的动作if hNextHookHide <> 0 then DisableHideHook;ExitProc := HideSaveExit;end;end.library HKPHide; //动态链接库工程文件usesHKHide in HKHide.pas;exportsEnableHideHook,DisableHideHook;beginhNextHookHide := 0;hbefore:=0;HideSaveExit := ExitProc;ExitProc := @HideHookExit;end.//文件制作好后先Build All编译成HKPHide.dll。
进程隐藏技术

进程隐藏技术作者:史永林潘进庞雄昌谢青松来源:《电脑知识与技术·学术交流》2008年第30期摘要:从原理上介绍了进程隐藏的几种方法,如通过API拦截和修改系统活动进程列表等方法,并对各种技术进行了优缺点分析。
关键词:进程;隐藏中图分类号:TP309文献标识码:A文章编号:1009-3044(2008)30-0740-02Windows Process Hiding MethodSHI Yong-lin,PAN Jin,PANG Xiong-chang,XIE Qing-song(Department one of Xi'an Communication Institute, Xi'an 710016,China)Abstract: This paper gives a detail explanation of how to hide process on windows, it introduces three ways to achieve the goal.It also tell the strong and weak point of the different methods.Key words: process;hiding进程隐藏,也就在用户不知情的情况下,悄悄执行自己的代码。
这一直是病毒、木马程序设计者不断探求的重要技术,因为这些程序都是见不得光的,都需要较好的隐藏和保护自己。
了解进程隐藏技术,是开发防病毒和木马软件的基础,一般来讲,一个程序如果采用进程隐藏技术隐藏自己,那大多情况下其一定是一个病毒或木马等恶意程序。
但有些情况下,进程隐藏也是某些类型程序所需要的功能,如某些安全控制程序,例如上网控制系统,其功能要求只能上单位局域网,不能上internet,这种程序需要常驻系统,不能停止和卸载,这则要求进程能有效保护和隐藏自己,以防止用户恶意删除和卸载。
delphi 退出方法

delphi 退出方法在Delphi中,退出方法通常是指如何使程序在运行时终止或退出。
在Delphi中,有几种方法可以实现程序的退出。
1. Halt方法,Halt是一种直接终止程序执行的方法。
它会立即停止程序的执行,并且不会执行任何清理工作。
这意味着程序会立即退出,不会调用任何最终化代码或释放任何资源。
因此,使用Halt方法需要谨慎,因为它可能会导致资源泄漏或数据丢失。
2. Halt方法的替代方法是Halt(ExitCode)。
这个方法允许你指定一个退出代码,然后终止程序的执行。
退出代码可以被其他程序或操作系统捕获并处理。
3. Application.Terminate方法,如果你的程序是基于VCL的,你可以使用Application.Terminate方法来终止应用程序的执行。
这个方法会触发VCL的清理过程,释放资源并关闭应用程序的窗口。
4. Close方法,如果你的程序是一个窗体应用程序,你可以使用窗体的Close方法来关闭应用程序的主窗口。
这通常会导致应用程序的退出,但它不会像Application.Terminate一样触发VCL的清理过程。
5. Exit方法,在Delphi中,你也可以使用Exit方法来退出程序。
Exit方法会终止当前函数或过程的执行,并返回到调用它的地方。
如果在主程序中调用Exit方法,它会导致程序退出。
总的来说,在Delphi中退出方法有多种选择,你可以根据具体的情况选择合适的方法来退出程序。
但无论选择哪种方法,都要确保在退出前进行必要的资源释放和清理工作,以避免资源泄漏和数据丢失。
隐藏进程

采用注入到其他进程的方法来隐藏自己的进程。
就是说,把你想做的事情寄生到别人的进程里面。
比如IE什么的。
关于注入的方法很多,下面我给你一个DLL注入的方法,这个是我做某外挂时用过的代码,你参考一下把。
int APIENTRY _tWinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){TCHAR szCommandLine[] _T("目标进程");TCHAR szCurPath[] = _T("当前目录");WCHAR szTagetDLLName[256] = L"目标DLL";PWSTR pszRemoteDLLName = NULL;HANDLE hRemoteThread = NULL;STARTUPINFO StartupInfo = { sizeof(StartupInfo) };PROCESS_INFORMATION ProcessInfo = { 0 };PTHREAD_START_ROUTINE pfnLoadLibraryAddress = NULL;HANDLE hTheFileMaping = NULL;LPREMOTEDATA pTheRemoteData = NULL;__try{//获得本地进程路径名称GetModuleFileNameW(hInstance, szTagetDLLName, 256);//获得目标DLL路径名称,假定目标DLL本地进程在同一个目录。
WCHAR * p = szTagetDLLName + lstrlenW(szTagetDLLName) - 1;while( (*p != L'\\') && (p != szTagetDLLName) )p --;p ++;*p = L'\0';lstrcatW(szTagetDLLName, L"T agetDll.DLL");//获取LoadLibraryW在Kernel32.DLL中的地址,用于作为远线程的入口地址。
delphi 隐藏任务栏图标

delphi 隐藏任务栏图标首先,请看看这些术语。
系统托盘是一个在任务条右角的小方框,在托盘了应用程序可以显示小图标。
任务条是可以在屏幕上伸展的工具栏。
它就是程序图标所在的位置。
想隐藏程序的任务条图标,你可以应用ShowWindow函数并传给它Application.Handle窗口句柄。
ShowWindow(Application.Handle, SW_HIDE);若想让任务条图标再出现,只需将SW_HIDE改为SW_SHOW。
ShowWindow(Application.Handle, SW_SHOW);注: 你可以设置主窗口的Visible属性为false来隐藏它。
注: 通过ShowWindow来隐藏窗口的任务条图标是不持久的。
某些动作会使任务条图标重现。
你可以将隐藏的应用程序窗口设为Tool Window来移走程序的任务条图标而避免它再次出现。
Tool windows永远不会有任务条图标。
使应用程序窗口成为一个Tool Window有一个副作用:当用户按下Alt-TAB时它将不在程序列表中出现。
你可以调用API函数GetWindowLong和SetWindowLong来使应用程序窗口成为一个Tool Window。
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE);dwExStyle |= WS_EX_TOOLWINDOW;SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle);try{Application->Initialize();Application->CreateForm(__classid(TForm1), &Form1);Application->Run();}catch (Exception &exception){Application->ShowException(&exception);}return 0;}/////////////////////////////////ShowWindow(Application->Handle,SW_HIDE)delphi 隐藏任务栏图标2007-02-28 16:16在编程的过程中,有时想让程序的任务栏图标隐藏起来,我们通常的方法是添加代码Application.ShowMainForm:=false;或使用self.hide;来实现,这样虽然能让任务栏图标不出现,但是把主窗体也给藏起来了,有什么办法可以让只任务栏图标不出现呢?今天在上网偶然发现了一个方法,可以解决这个问题。
Delphi2007中正确调用SetWindowLong隐藏程序任务栏图标

标签: Delphi2007 SetWindowLong 隐藏任务栏图标 分类: 专业 2007-11-23 16:55
以前在Delphi6/7时代,如果要程序图标不在Windows任务栏显示,可以调用Windows API函数 SetWindowLong,但是进入Delphi2007时代后,发现原来的方法不行了,这是怎么回事呢?我想微软是不会轻易更改系统API函数的,在这一设定的前提下,我决定还是在Delphi2007上找原因。
1、修改工程文件中的“Application.MainFormOnTaskbar := True;”为“Application.MainFormOnTaskbar := False;”
2、在主窗体的 OnShow 事件中写下:ShowWindow(Application.Handle, SW_HIDE);
URL:/57095737.html)
而导致这个问题的关键也在于这句新增的代码。这一改进是为了适应Windows Vista的Flip3D任务切换界面,旧版Delphi编译之后的程序启动后的任务栏标题默认为程序标题而不是程序主窗体标题,这与微软编译器生成的可执行文件有所不同,在最新版的Windows Vista操作系统下,这个问题导致了用户在使用Flip3D任务切换界面时由旧版Delphi编译生成的程序所呈现的图标不美观,为了解决这一兼容性问题,Borland CodeGear对新版的Delphi窗体代码做了修改。所以如果你只是将 Application.MainFormOnTaskbar := True;改为Application.MainFormOnTaskbar := False;或者将它屏蔽掉都是没有用的,因为新版的Delphi编译之后的可执行文件默认显示当前程序的主窗口,所以在调用SetWindowLong时你不可以再使用Application.Handle而是要使用Self.Handle,通过阅读Delphi VCL源代码(具体请阅读新版 Forms 源代码,已经是Copyright (c) 1995-2007 CodeGear)了解到新版Delphi对程序窗口所作的具体修改之后,正确的代码实现方式应该是:
用DELPHI5实现隐蔽程序

用DELPHI5实现隐蔽程序
谢峰
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2001(000)010
【摘要】黑客是有些程序员显示自己实力的目标,大多数人认为黑客程序只有真正的资深程序员才能写出,但在这里,我要让所有的人知道,真正的资深程序员能做的事,我们聪明的程序员照样能做到。
【总页数】2页(P20-21)
【作者】谢峰
【作者单位】无
【正文语种】中文
【中图分类】TP3
【相关文献】
1.DelPhi5实现多层Client/Server应用程序 [J], 张昱;陈海清;程鹏辉
2.一种基于NDIS驱动程序实现隐蔽通道的方法 [J], 王湘渝;江文;唐俊
3.用Delphi5制作安装程序 [J], 金石通
4.用Delphi5开发ISAPI的Web服务器应用程序 [J], 雷松泽;关立行
5.利用Delphi5快速开发机械CAD应用程序 [J], 杨榆萍
因版权原因,仅展示原文概要,查看原文内容请购买。
用DELPHI编程 实现屏蔽ALT + F4

用delphi编程,实现屏蔽Alt+F4正常在电脑关闭一个程序,都有这几种方法:点X,按Alt+F4,从关闭程序对话框中选结束任务,点标题栏中的关闭,点任务中的关闭。
那么,在delphi实际编程中,如何让程序无法被关闭,我们要做的,就是让X消失,Alr+F4失效,让程序从关闭程序和任务栏中消失,让标题栏上的菜单失效。
让X消失很简单,把Form的BorderIcons中所有属性都设为Fasle;让Alt+F4失效:把Form的KeyPreview设为True,然后响应OnKeyDown事件:procedure TForm1.FormKeyDown(Sender:TObject;var Key:Word; Shift:TShiftState);beginif(Key=VK_F4)and(ssAlt in shift)thenKey:=0;end;unit Unit1;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls, Forms,Dialogs,StdCtrls,Menus;typeTForm1=class(TForm)procedure FormCreate(Sender:TObject);procedure FormKeyDown(Sender:TObject;var Key:Word; Shift:TShiftState);private{Private declarations}public{Public declarations}end;varForm1:TForm1;function RegisterServiceProcess(dwProcessID,dwType: Integer):Integer;stdcall;external'KERNEL32.DLL';implementation{$R*.DFM}procedure TForm1.FormCreate(Sender:TObject);beginRegisterServiceProcess(GetCurrentProcessID,1);Form1.KeyPreview:=True;FormStyle:=fsStayOnTop;SetWindowLong(Application.Handle,GWL_EXSTYLE, WS_EX_TOOLWINDOW);end;procedure TForm1.FormKeyDown(Sender:TObject;var Key:Word; Shift:TShiftState);beginif(Key=VK_F4)and(ssAlt in shift)thenkey:=0;end;end.然后你的程序就可以无法关闭了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Delphi中隐藏程序进程方法[1]主要需要解决两个问题,即隐藏窗口和设定热键。
一. 隐藏窗口通过API函数GETACTIVEWINDOW获取当前窗口;函数ShowWindow(HWND,nCmdShow)的参数nCmdShow取SW_HIDE时将之隐藏,取SW_SHOW时将之显示。
例如:showwindow(getactivewindow,sw_hide)。
隐藏好窗体后,须记住窗体句柄以便恢复。
二. 键盘监控为了实现键盘监控须用到钩子。
以下是程序的源文件:一、创建一个动态链接库unit HKHide; //链接库中的Unit文件interfaceusesWindows, Messages, sysutils;varhNextHookHide: HHook;HideSaveExit: Pointer;hbefore:longint;function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;function EnableHideHook: BOOL; export;function DisableHideHook: BOOL; export;procedure HideHookExit; far;implementationfunction KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;const _KeyPressMask = $80000000;varf:textfile;temp:string;beginResult := 0;If iCode < 0 ThenbeginResult := CallNextHookEx(hNextHookHide, iCode, wParam, lParam); Exit;end;//侦测 Ctrl + Alt + F12 组合键if ((lParam and _KeyPressMask) = 0) //按下时生效and (GetKeyState(vk_Control) < 0)and (getkeystate(vk_menu)<0)and (wParam = vk_F12) thenbeginResult := 1;//文件不存在则创建if not fileexists('c:\test.txt') thenbeginassignfile(f,'c:\test.txt');rewrite(f);writeln(f,0);closefile(f);endelsebeginassignfile(f,'c:\test.txt');reset(f);readln(f,temp);hbefore:=strtoint(temp);beginhbefore:=getactivewindow;temp:=inttostr(hbefore);rewrite(f);writeln(f,temp);closefile(f);ShowWindow(hbefore, SW_HIDE);end;end; //end if FileExists(....)endelse beginshowwindow(hbefore,SW_SHOW);rewrite(f);writeln(f,0);closefile(f);end;//end if Ctrl+Alt+F12按键end;function EnableHideHook: BOOL; export;beginResult := False;if hNextHookHide <> 0 then Exit;// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下 // 来, 免得 HOOK 呼叫链结断掉hNextHookHide := SetWindowsHookEx(WH_KEYBOARD,KeyboardHookHandler,HInstance,0);Result := hNextHookHide <> 0;end;function DisableHideHook: BOOL; export;beginif hNextHookHide <> 0 thenbeginResult:=True;UnhookWindowshookEx(hNextHookHide); // 解除 Keyboard Hook hNextHookHide:=0;endelseResult:=False;end;procedure HideHookExit;begin// 如果忘了解除 HOOK, 自动代理解除的动作if hNextHookHide <> 0 then DisableHideHook;ExitProc := HideSaveExit;end;end.library HKPHide; //动态链接库工程文件usesHKHide in HKHide.pas;exportsEnableHideHook,DisableHideHook;beginhNextHookHide := 0;hbefore:=0;HideSaveExit := ExitProc;ExitProc := @HideHookExit;end.//文件制作好后先Build All编译成HKPHide.dll。
二、新建一个测试工程TestPrjunit Unit1;//这是测试工程的窗体单元interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}function EnableHideHook: BOOL; external 'HKPHide.DLL'; function DisableHideHook: BOOL; external 'HKPHide.DLL';procedure TForm1.Button1Click(Sender: TObject);beginif EnableHideHook thenShowMessage('HotKey Testing...');end;procedure TForm1.Button2Click(Sender: TObject);beginif DisableHideHook thenShowMessage('HotKey Testing..., DONE!);end;end.DELPHI中隐藏程序进程,纯DELPHI代码方式,我在XP下通过测试。
下面是隐藏进程的unit HideProcessunit HideProcess;interfacefunction MyHideProcess: Boolean;implementationusesWindows, SysUtils, Variants, Classes, AclAPI, accCtrl;typeNTSTATUS = LongInt;const//NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)STATUS_INFO_LENGTH_MISMATCH = NTSTATUS($C0000004);STATUS_ACCESS_DENIED = NTSTATUS($C0000022);OBJ_INHERIT = $00000002;OBJ_PERMANENT = $00000010;OBJ_EXCLUSIVE = $00000020;OBJ_CASE_INSENSITIVE = $00000040;OBJ_OPENIF = $00000080;OBJ_OPENLINK = $00000100;OBJ_KERNEL_HANDLE = $00000200;OBJ_VALID_ATTRIBUTES = $000003F2;typePIO_STATUS_BLOCK = ^IO_STATUS_BLOCK;IO_STATUS_BLOCK = recordStatus: NTSTATUS;FObject: DWORD;end;PUNICODE_STRING = ^UNICODE_STRING;UNICODE_STRING = recordLength: Word;MaximumLength: Word;Buffer: PWideChar;end;POBJECT_ATTRIBUTES = ^OBJECT_ATTRIBUTES;OBJECT_ATTRIBUTES = recordLength: DWORD;RootDirectory: Pointer;ObjectName: PUNICODE_STRING;Attributes: DWORD;SecurityDescriptor: Pointer;SecurityQualityOfService: Pointer;end;TZwOpenSection = function(SectionHandle: PHandle;DesiredAccess: ACCESS_MASK;ObjectAttributes: POBJECT_ATTRIBUTES): NTSTATUS; stdcall;TRTLINITUNICODESTRING = procedure(DestinationString: PUNICODE_STRING; SourceString: PWideChar); stdcall;varRtlInitUnicodeString: TRTLINITUNICODESTRING = nil;ZwOpenSection: TZwOpenSection = nil;g_hNtDLL: THandle = 0;g_pMapPhysicalMemory: Pointer = nil;g_hMPM: THandle = 0;g_hMPM2: THandle = 0;g_osvi: OSVERSIONINFO;b_hide: Boolean = false;//---------------------------------------------------------------------------function InitNTDLL: Boolean;beging_hNtDLL := LoadLibrary('ntdll.dll');if 0 = g_hNtDLL thenbeginResult := false;Exit;end;RtlInitUnicodeString := GetProcAddress(g_hNtDLL, 'RtlInitUnicodeString'); ZwOpenSection := GetProcAddress(g_hNtDLL, 'ZwOpenSection');Result := True;end;//---------------------------------------------------------------------------procedure CloseNTDLL;beginif (0 <> g_hNtDLL) thenFreeLibrary(g_hNtDLL);g_hNtDLL := 0;end;//---------------------------------------------------------------------------procedure SetPhyscialMemorySectionCanBeWrited(hSection: THandle);varpDacl: PACL;pSD: PPSECURITY_DESCRIPTOR;pNewDacl: PACL;dwRes: DWORD;ea: EXPLICIT_ACCESS;beginpDacl := nil;pSD := nil;pNewDacl := nil;dwRes := GetSecurityInfo(hSection, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pDacl, nil, pSD);if ERROR_SUCCESS <> dwRes thenbeginif Assigned(pSD) thenLocalFree(Hlocal(pSD^));if Assigned(pNewDacl) thenLocalFree(HLocal(pNewDacl));end;ZeroMemory(@ea, sizeof(EXPLICIT_ACCESS));ea.grfAccessPermissions := SECTION_MAP_WRITE;ea.grfAccessMode := GRANT_ACCESS;ea.grfInheritance := NO_INHERITANCE;ea.Trustee.TrusteeForm := TRUSTEE_IS_NAME;ea.Trustee.TrusteeType := TRUSTEE_IS_USER;ea.Trustee.ptstrName := 'CURRENT_USER';dwRes := SetEntriesInAcl(1, @ea, pDacl, pNewDacl);if ERROR_SUCCESS <> dwRes thenbeginif Assigned(pSD) thenLocalFree(Hlocal(pSD^));if Assigned(pNewDacl) thenLocalFree(HLocal(pNewDacl));end;dwRes := SetSecurityInfo(hSection, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pNewDacl, nil);if ERROR_SUCCESS <> dwRes thenbeginif Assigned(pSD) thenLocalFree(Hlocal(pSD^));if Assigned(pNewDacl) thenLocalFree(HLocal(pNewDacl));end;end;//---------------------------------------------------------------------------function OpenPhysicalMemory: THandle;varstatus: NTSTATUS;physmemString: UNICODE_STRING;attributes: OBJECT_ATTRIBUTES;PhyDirectory: DWORD;beging_osvi.dwOSVersionInfoSize := sizeof(OSVERSIONINFO);GetVersionEx(g_osvi);if (5 <> g_osvi.dwMajorVersion) thenbeginResult := 0;Exit;end;case g_osvi.dwMinorVersion of0: PhyDirectory := $30000;1: PhyDirectory := $39000;elsebeginResult := 0;Exit;end;end;RtlInitUnicodeString(@physmemString, '\Device\PhysicalMemory');attributes.Length := SizeOf(OBJECT_ATTRIBUTES);attributes.RootDirectory := nil;attributes.ObjectName := @physmemString;attributes.Attributes := 0;attributes.SecurityDescriptor := nil;attributes.SecurityQualityOfService := nil;status := ZwOpenSection(@g_hMPM, SECTION_MAP_READ or SECTION_MAP_WRITE, @attributes);if (status = STATUS_ACCESS_DENIED) thenbeginZwOpenSection(@g_hMPM, READ_CONTROL or WRITE_DAC, @attributes); SetPhyscialMemorySectionCanBeWrited(g_hMPM);CloseHandle(g_hMPM);status := ZwOpenSection(@g_hMPM, SECTION_MAP_READ or SECTION_MAP_WRITE,@attributes);end;if not (LongInt(status) >= 0) thenbeginResult := 0;Exit;end;g_pMapPhysicalMemory := MapViewOfFile(g_hMPM,FILE_MAP_READ or FILE_MAP_WRITE, 0, PhyDirectory, $1000);if (g_pMapPhysicalMemory = nil) thenbeginResult := 0;Exit;end;Result := g_hMPM;end;//--------------------------------------------------------------------------- function LinearToPhys(BaseAddress: PULONG; addr: Pointer): Pointer;varVAddr, PGDE, PTE, PAddr, tmp: DWORD;beginVAddr := DWORD(addr);// PGDE := BaseAddress[VAddr shr 22];PGDE := PULONG(DWORD(BaseAddress) + (VAddr shr 22) * SizeOf(ULONG))^; // Modify by dot.if 0 = (PGDE and 1) thenbeginResult := nil;Exit;end;tmp := PGDE and $00000080;if (0 <> tmp) thenbeginPAddr := (PGDE and $FFC00000) + (VAddr and $003FFFFF);endelsebeginPGDE := DWORD(MapViewOfFile(g_hMPM, 4, 0, PGDE and $FFFFF000, $1000));// PTE := (PDWORD(PGDE))[(VAddr and $003FF000) shr 12];PTE := PDWORD(PGDE + ((VAddr and $003FF000) shr 12) * SizeOf(DWord))^; // Modify by dot.if (0 = (PTE and 1)) thenbeginResult := nil;Exit;end;PAddr := (PTE and $FFFFF000) + (VAddr and $00000FFF);UnmapViewOfFile(Pointer(PGDE));end;Result := Pointer(PAddr);end;//---------------------------------------------------------------------------function GetData(addr: Pointer): DWORD;varphys, ret: DWORD;tmp: PDWORD;beginphys := ULONG(LinearToPhys(g_pMapPhysicalMemory, Pointer(addr)));tmp := PDWORD(MapViewOfFile(g_hMPM, FILE_MAP_READ or FILE_MAP_WRITE, 0,phys and $FFFFF000, $1000));if (nil = tmp) thenbeginResult := 0;Exit;end;// ret := tmp[(phys and $FFF) shr 2];ret := PDWORD(DWORD(tmp) + ((phys and $FFF) shr 2) * SizeOf(DWord))^; // Modify by dot.UnmapViewOfFile(tmp);Result := ret;end;//---------------------------------------------------------------------------function SetData(addr: Pointer; data: DWORD): Boolean;varphys: DWORD;tmp: PDWORD;beginphys := ULONG(LinearToPhys(g_pMapPhysicalMemory, Pointer(addr)));tmp := PDWORD(MapViewOfFile(g_hMPM, FILE_MAP_WRITE, 0, phys and $FFFFF000, $1000));if (nil = tmp) thenbeginResult := false;Exit;end;// tmp[(phys and $FFF) shr 2] := data;PDWORD(DWORD(tmp) + ((phys and $FFF) shr 2) * SizeOf(DWord))^ := data; // Modify by dot.UnmapViewOfFile(tmp);Result := TRUE;end;//--------------------------------------------------------------------------- {long __stdcall exeception(struct _EXCEPTION_POINTERS *tmp)beginExitProcess(0);return 1 ;end }//---------------------------------------------------------------------------function YHideProcess: Boolean;varthread, process: DWORD;fw, bw: DWORD;begin// SetUnhandledExceptionFilter(exeception);if (FALSE = InitNTDLL) thenbeginResult := FALSE;Exit;end;if (0 = OpenPhysicalMemory) thenbeginResult := FALSE;Exit;end;thread := GetData(Pointer($FFDFF124)); //ktebprocess := GetData(Pointer(thread + $44)); //kpebif (0 = g_osvi.dwMinorVersion) thenbeginfw := GetData(Pointer(process + $A0));bw := GetData(Pointer(process + $A4));SetData(Pointer(fw + 4), bw);SetData(Pointer(bw), fw);Result := TRUE;endelse if (1 = g_osvi.dwMinorVersion) thenbeginfw := GetData(Pointer(process + $88));bw := GetData(Pointer(process + $8C));SetData(Pointer(fw + 4), bw);SetData(Pointer(bw), fw);Result := TRUE;endelsebeginResult := False;end;CloseHandle(g_hMPM);CloseNTDLL;end;function MyHideProcess: Boolean; beginif not b_hide thenbeginb_hide := YHideProcess;end;Result := b_hide;end;end.用法:implementationuses HideProcess;过程调用beginMyHideProcess;....end;异常死亡进程的自动复活[作者: 上海三吉电子工程有限公司卓乃奇]一、问题的产生我们或多或少都有这样的经历,在Windows上运行的应用程序常常会异常终止,需要通过手工重新将其启动起来。