From: Piske, H. <Har...@bo...> - 2001-05-31 21:13:06
|
Try this: use Win32::TieRegistry; $http = $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; `$http $url`; I did not try with other browsers, though, just Micro$tuff. Have fun, Harald -----Original Message----- From: Morbus Iff [mailto:mo...@di...] Sent: Donnerstag, 31. Mai 2001 13:18 To: per...@li... Subject: [perl-win32-gui-users] Opening a *New* Browser Window? Good day. Currently, in my code [the opensource AmphetaDesk at http://www.disobey.com/amphetadesk/], I open a browser window like so: use Win32::API; my $ShellExecute = new Win32::API("shell32", "ShellExecuteA", ['N','P', 'P', 'P', 'P', 'I'], 'N'); $ShellExecute->Call(0, "open", $url, 0, 0, 1); This has the niceness of working with most browsers I've tested that have been set as the default browser (Netscape, Mozilla, IE, etc.). My problem is that this code always uses an *existing* browser window if it exists. This causes some angst - if I'm viewing something, and then suddenly the program takes over and loses my current page, I get pissed. So, anyways to always open a *new* window, whether an existing one is there or not? Morbus Iff .sig on other machine. http://www.disobey.com/ http://www.gamegrene.com/ _______________________________________________ Perl-Win32-GUI-Users mailing list Per...@li... http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users |
From: Morbus I. <mo...@di...> - 2001-05-31 21:26:07
|
>use Win32::TieRegistry; Well, now this is odd. I don't seem to have that on my machine, and a PPM says it's not found. Huh. Sigh. Gotta find it now... Morbus Iff .sig on other machine. http://www.disobey.com/ http://www.gamegrene.com/ |
From: Morbus I. <mo...@di...> - 2001-05-31 21:54:28
|
>use Win32::TieRegistry; >$http = $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; >`$http $url`; Ok. Well, it certainly opened up new windows on Mozilla, unfortunately, it didn't pass the URL to Mozilla correctly - I got search results from NetScape for the term "". Sigh. Morbus Iff .sig on other machine. http://www.disobey.com/ http://www.gamegrene.com/ |
From: Piske, H. <Har...@bo...> - 2001-05-31 22:10:32
|
Well, then you just take the best of both ... first, you open a new browser window and then you do what you did before. I pretty sure that the ShellExecute will target this new browser. At least, when I click a link in a mail in this rotten !#^%$Outlook, it does the very same &^%!# thing of navigating away from the most important web site I happen to have been looking at. So, I first open a new browser and then click the link - voila. -----Original Message----- From: Morbus Iff [mailto:mo...@di...] Sent: Donnerstag, 31. Mai 2001 14:56 To: per...@li...; 'per...@li...' Subject: RE: [perl-win32-gui-users] Opening a *New* Browser Window? >use Win32::TieRegistry; >$http = $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; >`$http $url`; Ok. Well, it certainly opened up new windows on Mozilla, unfortunately, it didn't pass the URL to Mozilla correctly - I got search results from NetScape for the term "". Sigh. Morbus Iff .sig on other machine. http://www.disobey.com/ http://www.gamegrene.com/ _______________________________________________ Perl-Win32-GUI-Users mailing list Per...@li... http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users |
From: Erick B. <er...@je...> - 2001-06-01 03:05:47
|
| So, I first open a new browser and then click the link - voila. Side topic: hold shift and press the left mouse button on any link and it will open a new browser with that address. regards, erick ----- Original Message ----- From: Piske, Harald <Har...@bo...> To: <per...@li...> Sent: Thursday, May 31, 2001 3:10 PM Subject: RE: [perl-win32-gui-users] Opening a *New* Browser Window? | Well, then you just take the best of both ... first, you open a new browser | window and then you do what you did before. I pretty sure that the | ShellExecute will target this new browser. At least, when I click a link in | a mail in this rotten !#^%$Outlook, it does the very same &^%!# thing of | navigating away from the most important web site I happen to have been | looking at. So, I first open a new browser and then click the link - voila. | | -----Original Message----- | From: Morbus Iff [mailto:mo...@di...] | Sent: Donnerstag, 31. Mai 2001 14:56 | To: per...@li...; | 'per...@li...' | Subject: RE: [perl-win32-gui-users] Opening a *New* Browser Window? | | | >use Win32::TieRegistry; | >$http = $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; | >`$http $url`; | | Ok. Well, it certainly opened up new windows on Mozilla, unfortunately, it | didn't pass the URL to Mozilla correctly - I got search results from | NetScape for the term "". Sigh. | | | Morbus Iff | .sig on other machine. | http://www.disobey.com/ | http://www.gamegrene.com/ | | | _______________________________________________ | Perl-Win32-GUI-Users mailing list | Per...@li... | http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users | | _______________________________________________ | Perl-Win32-GUI-Users mailing list | Per...@li... | http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users | |
From: Frazier, J. J. <Joe.Frazier@PeopleClick.com> - 2001-06-01 11:13:51
|
Not sure how this would work otherwise, but I did this on may machine and it worked. =20 `start iexplore.exe http://www.activestate.com` use backticks to call the "start" command in the command shell, then pass an explicite exe name followed by the arguments. I tried it without the iexplore.exe and it only opened the window. I believe this is something that is wrong my machine since the same thing happens when I click on a link within Outlook. Therefore, If you just put=20 `start http://www.myurl.com`;=20 I might actually work the way you want it.=20 Note: AP build 523 Win NT SP6a > -----Original Message----- > From: Erick Bourgeois [mailto:er...@je...] > Sent: Friday, June 01, 2001 01:05 > To: per...@li... > Subject: Re: [perl-win32-gui-users] Opening a *New* Browser Window? >=20 >=20 > | So, I first open a new browser and then click the link - voila. >=20 > Side topic: hold shift and press the left mouse button on any=20 > link and it will > open a new browser with that address. >=20 > regards, >=20 > erick >=20 > ----- Original Message ----- > From: Piske, Harald <Har...@bo...> > To: <per...@li...> > Sent: Thursday, May 31, 2001 3:10 PM > Subject: RE: [perl-win32-gui-users] Opening a *New* Browser Window? >=20 >=20 > | Well, then you just take the best of both ... first, you=20 > open a new browser > | window and then you do what you did before. I pretty sure that the > | ShellExecute will target this new browser. At least, when I=20 > click a link in > | a mail in this rotten !#^%$Outlook, it does the very same=20 > &^%!# thing of > | navigating away from the most important web site I happen=20 > to have been > | looking at. So, I first open a new browser and then click=20 > the link - voila. > | > | -----Original Message----- > | From: Morbus Iff [mailto:mo...@di...] > | Sent: Donnerstag, 31. Mai 2001 14:56 > | To: per...@li...; > | 'per...@li...' > | Subject: RE: [perl-win32-gui-users] Opening a *New* Browser Window? > | > | > | >use Win32::TieRegistry; > | >$http =3D=20 > $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; > | >`$http $url`; > | > | Ok. Well, it certainly opened up new windows on Mozilla,=20 > unfortunately, it > | didn't pass the URL to Mozilla correctly - I got search results from > | NetScape for the term "". Sigh. > | > | > | Morbus Iff > | .sig on other machine. > | http://www.disobey.com/ > | http://www.gamegrene.com/ > | > | > | _______________________________________________ > | Perl-Win32-GUI-Users mailing list > | Per...@li... > | http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > | > | _______________________________________________ > | Perl-Win32-GUI-Users mailing list > | Per...@li... > | http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > | >=20 >=20 > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >=20 |
From: Morbus I. <mo...@di...> - 2001-06-01 11:28:18
|
>`start iexplore.exe http://www.activestate.com` >use backticks to call the "start" command in the command shell, then >pass an explicite exe name followed by the arguments. I tried it >without the iexplore.exe and it only opened the window. I believe this >is something that is wrong my machine since the same thing happens when >I click on a link within Outlook. Therefore, If you just put > >`start http://www.myurl.com`; >I might actually work the way you want it. I've tried that previously - doesn't work in all versions of Netscape/IE/Mozilla. Sadly enough, I haven't tried Opera. At this point, as well, the above isn't foolproof - it doesn't help people who have screwed up their PATH, or for those who have renamed files. The "start" thing works for the same reason you can go to your Start menu, choose "run" and type in a URL to be taken there by your default browser. -- ICQ: 2927491 / AOL: akaMorbus Yahoo: morbus_iff / Jabber: mo...@ja... mo...@di... / http://www.disobey.com/ |
From: Frazier, J. J. <Joe.Frazier@PeopleClick.com> - 2001-06-01 12:11:00
|
Yea, I know, but I thought that DOS commands which were part of the shell would not work in Perl since they are not true executables. Perhaps I am thinking of older versions of Perl. It has been a LONG time since I had to shell out to get something done....... Anyway, If you REALLY need to get the browser to open in the users preferred browser, then you will have to do some registry digging to find default browser and go from there. HKCR\http(?:s?)\shell\open\command\ This will/should give you the path to the app they use to open http by default. Not sure. =20 If this DOESNT do it, then do the same thing with HKCR\.htm(?:l?)( by the way, is this right? I don't have my Mastering regex book with me. Should it be HKCR\.htm(?:l)? , or perhaps just HKCR\.html? Anyway, I digress.... ) If you REALLY have to accommodate the users preferred browser, then one way or another, you have to do a lot of extra work. On Windows 98+, you are pretty much guaranteed that IE will be on the machine in some form or another..... > -----Original Message----- > From: Morbus Iff [mailto:mo...@di...] > Sent: Friday, June 01, 2001 07:29 > To: per...@li... > Subject: RE: [perl-win32-gui-users] Opening a *New* Browser Window? >=20 >=20 > >`start iexplore.exe http://www.activestate.com` > >use backticks to call the "start" command in the command shell, then > >pass an explicite exe name followed by the arguments. I tried it > >without the iexplore.exe and it only opened the window. I=20 > believe this > >is something that is wrong my machine since the same thing=20 > happens when > >I click on a link within Outlook. Therefore, If you just put > > > >`start http://www.myurl.com`; > >I might actually work the way you want it. >=20 > I've tried that previously - doesn't work in all versions of > Netscape/IE/Mozilla. Sadly enough, I haven't tried Opera. At=20 > this point, as > well, the above isn't foolproof - it doesn't help people who=20 > have screwed > up their PATH, or for those who have renamed files. >=20 > The "start" thing works for the same reason you can go to=20 > your Start menu, > choose "run" and type in a URL to be taken there by your=20 > default browser. >=20 > --=20 > ICQ: 2927491 / AOL: akaMorbus > Yahoo: morbus_iff / Jabber: mo...@ja... > mo...@di... / http://www.disobey.com/ >=20 > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >=20 |
From: Morbus I. <mo...@di...> - 2001-06-01 14:41:07
|
>| Well, then you just take the best of both ... first, you open a new >| window and then you do what you did before. I pretty sure that the >| ShellExecute will target this new browser. At least, when I click a link That was so blatantly obvious that I'm hiding in a corner for not seeing it myself. I tried it this morning using the following code: use Win32::TieRegistry; my $http = $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; unless ( fork ) { system("$http"); } use Win32::API; my $ShellExecute = new Win32::API("shell32", "ShellExecuteA", ['N','P', 'P', 'P', 'P', 'I'], 'N'); $ShellExecute->Call(0, "open", $url, 0, 0, 1); This works fine in IE6b. I'll assume it works fine elsewhere. It does very weird things on Mozilla though. Can anyone try this on Netscape to see if it's similar (I don't have NS on this machine, only Moz). What I'm seeing with Moz: a) before running script, open Moz. b) run script. c) script opens 2 (new) windows. both windows eventually have the URL in it. Sometimes, even weirder, I get THREE windows opening, the first two with the correct URL, the third with a blank search on Netscape's pages. Sigh. I like Mozilla, but sheesh, this ain't gonna work. Morbus Iff .sig on other machine. http://www.disobey.com/ http://www.gamegrene.com/ |
From: Morbus I. <mo...@di...> - 2001-06-01 14:48:28
|
>>| Well, then you just take the best of both ... first, you open a new >>| window and then you do what you did before. I pretty sure that the >>| ShellExecute will target this new browser. At least, when I click a link > >That was so blatantly obvious that I'm hiding in a corner for not seeing it >myself. I tried it this morning using the following code: > > use Win32::TieRegistry; > my $http = $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; > unless ( fork ) { system("$http"); } > > use Win32::API; > my $ShellExecute = new Win32::API("shell32", "ShellExecuteA", > ['N','P', 'P', 'P', 'P', 'I'], 'N'); > $ShellExecute->Call(0, "open", $url, 0, 0, 1); > >This works fine in IE6b. I'll assume it works fine elsewhere. It does very >weird things on Mozilla though. Can anyone try this on Netscape to see if >it's similar (I don't have NS on this machine, only Moz). Correction. This does not work on IE6. Opens two windows. Morbus Iff .sig on other machine. http://www.disobey.com/ http://www.gamegrene.com/ |
From: Frazier, J. J. <Joe.Frazier@PeopleClick.com> - 2001-06-01 15:34:52
|
> -----Original Message----- > From: Morbus Iff [mailto:mo...@di...] > Sent: Friday, June 01, 2001 10:50 > To: per...@li... > Subject: Re: [perl-win32-gui-users] Opening a *New* Browser Window? >=20 >=20 > >>| Well, then you just take the best of both ... first, you=20 > open a new > >>| window and then you do what you did before. I pretty=20 > sure that the > >>| ShellExecute will target this new browser. At least,=20 > when I click a link > > > >That was so blatantly obvious that I'm hiding in a corner=20 > for not seeing it > >myself. I tried it this morning using the following code: > > Check your logic.... > > use Win32::TieRegistry; > > my $http =3D $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; > > unless ( fork ) { system("$http"); } You call system here..... and then... > > use Win32::API; > > my $ShellExecute =3D new Win32::API("shell32", = "ShellExecuteA", > > ['N','P', 'P', 'P', 'P', 'I'], 'N'); > > $ShellExecute->Call(0, "open", $url, 0, 0, 1); You call the ShellExecuteA. This results in two windows. Now... I have never used fork, so i dont know the exact syntax, but somthing like this.... use Win32::TieRegistry; use Win32::API; my $http =3D $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; unless (`start $http $url`){ # if this call fails, do this..... my $ShellExecute =3D new Win32::API("shell32", "ShellExecuteA",['N','P', 'P', 'P', 'P', 'I'], 'N'); $ShellExecute->Call(0, "open", $url, 0, 0, 1); } > > > >This works fine in IE6b. I'll assume it works fine=20 > elsewhere. It does very > >weird things on Mozilla though. Can anyone try this on=20 > Netscape to see if > >it's similar (I don't have NS on this machine, only Moz). >=20 > Correction. This does not work on IE6. Opens two windows. >=20 >=20 > Morbus Iff > .sig on other machine. > http://www.disobey.com/ > http://www.gamegrene.com/ >=20 >=20 > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >=20 |
From: Frazier, J. J. <Joe.Frazier@PeopleClick.com> - 2001-06-01 15:44:32
|
> -----Original Message----- > From: Frazier, Joe Jr=20 > Sent: Friday, June 01, 2001 11:35 > To: 'per...@li...' > Subject: RE: [perl-win32-gui-users] Opening a *New* Browser Window? >=20 >=20 >=20 >=20 > > -----Original Message----- > > From: Morbus Iff [mailto:mo...@di...] > > Sent: Friday, June 01, 2001 10:50 > > To: per...@li... > > Subject: Re: [perl-win32-gui-users] Opening a *New* Browser Window? > >=20 > >=20 > > >>| Well, then you just take the best of both ... first, you=20 > > open a new > > >>| window and then you do what you did before. I pretty=20 > > sure that the > > >>| ShellExecute will target this new browser. At least,=20 > > when I click a link > > > > > >That was so blatantly obvious that I'm hiding in a corner=20 > > for not seeing it > > >myself. I tried it this morning using the following code: > > > > Check your logic.... >=20 > > > use Win32::TieRegistry; > > > my $http =3D=20 > $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; > > > unless ( fork ) { system("$http"); } > You call system here..... and then... > > > use Win32::API; > > > my $ShellExecute =3D new Win32::API("shell32",=20 > "ShellExecuteA", > > > ['N','P', 'P', 'P', 'P', 'I'], 'N'); > > > $ShellExecute->Call(0, "open", $url, 0, 0, 1); >=20 > You call the ShellExecuteA. This results in two windows. =20 > Now... I have never used fork, so i dont know the exact=20 > syntax, but somthing like this.... >=20 >=20 > use Win32::TieRegistry; > use Win32::API; > my $http =3D = $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; >=20 > unless (`start $http $url`){ # if this call fails,=20 > do this..... >=20 > my $ShellExecute =3D new Win32::API("shell32",=20 > "ShellExecuteA",['N','P', 'P', 'P', 'P', 'I'], 'N'); > $ShellExecute->Call(0, "open", $url, 0, 0, 1); > } >=20 or..... (doh!)=20 use Win32::TieRegistry; use Win32::API; $url =3D "http://www.activestate.com"; my $http =3D $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; unless ( $pid =3D fork ) { system("$http $url"); } # note the adding of $pid =3D =09 # and the adding of the $url if($pid){ # note to check if the other thing returned good pid... my $ShellExecute =3D new Win32::API("shell32", "ShellExecuteA",['N','P', 'P', 'P', 'P', 'I'], 'N'); print $ShellExecute,"\n"; $ShellExecute->Call(0, "open", $url, 0, 0, 1); } print $pid, "\n"; undef $ShellExecute; > > >This works fine in IE6b. I'll assume it works fine=20 > > elsewhere. It does very > > >weird things on Mozilla though. Can anyone try this on=20 > > Netscape to see if > > >it's similar (I don't have NS on this machine, only Moz). > >=20 > > Correction. This does not work on IE6. Opens two windows. > >=20 > >=20 > > Morbus Iff > > .sig on other machine. > > http://www.disobey.com/ > > http://www.gamegrene.com/ > >=20 > >=20 > > _______________________________________________ > > Perl-Win32-GUI-Users mailing list > > Per...@li... > > http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > >=20 >=20 |
From: Morbus I. <mo...@di...> - 2001-06-15 15:38:22
|
>use Win32::TieRegistry; >use Win32::API; > > $url = "http://www.activestate.com"; > my $http = $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; > unless ( $pid = fork ) { system("$http $url"); } > > if (! $pid){ > my $ShellExecute = new Win32::API("shell32", > "ShellExecuteA",['N','P', 'P', > 'P', 'P', 'I'], 'N'); > $ShellExecute->Call(0, "open", $url, 0, 0, 1); > } > I just barely got around to trying this code today. Again, what I'm trying to attempt is a cross browser way of opening a NEW window if an existing browser window is already open. The code above works fine for IE 6. However, Mozilla doesn't understand the passed $url to the system command above. Thus, I get one window with Mozilla saying it couldn't find %1, and then another window with the actual URL correctly thrown in. Sigh. Ah twell. Morbus Iff .sig on other machine. http://www.disobey.com/ http://www.gamegrene.com/ |
From: Piske, H. <Har...@bo...> - 2001-06-15 16:05:29
|
I guess there's just no way to do it so that all browsers behave the same. And you would not want to have code for all the major browsers out there - talk about maintainability. How about making your code smart enough to deal with it? Open a new browser, deliberately empty, i.e. w/o passing a url. Walk thru the list of top level windows and note all of them. Run the ShellExecute to have the browser open the url and then check the window list again to see if an additional browser showed up. If so, kill the first one. See Alone.pl at www.fairymails.com/perl/ for code on these lists of windows. Of course, when you just open a browser with no url, they will likely try to show the default start page and you might want to avoid that. Or the second browser will not display with the window settings (size and position) that you like. Or what if the target url opens a second browser window with a dumb ad in it, then you kill the target window and keep the ad ... Well ... for every solution, there's three new problems, rite? Have fun, Harald > -----Original Message----- > From: Morbus Iff [mailto:mo...@di...] > Sent: Friday, June 15, 2001 08:40 > To: per...@li... > Subject: RE: [perl-win32-gui-users] Opening a *New* Browser Window? > > > >use Win32::TieRegistry; > >use Win32::API; > > > > $url = "http://www.activestate.com"; > > my $http = > $Registry->{"Classes\\http\\shell\\open\\command"}->{'\\'}; > > unless ( $pid = fork ) { system("$http $url"); } > > > > if (! $pid){ > > my $ShellExecute = new Win32::API("shell32", > > "ShellExecuteA",['N','P', 'P', > > 'P', 'P', 'I'], 'N'); > > $ShellExecute->Call(0, "open", $url, 0, 0, 1); > > } > > > > I just barely got around to trying this code today. Again, > what I'm trying > to attempt is a cross browser way of opening a NEW window if > an existing > browser window is already open. > > The code above works fine for IE 6. However, Mozilla doesn't > understand the > passed $url to the system command above. Thus, I get one window with > Mozilla saying it couldn't find %1, and then another window > with the actual > URL correctly thrown in. > > Sigh. Ah twell. > > > Morbus Iff > .sig on other machine. > http://www.disobey.com/ > http://www.gamegrene.com/ > > > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > |