delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks

#

用createprocess执行word,需要为外部程序指定一个叁数'd:\aaa.doc',如果这个文档是stringlist中的某一项,那么该如何写呢? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061106182559294.html
var  
  x:integer;  
  wordlist:tstringlist;  
  si:startupinfor;  
  pi:process_information;  
   
  begin  
          wordlist:=tstringlist.create;  
          wordlist.add(....);  
               
          for   x:=1   to   wordlist.count   do   begin  
          createprocess(nil,'d:\office\word.exe   wordlist[x-1]',nil,nil,false,0,nil,nil,si,pi);  
      end;    
   
  end;  
   
  调试半天,总是不成功,如何妆wordlist中和doc文档作为word.exe的参数来传递呢?  
 

这样试试:  
   
  var  
  x:integer;  
  wordlist:tstringlist;  
  si:startupinfor;  
  pi:process_information;  
   
  sRun:String;//定义一个临时变量  
   
  begin  
  wordlist:=tstringlist.create;  
  wordlist.add(....);  
   
  for   x:=1   to   wordlist.count   do    
  begin  
  sRun   :=   'd:\office\word.exe     '+wordlist[x-1];  
  createprocess(nil,Pchar(sRun),nil,nil,false,0,nil,nil,si,pi);  
  end;  
   
  end;

posted @ 2009-04-08 09:12 delphi2007 阅读(258) | 评论 (0)编辑 收藏

关于动态加载dll问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061106114545295.html
现在有一个dll文件,需动态加载,看了很多资料,但是还是不太清楚  
  1.动态加载时,是不是须在oncreate事件中LoadLibrary进行判断  
  2.dll在何时进行释放

>>1.动态加载时,是不是须在oncreate事件中LoadLibrary进行判断  
   
  不一定非得在OnCreate事件中,LoadLibrary,只要在你使用dll的函数之前,加载即可  
   
  >>2.dll在何时进行释放  
   
  当程序不再使用dll的输出的函数时,就可以使用FreeLibrary来释放  
   
   
  一般来说,你可以在OnCreate中LoadLibrary,保存好dll的句柄;  
  然后在OnClose中,FreeLibrary指定句柄的dll  
 

静态调用处理不严格容易导致内存问题,建议动态调用。

同意   do2008(事情做了,才是事情)  
      具体可以参看<Delphi5/6   开发人员指南>,上面很清楚。

posted @ 2009-04-08 09:12 delphi2007 阅读(285) | 评论 (0)编辑 收藏

关于openkey的问题,请大家帮看看! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061106111720296.html
我写了一段贷码目的是禁用u盘.如下.  
  var  
  reg:tregistry;  
  begin  
  reg.rootkey:=HKEY_LOCAL_MACHINE;  
  if   reg.openkey('\system\currentcontrolset\services\usbstor',true)   then  
        begin  
        reg.writeinteger('start',4);  
        reg.close;  
        reg.free;  
        end  
  else   showmessage('错误');  
   
  end;  
   
  但使我不明白的是在administrator用户下运行正常并能锁住u盘.然而在power   users的用户下运行却显示'错误',我也看了在此用户下确有此键,但就是不能用程序更改设置(好象是openkey找不到此键).真奇怪.请大家帮看看是什么原因.谢谢.  
   
   
   
   
 

应该是power   users组的用户没有权限,修改这个键值

to   do2008(事情做了,才是事情)   (   )   信誉:100         Blog    
  还是不明白,我应该怎样修改?。我想如果生成exe文件应该在任何用户下都应一样的运行啊?

我想如果生成exe文件应该在任何用户下都应一样的运行啊  
  ===================================================================================  
  有些系统设置只有administrator才行,你的程序在administrator用户能修改,其它用户不能修改,说明其它用户没有这个键值修改权限,除非你重新定义其它用户权限为管理员权限

maozefa(阿发伯)   ~~~正解~~~  
  在windows中,administrator拥有windows的最高权限,可以执行相关的系统的重要配置;  
   
  但别的用户组的成员,就不一定有相关的权限了,如果大家都有权限,如guest,用户都有权限的话,  
  windows不用混了,嘿嘿~~~  
   
  至于,哪些操作需要什么权限,要查询相关的资料,如MSDN~~~  
   
   
   
 

运行regedit.exe,     利用工具菜单修正此权限

posted @ 2009-04-08 09:12 delphi2007 阅读(369) | 评论 (0)编辑 收藏

如何在delphi的程序中获取桌面刷新的消息 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061106105900297.html
我想在windows的桌面刷新后执行一些内容,如何作?

hook   消息。。

能说得详细一些么?

posted @ 2009-04-08 09:12 delphi2007 阅读(351) | 评论 (0)编辑 收藏

超难....的内存映像权限问题,请达人指点!!!,不够分再加 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061106100206298.html
一个普通程序和一个SERVER级程序交换内存映像  
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          Edit1:   TEdit;  
          Button2:   TButton;  
          procedure   FormCreate(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   FormDestroy(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
           
   
      end;  
   
  var  
      Form1:   TForm1;  
      Count:   PInteger;  
      MappingHandle,HookMutex:   THandle;  
   
  implementation  
   
  {$R   *.dfm}  
   
  const  
      SHAREMAPPING   =   'ShareMapping';  
      Hook_MUTEX_NAME   =   'MUTEX_NAME';  
   
  function   ReadCount:   Integer;  
  begin  
      Result   :=   Count^;  
  end;  
   
   
  procedure   WriteCount(const   I:   Integer);  
   
  begin  
      Count^   :=   I;  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
          Edit1.Text:=IntToStr(ReadCount);  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var  
      i:integer;  
  begin  
      i:=0;  
      HookMutex:=CreateMutex(nil,false,Hook_MUTEX_NAME);  
      if   GetLastError()   =   ERROR_ALREADY_EXISTS   then  
          WaitForSingleObject(HookMutex,infinite);     //等待斥元完成  
   
      WriteCount(I);  
      ReleaseMutex(HookMutex);  
      CloseHandle(HookMutex);  
  end;  
   
  procedure   AdjustToken;  
  var  
      hdlProcessHandle   :   Cardinal;  
      hdlTokenHandle   :   Cardinal;  
      tmpLuid   :   Int64;  
      tkpPrivilegeCount   :   Int64;  
      tkp   :   TOKEN_PRIVILEGES;  
      tkpNewButIgnored   :   TOKEN_PRIVILEGES;  
      lBufferNeeded   :   Cardinal;  
      Privilege   :   array[0..0]   of   _LUID_AND_ATTRIBUTES;  
  begin  
                    hdlProcessHandle   :=   GetCurrentProcess;  
                    OpenProcessToken(hdlProcessHandle,  
                                                    (TOKEN_ADJUST_PRIVILEGES   Or   TOKEN_QUERY),  
                                                      hdlTokenHandle);  
   
                    //   Get   the   LUID   for   shutdown   privilege.  
                    LookupPrivilegeValue('',   'SeShutdownPrivilege',   tmpLuid);  
                    Privilege[0].Luid   :=   tmpLuid;  
                    Privilege[0].Attributes   :=   SE_PRIVILEGE_ENABLED;  
                    tkp.PrivilegeCount   :=   1;       //   One   privilege   to   set  
                    tkp.Privileges[0]   :=   Privilege[0];  
                    //   Enable   the   shutdown   privilege   in   the   access   token   of   this  
                    //   process.  
                    AdjustTokenPrivileges(hdlTokenHandle,  
                                                                False,  
                                                                tkp,  
                                                                Sizeof(tkpNewButIgnored),  
                                                                tkpNewButIgnored,  
                                                                lBufferNeeded);  
   
    end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      AdjustToken;                                             //       FILE_MAP_ALL_ACCESS           PAGE_READWRITE  
      MappingHandle:=Openfilemapping(PAGE_READWRITE,false,ShareMapping);  
      Count   :=MapViewOfFile(MappingHandle,   FILE_MAP_READ,0,   0,   SizeOf(Count));   //不是FILE_MAP_READ的话,   Count总是Nil  
      if   MappingHandle=0   then  
      begin  
          Button1.Enabled:=false;  
          Button2.Enabled:=false;  
      end;  
  end;  
   
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin  
  UnMapViewOfFile(Count);  
  end;  
   
  end.  
   
   
  看了一下帮助  
   
  File   Mapping   Security   and   Access   Rights  
   
  The   Windows   security   model   enables   you   to   control   access   to   file   mapping   objects.   For   more   information,   see   Access-Control   Model.  
   
   
  You   can   specify   a   security   descriptor   for   a   file   mapping   object   when   you   call   the   CreateFileMapping   function.   If   you   specify   NULL,   the   object   gets   a   default   security   descriptor.   The   ACLs   in   the   default   security   descriptor   for   a   file   mapping   object   come   from   the   primary   or   impersonation   token   of   the   creator.  
   
  To   retrieve   the   security   descriptor   of   a   file   mapping   object,   call   the   GetNamedSecurityInfo   or   GetSecurityInfo   function.   To   set   the   security   descriptor   of   a   file   mapping   object,   call   the   SetNamedSecurityInfo   or   SetSecurityInfo   function.  
   
  The   valid   access   rights   for   file   mapping   objects   include   the   DELETE,   READ_CONTROL,   WRITE_DAC,   and   WRITE_OWNER   standard   access   rights.   File   mapping   objects   do   not   support   the   SYNCHRONIZE   standard   access   right.   The   following   table   lists   the   specific   access   rights   for   file   mapping   objects.  
   
  Access   right   Meaning    
  FILE_MAP_ALL_ACCESS   Includes   all   access   rights   to   a   file   mapping   object.   The   MapViewOfFile   and   MapViewOfFileEx   functions   treat   this   the   same   as   if   you   had   specified   FILE_MAP_WRITE.    
  FILE_MAP_COPY   Copy-on-write   access.   If   you   create   the   map   with   PAGE_WRITECOPY   and   the   view   with   FILE_MAP_COPY,   you   will   receive   a   view   to   the   file.    
  If   you   share   the   mapping   between   multiple   processes   using   DuplicateHandle   or   OpenFileMapping   and   one   process   writes   to   a   view,   the   modification   is   not   propagated   to   the   other   process.  
   
   
  Windows   Me/98/95:     If   you   share   the   mapping   between   multiple   processes   using   DuplicateHandle   or   OpenFileMapping   and   one   process   writes   to   a   view,   the   modification   is   propagated   to   the   other   process.  
   
     
  FILE_MAP_READ   Read-only   access.   The   file   mapping   object   must   be   created   with   PAGE_READWRITE   or   PAGE_READONLY   protection.   A   read-only   view   of   the   file   is   mapped.    
  FILE_MAP_WRITE   Read   and   write   access.   The   file   mapping   object   must   be   created   with   PAGE_READWRITE   protection.   A   read/write   view   of   the   file   is   mapped.    
   
  You   can   request   the   ACCESS_SYSTEM_SECURITY   access   right   to   a   file   mapping   object   if   you   want   to   read   or   write   the   object's   SACL.   For   more   information,   see   Access-Control   Lists   (ACLs)   and   SACL   Access   Right.  
   
  说权限不够,请高手帮忙写写代码   让Count   :=MapViewOfFile(MappingHandle,   FILE_MAP_ALL_ACCESS,0,   0,   SizeOf(Count));   可以执行成功  
   
   
 

关注!

posted @ 2009-04-08 09:12 delphi2007 阅读(185) | 评论 (0)编辑 收藏

IE工具条不能自动显示 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061106093741299.html
我做了一个IE工具条,但是安装后不能自动显示出来,要在工具栏里把它打钩才行,有没有办法让它安装后自动就显示在IE工具栏上呢,不用去手动的打钩,请各位大侠帮帮忙啊!小弟不甚感谢!

我也在做呢,可我不知怎么做啊??

结贴

posted @ 2009-04-08 09:12 delphi2007 阅读(135) | 评论 (0)编辑 收藏

请问delphi能否实现像CPU-Z的功能呢? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061106082317300.html
我们公司要统计电脑配置情况,现在做一个硬件读取配置的小软件就差CPU这一项了,现在只能读取CPU的频率,想实现CPU-Z的功能读取出CPU的型号比如:P4   506,PD820的功能。请问能否实现呢?最好有源码的。在些先谢过各位高手们。

GetSystemInfo    
  or  
  http://www.delphibbs.com/delphibbs/dispq.asp?lid=2002449

我有一程序可能會幫你  
  MSN:kye_jufei@hotmail.com

posted @ 2009-04-08 09:12 delphi2007 阅读(249) | 评论 (0)编辑 收藏

如何向其他程序中的toolbar中ToolButton发送点击按钮??? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061112160354251.html
可以找到toolbar的句柄,  
            在Toolbar中的按扭也没有句柄,  
                              请问如向ToolButton中ToolButton发送点击按钮?  
                                            大家请帮帮忙,谢谢!!!

什么现在还没有人回复我!!!

//测试如下代码  
  uses   CommCtrl,   Types;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      vHandle:   THandle;  
      vIndex:   Integer;  
      vRect:   TRect;  
   
      vProcessId:   DWORD;  
      vProcess:   THandle;  
      vPointer:   Pointer;  
      vNumberOfBytesRead:   Cardinal;  
  begin  
      vHandle   :=   ToolBar1.Handle;   //   改写为其他进程ToolBar句柄  
      vIndex   :=   0;   //   按钮序号  
   
      GetWindowThreadProcessId(vHandle,   @vProcessId);  
      vProcess   :=   OpenProcess(PROCESS_VM_OPERATION   or   PROCESS_VM_READ   or  
          PROCESS_VM_WRITE,   False,   vProcessId);  
      vPointer   :=   VirtualAllocEx(vProcess,   nil,   $1000,   MEM_RESERVE   or   MEM_COMMIT,  
          PAGE_READWRITE);  
      try  
          SendMessage(vHandle,   TB_GETITEMRECT,   vIndex,   Integer(vPointer));  
          ReadProcessMemory(vProcess,   vPointer,   @vRect,   SizeOf(TRect),  
              vNumberOfBytesRead);  
      finally  
          VirtualFreeEx(vProcess,   vPointer,   0,   MEM_RELEASE);  
          CloseHandle(vProcess);  
      end;  
      SendMessage(vHandle,   WM_LBUTTONDOWN,   MK_LBUTTON,  
          Longint(PointToSmallPoint(CenterPoint(vRect))));  
      SendMessage(vHandle,   WM_LBUTTONUP,   MK_LBUTTON,  
          Longint(PointToSmallPoint(CenterPoint(vRect))));  
  end;

posted @ 2009-04-08 09:10 delphi2007 阅读(525) | 评论 (0)编辑 收藏

HOOK 超级问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061111145304252.html
求一个最简单的键盘HOOK例子;  
    谢谢各位大爷了!

http://community.csdn.net/Expert/topic/5066/5066823.xml?temp=.5840876

太多例程了,我提供一个老外的:  
  http://www.delphifaq.com/faq/delphi_windows_API/f512.shtml

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          Memo1:   TMemo;  
          procedure   FormCreate(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
      function   KeyBoardProc(code:integer;wparam:wparam;lparam:lparam):lresult;  
   
  var  
      Form1:   TForm1;  
      Hook:HHOOK;  
  implementation  
   
  {$R   *.dfm}  
   
  function   KeyBoardProc(code:integer;wparam:wparam;lparam:lparam):lresult;  
  begin  
      result:=0;       //0:表示截获后不处理键盘消息       1:表示截获后屏蔽键盘消息  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      Hook:=SetWindowsHookEx(WH_KEYBOARD,@KeyBoardProc,hInstance,0);  
  end;

posted @ 2009-04-08 09:10 delphi2007 阅读(205) | 评论 (0)编辑 收藏

请问怎么获得当前连接到网上邻居的用户名啊?怎样完全断开所有网上邻居的连接? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061111102009253.html
情况是这样的,我在服务器(WINDOWS2003)上开了共享,需要账号和密码客户机(WINDOWSXP)才能访问的,因为每次连接上网上邻居,WINDOWS都会自动记录着会话的,在下一次打开共享就不用再输入账号和密码了,而且不能以别的用户名再次登陆的,关键就是这里了,我需要知道当前的用户名才能判断需要不需要重新登陆。。。  
   
  就是不能以不同的用户名重新登陆,所以我需要断开所有网上邻居的连接才能重新登陆,我用的是WNetAddConnection2来连接,WNetCancelConnection2断开连接的,可WNetCancelConnection2有时候断不开,有时候又要等一会才能真正断开,所以我想问问大家看有没有更好的办法?WNetDisconnectDialog也断不了,因为它们都只能断开之前用WNetAddConnection2连接的地方,而其它的就断不开了。。。。  
   
  请大家帮帮忙吧~~~

怎么好几天了都没人来帮一下忙呢?

posted @ 2009-04-08 09:10 delphi2007 阅读(255) | 评论 (0)编辑 收藏

findfirst findnext 递归查找指定目录下所有子目录下所有文件,为什么总是死机? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110231617254.html
procedure   TForm1.FindAll(const   Path:   String);  
  var  
      sr:TSearchRec;  
      fr:Integer;  
  begin  
  fr:=FindFirst(Path,faAnyFile,sr);  
  while   fr=0   do  
      begin  
      if   (sr.Attr=faDirectory)and(sr.Name<>'.')and(sr.Name<>'..')   then  
          FindAll(sr.Name)      
      else  
          begin  
            showmessage(sr.name);  
          end;  
      FindNext(sr);  
      end;  
  FindClose(sr);  
  end;  
   
  我是从网上找到的这个函数,可是调用时总是不停时showmessage,一直停不下来,这是为什么呢?万分感谢!

FindNext(sr);  
  改为:  
  fr:=FindNext(sr);  
   
   
  //别人为你消耗时间和生命  
  //你却什么都不付出,很不厚道。  
  //记得下次改正。

posted @ 2009-04-08 09:10 delphi2007 阅读(674) | 评论 (0)编辑 收藏

多线程问题?!!高手来 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110202423255.html
一个函数  
  funtion   temp(aa:integer;bb:integer):string;  
  var  
    i,j:integer;  
  begin  
  for   i=0   to   aa   do  
    begin  
      for   j=0   to   bb   do  
        begin  
          string:=string+string;  
        end;  
    end;  
  result:=string;  
  end;  
  两个按钮都调用该函数,就是传入的参数不同,第一个按钮temp(1000,1000),第二个temp(10000,10000)  
   
  如何用多线程来分别调用啊,酒是没两个按扭可以连续的点击,不需要一个处理完了才能继续点;  
  而且还有得到返回的变量!!!!!

>>如何用多线程来分别调用啊,  
   
  你从Thread继承两个线程类,在类的Execute中调用temp就可以了,

详细点啊,最好有代码啊

又遇到一位不求上进的懒人。  
   
  TMyThread   =   class(TThread)  
      private  
          FA:   Integer;  
          FB:   Integer;  
          function   Temp(aa:integer;   bb:integer):string;  
      protected  
          procedure   Execute;   override;  
      public  
          constructor   Create(const   AA,   AB:   Integer);   reintroduce;  
      end;  
   
   
  constructor   TMyThread.Create(const   AA,   AB:   Integer;   AE:   TEdit);  
  begin  
      FreeOnTerminate   :=   True;  
      inherited   create(True);  
      FA   :=   AA;  
      FB   :=   AB;  
  end;  
   
  procedure   TMyThread.Execute;  
  begin  
      inherited;  
      Temp(FA,   FB);  
  end;  
   
  ..........  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      with   TMyThread.Create(100,   100)   do  
        Resume;  
  end;  
   
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      with   TMyThread.Create(1000,   1000)   do  
        Resume;  
  end;  
   
 

这里只是一个基本框架,至于实际项目和同步显示还有许多工作要做,你自己慢慢学习吧!

posted @ 2009-04-08 09:10 delphi2007 阅读(155) | 评论 (0)编辑 收藏

如何利用API获取WINDOWS系统所有用户名和密码(做过的朋友进来看看) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110172545256.html
如何利用API获取WINDOWS系统所有用户名和密码

是不行的。。。  
  net   user   就可以拿到用户名啊。。

密码用API是拿不到的,因为根本没有获取密码的API,MS怎么会提供呢~~~  
   
  另类方法嘛,自己暴力尝试破解吧:  
   
  有一个修改用户口令的函数,需要输入旧密码,新密码,  
  写一个循环,不停地尝试修改吧,修改成功,你就间接知道用户的口令了  
   
  汗~~~偶这样说是很不厚道的~~

修改windows内核后能不能获取到呢,我见过这样的程序,据说是这样做的

用户是可以的  
  密码是不行的

用户可以取,密码可以改,在win2000的机器上,用户登录以后密码会挂在winlogon进程中,以前有示例代码可以读取,也有相应的程序出现getpass,2003以后就不行了

高深的东西,用户有API,不过密码是比较困难的,关键是密码都是Hash过的,不可逆,所以处理起来难度大,只能找些特殊方法来弄了,具体的方法学习高手们。  
  不过说句实话,干这种事情的没有几个是由好想法的,不赞同搞这个东西的公开研究。

想给用户增加一个生物特征信息,通过验证生物特征来取回用户名和密码,呵呵,正当应用

有个简单的办法。。   可以清楚所有用户密码自己重新设置  
  就删除一个文件。。  
   
 

2000的能获得密码。但是2003和XP有难度。

2000能获取密码吗   应该不可以吧

好像实现不了。  
 

说能获得的朋友能不能贴点代码出来看看啊

2000能获取密码吗   应该不可以吧  
   
  是可以的,不过是获取当前登录的用户和密码

在   baidu   上能搜索到,不过是   VC   的代码,Delphi   的没有见过

做个键盘记录不就行了??   但是XP要改一下启动方式...因为XP是用户登陆后再加载非系统必要服务(这就是为什么XP比2000启动快的原因.)...至于怎么改嘛..呵呵..不用我说了吧...

就是要不用用户输入密码,直接用指纹就行了,这个不是要偷密码

mark  
   
  2000至少能获得当前用户密码  
 

启动   1-4  
   
  sys   -->exe

ding...  
  dddd

posted @ 2009-04-08 09:10 delphi2007 阅读(613) | 评论 (0)编辑 收藏

如何截取浏览器弹出的Java脚本的窗口? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110171031257.html
如何截取浏览器弹出的Java脚本的窗口?

帮你顶

script   error   window   or   new   Internet   Explorer   window?

UP...

posted @ 2009-04-08 09:10 delphi2007 阅读(219) | 评论 (0)编辑 收藏

PB调用DELPHI的DLL之间传值的问题,大家来看看 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110115522258.html
 
  PB的主程序调用DELPHI的DLL,DLL在函数执行完后回传一个字符串给PB主程序,DLL里用的是PCHAR类型。。PB下该怎么接收?        
   
   
  int   RC,SectorID=15,i=1  
  char   ReadStr[64]  
  int   li_data[64]  
  char   ls_data[64]  
  string   data=''  
   
  Rc   =   M1QueryCard(15,ref   ReadStr)  
   
  do   while   i<=64  
  li_data[i]=asc(ReadStr[i])  
  ls_data[i]=get_hex(li_data[i])  
  i++  
  loop  
   
  //ReadStr=get_hex_str(ReadStr)  
  messagebox('FOXHIS',ls_data)      
   
  以上是PB的程序。。。 M1QueryCard(15,ref   ReadStr) 这个是我DELPHI写的DLL里的函数。。ReadStr 是DLL以PCHAR类型回传的一个字符串    
   
  现在这样不能用,读不到数据。。哪位知道是什么问题么

把你的delphi的dll函数类型,及相关代码也贴一下,否则怎么看得出来呢?  
   
 

DELPHI的DLL代码:  
   
  var  
      ReadCardDataHex:   string;  //全局变量  
   
  Function   M1QueryCard(SectorID:Shortint;var   CardDatas:PChar):integer;   stdcall;     //查询卡  
  var  
  ....  
  HexData1,HexData2:   string;  
  begin  
          .....  
          for   i:=0   to   15   do  
          begin  
              HexData2:=   HexData2+IntToHex(CardData2[i],2);  
          end;  
      end;  
      ReadCardDataHex   :=   HexData1+HexData2;  
      CardDatas:=Pchar(ReadCardDataHex);  
      result:=0;  
  end;  
   
   
   
  我DELPHI程序这样调用正常:  
  Function   M1QueryCard(SectorID:Shortint;var   CardDatas:PChar):integer;stdcall;external   M1Dll;  
 

pb调用delphi中dll,这种不同开发工具之间调试问题;  
   
  可以这样做,用delphi写一个小小的测试程序,用于测试dll,确保dll功能正确后,再由PB调用测试;  
   
  注意PB中的External   Functions中,定义的dll输出类型要正确,一般来说,应该没有什么太大的问题的。

哦,这么快就贴出来了,  
   
  我觉得问题在这里:  
   
  CardDatas:=Pchar(ReadCardDataHex);//ReadCardDataHex是一个String类,这仅仅是指针指向而已,  
   
  改成这样试试:  
  StrCopy(CardDatas,ReadCardDataHex);

StrCopy(CardDatas,pchar(ReadCardDataHex));  
   
  要这样才能编译。。这样也不行,程序死掉了。DLL里的代码还没执行完就提示 XX错误,问要不要发送了。。

你的M1QueryCard在PB中是怎么声明的呀?

Function   int   M1QueryCard(int   SectorID,ref   string   CardDatas)   library     'm1.dll';  
   
  以前是这样定义的,不能用。不知道对方现在有没改动过

我不记得PB中的string是什么特别的类型了,改为  
   
  在delphi中Pchar,就是cha指针,而你上面的PB代码:char   ReadStr[64];  
   
  定义改为这样试试:  
  Function   int   M1QueryCard(int   SectorID,ref   char*   CardDatas)   library   'm1.dll';  
   
  呵呵,我也不确定是否行,有几年没有用PB了,忘记了

另外,你的delphi测试代码是怎么调用的呢?  
   
  如果dll的第二个参数不用var,会怎么样,这样试试:  
   
  Function   M1QueryCard(SectorID:Shortint;CardDatas:PChar):integer;   stdcall;   //查询卡  
  ...

不用VAR会得不到回传的值。  
  DELPHI调用时声明为:  
  Function   M1QueryCard(SectorID:Shortint;var   CardDatas:PChar):integer;stdcall;external   'm1.dll';  
   
  唉。郁闷。。现在搞不定。。用简单的方法用着。。我把读出的数据保存为文本文件,对方打开文件读进来处理。。

这样定义:  
  Function   M1QueryCard(SectorID:Shortint;CardDatas:PChar):integer;   stdcall;  
   
  delphi中,pchar类型,不用var也是可以返回数据的,  
   
  var  
      cc:Array   [0..256]   of   char  
      ii:shortint;  
  begin  
       
      M1QueryCard(i,cc);  
       
      showmessage(cc);//这样是可以返回数据的吧    
   
   
   
   
   
 

这样试试:  
   
  delphi的dll中:    
  Function   M1QueryCard(SectorID:Shortint;CardDatas:PChar):integer;   stdcall;  
   
  PB声明:  
  Function   int   M1QueryCard(int   SectorID,ref   string   CardDatas)   library   'm1.dll';  
   
  如果这样都不行,呵呵,也想不什么问题了,我的机子上的PB早就删除了

噢。郁闷。。这样没试过。我的DELPHI程序调用是没问题的。现在就是PB有问题。。  
  下午跟对方说好了。。我保存成文件,他来读。。现在靠这样传数据。。汗。。真郁闷

PB程序可以这样写:  
   
  int   RC,SectorID=15,i=1  
  string   ReadStr  
  int   li_data[64]  
  char   ls_data[64]  
  string   data=''  
   
  readstr   =   spaces(64)  
  Rc   =   M1QueryCard(15,ReadStr)  
   
  PB声明:  
  function   M1QueryCard(integer   len,ref   string   ReadStr)   ......  
   
   
  Delphi程序这样写试试:  
  Function   M1QueryCard(SectorID:integer;CardDatas:PChar):integer;   stdcall;  
 

shortint PB不支持。

用   FastMM

posted @ 2009-04-08 09:10 delphi2007 阅读(1563) | 评论 (0)编辑 收藏

如何获得所有windows用户的SID Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110113225259.html
有什么方法可以获得所有windows用户的SID

访问注册表  
 

最好是指针形式的sid

{$EXTERNALSYM   ConvertSidToStringSid}  
  function   ConvertSidToStringSid(Sid:   PSID;   StringSid:   LPTSTR):   BOOL;   stdcall;  
  {$EXTERNALSYM   ConvertSidToStringSidA}  
  function   ConvertSidToStringSidA(Sid:   PSID;   StringSid:   LPTSTR):   BOOL;   stdcall;  
  {$EXTERNALSYM   ConvertSidToStringSidW}  
  function   ConvertSidToStringSidW(Sid:   PSID;   StringSid:   LPTSTR):   BOOL;   stdcall;  
   
  function   ConvertSidToStringSid;   external   advapi32   name   'ConvertSidToStringSidA';  
  function   ConvertSidToStringSidA;   external   advapi32   name   'ConvertSidToStringSidA';  
  function   ConvertSidToStringSidW;   external   advapi32   name   'ConvertSidToStringSidW';  
   
  procedure   TForm1.Button3Click(Sender:   TObject);  
  var  
      cbSid:   DWORD;  
      Sid:   PSID;  
      peUse:   SID_NAME_USE;  
      cbReferencedDomainName:   DWORD;  
      ReferencedDomainName:   PChar;  
      SidStr:   PChar;  
  begin  
      cbSid:=0;  
      cbReferencedDomainName:=0;  
      Sid:=nil;   ReferencedDomainName:=nil;  
      //首次调用取得Size  
      LookupAccountName(nil,   nil,   Sid,   cbSid,   ReferencedDomainName,   cbReferencedDomainName,   peUse);  
   
      if   (cbSid   =   0)   or   (cbReferencedDomainName   =   0)   then  
          Exit;//无效的用户名  
   
      GetMem(Sid,   cbSid);  
      GetMem(ReferencedDomainName,   cbReferencedDomainName);  
      try  
          LookupAccountName(nil,   nil,   Sid,   cbSid,   ReferencedDomainName,   cbReferencedDomainName,   peUse);  
           
          if   ConvertSidToStringSid(Sid,   @SidStr)   then  
              Self.Caption:=ReferencedDomainName   +   '\'   +   SidStr;  
      finally  
          FreeMemory(Sid);  
          FreeMemory(ReferencedDomainName);  
      end;  
  end;  
 

用WMI啊!!想要什么就有什么,从软的到硬的。

获取系统用户SID  
  Select   Name,   SID   From   Win32_SystemAccount  
   
  获取自定义用户SID  
  Select   Name,   SID   From   Win32_UserAccount  
 

或者  
  Select   *   From   Win32_AccountSID

当然是API最好的  
  WMI是简单,但是服务停了就不好用了~  
   
  另外注册表的HKEY_USERS下面就有的

各位兄弟先绕我两天,等我全都试完了再结帖

posted @ 2009-04-08 09:10 delphi2007 阅读(635) | 评论 (0)编辑 收藏

一个特殊异常的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110100958260.html
程序涉及到   多线程   list    
  整个程序也还没看懂   只知道运行大概5天左右后   就报错  
  显示如下:  
  Access   violation   at   address   00D24081   in   module   'borlndmm.dll'.   Write   of   address   033F00E8  
  各位高手   看看这可能是什么原因呢   是不是遇到了空指针    
 

用到了   dll   这类东东吧  
   
  你可以运行程序后,   点暂停后   view->cpu   window  
   
  gogo   address   $00D24081,   可以看到哪几句出的问题

是啊   难道是dll的问题   其中有一条日志说是数据库操作的dll出错   但就那么一条    
  不过没法测啊   因为给客户的是exe文件

posted @ 2009-04-08 09:10 delphi2007 阅读(183) | 评论 (0)编辑 收藏

求救,高手帮看看(window 外壳) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110094628261.html
各位高手我现在这里现在想实现虚拟硬盘在window   xp系统上(如像u盘形式出现系统的样式),不知道在这方面怎么解决,小弟对这方面不是很了解,请大家多多帮助
posted @ 2009-04-08 09:10 delphi2007 阅读(150) | 评论 (0)编辑 收藏

如何强制关闭串口? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110085745262.html
系统其他程序占用的串口,我的程序怎么去强制关闭?  
   
  谢谢

用api:  
  closefile

closehandle

怎么使用,能不能给个详细点的例子?  
   
  我怎么得到串口得Handle,如果是COM1的话;不好意思,我不大熟。

var  
      hCom:   THandle;com口的handle  
  //=========================  
  //打开  
  //以读写方式打开com1  
  hCom   :=   CreateFile(('COM1'),   GENERIC_READ   or   GENERIC_WRITE,    
                    0,   nil,   OPEN_EXISTING,0,   0);    
  //关闭  
  CloseHandle(hcom);

认真再看了题,楼主要关才其它程序打开的串口啊,   那不行,嗯,   起码..我不会

呵呵,这个俺不会

噢,我也不会  
  能不关闭使用串口的那个进程?

hehe   ,谢谢comanche(太可怕)   。  
   
  我是要关闭其他程序打开的COM口  
   
  就是说在启动我的程序的时候,不论COM端口状态是怎样的,都强制关闭。  
   
 

找了好多帖子,有人说只能使用API关闭串口服务,然后再启动服务。  
   
  可我在系统里找了老半天也没发现哪个服务是为串口的。  
   
 

如果另一程序用独占方式打开了串口,你又不知道handle,怎么关?

找到那个进程的handle,close   It!!

把串口的设备拔掉

怎么不看我的留言呢,呵呵:  
   
  只能使用API关闭串口服务,然后再启动服务。  
   
  可我在系统里找了老半天也没发现哪个服务是为串口的。  
   
  其他方法应该都行不通,需要关闭串口服务,这样子的话就关闭了所有串口,再启动服务

能不能通过将其驱动或者端口删除达到目的?

ddd

将电脑关掉

to     extcsdn(Studing   VB   now  
  好办法,不过客户不会接受的

posted @ 2009-04-08 09:10 delphi2007 阅读(954) | 评论 (0)编辑 收藏

请问activemovie的用法?菜鸟问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061109175825263.html
写了一段播放视频的小程序?老师出错?  
     
  activemovie1.filename:='haha.mpg';  
  activemovie1.open;  
  activemovie1.play;  
   
  为什么不行呢?高手能不能给出详细的activemovie的用法?

各位高手们,救救急把

posted @ 2009-04-08 09:10 delphi2007 阅读(175) | 评论 (0)编辑 收藏

问临界区TCriticalSection 与 TRtlCriticalSection 的区别 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061109170721264.html
如题   大家在用TCriticalSection   的   enter方法时有没有出过什么问题

我喜欢用API的TRtlCriticalSection

TRtlCriticalSection     是一个结构体,在windows单元中定义;  
  是InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection等这几个kernel32.dll中的临界区操作API的参数;  
   
   
  TCriticalSection是在SyncObjs单元中实现的类,它对上面的那些临界区操作API函数进行了了封装,简化并方便了在Delphi的使用;  
   
  如TCriticalSection.Enter;就是调用了EnterCriticalSection这个API函数;  
   
  这就是两者的区别,嘿嘿,  
   
  >>大家在用TCriticalSection   的   enter方法时有没有出过什么问题  
   
  我还没有遇到过什么相关的问题  
   
 

posted @ 2009-04-08 09:10 delphi2007 阅读(745) | 评论 (0)编辑 收藏

提问,如何取得当前登陆用户的登陆名 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061109161856265.html
例如   用户名为张三,密码:12345   登陆到office域。  
  怎么读取出张三这个信息。

密码是读不出来的

我只读用户名就好

GetUserName

posted @ 2009-04-08 09:10 delphi2007 阅读(199) | 评论 (0)编辑 收藏

为什么我的windows Service程序启动的另一程序不显示呢 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061109155837266.html
我做了一简单service程序(ErrorServerity项设置为:esSevere),用它来启动另一程序,本来启动另一程序是可以让该程序西安示出来的,可我重新编译之后,启动的那个程序不显示了,我原来的设置都没有改变,不知为什么啊!

up

1.你的启动运行别的进程,是用哪个api  
   
  2.用任务管理器,检查一下,那个“另一程序”是否在进程列表中,如果不在,当然不显示,问题就另说了。

我用的shellexecute(0,'open','test.exe','','',SW_shownormal);  
  我的直接编译的过去的源程序,现在是不显示,过去编译的显示阿,进程列表中两个进程都存在

posted @ 2009-04-08 09:10 delphi2007 阅读(180) | 评论 (0)编辑 收藏

如何只用API来编写程序? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061109123707267.html
尝试了一下,但是运行后没有窗口显示,请高手赐教  
  program   API;  
   
  uses  
      Windows,Messages;  
   
  {$R   *.res}  
   
  function   WindowMSGProc(hwnd:LongWord;msg:tagMSG;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;  
  begin  
      case   msg.message   of  
          WM_CLOSE:  
              DestroyWindow(hwnd);  
          WM_DESTROY:  
              PostQuitMessage(0);  
      else  
          WindowMSGProc:=DefWindowProc(hwnd,msg.message,wParam,lParam);  
          exit;  
      end;  
      WindowMSGProc:=0;  
  end;  
   
  var  
      wndcl:tagWNDCLASSA;  
      hwnd:LongWord;  
      msg:tagMSG;  
  begin  
      wndcl.style:=CS_HREDRAW   or   CS_VREDRAW;  
      wndcl.cbClsExtra:=0;  
      wndcl.cbWndExtra:=0;  
      wndcl.hInstance:=hInstance;  
      wndcl.hbrBackground:=HBRUSH(GetStockObject(WHITE_BRUSH));  
      wndcl.lpszMenuName:=nil;  
      wndcl.lpszClassName:='S';  
      wndcl.lpfnWndProc:=@WindowMSGProc;  
   
      RegisterClass(wndcl);  
      hwnd:=CreateWindow(PChar('S'),PChar('ssss'),WS_OVERLAPPEDWINDOW,0,0,100,100,0,HMENU(nil),hInstance,nil);  
      ShowWindow(hwnd,SW_SHOWNORMAL);  
      UpdateWindow(hwnd);  
      while   GetMessage(msg,0,0,0)   do  
      begin  
          TranslateMessage(msg);  
          DispatchMessage(msg);  
      end;  
  end.  
 

还是用c吧。  
   
 

虽然写法差不多,  
 

找到一个给你参考,个人认为不错  
   
  Advanced   Delphi   Windows   /   Shell   /   API   /   Graphics   /   OLE   Programming  
   
  http://delphi.about.com/od/windowsshellapi/  
       
 

可以的~  
  自己找例子啦,很多的呢~

诸位能否费心看看我的代码,编译是没有问题的,为什么窗体没有显示出来呢  
  为什么呢

算了,我找到答案了  
   
  program   OnlyAPI;  
   
  uses  
      Windows,  
      Messages,  
      SysUtils;  
   
  const  
    AppName   =   'ObjectPascalHello';  
     
  function   WindowProc(Window:   HWnd;   AMessage:   UINT;   WParam   :   WPARAM;  
    LParam:   LPARAM):   LRESULT;   stdcall;   export;  
  var  
      dc   :   hdc;  
      ps   :   TPaintStruct;  
      r   :   TRect;  
  begin  
      WindowProc   :=   0;  
      case   AMessage   of  
          WM_PAINT   :  
          begin  
              dc   :=   BeginPaint(Window,ps);  
              GetClientRect(Window,r);  
              DrawText(dc,'使用Object   Pascal撰写的Native   Windows程序',-1,r,DT_SINGLELINE   or   DT_CENTER   or   DT_VCENTER);  
              EndPaint(Window,ps);  
              Exit;  
          end;  
          WM_MOUSEMOVE   :  
          begin  
              dc   :=   BeginPaint(Window,ps);  
              GetClientRect(Window,r);  
              DrawText(dc,'移动了Mouse',-1,r,  
              DT_SINGLELINE   or   DT_CENTER   or   DT_VCENTER);  
              EndPaint(Window,ps);  
              Exit;  
          end;  
          WM_LBUTTONDOWN   :  
          begin  
              dc   :=   BeginPaint(Window,ps);  
              GetClientRect(Window,r);  
              DrawText(dc,'点击了Mouse',-1,r,  
              DT_SINGLELINE   or   DT_CENTER   or   DT_VCENTER);  
              EndPaint(Window,ps);  
              Exit;  
          end;  
          wm_Destroy:  
          begin  
              PostQuitMessage(0);  
              Exit;  
          end;  
      end;  
      WindowProc   :=   DefWindowProc(Window,   AMessage,   WParam,   LParam);  
  end;  
     
    {   Register   the   Window   Class   }    
  function   WinRegister:   Boolean;  
  var  
      WindowClass:   WndClass;  
  begin  
      WindowClass.Style   :=   cs_hRedraw   or   cs_vRedraw;  
      WindowClass.lpfnWndProc   :=   TFNWndProc(@WindowProc);  
      WindowClass.cbClsExtra   :=   0;  
      WindowClass.cbWndExtra   :=   0;  
      WindowClass.hInstance   :=   system.MainInstance;  
      WindowClass.hIcon   :=   LoadIcon(0,   idi_Application);  
      WindowClass.hCursor   :=   LoadCursor(0,   idc_Arrow);  
      WindowClass.hbrBackground   :=   GetStockObject(WHITE_BRUSH);  
      WindowClass.lpszMenuName   :=   nil;  
      WindowClass.lpszClassName   :=   AppName;  
      Result   :=   RegisterClass(WindowClass)   <>   0;  
  end;  
     
    {   Create   the   Window   Class   }    
  function   WinCreate:   HWnd;  
  var  
    hWindow:   HWnd;    
  begin  
      hWindow   :=   CreateWindow(AppName,   'Hello   world   Object   Pascal   program',ws_OverlappedWindow,   cw_UseDefault,   cw_UseDefault,   cw_UseDefault,   cw_UseDefault,   0,   0,   system.MainInstance,   nil);  
      if   hWindow   <>   0   then   begin  
          ShowWindow(hWindow,   CmdShow);  
          ShowWindow(hWindow,   SW_SHOW);  
          UpdateWindow(hWindow);  
      end;  
      Result   :=   hWindow;  
  end;  
   
  var  
      AMessage:   TMsg;  
      hWindow:   HWnd;  
  begin  
      if   not   WinRegister   then   begin  
          MessageBox(0,   'Register   failed',   nil,   mb_Ok);  
          Exit;  
      end;  
      hWindow   :=   WinCreate;  
      if   longint(hWindow)   =   0   then   begin  
          MessageBox(0,   'WinCreate   failed',   nil,   mb_Ok);  
          Exit;  
      end;  
      while   GetMessage(AMessage,   0,   0,   0)   do   begin  
          TranslateMessage(AMessage);  
          DispatchMessage(AMessage);  
      end;  
      Halt(AMessage.wParam);  
  end.  
   
  李维的代码,学习下先

uses   windows  
   
  或者自己   直接   声明引用的   dll

呵呵   我是直接在在工程文件中用DLL   所引用的DLL   里面的具体功能也用DLL来实现   全部动态加载   这样占用的内存就是很少的   然后在加上定时内存整理   基本上能满足需要

吼吼,回到VB的年代了...

posted @ 2009-04-08 09:10 delphi2007 阅读(130) | 评论 (0)编辑 收藏

如何让程序占用空间达到最小(如果可以的话能把方法都列出来吗?) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061109112042268.html
如果我只需要一个很简单的功能,只需要使用一句代码如:  
  windows.beep(3100,10);//使扬声器D一声。  
   
  那么当我按F9之后生成的文件却要359KB。  
   
  问题一:请问为什么一个这么简单的功能都要占用这么大的空间?  
   
  问题二:有多少解决方法?怎么解决?  
   
  问题三:如果要用Delphi编写一些大程序,如何编写才会使程序更小更方便更新呢?(主要想问一下程序的结构,比如模块化设计如何实现==)  
   
  我是初学者,呵呵,罗嗦了一点,请别见怪。

哦,建议楼主去看一下Aimingoo前辈的<Delphi源代码分析>的这本书吧,  
   
  http://www.china-pub.com/computers/common/info.asp?id=15247

写console   app好了。  
  然后把控制台{$App..console}那句去掉。  
  引用windows.pas  
  建立一个纯sdk程序。

project->option的package里面把不需要的包去掉再编译.

程序中不要使用VCL,用纯API来写,EXE体积会小的很多。最小的可以达到10几K。

pe格式最小   1.5  
  可以用dos的   com   格式

uses   windows;  
   
  begin  
      Beep(3100,10);  
  end;  
  这个应该是最小的

最后编译出来   8K左右吧   我试过

用Console   Application,不要使用VCL,用纯API来写

用aspack压缩

用到组件什么的话有套   key   什么的,   rus   人搞的,   那个强,   用来代替   vcl,   像这个简单的程序   100k   以下,   还用的是   vcl

体积很敏感?

写错了   pe格式最小   3.5k//  
   
  这种程度的   程序   aspack压缩反而会加大体积。。  
   
  采取   com格式。。  
 

posted @ 2009-04-08 09:10 delphi2007 阅读(154) | 评论 (0)编辑 收藏

delphi怎么调用DLL函数(C语言) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061109111537269.html
函数原型(C):  
  函数定义:  
  long   GetBasicInfo_Block(LPARAM   pReserved,struct   Log_BASICINFOARRAY   *pLgBas);  
  参数:  
  pReserved:未用  
  pLgBas:基本信息内容(输出)  
  struct   Log_BASICINFOARRAY{  
  char   bDoc[10];  
  char   bID[18];  
  char   bName[20];  
                    char   bSex;  
  char   bAddress[60];  
  char   bVehicleType[4];  
  char   bTel[16];  
  long   bFirstTestDate;    
  long   bAvailableDate; //   发卡日期,如20041202  
  long   bReleaseDate; //   有效日期,如20041202  
   
  };  
   
   
  在delphi中怎么引用     Record   怎么余struct   对应;(char类型,到delphi中应是怎样的)  
 

来人救命啊!

Type  
  TLog_BASICINFOARRAY=record  
                    bDoc:array[0..9]   of   Char;  
  bIDA:array[0..17]   of   Char;  
  bName:array[0..19]   of   Char;  
                    bSex:Char;  
  bAddress:array[0..59]   of   Char;  
  bVehicleType:array[0..3]   of   Char;  
  bTel[16]:array[0..15]   of   Char;  
  bFirstTestDate:Double;    
  bAvailableDate:Double; //   发卡日期,如20041202  
  bReleaseDate:Double; //   有效日期,如20041202  
  end;  
   
  function   GetBasicInfo_Block(pReserved:LongInt;pLgBas:PLog_BASICINFOARRAY):Double;stdcall;external   'DLL   name'  
   
  这个试试  
 

Type  
  PLog_BASICINFOARRAY   =   ^TLog_BASICINFOARRAY;  
  TLog_BASICINFOARRAY   =   Packed   Record  
                    bDoc:array[0..9]   of   Char;  
  bIDA:array[0..17]   of   Char;  
  bName:array[0..19]   of   Char;  
                    bSex:Char;  
  bAddress:array[0..59]   of   Char;  
  bVehicleType:array[0..3]   of   Char;  
  bTel[16]:array[0..15]   of   Char;  
  bFirstTestDate:   Longint;    
  long   bAvailableDate:   Longint; //   发卡日期,如20041202  
  long   bReleaseDate:   Longint; //   有效日期,如20041202  
  end;  
   
  function   GetBasicInfo_Block(pReserved:LongInt;pLgBas:PLog_BASICINFOARRAY):integer;stdcall  
 

posted @ 2009-04-08 09:10 delphi2007 阅读(303) | 评论 (0)编辑 收藏

代码错误? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061109111030270.html
我的程序用到了键盘钩子,并且有个句柄的变量,下面的代码老出错,  
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin  
  closehandle(hh);     //加这句就出错,不加就没事!  
   
            if   hhook   <>   0   then  
                    begin  
                        UnHookWindowsHookEx(hHook);  
                        hHook   :=   0;  
                      //   MessageBox(0,   '键盘监视关闭',   '信息',   MB_ICONINFORMATION   +   MB_OK);  
                    end;  
  end;  
  错误提示:return   value   of   funtion   'hookproc'   might   be   undefined  
   
  高手赐教

你的hh   是什么类型的变量?

hwnd

posted @ 2009-04-08 09:10 delphi2007 阅读(161) | 评论 (0)编辑 收藏

请问exe内嵌的mp3,如何直接“流”方式的播放呢? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061009145524261.html
请问exe内嵌的mp3,如何直接“流”方式的播放呢?  
   
  非临时存出mp3到硬盘的方式,而是直接的“流”播放。文件流~内存流~  
   
   
  希望哪位大侠赐一个例子阿,谢谢:)

100分奉送:)

我看这个问题非常难,你出1000元RMB看有没有人给答案  
   
  ------------------------------------------------------- 本回复由大傻的破玩意儿【CSDN's   forum   Explorer】完成! 大傻的破玩意儿,今天你用了木有   !! 软件功能强大,速度超快!!支持中... 软件下载地址:http://CoolSlob.ys168.com

说的更具体些:我是自己制作了一个资源内嵌Mp3的程序,现在需要   流方式的   播放程序中资源文件内的这个mp3,可是Tmediaplayer这些组件,都没有像   图片组件那样的“loadFromSream”的调用“流”的方法。所以,现在很犯愁阿:(  
 

可以实现的,我在哪本书上看到过,找到后告诉你,不需要犯愁

还要我觉的你没有必要非用Tmediaplayer这样的组件,播放声音嘛,直接调用API吧,文件又小又精致

改用wav格式,可用系统函数playsound直接播放

“可以实现的,我在哪本书上看到过,找到后告诉你,不需要犯愁”-谢谢Ayx_hys()   啊:)  
   
  直接调用API播放声音,具体应该怎么作呢?

用个笨方法吧  
  建立一个模拟网络,发送流  
   
  以下一个例子是模拟网络播放资源中的SWF,你可以试试合不合适  
  http://www.2ccc.com/article.asp?articleid=3529

谢谢   bo524(风铃夜思雨)     :)    
   
  正在下载,今晚研究一下

“改用wav格式,可用系统函数playsound直接播放”-这个,今下午做了个试验,我以前的Mp3   音乐   4.6M,转化为WAV后,这个音乐文件达到可怕的   135M   !  
   
  当然,这个   135   M的WAV资源内嵌EXE,流播放,是没问题的。但实际应用,这样就不行了。  
   
 

“模拟网络播放资源中的SWF”-今晚实验过,内嵌的SWF,播放后,还是存储到了客户硬盘的IE缓存文件夹内了。  
   
  如何,能让IE缓存不自动保存内嵌的FLASH呢....

我有一个放MP3的DLL  
  可以流播放  
   
  以下是测试写的代码  
  Procedure   TFrmMain.FormCreate(Sender:   TObject);  
  Var  
      Res:   TResourceStream;  
  Begin  
      If   (HIWORD(BASS_GetVersion)   <>   BASSVERSION)   Then  
      Begin  
          MessageBox(0,   'An   incorrect   version   of   BASS.DLL   was   loaded',   Nil,   MB_ICONERROR);  
          Halt;  
      End;  
      If   (Not   BASS_Init(-1,   44100,   0,   Handle,   Nil))   Then  
      Begin  
          MessageBox(Handle,   '无法初始化设备!',   '错误',   MB_ICONHAND);  
          Halt;  
      End;  
      Res   :=   TResourceStream.CreateFromID(HInstance,   1,   'MP3');  
      HS   :=   BASS_StreamCreateFile(true,   Res.Memory,   0,   Res.Size,   BASS_SAMPLE_MONO);  
      Res.Free;  
  End;  
   
  Procedure   TFrmMain.FormDestroy(Sender:   TObject);  
  Begin  
      BASS_Free;  
  End;  
   
  Procedure   TFrmMain.CmdPlayClick(Sender:   TObject);  
  Begin  
      BASS_ChannelPlay(HS,   False);  
  End;

可否一赐   这个流播放MP3的   dll文件啊     :)

DLL与示例文件例已发到你的信箱了

直接不行,难道还不能先保存出来再播放吗?

十分感谢   laihongbo524(风铃夜思雨)   ,已经收到了   :)

文件流还不简单?  
  用LoadResource获取资源的全局句柄,  
  用GlobalLock锁定此句柄取得指针,  
  然后就用TFileStream.Read方法读取数据。  
  播放。  
 

学习

因为释放出来!试想“要是MP3大的》》你的硬盘”你就得晕!  
  国外有MP3————WAVE做的。  
  可以实现但----这也太贱了吧!楼主不是想白得到就好。。。。吧

posted @ 2009-03-13 10:30 delphi2007 阅读(241) | 评论 (0)编辑 收藏

请问exe资源内嵌的mp3或wma,如何并且“流”的方式直接播放呢?盼赐例子(送100分):) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061009145227262.html
请问如何exe内嵌mp3或wma,并且“流”的方式直接播放呢?盼赐例子(送100分):)  
   
  传统的临时存出mp3到硬盘的方法,我找到很多了,但是唯独   用流的方式,直读音频并且播放的教程例子却没有。  
   
  是需要用文件流,内存流的方式吧?  
   
  可如何读取流的音频呢?mediaplay不支持读取“流”  
   
  哪一个组件,可以像图片bmp那样,“loadformStream”   呢?  
   
  期待直接例子,谢谢啦!:)   100分封送

呵,都出200分了,可见很急了不是,用API吧,很管用的,照我说的没错

没有玩过,学习~~~~

改用wav格式,可用系统函数playsound直接播放  
  PlaySound('文件资源名',HInstance,SND_RESOURCE);

可用豪杰软件把mp3格式转为wav格式

1.采用楼上的方法,  
   
  2.是否可以考虑,将exe中的mp3资源导出到硬盘上,再播放mp3文件呢??

mark

"用API吧,很管用的,照我说的没错"  
   
  --用哪个API啊?可否详细说一下呢:)  
   
  WAV的方式,我都掌握的。但目前,需要Mp3,或者wma的格式。  
   
  “将exe中的mp3资源导出到硬盘上,再播放mp3文件”-目前,领导要求不能在客户端硬盘上留下任何的“痕迹”,所以还是要用   流啊   ...可流应该怎样用呢?  
   
  WAV流的介绍很多,但是Mp3的调用,却基本没有

UP   :)

总结上面的回答:WAV格式的资源可以直接播放,MP3格式的资源不可以直接播放。  
  变通的方法:讲MP3格式的资源在内存里转换成WAV格式,直接播放。

学习

我有一个放MP3的DLL  
  可以流播放  
  DLL与示例文件例已发到你的信箱了  
   
  以下是测试写的代码  
  Procedure   TFrmMain.FormCreate(Sender:   TObject);  
  Var  
      Res:   TResourceStream;  
  Begin  
      If   (HIWORD(BASS_GetVersion)   <>   BASSVERSION)   Then  
      Begin  
          MessageBox(0,   'An   incorrect   version   of   BASS.DLL   was   loaded',   Nil,   MB_ICONERROR);  
          Halt;  
      End;  
      If   (Not   BASS_Init(-1,   44100,   0,   Handle,   Nil))   Then  
      Begin  
          MessageBox(Handle,   '无法初始化设备!',   '错误',   MB_ICONHAND);  
          Halt;  
      End;  
      Res   :=   TResourceStream.CreateFromID(HInstance,   1,   'MP3');  
      HS   :=   BASS_StreamCreateFile(true,   Res.Memory,   0,   Res.Size,   BASS_SAMPLE_MONO);  
      Res.Free;  
  End;  
   
  Procedure   TFrmMain.FormDestroy(Sender:   TObject);  
  Begin  
      BASS_Free;  
  End;  
   
  Procedure   TFrmMain.CmdPlayClick(Sender:   TObject);  
  Begin  
      BASS_ChannelPlay(HS,   False);  
  End;  
 

对于分帧的MPEG音频或视频,一般可以通过搜索相关的帧头的特定信息来取得数据。具体请参见相关的RFC文档。

posted @ 2009-03-13 10:30 delphi2007 阅读(199) | 评论 (0)编辑 收藏

征求一个好的算法 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061008213029263.html
如何判定一个点是否在一个多边形内呢?  
  canvas上的有一个任意多边形,怎样判定canvas上的点是否在这个多边形内呢?

看到这样的帖子,首先要赞一个。  
   
  我不是技术,说个方法。抛砖引玉。  
   
  将任意多边形区域内染色,然后看哪个点是否被染色了。

刚看问题,感觉挺简单,确实这个问题是不容易的,楼上的正解。  
  查了下图形学的书,成熟算法有好几个,边填充,种子填充都有,没有现成的代码,劝楼主找个图形学的书,仔细看下算法就知道了。

MFC里有CRgn类的方法PtInRegion来判定,不知道API是不是有现成的函数。

API之中有,刚刚查到  
  BOOL   PtInRegion(  
   
          HRGN   hrgn, //   handle   of   region    
          int   X, //   x-coordinate   of   point      
          int   Y   //   y-coordinate   of   point      
        );  
    具体用法,自己研究下了。

posted @ 2009-03-13 10:30 delphi2007 阅读(119) | 评论 (0)编辑 收藏

仅列出标题
共34页: First 4 5 6 7 8 9 10 11 12 Last