【发布时间】:2011-01-28 21:56:01
【问题描述】:
我有这个在 WinXP x86 下运行良好的 perl 子例程,除其他外,对 32 位应用程序的列进行排序,但在 Win7 x64 下,这个子例程根本不起作用。其他工作正常(标签切换,按下按钮等)。知道为什么吗?
sub function
{
my @searchresultswindow_handle = FindWindowLike( @_[ 0 ], undef, undef, $searchresultswindow_id );
if( !@searchresultswindow_handle )
{
die "Cannot find window handle for searchresultswindow control\n";
}
else
{
printf( "searchresultswindow handle is %x\n", $searchresultswindow_handle[ 0 ] );
$keysList=@searchresultswindow_handle[0] ;
my $action = pack( "l l",
0, #ptaction.x
0 #ptaction.y
);
my $action_ptr = unpack( 'L!', pack( 'P',$action));
my $str_buf = pack( "L L L l l L L L L l",
$keysList, #nmh.hdr.hwndFrom hwnd
0, #nmh.hdr.idFrom
4294967188, #LVN_COLUMNCLICK ,#nmh.hdr.code Code
-1, #item
13, #sub item
0, #uNewState
0, #uOldState
0, #uChanged
$action_ptr, #action
0 #lparam
);
$lvitem = AllocateVirtualBuffer( $keysList, 5000 );
WriteToVirtualBuffer( $lvitem, $str_buf );
my $value =PostMessage( $keysList, 0x004E, 0, $lvitem->{ 'ptr' });
FreeVirtualBuffer( $lvitem );
}
}
【问题讨论】:
-
你能比“根本不工作”更具体吗?会发生什么,您会遇到什么错误?
-
是的,扔给我们一块骨头,告诉我们
FindWindowLike和AllocateVirtualBuffer来自哪些模块。 -
1) 我忘了说 $keysList 和 $lvitem 被声明为全局(不必要,但我忘记在发布之前更正问题)。 2)在win7 x64下,脚本的所有其他部分都可以正常工作,除了这个。这部分应该点击特定窗口的标题子项(例如,按大小对窗口的项目进行排序)。
-
3)AllocateVirtualBuffer piotrkaluski.com/files/winguitest/docs/… FindWindowLike piotrkaluski.com/files/winguitest/docs/ch09s05.html 都是 Win32::GuiTest 子程序。
-
LE: 2*) 在 Win7 x64 下,脚本运行这个子程序,没有错误或任何东西,但是项目没有排序,因为,可能是父窗口没有收到通知消息,或不执行。与 WinXP x86 相比,Win7 x64 下有些不同。我不知道那是什么东西。