Two Questions

Posted by: Mornse

Two Questions - 09/18/02 05:30 AM

1. Is there a maximum amount of characters you can store in a key in the registry (I know it's not really a VB question, but it's for a program I'm working on and I want to know if I have to have a maximum length of data allowable since I save the string in the registry).

2. How can you make a form that you load, load infront of everything else. Right now it will load in front of all other programs if you aren't doing anything. But if you are typing ,for example, in notepad, the form will load behind notepad so that notepad is still visible. How do you get it to load infront? I can't figure it out. That is, without using DirectX, and I'm sure there has to be an easier way since that is far too complicated.
Posted by: SilentRage

Re: Two Questions - 09/18/02 02:49 PM

Registry:
Max KeyLen = 255
Max ValueLen = 255
Max StringData = 4 KB

Window-On-Top (tell me if this doesn't work)

'Declaration Block
Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOP = 0
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_SHOWWINDOW = &H40

'Code Block
SetWindowPos Form1.hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE + SWP_SHOWWINDOW
Posted by: Mornse

Re: Two Questions - 10/02/02 05:28 AM

Nope, code didn't work, unless I did it wrong. I put the declaration in the General-Declaration section and I put the code block in the Form Load section, and I replaced Form1 with the name of my form. Did I do it wrong or is the code wrong?
Posted by: SilentRage

Re: Two Questions - 10/02/02 02:48 PM

Well, the reason I asked you to tell me if it worked, is cause I've had trouble doing what you're wanting to do. This time however, I did some heavy research into the matter and found your answer - but you won't like it.

Since win98 and Win2k windows restricts what processes are allowed to use the 'SetForegroundWindow' function. While there are many functions that relates to the top/active/focused window, only 'SetForegroundWindow' does precisely what you want.

One of the following conditions must be true in order for your process to use the 'SetForegroundWindow' function.

* The process is the foreground process.
* The process was started by the foreground process.
* The process received the last input event.
* There is no foreground process.
* The foreground process is being debugged.
* The foreground is not locked (see LockSetForegroundWindow).
* The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
* Windows 2000/XP: No menus are active.

Also, here's another interesting tidbit:

"The system automatically enables calls to SetForegroundWindow if the user presses the ALT key or takes some action that causes the system itself to change the foreground window (for example, clicking a background window)."

So after reading all those conditions, I figured it may be possible to do a 'hack' and trick the OS into letting you change the foreground window - even when another process as the focus. However, I am too lazy to bother trying so I instead gave you all the information you needed to figure out how yourself.

Related Material:

SetForegroundWindow
AllowSetForegroundWindow
LockSetForegroundWindow
Posted by: psychogen

Re: Two Questions - 10/02/02 05:08 PM

:p

some things just are a bitch
Posted by: Mornse

Re: Two Questions - 10/03/02 12:30 AM

Well, I looked over some of that material, and I think that if maybe I worked at it for a long time I might be able to figure it out, but I had another idea. I looked back over the code from my game programming days (heh, those didn't get too far, but I learned some cool shit), and found some DirectX code. This code will automatically set your form to the foreground. The only thing is that the user has to have DirectX installed.

-First you have to reference DirectX 7, to do this go to Project->References->DirectX 7 Visual Basic Library, and select it.

Declarations:

Dim dx As New DirectX7 'This is the root object. DirectDraw is created from this
Dim dd As DirectDraw7 'This is DirectDraw, all things DirectDraw come from here

Code:

Set dd = dx.DirectDrawCreate("") 'the ("") means that we want the default driver

Me.Show 'maximises the form and makes sure it's visible

Call dd.SetCooperativeLevel(Me.hwnd, DDSCL_FULLSCREEN Or DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE)

----

Do you guys think it's realistic to use this code, like will most people have DirectX installed? Or you could like install DirectX with the program right?