CogVM arguments in Win32

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

CogVM arguments in Win32

Torsten Bergmann
Hi Bernat,

>how do I translate this into NB code

Either invite Igor (author of NB) for lunch or try this:


Its a C-structure, you convert it by wrapping this in a sublcass
of "NBExternalStructure". See the examples already in a Pharo 3.0 image.

Basically you need:

- define a subclass NBExternalStructure subclass: #WinNotifyIconData ...
- define the correct fields in a class side #fieldsDesc method according to the native data types used in the structure
- call "WinNotifyIconData rebuildFieldAccessors"
- setup the types in a shared pool that you can include later:

   - define the pool:       SharedPool subclass: #WinTryIconConstants ...
   - in a class initialize method you can setup the type

     initialize

        NOTIFYICONDATA := #WinNotifyIconData.
        PNOTIFYICONDATA:= 'NOTIFYICONDATA *'.

- by including the pool you can use "NOTIFYICONDATA" or "PNOTIFYICONDATA" in any native boost call.


If you are in Pharo 3.0 load "OS-Windows" package from the config browser.
Check the subclasses of NBExternalStructure there.

I wrapped many other windows structures already so you can get an idea about
it. For instance have a look at WinConsoleConstants>>initTypeConstants, there you will find
the CONSOLE_CURSOR_INFO, CONSOLE_SCREEN_BUFFER_INFO structs wrapped in WinConsoleCursor, WinConsoleScreenBuffer classes.

Compare them with the MSDN struct description.

>Could the Windows API be any more convoluted and dev-unfriendly in any
>possible sense?

This question should go to M$ not Pharo-user ;)

Bye
T.


BTW: I'm not sure "PNOTIFYICONDATA" alone will solve your problem if I remember correctly
     from my Smalltalk/MT and C/C++ times also playing with tray icons.
     I guess you need a callback that gets called when the icon is clicked or the tray icon menu
     is choosen (see uCallbackMessage member in the struct).
     You also need a handle to an icon - either the icon from the EXEs resource section or
     by loading one from a bitmap. That means wrapping the icon or bitmap apis too...

Reply | Threaded
Open this post in threaded view
|

Re: CogVM arguments in Win32

Bernat Romagosa
Thanks a lot Torsten!

I'll invest the whole morning tomorrow in trying to get a little bit more of this to work.

If I don't succeed... there are lots of very good restaurants in Barcelona, Igor ;)


2013/11/13 Torsten Bergmann <[hidden email]>
Hi Bernat,

>how do I translate this into NB code

Either invite Igor (author of NB) for lunch or try this:


Its a C-structure, you convert it by wrapping this in a sublcass
of "NBExternalStructure". See the examples already in a Pharo 3.0 image.

Basically you need:

- define a subclass NBExternalStructure subclass: #WinNotifyIconData ...
- define the correct fields in a class side #fieldsDesc method according to the native data types used in the structure
- call "WinNotifyIconData rebuildFieldAccessors"
- setup the types in a shared pool that you can include later:

   - define the pool:       SharedPool subclass: #WinTryIconConstants ...
   - in a class initialize method you can setup the type

     initialize

        NOTIFYICONDATA := #WinNotifyIconData.
        PNOTIFYICONDATA:= 'NOTIFYICONDATA *'.

- by including the pool you can use "NOTIFYICONDATA" or "PNOTIFYICONDATA" in any native boost call.


If you are in Pharo 3.0 load "OS-Windows" package from the config browser.
Check the subclasses of NBExternalStructure there.

I wrapped many other windows structures already so you can get an idea about
it. For instance have a look at WinConsoleConstants>>initTypeConstants, there you will find
the CONSOLE_CURSOR_INFO, CONSOLE_SCREEN_BUFFER_INFO structs wrapped in WinConsoleCursor, WinConsoleScreenBuffer classes.

Compare them with the MSDN struct description.

>Could the Windows API be any more convoluted and dev-unfriendly in any
>possible sense?

This question should go to M$ not Pharo-user ;)

Bye
T.


BTW: I'm not sure "PNOTIFYICONDATA" alone will solve your problem if I remember correctly
     from my Smalltalk/MT and C/C++ times also playing with tray icons.
     I guess you need a callback that gets called when the icon is clicked or the tray icon menu
     is choosen (see uCallbackMessage member in the struct).
     You also need a handle to an icon - either the icon from the EXEs resource section or
     by loading one from a bitmap. That means wrapping the icon or bitmap apis too...




--
Bernat Romagosa.
Reply | Threaded
Open this post in threaded view
|

Re: CogVM arguments in Win32

Igor Stasenko



On 13 November 2013 12:02, Bernat Romagosa <[hidden email]> wrote:
Thanks a lot Torsten!

I'll invest the whole morning tomorrow in trying to get a little bit more of this to work.

If I don't succeed... there are lots of very good restaurants in Barcelona, Igor ;)

i can imagine :) I hope i will be able come there once more one day.
 Barcelona is very beautiful city.
:)


2013/11/13 Torsten Bergmann <[hidden email]>
Hi Bernat,

>how do I translate this into NB code

Either invite Igor (author of NB) for lunch or try this:


Its a C-structure, you convert it by wrapping this in a sublcass
of "NBExternalStructure". See the examples already in a Pharo 3.0 image.

Basically you need:

- define a subclass NBExternalStructure subclass: #WinNotifyIconData ...
- define the correct fields in a class side #fieldsDesc method according to the native data types used in the structure
- call "WinNotifyIconData rebuildFieldAccessors"
- setup the types in a shared pool that you can include later:

   - define the pool:       SharedPool subclass: #WinTryIconConstants ...
   - in a class initialize method you can setup the type

     initialize

        NOTIFYICONDATA := #WinNotifyIconData.
        PNOTIFYICONDATA:= 'NOTIFYICONDATA *'.

- by including the pool you can use "NOTIFYICONDATA" or "PNOTIFYICONDATA" in any native boost call.


If you are in Pharo 3.0 load "OS-Windows" package from the config browser.
Check the subclasses of NBExternalStructure there.

I wrapped many other windows structures already so you can get an idea about
it. For instance have a look at WinConsoleConstants>>initTypeConstants, there you will find
the CONSOLE_CURSOR_INFO, CONSOLE_SCREEN_BUFFER_INFO structs wrapped in WinConsoleCursor, WinConsoleScreenBuffer classes.

Compare them with the MSDN struct description.

>Could the Windows API be any more convoluted and dev-unfriendly in any
>possible sense?

This question should go to M$ not Pharo-user ;)

Bye
T.


BTW: I'm not sure "PNOTIFYICONDATA" alone will solve your problem if I remember correctly
     from my Smalltalk/MT and C/C++ times also playing with tray icons.
     I guess you need a callback that gets called when the icon is clicked or the tray icon menu
     is choosen (see uCallbackMessage member in the struct).
     You also need a handle to an icon - either the icon from the EXEs resource section or
     by loading one from a bitmap. That means wrapping the icon or bitmap apis too...




--
Bernat Romagosa.



--
Best regards,
Igor Stasenko.
Reply | Threaded
Open this post in threaded view
|

Re: CogVM arguments in Win32

Bernat Romagosa
Ok guys, in the end I implemented a big time clutch that simulates the behaviour I was after:

I created a tiny app in C++ that starts Pharo, the image reads the --serve flag (that I implemented in DefaultCommandLineHandler), hides itself via NB, and kills the UIManager process to prevent refreshes.

Then it adds an icon into the tray, with a single context-menu entry (Quit) that kills the Pharo process quits the tiny app itself.

I know it's ugly, but it does work and, to the end user, it looks like Pharo just started minimized to tray.

Thanks a lot for your help! :)

Bernat.


2013/11/13 Igor Stasenko <[hidden email]>



On 13 November 2013 12:02, Bernat Romagosa <[hidden email]> wrote:
Thanks a lot Torsten!

I'll invest the whole morning tomorrow in trying to get a little bit more of this to work.

If I don't succeed... there are lots of very good restaurants in Barcelona, Igor ;)

i can imagine :) I hope i will be able come there once more one day.
 Barcelona is very beautiful city.
:)


2013/11/13 Torsten Bergmann <[hidden email]>
Hi Bernat,

>how do I translate this into NB code

Either invite Igor (author of NB) for lunch or try this:


Its a C-structure, you convert it by wrapping this in a sublcass
of "NBExternalStructure". See the examples already in a Pharo 3.0 image.

Basically you need:

- define a subclass NBExternalStructure subclass: #WinNotifyIconData ...
- define the correct fields in a class side #fieldsDesc method according to the native data types used in the structure
- call "WinNotifyIconData rebuildFieldAccessors"
- setup the types in a shared pool that you can include later:

   - define the pool:       SharedPool subclass: #WinTryIconConstants ...
   - in a class initialize method you can setup the type

     initialize

        NOTIFYICONDATA := #WinNotifyIconData.
        PNOTIFYICONDATA:= 'NOTIFYICONDATA *'.

- by including the pool you can use "NOTIFYICONDATA" or "PNOTIFYICONDATA" in any native boost call.


If you are in Pharo 3.0 load "OS-Windows" package from the config browser.
Check the subclasses of NBExternalStructure there.

I wrapped many other windows structures already so you can get an idea about
it. For instance have a look at WinConsoleConstants>>initTypeConstants, there you will find
the CONSOLE_CURSOR_INFO, CONSOLE_SCREEN_BUFFER_INFO structs wrapped in WinConsoleCursor, WinConsoleScreenBuffer classes.

Compare them with the MSDN struct description.

>Could the Windows API be any more convoluted and dev-unfriendly in any
>possible sense?

This question should go to M$ not Pharo-user ;)

Bye
T.


BTW: I'm not sure "PNOTIFYICONDATA" alone will solve your problem if I remember correctly
     from my Smalltalk/MT and C/C++ times also playing with tray icons.
     I guess you need a callback that gets called when the icon is clicked or the tray icon menu
     is choosen (see uCallbackMessage member in the struct).
     You also need a handle to an icon - either the icon from the EXEs resource section or
     by loading one from a bitmap. That means wrapping the icon or bitmap apis too...




--
Bernat Romagosa.



--
Best regards,
Igor Stasenko.



--
Bernat Romagosa.
Reply | Threaded
Open this post in threaded view
|

Re: CogVM arguments in Win32

Stéphane Ducasse
quite cool!

Stef

On Nov 18, 2013, at 11:25 AM, Bernat Romagosa <[hidden email]> wrote:

Ok guys, in the end I implemented a big time clutch that simulates the behaviour I was after:

I created a tiny app in C++ that starts Pharo, the image reads the --serve flag (that I implemented in DefaultCommandLineHandler), hides itself via NB, and kills the UIManager process to prevent refreshes.

Then it adds an icon into the tray, with a single context-menu entry (Quit) that kills the Pharo process quits the tiny app itself.

I know it's ugly, but it does work and, to the end user, it looks like Pharo just started minimized to tray.

Thanks a lot for your help! :)

Bernat.


2013/11/13 Igor Stasenko <[hidden email]>



On 13 November 2013 12:02, Bernat Romagosa <[hidden email]> wrote:
Thanks a lot Torsten!

I'll invest the whole morning tomorrow in trying to get a little bit more of this to work.

If I don't succeed... there are lots of very good restaurants in Barcelona, Igor ;)

i can imagine :) I hope i will be able come there once more one day.
 Barcelona is very beautiful city.
:)


2013/11/13 Torsten Bergmann <[hidden email]>
Hi Bernat,

>how do I translate this into NB code

Either invite Igor (author of NB) for lunch or try this:


Its a C-structure, you convert it by wrapping this in a sublcass
of "NBExternalStructure". See the examples already in a Pharo 3.0 image.

Basically you need:

- define a subclass NBExternalStructure subclass: #WinNotifyIconData ...
- define the correct fields in a class side #fieldsDesc method according to the native data types used in the structure
- call "WinNotifyIconData rebuildFieldAccessors"
- setup the types in a shared pool that you can include later:

   - define the pool:       SharedPool subclass: #WinTryIconConstants ...
   - in a class initialize method you can setup the type

     initialize

        NOTIFYICONDATA := #WinNotifyIconData.
        PNOTIFYICONDATA:= 'NOTIFYICONDATA *'.

- by including the pool you can use "NOTIFYICONDATA" or "PNOTIFYICONDATA" in any native boost call.


If you are in Pharo 3.0 load "OS-Windows" package from the config browser.
Check the subclasses of NBExternalStructure there.

I wrapped many other windows structures already so you can get an idea about
it. For instance have a look at WinConsoleConstants>>initTypeConstants, there you will find
the CONSOLE_CURSOR_INFO, CONSOLE_SCREEN_BUFFER_INFO structs wrapped in WinConsoleCursor, WinConsoleScreenBuffer classes.

Compare them with the MSDN struct description.

>Could the Windows API be any more convoluted and dev-unfriendly in any
>possible sense?

This question should go to M$ not Pharo-user ;)

Bye
T.


BTW: I'm not sure "PNOTIFYICONDATA" alone will solve your problem if I remember correctly
     from my Smalltalk/MT and C/C++ times also playing with tray icons.
     I guess you need a callback that gets called when the icon is clicked or the tray icon menu
     is choosen (see uCallbackMessage member in the struct).
     You also need a handle to an icon - either the icon from the EXEs resource section or
     by loading one from a bitmap. That means wrapping the icon or bitmap apis too...




--
Bernat Romagosa.



--
Best regards,
Igor Stasenko.



--
Bernat Romagosa.