我的Java方面博客

          天下難事必做于易,天下大事必做于細

          常用鏈接

          統計

          最新評論

          2007年9月14日 #

          重構-保護

               摘要: 重構前的代碼,使用字符串處理狀態 package org.zsk.refact; public class SystemPermission {     private String state;     private boolean&...  閱讀全文

          posted @ 2007-09-14 13:17 張樹坤 閱讀(201) | 評論 (0)編輯 收藏

          2007年9月3日 #

          函數指針 方法指針

          unit Unit1;

          interface

          uses
            Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
            Dialogs, StdCtrls;

          type
            TEvent 
          = procedure () of object;
            TProc 
          = procedure();

            TForm1 
          = class(TForm)
              btn1: TButton;
              procedure btn1Click(Sender: TObject);
            
          private
              
          { Private declarations }
            
          public
              
          { Public declarations }
            end;

          var
            Form1: TForm1;

          implementation

          {$R *.dfm}

          procedure TForm1.btn1Click(Sender: TObject);
          begin
            showmessage(
          '方法指針的長度是:'+Inttostr(SizeOf(TEvent)));
            showmessage(
          '函數指針的長度是:'+Inttostr(SizeOf(TProc)));
          end;

          //函數指針是指向函數的32位指針,占4個字節。
          //過程的指針結構如下
          //  PProc = ^TProc;//過程指針
          // TProc = record
          //  Code: Pointer;//指向過程的代碼
          // end;
          //方法指針是指向一個結構。方法的指針結構如下
          //  PMethod = ^TMethod;//方法指針
          // TMethod = record
          //  Code: Pointer;//指向方法的代碼
          //    Data: Pointer;//指向對象的數據
          // end;



          end.

          posted @ 2007-09-03 16:08 張樹坤 閱讀(534) | 評論 (0)編輯 收藏

          模擬鍵盤輸入

            SetForegroundWindow(HApp);
            keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 
          0), 00);
            keybd_event(ORD(
          'B'), MapVirtualKey(Byte('t'), 0), 00);
            keybd_event(Byte(
          'B'), MapVirtualKey(Byte('t'), 0), KEYEVENTF_KEYUP, 0);
            keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 
          0), KEYEVENTF_KEYUP, 0);


          //Ctrl: VK_CONTROL
          //SHIFT:VK_SHIFT
          //TAB:  VK_TAB
          //ALT:  VK_MENU
          //'A':  byte('A')

          功能說明,
          通過目標程序的句柄將該程序激活;
          模擬鼠標按下
          模擬鼠標抬起

          posted @ 2007-09-03 16:03 張樹坤 閱讀(995) | 評論 (0)編輯 收藏

          PostMessage和SendMessage區別

          PostMessage 只是把消息放入隊列,不管其他程序是否處理都返回,然后繼續執行 ;
          SendMessage 必須等待其他程序處理消息后才返回,繼續執行。
          PostMessage
          的返回值表示 PostMessage 函數執行是否正確 ;
          SendMessage 的返回值表示其他程序處理消息后的返回值。
          使用這兩個發送消息函數的最重要的是要看你的程序是否要對消息的滯后性關注否 ,PostMessage 會造成消息的滯后性 , SendMessage 則不會 , 但如果 SendMessage 消息處理失敗 , 則會造成程序停止 !

          為了讓大家能清楚的看到他們的效果,可以用下面的代碼進行測試:
          unit Unit1;

          interface

          uses
            Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
            Dialogs, StdCtrls;

          type
            TForm1 
          = class(TForm)
              mmo1: TMemo;
              btn2: TButton;
              btn3: TButton;
              procedure btn2Click(Sender: TObject);
              procedure btn3Click(Sender: TObject);
            
          private
              
          { Private declarations }
              procedure testPostMessage;
              procedure testSendMessage;
            
          public
              
          { Public declarations }
            end;

          var
            Form1: TForm1;

          implementation

          uses uFile;

          {$R *.dfm}
          var
            f: TFile;

          procedure TForm1.btn2Click(Sender: TObject);
          var
            i: Integer;
          begin
            testPostMessage;
            
          for i := 0 to 5000 do
            begin
              mmo1.Lines.Add(IntToStr(i)
          +'======');
            end;
          end;

          procedure TForm1.btn3Click(Sender: TObject);
          var
            i: Integer;
          begin
            testSendMessage;
            
          for i := 0 to 5000 do
            begin
              mmo1.Lines.Add(IntToStr(i)
          +'======');
            end;
          end;

          procedure TForm1.testPostMessage;
          var
            i: Integer;
          begin
            PostMessage(f.Handle, WM_TEST, 
          00);
            
          for i := 0 to 5000 do
            begin
              mmo1.Lines.Add(IntToStr(i))
            end;
          end;

          procedure TForm1.testSendMessage;
          var
            i: Integer;
          begin
            SendMessage(f.Handle, WM_TEST, 
          00);
            
          for i := 0 to 5000 do
            begin
              mmo1.Lines.Add(IntToStr(i))
            end;
          end;

          initialization
            
          if f = nil then
              f :
          = TFile.Create;

          finalization
            
          if f <> nil then
              FreeAndNil(f);;

          end.


          unit uFile;

          interface

          uses
            Classes, Windows, Forms, Messages;

          const
            WM_TEST 
          = WM_USER + 1;

          type
            TFile 
          = class
            
          private
              FHandle: HWND;
            
          protected
              procedure WndProc(var Msg: TMessage);
            
          public
              procedure AfterConstruction; override;
              procedure BeforeDestruction; override;
              property Handle: HWND  read FHandle;
            end;

          implementation

          { TFile }

          procedure TFile.AfterConstruction;
          begin
            inherited;
            FHandle :
          = AllocateHWnd(WndProc);
          end;

          procedure TFile.BeforeDestruction;
          begin
            inherited;
            DeallocateHWnd(FHandle);
          end;

          procedure TFile.WndProc(var Msg: TMessage);
          begin
            
          if msg.Msg = WM_TEST then
            begin
              
          //消息處理內容
              Application.MessageBox('WM_TEST''WM_TEST'0);
            end;  
            windows.DefWindowProc(FHandle, Msg.Msg, Msg.wParam, Msg.lParam);
          end;

          end.

          posted @ 2007-09-03 14:28 張樹坤 閱讀(1488) | 評論 (0)編輯 收藏

          java中的類之類 java.lang.reflect

               不知道java.lang.reflect實現的功能算不算是java中的類之類,
          我暫時是按這個理解的,
          package org.zsk.reflect;

          import java.lang.reflect.*;

          public class TestReflect {
              
          public static void main(String args[]) {
                     
          try {
                         Class c 
          = Class.forName("java.util.Stack");
                         Method m[] 
          = c.getDeclaredMethods();
                         
          for (int i = 0; i < m.length; i++)
                             System.out.println(m[i].toString());
                     }
           catch (Throwable e) {
                         System.err.println(e);
                     }

                 }

          }
          上面代碼能夠使用“java.util.Stack”找到類

          看看Delphi的類之類
          type

            TObject 
          = class;

            TClass 
          = class of TObject;
          TObject是一個類
          TClass是這個TObject類的類,
          如果我們要做個管理類的話,可以用個List實現一個name和一個類之類的對應的map
          我們就可以根據這個name,就是一個字符串,找到、創建、使用、釋放這類的對象。

          java中的類方法
          public static XXX
          delphi中的類方法
          class procedure XXX

          posted @ 2007-09-03 13:09 張樹坤 閱讀(241) | 評論 (0)編輯 收藏

          2007年9月1日 #

          VNC不錯的共享軟件 編譯成功^_^

             直接在VC6下就能編譯,記得不能Build All,只要在FileView選項卡下分別Build vncviewer files和winvnc files就可以。
             特別感謝老張給的源碼和幫助編譯。

          posted @ 2007-09-01 16:20 張樹坤 閱讀(540) | 評論 (1)編輯 收藏

          Eclipse 常用設置 快捷鍵

          常用設置

          1、顯示行號    Window->Preferences->General->Editors->Text Editor 選擇Show line numbers
          2、設置UTF-8   Window->Preferences->General->Workspace 中Text file encoding 選擇other并選UTF-8

          快捷鍵

          1、運行程序  Alt+Shift+X   按J     run as javaApplication (按下Alt+Shift+X 后Eclipase右下角有提示)

          2、排版    選中多行文本

                      Tab    后縮

                      Shift + Tab  前進

          posted @ 2007-09-01 13:50 張樹坤 閱讀(499) | 評論 (0)編輯 收藏

          控制另一個程序

          實現思路分析:
          1、找到目標程序的句柄,可以通過窗口的caption屬性獲取,使用
          FindWindow(nil, 'app caption');

          2、找到你要控制的組件,如Button,使用
          FindWindowEx(ParentHandle, 0, nil, 'btn caption');
          3、發送Windows消息控制目標程序
          SendMessage( HEdt, BM_CLICK, 00 );
          下面是實現該功能的Delphi代碼:
          unit Unit1;

          interface

          uses
            Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
            Dialogs, StdCtrls;

          type
            TForm1 
          = class(TForm)
              btn1: TButton;
              mmo1: TMemo;
              edt1: TEdit;
              edt2: TEdit;
              btn3: TButton;
              lbl1: TLabel;
              lbl2: TLabel;
              btn4: TButton;
              procedure btn1Click(Sender: TObject);
              procedure btn3Click(Sender: TObject);
              procedure btn4Click(Sender: TObject);
            
          private
              { 
          Private declarations }
            
          public
              { 
          Public declarations }
            
          end;

          var
            Form1: TForm1;

          implementation

          uses
            ShellAPI;

          {$R 
          *.dfm}
          var
            HApp,
            HEdt : THandle;

          procedure TForm1.btn1Click(Sender: TObject);
          begin
            HApp :
          = FindWindow(nil, PAnsiChar(edt1.text));
            mmo1.Lines.Add(IntToStr(HApp));

            HEdt :
          = FindWindowEx(HApp, 0, nil, PAnsiChar(edt2.text));
            mmo1.Lines.Add(IntToStr(HEdt));
            SendMessage( HEdt, BM_CLICK, 
          00 );
          end;

          procedure TForm1.btn3Click(Sender: TObject);
          begin
            ShellExecute(handle, 
          'open', 'otherapp.exe',nil,nil, SW_SHOWNORMAL{SW_SHOWMAXIMIZED});
          end;

          procedure TForm1.btn4Click(Sender: TObject);
          begin
            SendMessage( HApp, WM_CLOSE, 
          00 );
          end;

          end.

          posted @ 2007-09-01 13:23 張樹坤 閱讀(286) | 評論 (0)編輯 收藏

          2007年8月31日 #

          企風網頁滾動截圖軟件V2.0

              隨著網站信息量越來越大,有90%的網頁內容超過了一屏。這給那些想以圖片格式保存頁面信息的朋友帶來不少的麻煩,例如想保存網頁縮略圖、交易取證、侵權取證等各種需求。
          為此,企風科技特向大家推出一款綠色免費的網頁滾動截圖軟件,讓你所見即所得、隨心所欲保存您喜歡的頁面。

             下載:
              zhangsk.cn下載
              BlogJava下載

          posted @ 2007-08-31 20:10 張樹坤 閱讀(263) | 評論 (0)編輯 收藏

          Java線程

           1 package org.zsk.error;
           2 
           3 public class MultiThreadDemo1_1 {
           4 
           5     public MultiThreadDemo1_1() {
           6         // TODO Auto-generated constructor stub
           7         new NewThread("1");       
           8         new NewThread("2");   
           9         new NewThread("3");
          10         new NewThread("4");
          11 
          12         System.out.println("main thread begin!");
          13         for (int i=0; i<100; i++){
          14             System.out.println("  -->  ");
          15            
          16         }
          17         System.out.println("main thread end;");
          18 
          19     }
          20 
          21     /**
          22      * @param args
          23      */
          24     public static void main(String[] args) {
          25         // TODO Auto-generated method stub
          26         new MultiThreadDemo1_1();
          27     }
          28    
          29     class NewThread implements Runnable {
          30         NewThread(String threadName){
          31             name = threadName;
          32             t = new Thread(this, name);
          33             t.start();
          34             System.out.println("new thread " + name + "begin");           
          35         }
          36        
          37         public void run(){
          38             try{
          39                 for (int i=0; i<100; i++){
          40                     System.out.println(name);
          41                     Thread.sleep(30);
          42                 }                   
          43             } catch (InterruptedException e) {
          44                 System.out.println("thread "+name+"error!");
          45             }
          46                
          47             System.out.println("thread " + name + "end;");
          48         }
          49        
          50         private String name;
          51         private Thread t;
          52     }
          53 
          54 }



          posted @ 2007-08-31 19:34 張樹坤 閱讀(185) | 評論 (0)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 兴城市| 澄迈县| 吴江市| 重庆市| 宜宾市| 新乡市| 海林市| 云林县| 娄底市| 敖汉旗| 如东县| 惠安县| 通州市| 营口市| 廊坊市| 锡林郭勒盟| 防城港市| 大新县| 郧西县| 南城县| 望都县| 天祝| 青海省| 罗山县| 临泉县| 扎囊县| 新沂市| 仪陇县| 镇赉县| 深圳市| 昌吉市| 金华市| 衡南县| 贵德县| 赤城县| 嵊泗县| 广昌县| 南昌县| 鹰潭市| 射阳县| 鄂尔多斯市|