Chinaunix

标题: 哪个模块可以更改windows的时期和时间? [打印本页]

作者: freeand    时间: 2005-01-01 04:43
标题: 哪个模块可以更改windows的时期和时间?
如题,要求是模块。
作者: superdoctor    时间: 2005-01-04 11:00
标题: 哪个模块可以更改windows的时期和时间?
恕我直言,楼主的说法着实过火,论坛上其他人并没有解答你问题的义务,尽管你的问题简单
作者: freeand    时间: 2005-01-04 14:39
标题: 哪个模块可以更改windows的时期和时间?
很抱歉!
我一心想着把问题说得简单明了,不好意思了。。。
我找过好多模块,都只是列出日期,或许是做日期的列表,好像都没法更改系统的日期和时间。。。不知谁有过经验的,麻烦说说,谢了~
作者: superdoctor    时间: 2005-01-04 14:49
标题: 哪个模块可以更改windows的时期和时间?
原帖由 "freeand" 发表:
很抱歉!
我一心想着把问题说得简单明了,不好意思了。。。
我找过好多模块,都只是列出日期,或许是做日期的列表,好像都没法更改系统的日期和时间。。。不知谁有过经验的,麻烦说说,谢了~


没关系,有问题大家帮着看一下也没有问题的

WINDOWS下的

  1. use Win32::OLE::Variant;

  2.         my $v = Variant(VT_DATE, "April 1 99 2:23 pm");
  3.         print $v->;Date("ddd',' MMM dd yy"), "\n";
  4.         print $v->;Time("hh.mm.ss tt"), "\n";

  5. 输出:

  6.         Thu, Apr 01 99
  7.         02.23.00 PM

复制代码

作者: freeand    时间: 2005-01-04 16:14
标题: 哪个模块可以更改windows的时期和时间?
我就是这个问题啊,和你这个例子差不多,只能显示日期,不能应用修改到winxp系统啊。。。
作者: superdoctor    时间: 2005-01-04 16:23
标题: 哪个模块可以更改windows的时期和时间?
这个我没有试过,临时找到的

那你使用system ("time xxxxxx"就可以啦在DOS/WINXP下  
作者: freeand    时间: 2005-01-04 16:34
标题: 哪个模块可以更改windows的时期和时间?
my $cmd=`date 日期 && time 时间`;

这样是可以的。。。但是,这样在程序里调用,会弹出一个dos窗口。。。

所以,我想用模块方式实现,想避免任何窗口的弹出。。。
作者: freeand    时间: 2005-01-04 16:37
标题: 哪个模块可以更改windows的时期和时间?
use Win32;
use Win32:rocess;
$CreateOptions=NORMAL_PRIORITY_CLASS | DETACHED_PROCESS;
Win32:rocess::Create($ProcessObj,'C:\WINDOWS\system32\cmd.exe',"cmd time 时间",0,DETACHED_PROCESS,".";
$ProcessObj->;Wait(INFINITE);
$ProcessObj->;GetExitCode($ExitCode);

这样也不行~~~
作者: superdoctor    时间: 2005-01-04 17:04
标题: 哪个模块可以更改windows的时期和时间?
WINDOWS确实比较讨厌,你到其他WINDOWS的论坛去问问,这里是CHINAUNIX,老实说大家的WINDOWS经验不是太丰富的
作者: freeand    时间: 2005-01-04 17:26
标题: 哪个模块可以更改windows的时期和时间?
关于perl的论坛越来越少了。。。哎~
作者: flw    时间: 2005-01-04 18:33
标题: 哪个模块可以更改windows的时期和时间?
[quote]原帖由 "superdoctor"]WINDOWS确实比较讨厌,你到其他WINDOWS的论坛去问问,这里是CHINAUNIX,老实说大家的WINDOWS经验不是太丰富的 [/quote 发表:
不许撵人家走!
楼主别灰心,
让我帮你去试试, 看有没有什么好办法.
作者: freeand    时间: 2005-01-04 18:47
标题: 哪个模块可以更改windows的时期和时间?
原帖由 "flw" 发表:
恍砟烊思易?
楼主别灰心,
让我帮你去试试, 看有没有什么好办法.


谢谢!
作者: superdoctor    时间: 2005-01-05 10:54
标题: 哪个模块可以更改windows的时期和时间?
[quote]原帖由 "flw" 发表:
恍砟烊思易
作者: bytewolf    时间: 2005-01-05 12:08
标题: 哪个模块可以更改windows的时期和时间?

  1. use Win32::Job;
  2.    
  3. my $job = Win32::Job->;new;
  4.    $job->;spawn("cmd", q{cmd /C "date 2005-01-06"});
  5.    $job->;spawn("cmd", q{cmd /C "time 12:07:12"});
  6.    $job->;run(10);
复制代码

作者: superdoctor    时间: 2005-01-05 13:03
标题: 哪个模块可以更改windows的时期和时间?
bytewolf,你的这个会不会弹出dos窗口?
作者: freeand    时间: 2005-01-05 14:39
标题: 哪个模块可以更改windows的时期和时间?
[quote]原帖由 "bytewolf"][/quote 发表:


有两个窗口弹出来。。。
作者: bytewolf    时间: 2005-01-05 20:40
标题: 哪个模块可以更改windows的时期和时间?
奇怪了...在我的winxp上,除了运行该程序打开的一个cmd窗口外,运行中不会再弹出新的窗口啊....
作者: flw    时间: 2005-01-05 21:06
标题: 哪个模块可以更改windows的时期和时间?
折腾了一晚上,终于搞定楼主的问题了:
  1. #!/usr/bin/perl -w
  2. # 2005.01.05 习作于武汉 writed by flw

  3. use strict;
  4. use Win32::API;
  5. use Tk;

  6. my $ret;

  7. Win32::API::Struct->;typedef( 'TIMESTRUCT' =>; qw(
  8.     WORD wYear;
  9.     WORD wMonth;
  10.     WORD wDayOfWeek;
  11.     WORD wDay;
  12.     WORD wHour;
  13.     WORD wMinute;
  14.     WORD wSecond;
  15.     WORD wMilliseconds;
  16.     ) ) || die "typedef struct TIMESTRUCT failed: [$!]\n";

  17. $ret = Win32::API->;Import( 'Kernel32.dll', 'VOID GetLocalTime( LPTIMESTRUCT time )' );
  18. die "Import Win32API GetLocalTime failed: [$!]\n" unless $ret;
  19. $ret = Win32::API->;Import( 'Kernel32.dll', 'BOOL SetLocalTime( LPTIMESTRUCT time )' );
  20. die "Import Win32API SetLocalTime failed: [$!]\n" unless $ret;

  21. my $win = new Tk::MainWindow( '-title' =>; 'flw' );
  22. my $labelText = 'Press OK to set local time';
  23. $win->;Label( '-textvariable' =>; \$labelText )->;pack();
  24. $win->;Button( '-text' =>; 'OK', '-command' =>; \&OnOK )->;pack();

  25. sub OnOK{
  26.     my $timeVar = Win32::API::Struct->;new( 'TIMESTRUCT' );
  27.     $timeVar->;align(0);
  28.     GetLocalTime( $timeVar );
  29.     $timeVar->;{ 'wYear' } = 2005;
  30.     $timeVar->;{ 'wMonth' } = 1;
  31.     $timeVar->;{ 'wDay' } = 23;
  32.     my $ret = SetLocalTime( $timeVar );
  33.     $labelText = "ret: [$ret]  ".($ret ? 'success' : "failed: [$!]");
  34. }

  35. MainLoop();
复制代码

作者: flw    时间: 2005-01-05 21:10
标题: 哪个模块可以更改windows的时期和时间?
主要思路是利用 Win32::API 模块来调用 windows SDK 提供的功能,
按照这个思路可以调用所有的 SDK API。

至于怎么不弹出窗口来,
我想用 CreateProcess 应该可以的。
system 肯定是不行的,因为 system 要激活一个 cmd 进程。
我用 WinExec( "cmd /c date 2005-01-20", SW_HIDDEN ) 试过,按思路讲应该是可以实现的,不过始终报错“找不到命令文件”,不知道是我哪里搞错了,改天再折腾折腾。
作者: flw    时间: 2005-01-05 21:12
标题: 哪个模块可以更改windows的时期和时间?
Win32::API 可以用 ppm 下载下来。

哈哈!现在我总算是基本掌握了扩展 Perl 和嵌入 Perl 两种技术。
从而可以实现 Perl/C 混合编程了。
作者: freeand    时间: 2005-01-05 21:59
标题: 哪个模块可以更改windows的时期和时间?
谢谢flw!!!!!成功啦~~~
作者: superdoctor    时间: 2005-01-06 11:58
标题: 哪个模块可以更改windows的时期和时间?
原帖由 "flw" 发表:
Win32::API 可以用 ppm 下载下来。

哈哈!现在我总算是基本掌握了扩展 Perl 和嵌入 Perl 两种技术。
从而可以实现 Perl/C 混合编程了。


flw确实强

建议加精,这个例子对WIN下vs的程序员平滑过渡到perl程序员非常有启发意义啊

加精吧,flw
作者: flw    时间: 2005-01-06 19:25
标题: 哪个模块可以更改windows的时期和时间?
to 楼上:
我正准备等融会贯通之后,写一些 Perl/C 混合编程的系列文章呢。
我准备分成三部分:
1,利用 C 语言编制模块来扩展 Perl 的功能。
2,在 Perl 中调用 C 语言书写好的动态/静态链接库(就是这个帖子中的例子了)
3,在 C 语言中嵌入 Perl 解释器
大家也可以考虑考虑。

至于加精华,因为我说过是不要精华的,所以就暂时先不加了。
作者: freeand    时间: 2005-01-07 10:29
标题: 哪个模块可以更改windows的时期和时间?
http://www.chinaunix.net/forum/viewtopic.php?t=474265&show_type=&sid=003f38f0d1e5e74cfd3ef66cd0ea7326

请问如何改啊?或者有什么更好的可以用在linux和windows下的定时器?谢谢了~
作者: superdoctor    时间: 2005-01-07 10:51
标题: 哪个模块可以更改windows的时期和时间?
原帖由 "flw" 发表:
to 楼上:
我正准备等融会贯通之后,写一些 Perl/C 混合编程的系列文章呢。
我准备分成三部分:
1,利用 C 语言编制模块来扩展 Perl 的功能。
2,在 Perl 中调用 C 语言书写好的动态/静态链接库(就是这个帖子中..........


有一本书叫做<erl 语言技术内幕>;,有中译本卖,里面有比较详细介绍PERL与C协同的章节,呵呵,我有这本书,但是没有电子版的,不然就共享出来了
作者: SCYANGYU    时间: 2009-10-11 11:45
原帖由 flw 于 2005-1-6 19:25 发表
to 楼上:
我正准备等融会贯通之后,写一些 Perl/C 混合编程的系列文章呢。
我准备分成三部分:
1,利用 C 语言编制模块来扩展 Perl 的功能。
2,在 Perl 中调用 C 语言书写好的动态/静态链接库(就是这个帖 ...



我想通过Win32::API来调用我的dll中的函数。如果参数是integer类型,能够正常调用,返回正确的计算结果。但是,如果参数是double类型,就会报错!
"Perl Command Line Interpreter has encountered a problem and needs to close. We are sorry for the inconvenience"
是不是Win32::API不支持double类型的参数?

#这个能正确调用
my $function=Win32::API->new('TestDLL', 'int foo1(int P, int T)');
my $return=$function->Call(100, 200);
#这个调用会出错
my $function2=Win32::API->new('TestDLL', 'double foo2(double P, double T)');
my $return2=$function2->Call(10.0, 20.0);

刚刚测试《Perl高级编程(Profssional Perl Programming)》中的例子
use Win32::API;
# import the cos function
$cos = new Win32::API('msvcrt', 'cos', 'D', 'D');
# $cos is an object, use the Call() method on it
$result = $cos->Call(2.0);
print "cos(2.0) = $result\n";
仍然没有成功!
请高手们解答一下。
作者: ttcn    时间: 2009-10-11 15:28
原帖由 flw 于 2005-1-5 21:10 发表
主要思路是利用 Win32::API 模块来调用 windows SDK 提供的功能,
按照这个思路可以调用所有的 SDK API。

至于怎么不弹出窗口来,
我想用 CreateProcess 应该可以的。
system 肯定是不行的,因为 system  ...


找不到程序是因为在cmd本身不是程序,cmd.exe 才是:mrgreen:

不知道怎么导api到perl里,网上搜索无果,最后还是在chinaunix里找到了个类似的帖子修改了下成功改变了系统时间(vista,不弹出窗口)
#!perl
use Win32::API;
$WinExec = Win32::API->new('kernel32','WinExec',[P,I],I);
$WinExec->Call("cmd.exe /c date 2009-10-10",0x00000);

http://bbs2.chinaunix.net/thread-1470790-1-5.html

网上关于perl + dll 的资料太少,老大加油!!!期待Perl进阶应用!!

[ 本帖最后由 ttcn 于 2009-10-11 15:48 编辑 ]
作者: lokchungk    时间: 2009-10-11 17:02
标题: 回复 #27 ttcn 的帖子
看看CPAN上關於Win32::API的介紹吧
http://search.cpan.org/~cosimo/Win32-API-0.59/API.pm

如果不怕麻煩的話可以用SetSystemTime()代替date
作者: ttcn    时间: 2009-10-12 13:03
标题: 回复 #28 lokchungk 的帖子
多谢指点,下次写代码的时候先看这个链接




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2