Beefy Boxes and Bandwidth Generously Provided by pair Networks Frank
Just another Perl shrine
 
PerlMonks  

Re^2: Using GetWindowThreadProcessId(). Want to move to AS 5.16 64bit Perl, but Win32::GUI doesn't build. Now what?

by syphilis (Canon)
on May 29, 2013 at 02:11 UTC ( #1035762=note: print w/ replies, xml ) Need Help??


in reply to Re: Using GetWindowThreadProcessId(). Want to move to AS 5.16 64bit Perl, but Win32::GUI doesn't build. Now what?
in thread Using GetWindowThreadProcessId(). Want to move to AS 5.16 64bit Perl, but Win32::GUI doesn't build. Now what?

Since the OP is wanting to distribute the code, it becomes necessary to ensure that Inline::C is installed on the target machines (or other appropriate action taken).

<PLUG>
I would therefore probably take the code that BrowserUk provided and turn it into a standalone module - which could be distributed in either source or pre-built (binary) form.
First, create a directory ./Win32-ThreadID-0.01 and a file ./ThreadID.c; where ThreadID.c contains the following section of BrowserUk's code:

#include <windows.h> #define IS_VARS Inline_Stack_Vars #define IS_RESET Inline_Stack_Reset #define IS_PUSHIV( iv ) Inline_Stack_Push( sv_2mortal( newSViv( iv ) ) + ) #define IS_PUSHUV( uv ) Inline_Stack_Push( sv_2mortal( newSVuv( uv ) ) + ) #define IS_DONE Inline_Stack_Done void getWindowThreadProcessId( SV* hwnd ) { IS_VARS; DWORD pid; DWORD tid = GetWindowThreadProcessId( (HWND)SvUV(hwnd), &pid ); IS_RESET; IS_PUSHUV( tid ); IS_PUSHUV( pid ); IS_DONE; return; }
Then run this script:
use warnings; use strict; use InlineX::C2XS qw(c2xs); my $mod = 'Win32::ThreadID'; my $pkg = $mod; my $build_dir = './Win32-ThreadID-0.01'; c2xs($mod, $pkg, $build_dir, {WRITE_PM => 1, WRITE_MAKEFILE_PL => 1, VERSION => '0.01', MANIF => 1, SRC_LOCATION => './ThreadID.c', EXPORT_OK_ALL => 1, });
That will create a Win32-ThreadID-0.01 source distro in the Win32-ThreadID-0.01 directory - complete with ThreadID.pm, ThreadID.xs, Makefile.PL, INLINE.h and MANIFEST, where ThreadID.pm exports (upon request) the getWindowThreadProcessId function. That distro as it then stands is already buildable and installable - though there's yet no test script (which would have to be added by hand, if desired).
</PLUG>

Hmmm .... come to think of it, an option to generate a test script (that simply tests the loadability of the module) might be a useful addition to InlineX::C2XS ...

Cheers,
Rob


Comment on Re^2: Using GetWindowThreadProcessId(). Want to move to AS 5.16 64bit Perl, but Win32::GUI doesn't build. Now what?
Select or Download Code
Re^3: Using GetWindowThreadProcessId(). Want to move to AS 5.16 64bit Perl, but Win32::GUI doesn't build. Now what?
by bulk88 (Priest) on May 29, 2013 at 04:32 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1035762]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (7)
As of 2014-04-21 06:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (491 votes), past polls