高手请进!谢谢!多多给分!!! Delphi 所遍出来的程序如何才可以不在任务栏显示啊? 如何才可以在windows 2k、xp任务管理不显示程序啊?还有啊!Delphi程序如何才可以自我复制啊?请高手详细解释一下,我是初初初级菜菜菜鸟啊!谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一、从任务栏上隐藏应用程序的按纽 用过金山词霸的朋友一定对其主窗口的工作方式很感兴趣。当它显示时,在任务栏有一个对应的按纽,而当它最小化的时候则从任务栏上消失了。如何在我们的程序中实现这一技巧呢?通过研究Delphi程序的工件方式和试验摸索,本人得出了实现这一技巧的方法。现在写出来与大家共享,希望能对大家编程有所帮助。其实本来实现这一技巧很容易的,只要在窗口的最小化事件代码中加入:self.hide;就行了。但问题是Form没有最小化事件。通过摸索,本人发现当主窗口最小化时会调用Application 对象的OnMinimize方法。只要在自己的主窗口定义中添加一个自己的方法,再将它安装到Application对象的OnMinimize方法上去就行了。要再次显示主窗口只要调用show;方法就行了。不过要注意:一定要主窗口的OnShow事件方法中加入Application.Restore;方法调用,否则,第二次按最小化按纽的时候,程序将什么也不做。要使程序启动时不显示主窗口,只要在Project代码中加入Application.ShowMainForm:=false;就行了。以下是程序片段。{WinKill.Dpr} program WinKill;usesForms,FMain in 'FMain.pas' {FormMain};{$R *.RES}beginApplication.Initialize;Application.CreateForm(TFormMain, FormMain);Application.ShowMainForm:=false;//*****Application.OnMinimize:=FormMain.AppMinimize;//******Application.Run;end.{Unit FMain}...procedure TFormMain.M_ShowClick(Sender: TObject);beginself.Show;end;procedure TFormMain.AppMinimize(Sender: TObject);begininherited;self.Hide;end;procedure TFormMain.FormShow(Sender: TObject);beginApplication.Restore;//如果将这句去掉,则第二次按最小化按纽的时候,程序将什么也不做。end;二、按ALT+DEL+CTRL时不出现在列表中1、在implementation后添加声明: function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';2、在窗体的TForm1.FormCreate(Sender: TObject)事件中添加代码:RegisterServiceProcess(GetCurrentProcessID, 1);//隐藏 RegisterServiceProcess(GetCurrentProcessID, 0);//显示 用看不见 自我復製:CopyFile(Pchar(Application.ExeName), Pchar(NewFilePathName), true);在Win2K,Xp下實現自我隱藏比較麻煩, 但網上已有不少討論, 你查找下!!! 在主Form的FormCreate事件中加上:Application.ShowMainForm:=False;自我复制用,CopyFile楼上的. 2楼的大侠,怎么我试过好像不行啊!二、按ALT+DEL+CTRL时不出现在列表中 1、在implementation后添加声明: function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL'; 2、在窗体的TForm1.FormCreate(Sender: TObject)事件中添加代码: RegisterServiceProcess(GetCurrentProcessID, 1);//隐藏 RegisterServiceProcess(GetCurrentProcessID, 0);//显示 用看不见运行时说无法连接动态文件KERNEL32.DLL啊!! 复制 uses ShlObj, ClipBrd;procedure CopyFilesToClipboard(FileList: string);varDropFiles: PDropFiles;hGlobal: THandle;iLen: Integer;beginiLen := Length(FileList) + 2;FileList := FileList + #0#0;hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,SizeOf(TDropFiles) + iLen);if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.');beginDropFiles := GlobalLock(hGlobal);DropFiles^.pFiles := SizeOf(TDropFiles);Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);GlobalUnlock(hGlobal);Clipboard.SetAsHandle(CF_HDROP, hGlobal);end;end;// Example:procedure TForm1.Button1Click(Sender: TObject);beginCopyFilesToClipboard('C:.Txt'#0'C:.Bat');end;{Separate the files with a #0.}********************************沈前卫的回答:unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls,ShlObj;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);const FileName:string='c:.txt';varDataHandle: THandle;DataPointer: PDROPFILES;beginDataHandle := GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE,SizeOf(DROPFILES)+2+Length(FileName));DataPointer := PDROPFILES(GlobalLock(DataHandle));FillChar(DataPointer^,SizeOf(DROPFILES)+2+Length(FileName),0);DataPointer.pFiles:=SizeOf(DROPFILES);DataPointer.pt:=Point(0,0);DataPointer.fNC:=False;DataPointer.fWide:=False;Move(FileName[1],Pointer(Integer(DataPointer)+SizeOf(DROPFILES))^,Length(FileName));GlobalUnlock(DataHandle);OpenClipboard(Form1.Handle);EmptyClipboard;SetClipboardData(CF_HDROP, DataHandle);CloseClipboard;end;end.***************************在Windows的资源管理器中,选中一个或多个文件,在文件上单击鼠标右键,在弹出菜单中选复制。再切换到另外的目录,单击鼠标右键,点粘贴。就这样执行了一次文件的拷贝操作,那么Windows在拷贝过程中执行了什么操作,是否将整个文件拷贝到剪贴板上了呢?当然没有。实际上,Windows只是将一个文件结构拷贝到了剪贴版,这个结构如下: tDropFile+文件1文件名+vbNullChar+文件2文件名+vbNullChar……+文件N文件名+vbNullChar,其中tDropFile是一个DROPFILES结构,这个结构在Windows API中有定义。在粘贴文件时,利用API函数 DragQueryFile 就可以获得拷贝到剪贴板的文件全路径名,然后就可以根据获得的文件名执行文件拷贝函数,实现对文件的粘贴操作。那么如何从剪切板或取复制的文件内容呢?请参看下面的例子:/// Author:Peter Belowusesclipbrd, shellapi;{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);varf: THandle;buffer: array [0..MAX_PATH] of Char;i, numFiles: Integer;beginif not Clipboard.HasFormat(CF_HDROP) then Exit;Clipboard.Open;tryf := Clipboard.GetAsHandle(CF_HDROP);if f <> 0 thenbeginnumFiles := DragQueryFile(f, $FFFFFFFF, nil, 0);memo1.Clear;for i := 0 to numfiles - 1 dobeginbuffer[0] := #0;DragQueryFile(f, i, buffer, SizeOf(buffer));memo1.Lines.Add(buffer);end;end;finallyClipboard.Close;end;end; 还是个关于数值类型转换的问题! 求教:如何在DateSet的Beforescroll事件中,取消光标移动? 求助!!!!!!!!!!!!! 高手请指教! 终于劝说女朋友也不用日货了~ 终于能进CSDN论坛了,散分,散分! 怎么实现Boolean型的字段,在DBGrid里显示的时候是对钩,而不是True 或者 Flase 关于winrar压缩文件控制的问题 哪位有条码软件或控件? 如何把access2000的数据库倒入sql7.0的数据库中? 如何对月份进行增加,比如2003-11-1 加上3 就成了2004-2-1?? 怎样在报表中打印当前页码和总页码。如:第1页,共5页 这类
用过金山词霸的朋友一定对其主窗口的工作方式很感兴趣。当它显示时,在任务栏有一个对应的按纽,而当它最小化的时候则从任务栏上消失了。如何在我们的程序中实现这一技巧呢?通过研究Delphi程序的工件方式和试验摸索,本人得出了实现这一技巧的方法。现在写出来与大家共享,希望能对大家编程有所帮助。其实本来实现这一技巧很容易的,只要在窗口的最小化事件代码中加入:self.hide;就行了。但问题是Form没有最小化事件。通过摸索,本人发现当主窗口最小化时会调用Application 对象的OnMinimize方法。只要在自己的主窗口定义中添加一个自己的方法,再将它安装到Application对象的OnMinimize方法上去就行了。要再次显示主窗口只要调用show;方法就行了。不过要注意:一定要主窗口的OnShow事件方法中加入Application.Restore;方法调用,否则,第二次按最小化按纽的时候,程序将什么也不做。要使程序启动时不显示主窗口,只要在Project代码中加入Application.ShowMainForm:=false;就行了。以下是程序片段。{WinKill.Dpr}
program WinKill;
uses
Forms,
FMain in 'FMain.pas' {FormMain};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TFormMain, FormMain);
Application.ShowMainForm:=false;//*****
Application.OnMinimize:=FormMain.AppMinimize;//******
Application.Run;
end.
{Unit FMain}
.
.
.
procedure TFormMain.M_ShowClick(Sender: TObject);
begin
self.Show;
end;
procedure TFormMain.AppMinimize(Sender: TObject);
begin
inherited;
self.Hide;
end;
procedure TFormMain.FormShow(Sender: TObject);
begin
Application.Restore;
//如果将这句去掉,则第二次按最小化按纽的时候,程序将什么也不做。
end;二、按ALT+DEL+CTRL时不出现在列表中
1、在implementation后添加声明:
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
2、在窗体的TForm1.FormCreate(Sender: TObject)事件中添加代码:
RegisterServiceProcess(GetCurrentProcessID, 1);//隐藏
RegisterServiceProcess(GetCurrentProcessID, 0);//显示 用看不见
CopyFile(Pchar(Application.ExeName), Pchar(NewFilePathName), true);在Win2K,Xp下實現自我隱藏比較麻煩, 但網上已有不少討論, 你查找下!!!
Application.ShowMainForm:=False;自我复制用,CopyFile楼上的.
二、按ALT+DEL+CTRL时不出现在列表中
1、在implementation后添加声明:
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
2、在窗体的TForm1.FormCreate(Sender: TObject)事件中添加代码:
RegisterServiceProcess(GetCurrentProcessID, 1);//隐藏
RegisterServiceProcess(GetCurrentProcessID, 0);//显示 用看不见运行时说无法连接动态文件KERNEL32.DLL啊!!
uses
ShlObj, ClipBrd;procedure CopyFilesToClipboard(FileList: string);varDropFiles: PDropFiles;hGlobal: THandle;iLen: Integer;beginiLen := Length(FileList) + 2;FileList := FileList + #0#0;hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,SizeOf(TDropFiles) + iLen);if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.');beginDropFiles := GlobalLock(hGlobal);DropFiles^.pFiles := SizeOf(TDropFiles);Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);GlobalUnlock(hGlobal);Clipboard.SetAsHandle(CF_HDROP, hGlobal);end;end;// Example:procedure TForm1.Button1Click(Sender: TObject);beginCopyFilesToClipboard('C:.Txt'#0'C:.Bat');end;{Separate the files with a #0.}********************************沈前卫的回答:unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls,ShlObj;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);const FileName:string='c:.txt';varDataHandle: THandle;DataPointer: PDROPFILES;beginDataHandle := GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE,SizeOf(DROPFILES)+2+Length(FileName));DataPointer := PDROPFILES(GlobalLock(DataHandle));FillChar(DataPointer^,SizeOf(DROPFILES)+2+Length(FileName),0);DataPointer.pFiles:=SizeOf(DROPFILES);DataPointer.pt:=Point(0,0);DataPointer.fNC:=False;DataPointer.fWide:=False;Move(FileName[1],Pointer(Integer(DataPointer)+SizeOf(DROPFILES))^,Length(FileName));GlobalUnlock(DataHandle);OpenClipboard(Form1.Handle);EmptyClipboard;SetClipboardData(CF_HDROP, DataHandle);CloseClipboard;end;end.***************************在Windows的资源管理器中,选中一个或多个文件,在文件上单击鼠标右键,在弹出菜单中选复制。再切换到另外的目录,单击鼠标右键,点粘贴。就这样执行了一次文件的拷贝操作,那么Windows在拷贝过程中执行了什么操作,是否将整个文件拷贝到剪贴板上了呢?当然没有。实际上,Windows只是将一个文件结构拷贝到了剪贴版,这个结构如下: tDropFile+文件1文件名+vbNullChar+文件2文件名+vbNullChar……+文件N文件名+vbNullChar,其中tDropFile是一个DROPFILES结构,这个结构在Windows API中有定义。在粘贴文件时,利用API函数 DragQueryFile 就可以获得拷贝到剪贴板的文件全路径名,然后就可以根据获得的文件名执行文件拷贝函数,实现对文件的粘贴操作。那么如何从剪切板或取复制的文件内容呢?请参看下面的例子:/// Author:Peter Belowusesclipbrd, shellapi;{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);varf: THandle;buffer: array [0..MAX_PATH] of Char;i, numFiles: Integer;beginif not Clipboard.HasFormat(CF_HDROP) then Exit;Clipboard.Open;tryf := Clipboard.GetAsHandle(CF_HDROP);if f <> 0 thenbeginnumFiles := DragQueryFile(f, $FFFFFFFF, nil, 0);memo1.Clear;for i := 0 to numfiles - 1 dobeginbuffer[0] := #0;DragQueryFile(f, i, buffer, SizeOf(buffer));memo1.Lines.Add(buffer);end;end;finallyClipboard.Close;end;end;