I don't like cmd.exe's bunching up in my taskbar,
so I set out to write podcmd 

So I create Win32::Process (cmd.exe) and
find its window ($cmd) using FindWindowLike.
I create a GUI::Window, and set it as the parent of $cmd.
This magically gets cmd.exe out of the taskbar (yay!).

Now the problem, if I resize the $cmd the GUI::Window paints over it.

How do I resolve this
(stop the GUI::Window from painting over the cmd window)?

How do I get at the constants SW_MAXIMIZE and SW_SHOW
(other than typing the numbers by hand)?

I eventually want to have the cmd.exe window in a TabStrip...
here's what I got so far

#podcmd.pl
use strict;
use warnings;

use Win32::API;
use Win32::GuiTest qw( FindWindowLike PostMessage );
use Win32::GUI;
use Win32::Process;

my $SETPARENT = Win32::API::->new("user32","SetParent","NN","N")
    or die "Failed to load SetParent from user32.dll";

Win32::Process::Create(
    my $cmdp,
    "$ENV{WINDIR}\\system32\\cmd.exe",
    '/K  title steal_me ',
    0,# don't inherit nothing
    NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,
    '.'
)
    or die "DAMMIT ",Win32::FormatMessage( Win32::GetLastError() ),$/;

sleep 1;

my( $cmd ) = FindWindowLike(undef,'steal_me','ConsoleWindowClass',0,0);

#my( $cmd ) = Win32::GUI::FindWindow('ConsoleWindowClass','steal_me');# don't 
work

die " can't find steal_me, killing it ",$cmdp->Kill(0)
    unless $cmd and $cmd =~ /\d+/;

# cross fingers (actually works :D)
$cmd = bless( {
  '-type' => 0,
  '-name' => 'TheDangCMD',
  '-handle' => $cmd,
  '-accel' => 0
}, 'Win32::GUI::Window' );

warn "classname ", $cmd->GetClassName;

#fonked from Win32-GUI/samples/tabstrip.pl
my $W = GUI::Window::->new(
    -title    => "Win32::GUI::TabStrip test",
    -left     => 100, 
    -top      => 100, 
#    -width    => 300, 
#    -height   => 200,
    -name     => "Window",
);

if(@ARGV){
    $W->AddTabStrip(
        -name   => "Tab",
        -left   => 0,   
        -top    => 0, 
        -width  => $cmd->ScaleWidth, 
        -height => $cmd->ScaleHeight,
    );
    
    $W->Tab->InsertItem(
        -text => "First", 
    );

    $SETPARENT->Call($cmd->{-handle}, $W->Tab->{-handle});

} else {
    $SETPARENT->Call($cmd->{-handle}, $W->{-handle});
}

$W->Show(); # SW_MAXIMIZE | SW_SHOW );
$cmd->Show(); #SW_MAXIMIZE | SW_SHOW );
$cmd->Update;
$W->Dialog;

#while (Win32::GUI::DoEvents() != -1) {
#    $cmd->Update;
#}

warn "killing $cmdp ", $cmdp->Kill(0);

use Data::Dumper;
local $Data::Dumper::Indent=1;
die Dumper( $W ),$/;

sub Window_Terminate {
  return -1;
}


__END__
$VAR1 = bless( {
  '-type' => 0,
  '-name' => 'Window',
  '-handle' => 2164436,
  '-accel' => 0
}, 'Win32::GUI::Window' );


__________________________________
Do you Yahoo!?
Yahoo! Mail - More reliable, more storage, less spam
http://mail.yahoo.com

Reply via email to