I'm currently in the middle of making a VB.NET project. I want to have the VB.NET project control the actions of the Flash projector. (Stop, play, change text of text control in the Flash projector, etc.) This is a one way control however, nothing about the SWF projector will interact back with the VB.NET project.
The image below shows an idea of what I want to have done.
EDIT: Okay I managed to get a SWF object available to be put in the project. So now, my question is how do I get the two (Visual Studio and the SWF object that is being included in another form windows) to interact. That is, if I push a button on VisualBasic, I can call a function in AS3/SWF to do something and receive a variable from the Visual Basic form.
The AS3 code contains the following
function fl_ClickToGoToWebPage(event:MouseEvent):void
{
lblText.text = "Congrats! It Works!";
}
btnChange.addEventListener(MouseEvent.MOUSE_UP, fl_ClickToGoToWebPage);
Here is a photo of the actual SWF.
What I would like to do is invoke this function (or some similar function) passing info to the SWF projector (being run as an ActiveX Flash object in Visual Studio) from the VB form. (Ignore the button on the actual SWF, that button won't be there on the final run) I'm running into two problems:
1) How do I modify addEventListener so that it can take more than one parameter or is there another event or function I could use?
2) How do I invoke this function from within Visual Studio as a part of a sub or function from within VS/VB.NET?
I don't need it to reciprocate, as in Visual Studio getting information from the SWF.
I just ran a quick test using sendkeys and it worked ok; at the heart of it was:
setting the flashplayer as the foreground window ...
Friend Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd
As IntPtr) As Integer
and then using the sendkeyes command
System.Windows.Forms.SendKeys.SendWait
I would suggest checking out socket connections. They are easy to do with C++ and Flash has built in support for them:
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html
Related
I'm look for code which can help me accomplish what the title suggests.
I want this because I have an issue with a program which is quite buggy (it's a game), and if It freezes, and results in a black screen. Even after using Shift+Ctrl+Esc, Ctrl+Alt+Del, Alt+F4 and the rest of them, I acn't seem to end the program. So I thought that a KeyPress event would work, as it doesn't require me to use the UI in any way.
However, I've never used VB for anything other than Form's, so I have no idea how to start on something which runs in the background.
Thanks :)
A background app won't help in this case.
Ctrl+Alt+Del is specail key combo that is handled directly by Windows and can't be intercepted by a running program.
What this means is that if your game locks up and Ctrl+Alt+Del doesn't bring up the Windows menu, then the game has corrupted the system. The only fix at that point would be a restart.
That being said, you can kill a running process using VB.NET like this:
For Each program As Process In System.Diagnostics.Process.GetProcesses
If program.ProcessName = "ProcessName" Then
program.Kill()
End If
Next
Read more about it on the MSDN.
Okay, so Windows isn't actually locking up, but you just need some way to kill the process. Use the above code, replacing "ProcessName" with the name of your game process, and then either:
(basic) Turn the VB.NET code into an .exe file. Then set up a keyboard macro (using your keyboard software or some freeware) to launch the .exe you made which will kill all running instances of the given process. or...
(advanced) Import "user32.dll" into the VB.NET code, call SetWindowsHookEx with a hook id of 13, a pointer to a LowLevelKeyboardProc function, the handle to your running program, and a thread id of 0. Then, whenever a key is pressed in any program, your KeyboardProc function will be invoked. If the key(s) pressed match your desired kill-key combo, then run the above process killing code. This looks like it may give you more step-by-step instructions.
My app is built in vb.net compact. All these years in all versions when user taps at the top or bottom of the screen (depending on where the task bar is located) it brings up the task bar and start menu fine. But now the latest OS build doesn't do it anymore. I'm thinking of having a button in my app to bring up the task bar but not sure how to do it.
However, in IE full screen there is a circular button that brings up the task bar. If I can accomplish it in my app that would be good.
You can use the Remote Spy tool to find out the name of your task-bar, then you can try calling FindWindow function using this name to get the handle, and finally calling ShowWindow function to get it to show. (In P/Invoke versions for FindWindow and ShowWindow use coredll.dll instead of user32.dll).
I am developing a windows service, in VB.NET, that launches a legacy application that performs some work. The service acts as a wrapper around the legacy app allowing users to automate an otherwise manual operation.
Everything is working great, except occasionally the legacy app displays a messagebox. When it does this the process halts until the message box is closed.
As the service will be running on a server there will be no user to close the message box.
The service launches the legacy application in a System.Diagnostics.Process.
Is there way to detect that a message box has been displayed by a process that I have started using System.Diagnostics.Process? And is there a way to close the messagebox through code?
I also found that EnumChildWindows does not return the MessageBox. But I found a site that showed me how to do it. http://vbcity.com/forums/t/105842.aspx
You want to call GetWindow passing in GW_ENABLEDPOPUP. It worked like a charm. Thanks to Scott Waletzko!
Use FindWindow to find the app, the use EnumChildWindows to enumerate all it's childwindows until you find the messagebox (if the messagebox isn't a direct child of the main window of the app you might have to have recursive calls I think).
You might be able to skip the FindWindow call and instead use the MainWindowHandle property of the Process, but I haven't checked if that works.
A good tool for looking at all this is Spy++ which can help you see some information you can get hold of about a running process.
I would like to create a .exe wrapper for a Flash Player using VB.NET. I am having a few problems.
1.I seem to remember being able to import Flash Player as a control into Visual Studio (2008 Pro). For some reason, I can't seem to VS to import it anymore. (I tried using the OCX from Visual Studio) Perhaps I'm looking for the wrong file. What file am I looking for?
2.Is including Flash inside of a VB program legal?
3.When a control is included in a VB.NET program (such as Flash) does the control need to be distributed in a separate file, or will the compiled application contain it in the ".exe"?
Thanks.
edit:
I was able to import the control as the Flash10b.ocx from c:\Windows\System32\Macromed directory as a COM component. Question 2 and 3 still remain.
Edit 2:
Is there documentation on the ActiveX control? I am trying top figure out the API for ExternalInterface. Any tips on that?
Using flash inside a VB program is perfectly legal, it is just an activeX control.
You will need to distribute the interop library with your application (it will be in your output directory) and the ActiveX object (flash10b.ocx) will need to be installed on the system, it wont package it all up for you.
My employer has purchased a third-party tool, OfficeConverter from Conveter Technology that automates the conversion / repair of Office 2003-formatted files to Office 2007 format. This tool also highly automates the translation / change in macro / VBA code requirements between Office 2003 and 2007 formats.
My problem is that during this conversion the tool is opening the targeted Office product, say Excel and is then opening the target user file (ie. Report.xls) and is then examining any VBA / macro code for change requirements. The problem is that IF the Excel file code is dependent upon some external tool like an .OCX file and if that tool doesn't exist on the PC that I'm performing this action on, Excel will pop up a message that the Object has not been found, stopping the entire conversion process (thousands of files in a row) until someone comes along and MANUALLY clicks the appropriate button to close the dialogue box.
I figured that creating a small watching application in VB6 (hey, I'm old and my skills are too) could sit on the same PC and watch for these dialogue boxes and, depending on the specific message, click the appropriate button via the SendMessage API call.
The problem is that I haven't been able to get SendMessage to actually PUSH the button for me, I've tried sending it the Return key value (vbKeyReturn) or even the Space key (vbKeySpace) but the action never results in the dialogue box closing like it should. I can get the focus to tab between whichever buttons on the dialogue box are enabled, but that is about it.
I've attempted to use SendKeys, but that is far less reliable and strongly discouraged in the current documentation that I've come across.
Any suggestions? :)
If you have the hWnd for the button, and the machine is unattended, you can easily use MouseEvent to move the cursor over the button and click it. This sample includes a drop-in ready module that'll do the dirty work for you given just the window handle:
http://vb.mvps.org/samples/MouseEvent
Otherwise, the most straightforward way is probably to just send WM_LBUTTONDOWN and WM_LBUTTONUP sequentially.
EDIT: If you "just want to get it done" take Jim's advice and try Gary Chanson's Window Demon tool.
Take a look at this utility "Window Demon" by Gary Chanson
Karl: how quickly we forget our pals!
I would suggest taking a look at AutoIt.
It is perfect for this task, look for a window with a particular text on it and click a button.
Runs in the system tray as a standalone application.